diff --git a/--password-interactive b/--password-interactive new file mode 100644 index 0000000..e69de29 diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 0000000..56a3c13 --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,25 @@ +{ + "name": "Substrate Node template", + "context": "..", + "settings": { + "terminal.integrated.shell.linux": "/bin/bash", + "lldb.executable": "/usr/bin/lldb" + }, + "extensions": [ + "rust-lang.rust", + "bungcip.better-toml", + "vadimcn.vscode-lldb" + ], + "forwardPorts": [ + 3000, + 9944 + ], + "onCreateCommand": ["cargo build", "cargo check"], + "postStartCommand": "./target/debug/node-template --dev --ws-external", + "menuActions": [ + {"id": "polkadotjs", + "label": "Open PolkadotJS Apps", + "type": "external-preview", + "args": ["https://polkadot.js.org/apps/?rpc=wss%3A%2F%2F/$HOST/wss"]} + ] +} diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..5adac74 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,16 @@ +root = true + +[*] +indent_style=space +indent_size=2 +tab_width=2 +end_of_line=lf +charset=utf-8 +trim_trailing_whitespace=true +insert_final_newline = true + +[*.{rs,toml}] +indent_style=tab +indent_size=tab +tab_width=4 +max_line_length=100 diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000..884336b --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,12 @@ +blank_issues_enabled: false +contact_links: + - name: Support & Troubleshooting with the Substrate Stack Exchange Community + url: https://substrate.stackexchange.com + about: | + For general problems with Substrate or related technologies, please search here first + for solutions, by keyword and tags. If you discover no solution, please then ask and questions in our community! We highly encourage everyone also share their understanding by answering questions for others. + - name: Feature Requests and PRs to be submitted upstream + url: https://github.com/paritytech/substrate/tree/master/bin/node-template + about: | + This template is generated on tagged releases upstream, it is not independently updated and maintained. + Please direct all suggestions for improvements and PRs upstream. diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..1116676 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,11 @@ +version: 2 +updates: + - package-ecosystem: "cargo" + directory: "/" + schedule: + interval: "daily" + + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "daily" diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml new file mode 100644 index 0000000..143cca4 --- /dev/null +++ b/.github/workflows/check.yml @@ -0,0 +1,43 @@ +name: Check Set-Up & Build + +# Controls when the action will run. +on: + # Triggers the workflow on push or pull request events but only for the master branch + push: + branches: [main] + pull_request: + branches: [main] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# A workflow run is made up of one or more jobs that can run sequentially or in parallel +jobs: + check: + # The type of runner that the job will run on + runs-on: ubuntu-22.04 + + # Steps represent a sequence of tasks that will be executed as part of the job + steps: + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - uses: actions/checkout@v3 + + - name: Install linux dependencies + run: sudo apt-get install -y clang libssl-dev llvm libudev-dev protobuf-compiler + + - name: Install Rust + run: | + rustup update stable --no-self-update + rustup target add wasm32-unknown-unknown + + # Rust cache + - uses: Swatinem/rust-cache@v2 + + - name: Check Build + run: | + SKIP_WASM_BUILD=1 cargo check --release + + - name: Check Build for Benchmarking + run: > + pushd node && + cargo check --features=runtime-benchmarks --release diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..a600578 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,155 @@ +# This is an example GitHub action that will build and publish the binaries and a Docker image +# You need to add the following secrets to your GitHub Repository or Organization to make this work +# - DOCKERHUB_USERNAME: The username of the DockerHub account. E.g. parity +# - DOCKERHUB_TOKEN: Access token for DockerHub, see https://docs.docker.com/docker-hub/access-tokens/. +# The following is set up as an environment variable below +# - DOCKER_REPO: The unique name of the DockerHub repository. E.g. parity/polkadot + +name: Release + +permissions: + contents: read + +# Controls when the action will run. +on: + push: + # Triggers the workflow on tag push events + tags: + - v[0-9]+.* + +env: + RUST_BACKTRACE: 1 + CARGO_INCREMENTAL: 0 + CARGO_NET_GIT_FETCH_WITH_CLI: true + CARGO_NET_RETRY: 10 + RUSTFLAGS: -D warnings + RUSTUP_MAX_RETRIES: 10 + CARGO_TERM_COLOR: always + # Set an environment variable (that can be overriden) for the Docker Repo + DOCKER_REPO: tripleight/node-template + +defaults: + run: + shell: bash + + +jobs: + create-release: + # The type of runner that the job will run on + runs-on: ubuntu-22.04 + timeout-minutes: 60 + permissions: + contents: write + steps: + - uses: actions/checkout@v3 + with: + persist-credentials: false + - uses: taiki-e/create-gh-release-action@v1 + with: + title: $version + branch: main + token: ${{ secrets.GITHUB_TOKEN }} + + upload-assets: + name: ${{ matrix.target }} + needs: + - create-release + strategy: + matrix: + # The list of architechture and OS to build for + # You can add or remove targets here if you want + # + # When updating this list, remember to update the target list in tests too + include: + # - target: aarch64-unknown-linux-gnu + - target: x86_64-unknown-linux-gnu + - target: aarch64-apple-darwin + os: macos-11 + - target: x86_64-apple-darwin + os: macos-11 + # - target: universal-apple-darwin + # os: macos-11 + + # The type of runner that the job will run on + # Runs on Ubuntu if other os is not specified above + runs-on: ${{ matrix.os || 'ubuntu-22.04' }} + timeout-minutes: 90 + permissions: + contents: write + steps: + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - uses: actions/checkout@v3 + with: + persist-credentials: false + + - name: Install Rust + run: | + rustup update stable --no-self-update + rustup target add wasm32-unknown-unknown + + - name: Install linux dependencies + if: (matrix.os == '' || startsWith(matrix.os, 'ubuntu')) + run: | + sudo apt-get -qq update + sudo apt-get install -y protobuf-compiler + + - name: Install mac dependencies + if: startsWith(matrix.os, 'macos') + run: brew install protobuf + - uses: taiki-e/setup-cross-toolchain-action@v1 + if: (matrix.os == '' || startsWith(matrix.os, 'ubuntu')) + with: + target: ${{ matrix.target }} + + # Build and upload the binary to the new release + - uses: taiki-e/upload-rust-binary-action@v1 + with: + bin: node-template + target: ${{ matrix.target }} + tar: all + token: ${{ secrets.GITHUB_TOKEN }} + + - name: Upload x86_64 linux binary to workflow + if: (matrix.target == 'x86_64-unknown-linux-gnu') + uses: actions/upload-artifact@v3 + with: + name: node-template + path: ${{ github.workspace }}/target/x86_64-unknown-linux-gnu/release/node-template + + build-image: + # The type of runner that the job will run on + needs: + - upload-assets + runs-on: ubuntu-22.04 + # Steps represent a sequence of tasks that will be executed as part of the job + steps: + # Login to Docker hub using the credentials stored in the repository secrets + - name: Log in to Docker Hub + uses: docker/login-action@v2.1.0 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - name: Check out the repo + uses: actions/checkout@v3 + + # Download the binary from the previous job + - name: Download x86_64 linux binary + uses: actions/download-artifact@v3 + with: + name: node-template + path: ${{ github.workspace }} + + # Build and push 2 images, One with the version tag and the other with latest tag + - name: Build and push Docker images + uses: docker/build-push-action@v4 + with: + context: . + file: ./Containerfile + push: true + build-args: | + DOCKER_REPO=${{ env.DOCKER_REPO }} + tags: | + ${{ env.DOCKER_REPO }}:${{ github.ref_name }} + ${{ env.DOCKER_REPO }}:latest diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3994bab --- /dev/null +++ b/.gitignore @@ -0,0 +1,11 @@ +# Generated by Cargo +# will have compiled files and executables +**/target/ +# These are backup files generated by rustfmt +**/*.rs.bk + +.DS_Store + +# direnv files +.envrc +.direnv diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..55b38db --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,37 @@ +{ + // See https://go.microsoft.com/fwlink/?LinkId=733558 + // for the documentation about the tasks.json format + "version": "2.0.0", + "tasks": [ + { + "label": "Run ", + "type": "shell", + "command": "cargo", + "args": ["run", "--release", "--", "--dev"], + "group": { + "kind": "build", + "isDefault": true + }, + "presentation": { + "reveal": "always", + "panel": "new" + }, + "problemMatcher": [ + { + "owner": "rust", + "fileLocation": ["relative", "${workspaceRoot}"], + "pattern": { + "regexp": "^(.*):(\\d+):(\\d+):\\s+(\\d+):(\\d+)\\s+(warning|error):\\s+(.*)$", + "file": 1, + "line": 2, + "column": 3, + "endLine": 4, + "endColumn": 5, + "severity": 6, + "message": 7 + } + } + ] + } + ] +} \ No newline at end of file diff --git a/CODEOWNERS b/CODEOWNERS new file mode 100644 index 0000000..5fefbd6 --- /dev/null +++ b/CODEOWNERS @@ -0,0 +1 @@ +* @sacha-l @lisa-parity diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..abb399e --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,10219 @@ +# This file is automatically @generated by Cargo. +# 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" +dependencies = [ + "lazy_static", + "regex", +] + +[[package]] +name = "addr2line" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a76fd60b23679b7d19bd066031410fb7e458ccc5e958eb5c325888ce4baedc97" +dependencies = [ + "gimli 0.27.3", +] + +[[package]] +name = "addr2line" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" +dependencies = [ + "gimli 0.28.0", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "aead" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fc95d1bdb8e6666b2b217308eeeb09f2d6728d104be3e31916cc74d15420331" +dependencies = [ + "generic-array 0.14.7", +] + +[[package]] +name = "aead" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b613b8e1e3cf911a086f53f03bf286f52fd7a7258e4fa606f0ef220d39d8877" +dependencies = [ + "generic-array 0.14.7", + "rand_core 0.6.4", +] + +[[package]] +name = "aead" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" +dependencies = [ + "crypto-common", + "generic-array 0.14.7", +] + +[[package]] +name = "aes" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "884391ef1066acaa41e766ba8f596341b96e93ce34f9a43e7d24bf0a0eaf0561" +dependencies = [ + "aes-soft", + "aesni", + "cipher 0.2.5", +] + +[[package]] +name = "aes" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8" +dependencies = [ + "cfg-if", + "cipher 0.3.0", + "cpufeatures", + "opaque-debug 0.3.0", +] + +[[package]] +name = "aes" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac1f845298e95f983ff1944b728ae08b8cebab80d684f0a832ed0fc74dfa27e2" +dependencies = [ + "cfg-if", + "cipher 0.4.4", + "cpufeatures", +] + +[[package]] +name = "aes-gcm" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df5f85a83a7d8b0442b6aa7b504b8212c1733da07b98aae43d4bc21b2cb3cdf6" +dependencies = [ + "aead 0.4.3", + "aes 0.7.5", + "cipher 0.3.0", + "ctr 0.8.0", + "ghash 0.4.4", + "subtle", +] + +[[package]] +name = "aes-gcm" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "209b47e8954a928e1d72e86eca7000ebb6655fe1436d33eefc2201cad027e237" +dependencies = [ + "aead 0.5.2", + "aes 0.8.3", + "cipher 0.4.4", + "ctr 0.9.2", + "ghash 0.5.0", + "subtle", +] + +[[package]] +name = "aes-soft" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be14c7498ea50828a38d0e24a765ed2effe92a705885b57d029cd67d45744072" +dependencies = [ + "cipher 0.2.5", + "opaque-debug 0.3.0", +] + +[[package]] +name = "aesni" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea2e11f5e94c2f7d386164cc2aa1f97823fed6f259e486940a71c174dd01b0ce" +dependencies = [ + "cipher 0.2.5", + "opaque-debug 0.3.0", +] + +[[package]] +name = "ahash" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" +dependencies = [ + "getrandom 0.2.10", + "once_cell", + "version_check", +] + +[[package]] +name = "ahash" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f" +dependencies = [ + "cfg-if", + "getrandom 0.2.10", + "once_cell", + "version_check", +] + +[[package]] +name = "aho-corasick" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c378d78423fdad8089616f827526ee33c19f2fddbd5de1629152c9593ba4783" +dependencies = [ + "memchr", +] + +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "ansi_term" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" +dependencies = [ + "winapi", +] + +[[package]] +name = "anstream" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f58811cfac344940f1a400b6e6231ce35171f614f26439e80f8c1465c5cc0c" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15c4c2c83f81532e5845a733998b6971faca23490340a418e9b72a3ec9de12ea" + +[[package]] +name = "anstyle-parse" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "938874ff5980b03a87c5524b3ae5b59cf99b1d6bc836848df7bc5ada9643c333" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b" +dependencies = [ + "windows-sys 0.48.0", +] + +[[package]] +name = "anstyle-wincon" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58f54d10c6dfa51283a066ceab3ec1ab78d13fae00aa49243a45e4571fb79dfd" +dependencies = [ + "anstyle", + "windows-sys 0.48.0", +] + +[[package]] +name = "anyhow" +version = "1.0.75" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6" + +[[package]] +name = "approx" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6" +dependencies = [ + "num-traits", +] + +[[package]] +name = "arc-swap" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bddcadddf5e9015d310179a59bb28c4d4b9920ad0f11e8e14dbadf654890c9a6" + +[[package]] +name = "array-bytes" +version = "6.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b1c5a481ec30a5abd8dfbd94ab5cf1bb4e9a66be7f1b3b322f2f1170c200fd" + +[[package]] +name = "arrayref" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" + +[[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 = "asn1-rs" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30ff05a702273012438132f449575dbc804e27b2f3cbe3069aa237d26c98fa33" +dependencies = [ + "asn1-rs-derive 0.1.0", + "asn1-rs-impl", + "displaydoc", + "nom", + "num-traits", + "rusticata-macros", + "thiserror", + "time 0.3.28", +] + +[[package]] +name = "asn1-rs" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f6fd5ddaf0351dff5b8da21b2fb4ff8e08ddd02857f0bf69c47639106c0fff0" +dependencies = [ + "asn1-rs-derive 0.4.0", + "asn1-rs-impl", + "displaydoc", + "nom", + "num-traits", + "rusticata-macros", + "thiserror", + "time 0.3.28", +] + +[[package]] +name = "asn1-rs-derive" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db8b7511298d5b7784b40b092d9e9dcd3a627a5707e4b5e507931ab0d44eeebf" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", + "synstructure", +] + +[[package]] +name = "asn1-rs-derive" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "726535892e8eae7e70657b4c8ea93d26b8553afb1ce617caee529ef96d7dee6c" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", + "synstructure", +] + +[[package]] +name = "asn1-rs-impl" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2777730b2039ac0f95f093556e61b6d26cebed5393ca6f152717777cec3a42ed" +dependencies = [ + "proc-macro2", + "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", + "futures-core", +] + +[[package]] +name = "async-io" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af" +dependencies = [ + "async-lock", + "autocfg", + "cfg-if", + "concurrent-queue", + "futures-lite", + "log", + "parking", + "polling", + "rustix 0.37.23", + "slab", + "socket2 0.4.9", + "waker-fn", +] + +[[package]] +name = "async-lock" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b" +dependencies = [ + "event-listener", +] + +[[package]] +name = "async-recursion" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fd55a5ba1179988837d24ab4c7cc8ed6efdeff578ede0416b4225a5fca35bd0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.31", +] + +[[package]] +name = "async-trait" +version = "0.1.73" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc00ceb34980c03614e35a3a4e218276a0a824e911d07651cd0d858a51e8c0f0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.31", +] + +[[package]] +name = "asynchronous-codec" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4057f2c32adbb2fc158e22fb38433c8e9bbf76b75a4732c7c0cbaf695fb65568" +dependencies = [ + "bytes", + "futures-sink", + "futures-util", + "memchr", + "pin-project-lite 0.2.13", +] + +[[package]] +name = "atomic-waker" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1181e1e0d1fce796a03db1ae795d67167da795f9cf4a39c37589e85ef57f26d3" + +[[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", +] + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "backtrace" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" +dependencies = [ + "addr2line 0.21.0", + "cc", + "cfg-if", + "libc", + "miniz_oxide", + "object 0.32.1", + "rustc-demangle", +] + +[[package]] +name = "base-x" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cbbc9d0964165b47557570cce6c952866c2678457aca742aafc9fb771d30270" + +[[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.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "414dcefbc63d77c526a76b3afcf6fbb9b5e2791c19c3aa2297733208750c6e53" + +[[package]] +name = "base64ct" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" + +[[package]] +name = "beef" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a8241f3ebb85c056b509d4327ad0358fbbba6ffb340bf388f26350aeda225b1" +dependencies = [ + "serde", +] + +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + +[[package]] +name = "bindgen" +version = "0.65.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfdf7b466f9a4903edc73f95d6d2bcd5baf8ae620638762244d3f60143643cc5" +dependencies = [ + "bitflags 1.3.2", + "cexpr", + "clang-sys", + "lazy_static", + "lazycell", + "peeking_take_while", + "prettyplease 0.2.14", + "proc-macro2", + "quote", + "regex", + "rustc-hash", + "shlex", + "syn 2.0.31", +] + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635" + +[[package]] +name = "bitvec" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +dependencies = [ + "funty", + "radium", + "tap", + "wyz", +] + +[[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 = "blake2b_simd" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c2f0dc9a68c6317d884f97cc36cf5a3d20ba14ce404227df55e1af708ab04bc" +dependencies = [ + "arrayref", + "arrayvec 0.7.4", + "constant_time_eq 0.2.6", +] + +[[package]] +name = "blake2s_simd" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6637f448b9e61dfadbdcbae9a885fadee1f3eaffb1f8d3c1965d3ade8bdfd44f" +dependencies = [ + "arrayref", + "arrayvec 0.7.4", + "constant_time_eq 0.2.6", +] + +[[package]] +name = "blake3" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "199c42ab6972d92c9f8995f086273d25c42fc0f7b2a1fcefba465c1352d25ba5" +dependencies = [ + "arrayref", + "arrayvec 0.7.4", + "cc", + "cfg-if", + "constant_time_eq 0.3.0", +] + +[[package]] +name = "block-buffer" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b" +dependencies = [ + "block-padding 0.1.5", + "byte-tools", + "byteorder", + "generic-array 0.12.4", +] + +[[package]] +name = "block-buffer" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" +dependencies = [ + "generic-array 0.14.7", +] + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array 0.14.7", +] + +[[package]] +name = "block-modes" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57a0e8073e8baa88212fb5823574c02ebccb395136ba9a164ab89379ec6072f0" +dependencies = [ + "block-padding 0.2.1", + "cipher 0.2.5", +] + +[[package]] +name = "block-padding" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa79dedbb091f449f1f39e53edf88d5dbe95f895dae6135a8d7b881fb5af73f5" +dependencies = [ + "byte-tools", +] + +[[package]] +name = "block-padding" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae" + +[[package]] +name = "bounded-collections" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb5b05133427c07c4776906f673ccf36c21b102c9829c641a5b56bd151d44fd6" +dependencies = [ + "log", + "parity-scale-codec", + "scale-info", + "serde", +] + +[[package]] +name = "bs58" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" + +[[package]] +name = "bstr" +version = "1.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c2f7349907b712260e64b0afe2f84692af14a454be26187d9df565c7f69266a" +dependencies = [ + "memchr", + "serde", +] + +[[package]] +name = "build-helper" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bdce191bf3fa4995ce948c8c83b4640a1745457a149e73c6db75b4ffe36aad5f" +dependencies = [ + "semver 0.6.0", +] + +[[package]] +name = "bumpalo" +version = "3.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1" + +[[package]] +name = "byte-slice-cast" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c" + +[[package]] +name = "byte-tools" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" + +[[package]] +name = "bytemuck" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17febce684fd15d89027105661fec94afb475cb995fbc59d2865198446ba2eea" + +[[package]] +name = "byteorder" +version = "1.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" + +[[package]] +name = "bytes" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" + +[[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 = "camino" +version = "1.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c59e92b5a388f549b863a7bea62612c09f24c8393560709a54558a9abdfb3b9c" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo-platform" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2cfa25e60aea747ec7e1124f238816749faa93759c6ff5b31f1ccdda137f4479" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo_metadata" +version = "0.15.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eee4243f1f26fc7a42710e7439c149e2b10b05472f88090acce52632f231a73a" +dependencies = [ + "camino", + "cargo-platform", + "semver 1.0.18", + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "cc" +version = "1.0.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" +dependencies = [ + "jobserver", + "libc", +] + +[[package]] +name = "ccm" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5aca1a8fbc20b50ac9673ff014abfb2b5f4085ee1a850d408f14a159c5853ac7" +dependencies = [ + "aead 0.3.2", + "cipher 0.2.5", + "subtle", +] + +[[package]] +name = "cexpr" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" +dependencies = [ + "nom", +] + +[[package]] +name = "cfg-expr" +version = "0.15.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b40ccee03b5175c18cde8f37e7d2a33bcef6f8ec8f7cc0d81090d1bb380949c9" +dependencies = [ + "smallvec", +] + +[[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 = "chacha20" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c80e5460aa66fe3b91d40bcbdab953a597b60053e34d684ac6903f863b680a6" +dependencies = [ + "cfg-if", + "cipher 0.3.0", + "cpufeatures", + "zeroize", +] + +[[package]] +name = "chacha20poly1305" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a18446b09be63d457bbec447509e85f662f32952b035ce892290396bc0b0cff5" +dependencies = [ + "aead 0.4.3", + "chacha20", + "cipher 0.3.0", + "poly1305", + "zeroize", +] + +[[package]] +name = "chrono" +version = "0.4.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95ed24df0632f708f5f6d8082675bef2596f7084dee3dd55f632290bf35bfe0f" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "js-sys", + "num-traits", + "time 0.1.45", + "wasm-bindgen", + "windows-targets 0.48.5", +] + +[[package]] +name = "cid" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9b68e3193982cd54187d71afdb2a271ad4cf8af157858e9cb911b91321de143" +dependencies = [ + "core2", + "multibase", + "multihash", + "serde", + "unsigned-varint", +] + +[[package]] +name = "cipher" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12f8e7987cbd042a63249497f41aed09f8e65add917ea6566effbc56578d6801" +dependencies = [ + "generic-array 0.14.7", +] + +[[package]] +name = "cipher" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7" +dependencies = [ + "generic-array 0.14.7", +] + +[[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 = "clang-sys" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c688fc74432808e3eb684cae8830a86be1d66a2bd58e1f248ed0960a590baf6f" +dependencies = [ + "glob", + "libc", + "libloading", +] + +[[package]] +name = "clap" +version = "4.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a13b88d2c62ff462f88e4a121f17a82c1af05693a2f192b5c38d14de73c19f6" +dependencies = [ + "clap_builder", + "clap_derive", +] + +[[package]] +name = "clap_builder" +version = "4.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bb9faaa7c2ef94b2743a21f5a29e6f0010dff4caa69ac8e9d6cf8b6fa74da08" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim", +] + +[[package]] +name = "clap_derive" +version = "4.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0862016ff20d69b84ef8247369fabf5c008a7417002411897d40ee1f4532b873" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn 2.0.31", +] + +[[package]] +name = "clap_lex" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd7cc57abe963c6d3b9d8be5b06ba7c8957a930305ca90304f24ef040aa6f961" + +[[package]] +name = "codespan-reporting" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" +dependencies = [ + "termcolor", + "unicode-width", +] + +[[package]] +name = "colorchoice" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" + +[[package]] +name = "comfy-table" +version = "7.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ab77dbd8adecaf3f0db40581631b995f312a8a5ae3aa9993188bb8f23d83a5b" +dependencies = [ + "strum", + "strum_macros", + "unicode-width", +] + +[[package]] +name = "concurrent-queue" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62ec6771ecfa0762d24683ee5a32ad78487a3d3afdc0fb8cae19d2c5deb50b7c" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "console" +version = "0.15.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c926e00cc70edefdc64d3a5ff31cc65bb97a3460097762bd23afb4d8145fccf8" +dependencies = [ + "encode_unicode", + "lazy_static", + "libc", + "unicode-width", + "windows-sys 0.45.0", +] + +[[package]] +name = "const-oid" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28c122c3980598d243d63d9a704629a2d748d101f278052ff068be5a4423ab6f" + +[[package]] +name = "const-random" +version = "0.1.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "368a7a772ead6ce7e1de82bfb04c485f3db8ec744f72925af5735e29a22cc18e" +dependencies = [ + "const-random-macro", + "proc-macro-hack", +] + +[[package]] +name = "const-random-macro" +version = "0.1.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d7d6ab3c3a2282db210df5f02c4dab6e0a7057af0fb7ebd4070f30fe05c0ddb" +dependencies = [ + "getrandom 0.2.10", + "once_cell", + "proc-macro-hack", + "tiny-keccak", +] + +[[package]] +name = "constant_time_eq" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21a53c0a4d288377e7415b53dcfc3c04da5cdc2cc95c8d5ac178b58f0b861ad6" + +[[package]] +name = "constant_time_eq" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2" + +[[package]] +name = "core-foundation" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" + +[[package]] +name = "core2" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b49ba7ef1ad6107f8824dbe97de947cbaac53c44e7f9756a1fba0d37c1eec505" +dependencies = [ + "memchr", +] + +[[package]] +name = "cpp_demangle" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eeaa953eaad386a53111e47172c2fedba671e5684c8dd601a5f474f4f118710f" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "cpufeatures" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1" +dependencies = [ + "libc", +] + +[[package]] +name = "cranelift-bforest" +version = "0.95.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1277fbfa94bc82c8ec4af2ded3e639d49ca5f7f3c7eeab2c66accd135ece4e70" +dependencies = [ + "cranelift-entity", +] + +[[package]] +name = "cranelift-codegen" +version = "0.95.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6e8c31ad3b2270e9aeec38723888fe1b0ace3bea2b06b3f749ccf46661d3220" +dependencies = [ + "bumpalo", + "cranelift-bforest", + "cranelift-codegen-meta", + "cranelift-codegen-shared", + "cranelift-entity", + "cranelift-isle", + "gimli 0.27.3", + "hashbrown 0.13.2", + "log", + "regalloc2", + "smallvec", + "target-lexicon", +] + +[[package]] +name = "cranelift-codegen-meta" +version = "0.95.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8ac5ac30d62b2d66f12651f6b606dbdfd9c2cfd0908de6b387560a277c5c9da" +dependencies = [ + "cranelift-codegen-shared", +] + +[[package]] +name = "cranelift-codegen-shared" +version = "0.95.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd82b8b376247834b59ed9bdc0ddeb50f517452827d4a11bccf5937b213748b8" + +[[package]] +name = "cranelift-entity" +version = "0.95.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40099d38061b37e505e63f89bab52199037a72b931ad4868d9089ff7268660b0" +dependencies = [ + "serde", +] + +[[package]] +name = "cranelift-frontend" +version = "0.95.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64a25d9d0a0ae3079c463c34115ec59507b4707175454f0eee0891e83e30e82d" +dependencies = [ + "cranelift-codegen", + "log", + "smallvec", + "target-lexicon", +] + +[[package]] +name = "cranelift-isle" +version = "0.95.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80de6a7d0486e4acbd5f9f87ec49912bf4c8fb6aea00087b989685460d4469ba" + +[[package]] +name = "cranelift-native" +version = "0.95.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb6b03e0e03801c4b3fd8ce0758a94750c07a44e7944cc0ffbf0d3f2e7c79b00" +dependencies = [ + "cranelift-codegen", + "libc", + "target-lexicon", +] + +[[package]] +name = "cranelift-wasm" +version = "0.95.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff3220489a3d928ad91e59dd7aeaa8b3de18afb554a6211213673a71c90737ac" +dependencies = [ + "cranelift-codegen", + "cranelift-entity", + "cranelift-frontend", + "itertools", + "log", + "smallvec", + "wasmparser", + "wasmtime-types", +] + +[[package]] +name = "crc" +version = "3.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86ec7a15cbe22e59248fc7eadb1907dab5ba09372595da4d73dd805ed4417dfe" +dependencies = [ + "crc-catalog", +] + +[[package]] +name = "crc-catalog" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cace84e55f07e7301bae1c519df89cdad8cc3cd868413d3fdbdeca9ff3db484" + +[[package]] +name = "crc32fast" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200" +dependencies = [ + "cfg-if", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef" +dependencies = [ + "cfg-if", + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7" +dependencies = [ + "autocfg", + "cfg-if", + "crossbeam-utils", + "memoffset 0.9.0", + "scopeguard", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crunchy" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" + +[[package]] +name = "crypto-bigint" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef2b4b23cddf68b89b8f8069890e8c270d54e2d5fe1b143820234805e4cb17ef" +dependencies = [ + "generic-array 0.14.7", + "rand_core 0.6.4", + "subtle", + "zeroize", +] + +[[package]] +name = "crypto-bigint" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf4c2f4e1afd912bc40bfd6fed5d9dc1f288e0ba01bfcc835cc5bc3eb13efe15" +dependencies = [ + "generic-array 0.14.7", + "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 0.14.7", + "rand_core 0.6.4", + "typenum", +] + +[[package]] +name = "crypto-mac" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" +dependencies = [ + "generic-array 0.14.7", + "subtle", +] + +[[package]] +name = "crypto-mac" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1d1a86f49236c215f271d40892d5fc950490551400b02ef360692c29815c714" +dependencies = [ + "generic-array 0.14.7", + "subtle", +] + +[[package]] +name = "ctr" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "049bb91fb4aaf0e3c7efa6cd5ef877dbbbd15b39dad06d9948de4ec8a75761ea" +dependencies = [ + "cipher 0.3.0", +] + +[[package]] +name = "ctr" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" +dependencies = [ + "cipher 0.4.4", +] + +[[package]] +name = "curve25519-dalek" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a9b85542f99a2dfa2a1b8e192662741c9859a846b296bef1c92ef9b58b5a216" +dependencies = [ + "byteorder", + "digest 0.8.1", + "rand_core 0.5.1", + "subtle", + "zeroize", +] + +[[package]] +name = "curve25519-dalek" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b9fdf9972b2bd6af2d913799d9ebc165ea4d2e65878e329d9c6b372c4491b61" +dependencies = [ + "byteorder", + "digest 0.9.0", + "rand_core 0.5.1", + "subtle", + "zeroize", +] + +[[package]] +name = "curve25519-dalek" +version = "4.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f711ade317dd348950a9910f81c5947e3d8907ebd2b83f76203ff1807e6a2bc2" +dependencies = [ + "cfg-if", + "cpufeatures", + "curve25519-dalek-derive", + "digest 0.10.7", + "fiat-crypto", + "platforms", + "rustc_version", + "subtle", + "zeroize", +] + +[[package]] +name = "curve25519-dalek-derive" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83fdaf97f4804dcebfa5862639bc9ce4121e82140bec2a987ac5140294865b5b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.31", +] + +[[package]] +name = "cxx" +version = "1.0.107" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbe98ba1789d56fb3db3bee5e032774d4f421b685de7ba703643584ba24effbe" +dependencies = [ + "cc", + "cxxbridge-flags", + "cxxbridge-macro", + "link-cplusplus", +] + +[[package]] +name = "cxx-build" +version = "1.0.107" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4ce20f6b8433da4841b1dadfb9468709868022d829d5ca1f2ffbda928455ea3" +dependencies = [ + "cc", + "codespan-reporting", + "once_cell", + "proc-macro2", + "quote", + "scratch", + "syn 2.0.31", +] + +[[package]] +name = "cxxbridge-flags" +version = "1.0.107" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20888d9e1d2298e2ff473cee30efe7d5036e437857ab68bbfea84c74dba91da2" + +[[package]] +name = "cxxbridge-macro" +version = "1.0.107" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fa16a70dd58129e4dfffdff535fb1bce66673f7bbeec4a5a1765a504e1ccd84" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.31", +] + +[[package]] +name = "darling" +version = "0.14.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.14.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 1.0.109", +] + +[[package]] +name = "darling_macro" +version = "0.14.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" +dependencies = [ + "darling_core", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "data-encoding" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2e66c9d817f1720209181c316d28635c050fa304f9c79e47a520882661b7308" + +[[package]] +name = "data-encoding-macro" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c904b33cc60130e1aeea4956ab803d08a3f4a0ca82d64ed757afac3891f2bb99" +dependencies = [ + "data-encoding", + "data-encoding-macro-internal", +] + +[[package]] +name = "data-encoding-macro-internal" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fdf3fce3ce863539ec1d7fd1b6dcc3c645663376b43ed376bbf887733e4f772" +dependencies = [ + "data-encoding", + "syn 1.0.109", +] + +[[package]] +name = "der" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1a467a65c5e759bce6e65eaf91cc29f466cdc57cb65777bd646872a8a1fd4de" +dependencies = [ + "const-oid", + "pem-rfc7468", + "zeroize", +] + +[[package]] +name = "der" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fffa369a668c8af7dbf8b5e56c9f744fbd399949ed171606040001947de40b1c" +dependencies = [ + "const-oid", + "zeroize", +] + +[[package]] +name = "der-parser" +version = "7.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe398ac75057914d7d07307bf67dc7f3f574a26783b4fc7805a20ffa9f506e82" +dependencies = [ + "asn1-rs 0.3.1", + "displaydoc", + "nom", + "num-bigint", + "num-traits", + "rusticata-macros", +] + +[[package]] +name = "der-parser" +version = "8.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbd676fbbab537128ef0278adb5576cf363cff6aa22a7b24effe97347cfab61e" +dependencies = [ + "asn1-rs 0.5.2", + "displaydoc", + "nom", + "num-bigint", + "num-traits", + "rusticata-macros", +] + +[[package]] +name = "deranged" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2696e8a945f658fd14dc3b87242e6b80cd0f36ff04ea560fa39082368847946" + +[[package]] +name = "derive-syn-parse" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e79116f119dd1dba1abf1f3405f03b9b0e79a27a3883864bfebded8a3dc768cd" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "derive_builder" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d07adf7be193b71cc36b193d0f5fe60b918a3a9db4dad0449f57bcfd519704a3" +dependencies = [ + "derive_builder_macro", +] + +[[package]] +name = "derive_builder_core" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f91d4cfa921f1c05904dc3c57b4a32c38aed3340cce209f3a6fd1478babafc4" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "derive_builder_macro" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f0314b72bed045f3a68671b3c86328386762c93f82d98c65c3cb5e5f573dd68" +dependencies = [ + "derive_builder_core", + "syn 1.0.109", +] + +[[package]] +name = "derive_more" +version = "0.99.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "difflib" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8" + +[[package]] +name = "digest" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5" +dependencies = [ + "generic-array 0.12.4", +] + +[[package]] +name = "digest" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +dependencies = [ + "generic-array 0.14.7", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer 0.10.4", + "const-oid", + "crypto-common", + "subtle", +] + +[[package]] +name = "directories" +version = "4.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f51c5d4ddabd36886dd3e1438cb358cdcb0d7c499cb99cb4ac2e38e18b5cb210" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "directories-next" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "339ee130d97a610ea5a5872d2bbb130fdf68884ff09d3028b81bec8a1ac23bbc" +dependencies = [ + "cfg-if", + "dirs-sys-next", +] + +[[package]] +name = "dirs-sys" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6" +dependencies = [ + "libc", + "redox_users", + "winapi", +] + +[[package]] +name = "dirs-sys-next" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" +dependencies = [ + "libc", + "redox_users", + "winapi", +] + +[[package]] +name = "displaydoc" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.31", +] + +[[package]] +name = "downcast" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1435fa1053d8b2fbbe9be7e97eca7f33d37b28409959813daefc1446a14247f1" + +[[package]] +name = "dtoa" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcbb2bf8e87535c23f7a8a321e364ce21462d0ff10cb6407820e8e96dfff6653" + +[[package]] +name = "dyn-clonable" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e9232f0e607a262ceb9bd5141a3dfb3e4db6994b31989bbfd845878cba59fd4" +dependencies = [ + "dyn-clonable-impl", + "dyn-clone", +] + +[[package]] +name = "dyn-clonable-impl" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "558e40ea573c374cf53507fd240b7ee2f5477df7cfebdb97323ec61c719399c5" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "dyn-clone" +version = "1.0.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbfc4744c1b8f2a09adc0e55242f60b1af195d88596bd8700be74418c056c555" + +[[package]] +name = "ecdsa" +version = "0.14.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413301934810f597c1d19ca71c8710e99a3f1ba28a0d2ebc01551a2daeea3c5c" +dependencies = [ + "der 0.6.1", + "elliptic-curve 0.12.3", + "rfc6979 0.3.1", + "signature 1.6.4", +] + +[[package]] +name = "ecdsa" +version = "0.16.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4b1e0c257a9e9f25f90ff76d7a68360ed497ee519c8e428d1825ef0000799d4" +dependencies = [ + "der 0.7.8", + "digest 0.10.7", + "elliptic-curve 0.13.5", + "rfc6979 0.4.0", + "signature 2.1.0", + "spki 0.7.2", +] + +[[package]] +name = "ed25519" +version = "1.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91cff35c70bba8a626e3185d8cd48cc11b5437e1a5bcd15b9b5fa3c64b6dfee7" +dependencies = [ + "signature 1.6.4", +] + +[[package]] +name = "ed25519" +version = "2.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60f6d271ca33075c88028be6f04d502853d63a5ece419d269c15315d4fc1cf1d" +dependencies = [ + "pkcs8 0.10.2", + "signature 2.1.0", +] + +[[package]] +name = "ed25519-dalek" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c762bae6dcaf24c4c84667b8579785430908723d5c889f469d76a41d59cc7a9d" +dependencies = [ + "curve25519-dalek 3.2.0", + "ed25519 1.5.3", + "sha2 0.9.9", + "zeroize", +] + +[[package]] +name = "ed25519-dalek" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7277392b266383ef8396db7fdeb1e77b6c52fed775f5df15bb24f35b72156980" +dependencies = [ + "curve25519-dalek 4.0.0", + "ed25519 2.2.2", + "rand_core 0.6.4", + "serde", + "sha2 0.10.7", + "zeroize", +] + +[[package]] +name = "ed25519-zebra" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c24f403d068ad0b359e577a77f92392118be3f3c927538f2bb544a5ecd828c6" +dependencies = [ + "curve25519-dalek 3.2.0", + "hashbrown 0.12.3", + "hex", + "rand_core 0.6.4", + "sha2 0.9.9", + "zeroize", +] + +[[package]] +name = "either" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" + +[[package]] +name = "elliptic-curve" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7bb888ab5300a19b8e5bceef25ac745ad065f3c9f7efc6de1b91958110891d3" +dependencies = [ + "base16ct 0.1.1", + "crypto-bigint 0.4.9", + "der 0.6.1", + "digest 0.10.7", + "ff 0.12.1", + "generic-array 0.14.7", + "group 0.12.1", + "hkdf", + "pem-rfc7468", + "pkcs8 0.9.0", + "rand_core 0.6.4", + "sec1 0.3.0", + "subtle", + "zeroize", +] + +[[package]] +name = "elliptic-curve" +version = "0.13.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "968405c8fdc9b3bf4df0a6638858cc0b52462836ab6b1c87377785dd09cf1c0b" +dependencies = [ + "base16ct 0.2.0", + "crypto-bigint 0.5.2", + "digest 0.10.7", + "ff 0.13.0", + "generic-array 0.14.7", + "group 0.13.0", + "pkcs8 0.10.2", + "rand_core 0.6.4", + "sec1 0.7.3", + "subtle", + "zeroize", +] + +[[package]] +name = "encode_unicode" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" + +[[package]] +name = "enum-as-inner" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9720bba047d567ffc8a3cba48bf19126600e249ab7f128e9233e6376976a116" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "env_logger" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85cdab6a89accf66733ad5a1693a4dcced6aeff64602b634530dd73c1f3ee9f0" +dependencies = [ + "humantime", + "is-terminal", + "log", + "regex", + "termcolor", +] + +[[package]] +name = "environmental" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e48c92028aaa870e83d51c64e5d4e0b6981b360c522198c23959f219a4e1b15b" + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "errno" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "136526188508e25c6fef639d7927dfb3e0e3084488bf202267829cf7fc23dbdd" +dependencies = [ + "errno-dragonfly", + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "errno-dragonfly" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "event-listener" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" + +[[package]] +name = "exit-future" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e43f2f1833d64e33f15592464d6fdd70f349dda7b1a53088eb83cd94014008c5" +dependencies = [ + "futures", +] + +[[package]] +name = "expander" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f86a749cf851891866c10515ef6c299b5c69661465e9c3bbe7e07a2b77fb0f7" +dependencies = [ + "blake2", + "fs-err", + "proc-macro2", + "quote", + "syn 2.0.31", +] + +[[package]] +name = "fake-simd" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed" + +[[package]] +name = "fallible-iterator" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" + +[[package]] +name = "fastrand" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" +dependencies = [ + "instant", +] + +[[package]] +name = "fastrand" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6999dc1837253364c2ebb0704ba97994bd874e8f195d665c50b7548f6ea92764" + +[[package]] +name = "fdlimit" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c4c9e43643f5a3be4ca5b67d26b98031ff9db6806c3440ae32e02e3ceac3f1b" +dependencies = [ + "libc", +] + +[[package]] +name = "ff" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d013fc25338cc558c5c2cfbad646908fb23591e2404481826742b651c9af7160" +dependencies = [ + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "ff" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" +dependencies = [ + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "fiat-crypto" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e825f6987101665dea6ec934c09ec6d721de7bc1bf92248e1d5810c8cd636b77" + +[[package]] +name = "file-per-thread-logger" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84f2e425d9790201ba4af4630191feac6dcc98765b118d4d18e91d23c2353866" +dependencies = [ + "env_logger", + "log", +] + +[[package]] +name = "filetime" +version = "0.2.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4029edd3e734da6fe05b6cd7bd2960760a616bd2ddd0d59a0124746d6272af0" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall 0.3.5", + "windows-sys 0.48.0", +] + +[[package]] +name = "finality-grandpa" +version = "0.16.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36530797b9bf31cd4ff126dcfee8170f86b00cfdcea3269d73133cc0415945c3" +dependencies = [ + "either", + "futures", + "futures-timer", + "log", + "num-traits", + "parity-scale-codec", + "parking_lot 0.12.1", + "scale-info", +] + +[[package]] +name = "fixed-hash" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "835c052cb0c08c1acf6ffd71c022172e18723949c8282f2b9f27efbc51e64534" +dependencies = [ + "byteorder", + "rand 0.8.5", + "rustc-hex", + "static_assertions", +] + +[[package]] +name = "fixedbitset" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" + +[[package]] +name = "flate2" +version = "1.0.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6c98ee8095e9d1dcbf2fcc6d95acccb90d1c81db1e44725c6a984b1dbdfb010" +dependencies = [ + "crc32fast", + "libz-sys", + "miniz_oxide", +] + +[[package]] +name = "float-cmp" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4" +dependencies = [ + "num-traits", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "fork-tree" +version = "3.0.0" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "parity-scale-codec", +] + +[[package]] +name = "form_urlencoded" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "fragile" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c2141d6d6c8512188a7891b4b01590a45f6dac67afb4f255c4124dbb86d4eaa" + +[[package]] +name = "frame-benchmarking" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "frame-support", + "frame-support-procedural", + "frame-system", + "linregress", + "log", + "parity-scale-codec", + "paste", + "scale-info", + "serde", + "sp-api", + "sp-application-crypto", + "sp-core", + "sp-io", + "sp-runtime", + "sp-runtime-interface", + "sp-std 8.0.0", + "sp-storage", + "static_assertions", +] + +[[package]] +name = "frame-benchmarking-cli" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "Inflector", + "array-bytes", + "chrono", + "clap", + "comfy-table", + "frame-benchmarking", + "frame-support", + "frame-system", + "gethostname", + "handlebars", + "itertools", + "lazy_static", + "linked-hash-map", + "log", + "parity-scale-codec", + "rand 0.8.5", + "rand_pcg", + "sc-block-builder", + "sc-cli", + "sc-client-api", + "sc-client-db", + "sc-executor", + "sc-service", + "sc-sysinfo", + "serde", + "serde_json", + "sp-api", + "sp-blockchain", + "sp-core", + "sp-database", + "sp-externalities", + "sp-inherents", + "sp-io", + "sp-keystore", + "sp-runtime", + "sp-state-machine", + "sp-storage", + "sp-trie", + "sp-wasm-interface", + "thiserror", + "thousands", +] + +[[package]] +name = "frame-executive" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "frame-support", + "frame-system", + "frame-try-runtime", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std 8.0.0", + "sp-tracing", +] + +[[package]] +name = "frame-metadata" +version = "16.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87cf1549fba25a6fcac22785b61698317d958e96cac72a59102ea45b9ae64692" +dependencies = [ + "cfg-if", + "parity-scale-codec", + "scale-info", + "serde", +] + +[[package]] +name = "frame-remote-externalities" +version = "0.10.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "async-recursion", + "futures", + "indicatif", + "jsonrpsee", + "log", + "parity-scale-codec", + "serde", + "sp-core", + "sp-io", + "sp-runtime", + "spinners", + "substrate-rpc-client", + "tokio", + "tokio-retry", +] + +[[package]] +name = "frame-support" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "bitflags 1.3.2", + "environmental", + "frame-metadata", + "frame-support-procedural", + "impl-trait-for-tuples", + "k256", + "log", + "macro_magic", + "parity-scale-codec", + "paste", + "scale-info", + "serde", + "smallvec", + "sp-api", + "sp-arithmetic", + "sp-core", + "sp-core-hashing-proc-macro", + "sp-debug-derive", + "sp-inherents", + "sp-io", + "sp-runtime", + "sp-staking", + "sp-state-machine", + "sp-std 8.0.0", + "sp-tracing", + "sp-weights", + "tt-call", +] + +[[package]] +name = "frame-support-procedural" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "Inflector", + "cfg-expr", + "derive-syn-parse", + "expander", + "frame-support-procedural-tools", + "itertools", + "macro_magic", + "proc-macro-warning", + "proc-macro2", + "quote", + "syn 2.0.31", +] + +[[package]] +name = "frame-support-procedural-tools" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "frame-support-procedural-tools-derive", + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 2.0.31", +] + +[[package]] +name = "frame-support-procedural-tools-derive" +version = "3.0.0" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.31", +] + +[[package]] +name = "frame-system" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "cfg-if", + "frame-support", + "log", + "parity-scale-codec", + "scale-info", + "serde", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std 8.0.0", + "sp-version", + "sp-weights", +] + +[[package]] +name = "frame-system-benchmarking" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-runtime", + "sp-std 8.0.0", +] + +[[package]] +name = "frame-system-rpc-runtime-api" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "parity-scale-codec", + "sp-api", +] + +[[package]] +name = "frame-try-runtime" +version = "0.10.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "frame-support", + "parity-scale-codec", + "sp-api", + "sp-runtime", + "sp-std 8.0.0", +] + +[[package]] +name = "fs-err" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0845fa252299212f0389d64ba26f34fa32cfe41588355f21ed507c59a0f64541" + +[[package]] +name = "fs2" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "funty" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" + +[[package]] +name = "futures" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" + +[[package]] +name = "futures-executor" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", + "num_cpus", +] + +[[package]] +name = "futures-io" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" + +[[package]] +name = "futures-lite" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" +dependencies = [ + "fastrand 1.9.0", + "futures-core", + "futures-io", + "memchr", + "parking", + "pin-project-lite 0.2.13", + "waker-fn", +] + +[[package]] +name = "futures-macro" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.31", +] + +[[package]] +name = "futures-rustls" +version = "0.22.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2411eed028cdf8c8034eaf21f9915f956b6c3abec4d4c7949ee67f0721127bd" +dependencies = [ + "futures-io", + "rustls 0.20.9", + "webpki 0.22.1", +] + +[[package]] +name = "futures-sink" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" + +[[package]] +name = "futures-task" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" + +[[package]] +name = "futures-timer" +version = "3.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e64b03909df88034c26dc1547e8970b91f98bdb65165d6a4e9110d94263dbb2c" + +[[package]] +name = "futures-util" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite 0.2.13", + "pin-utils", + "slab", +] + +[[package]] +name = "fxhash" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" +dependencies = [ + "byteorder", +] + +[[package]] +name = "generic-array" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd" +dependencies = [ + "typenum", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", + "zeroize", +] + +[[package]] +name = "gethostname" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1ebd34e35c46e00bb73e81363248d627782724609fe1b6396f553f68fe3862e" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "getrandom" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.9.0+wasi-snapshot-preview1", +] + +[[package]] +name = "getrandom" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", +] + +[[package]] +name = "ghash" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1583cc1656d7839fd3732b80cf4f38850336cdb9b8ded1cd399ca62958de3c99" +dependencies = [ + "opaque-debug 0.3.0", + "polyval 0.5.3", +] + +[[package]] +name = "ghash" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d930750de5717d2dd0b8c0d42c076c0e884c81a73e6cab859bbd2339c71e3e40" +dependencies = [ + "opaque-debug 0.3.0", + "polyval 0.6.1", +] + +[[package]] +name = "gimli" +version = "0.27.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c80984affa11d98d1b88b66ac8853f143217b399d3c74116778ff8fdb4ed2e" +dependencies = [ + "fallible-iterator", + "indexmap 1.9.3", + "stable_deref_trait", +] + +[[package]] +name = "gimli" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0" + +[[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.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "759c97c1e17c55525b57192c06a267cda0ac5210b222d6b82189a2338fa1c13d" +dependencies = [ + "aho-corasick", + "bstr", + "fnv", + "log", + "regex", +] + +[[package]] +name = "group" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5dfbfb3a6cfbd390d5c9564ab283a0349b9b9fcd46a706c1eb10e0db70bfbac7" +dependencies = [ + "ff 0.12.1", + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "group" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +dependencies = [ + "ff 0.13.0", + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "h2" +version = "0.3.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91fc23aa11be92976ef4729127f1a74adf36d8436f7816b185d18df956790833" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http", + "indexmap 1.9.3", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "handlebars" +version = "4.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c39b3bc2a8f715298032cf5087e58573809374b08160aa7d750582bdb82d2683" +dependencies = [ + "log", + "pest", + "pest_derive", + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "hash-db" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e7d7786361d7425ae2fe4f9e407eb0efaa0840f5212d109cc018c40c35c6ab4" + +[[package]] +name = "hash256-std-hasher" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92c171d55b98633f4ed3860808f004099b36c1cc29c42cfc53aa8591b21efcf2" +dependencies = [ + "crunchy", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +dependencies = [ + "ahash 0.7.6", +] + +[[package]] +name = "hashbrown" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +dependencies = [ + "ahash 0.8.3", +] + +[[package]] +name = "hashbrown" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a" + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "hermit-abi" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" +dependencies = [ + "libc", +] + +[[package]] +name = "hermit-abi" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "hkdf" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "791a029f6b9fc27657f6f188ec6e5e43f6911f6f878e0dc5501396e09809d437" +dependencies = [ + "hmac 0.12.1", +] + +[[package]] +name = "hmac" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "126888268dcc288495a26bf004b38c5fdbb31682f992c84ceb046a1f0fe38840" +dependencies = [ + "crypto-mac 0.8.0", + "digest 0.9.0", +] + +[[package]] +name = "hmac" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a2a2320eb7ec0ebe8da8f744d7812d9fc4cb4d09344ac01898dbcb6a20ae69b" +dependencies = [ + "crypto-mac 0.11.1", + "digest 0.9.0", +] + +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "hmac-drbg" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17ea0a1394df5b6574da6e0c1ade9e78868c9fb0a4e5ef4428e32da4676b85b1" +dependencies = [ + "digest 0.9.0", + "generic-array 0.14.7", + "hmac 0.8.1", +] + +[[package]] +name = "home" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb" +dependencies = [ + "windows-sys 0.48.0", +] + +[[package]] +name = "hostname" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867" +dependencies = [ + "libc", + "match_cfg", + "winapi", +] + +[[package]] +name = "http" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" +dependencies = [ + "bytes", + "http", + "pin-project-lite 0.2.13", +] + +[[package]] +name = "http-range-header" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "add0ab9360ddbd88cfeb3bd9574a1d85cfdfa14db10b3e21d3700dbc4328758f" + +[[package]] +name = "httparse" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" + +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + +[[package]] +name = "humantime" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" + +[[package]] +name = "hyper" +version = "0.14.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468" +dependencies = [ + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "httparse", + "httpdate", + "itoa", + "pin-project-lite 0.2.13", + "socket2 0.4.9", + "tokio", + "tower-service", + "tracing", + "want", +] + +[[package]] +name = "hyper-rustls" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d78e1e73ec14cf7375674f74d7dde185c8206fd9dea6fb6295e8a98098aaa97" +dependencies = [ + "futures-util", + "http", + "hyper", + "log", + "rustls 0.21.7", + "rustls-native-certs", + "tokio", + "tokio-rustls", + "webpki-roots 0.23.1", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.57" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fad5b825842d2b38bd206f3e81d6957625fd7f0a361e345c30e01a0ae2dd613" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows 0.48.0", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "idna" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8" +dependencies = [ + "matches", + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "idna" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "if-addrs" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbc0fa01ffc752e9dbc72818cdb072cd028b86be5e09dd04c5a643704fe101a9" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "if-watch" +version = "3.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9465340214b296cd17a0009acdb890d6160010b8adf8f78a00d0d7ab270f79f" +dependencies = [ + "async-io", + "core-foundation", + "fnv", + "futures", + "if-addrs", + "ipnet", + "log", + "rtnetlink", + "system-configuration", + "tokio", + "windows 0.34.0", +] + +[[package]] +name = "impl-codec" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba6a270039626615617f3f36d15fc827041df3b78c439da2cadfa47455a77f2f" +dependencies = [ + "parity-scale-codec", +] + +[[package]] +name = "impl-serde" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc88fc67028ae3db0c853baa36269d398d5f45b6982f95549ff5def78c935cd" +dependencies = [ + "serde", +] + +[[package]] +name = "impl-trait-for-tuples" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11d7a9f6330b71fea57921c9b61c47ee6e84f72d394754eff6163ae67e7395eb" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", + "serde", +] + +[[package]] +name = "indexmap" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d" +dependencies = [ + "equivalent", + "hashbrown 0.14.0", +] + +[[package]] +name = "indicatif" +version = "0.17.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b297dc40733f23a0e52728a58fa9489a5b7638a324932de16b41adc3ef80730" +dependencies = [ + "console", + "instant", + "number_prefix", + "portable-atomic", + "unicode-width", +] + +[[package]] +name = "inout" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" +dependencies = [ + "generic-array 0.14.7", +] + +[[package]] +name = "instant" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "integer-sqrt" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "276ec31bcb4a9ee45f58bec6f9ec700ae4cf4f4f8f2fa7e06cb406bd5ffdd770" +dependencies = [ + "num-traits", +] + +[[package]] +name = "interceptor" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e8a11ae2da61704edada656798b61c94b35ecac2c58eb955156987d5e6be90b" +dependencies = [ + "async-trait", + "bytes", + "log", + "rand 0.8.5", + "rtcp", + "rtp", + "thiserror", + "tokio", + "waitgroup", + "webrtc-srtp", + "webrtc-util", +] + +[[package]] +name = "io-lifetimes" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" +dependencies = [ + "hermit-abi 0.3.2", + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "ip_network" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa2f047c0a98b2f299aa5d6d7088443570faae494e9ae1305e48be000c9e0eb1" + +[[package]] +name = "ipconfig" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f" +dependencies = [ + "socket2 0.5.3", + "widestring", + "windows-sys 0.48.0", + "winreg", +] + +[[package]] +name = "ipnet" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28b29a3cd74f0f4598934efe3aeba42bae0eb4680554128851ebbecb02af14e6" + +[[package]] +name = "is-terminal" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b" +dependencies = [ + "hermit-abi 0.3.2", + "rustix 0.38.11", + "windows-sys 0.48.0", +] + +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" + +[[package]] +name = "jobserver" +version = "0.1.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2" +dependencies = [ + "libc", +] + +[[package]] +name = "js-sys" +version = "0.3.64" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "jsonrpsee" +version = "0.16.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "367a292944c07385839818bb71c8d76611138e2dedb0677d035b8da21d29c78b" +dependencies = [ + "jsonrpsee-core", + "jsonrpsee-http-client", + "jsonrpsee-proc-macros", + "jsonrpsee-server", + "jsonrpsee-types", + "jsonrpsee-ws-client", + "tracing", +] + +[[package]] +name = "jsonrpsee-client-transport" +version = "0.16.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8b3815d9f5d5de348e5f162b316dc9cdf4548305ebb15b4eb9328e66cf27d7a" +dependencies = [ + "futures-util", + "http", + "jsonrpsee-core", + "jsonrpsee-types", + "pin-project", + "rustls-native-certs", + "soketto", + "thiserror", + "tokio", + "tokio-rustls", + "tokio-util", + "tracing", + "webpki-roots 0.25.2", +] + +[[package]] +name = "jsonrpsee-core" +version = "0.16.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b5dde66c53d6dcdc8caea1874a45632ec0fcf5b437789f1e45766a1512ce803" +dependencies = [ + "anyhow", + "arrayvec 0.7.4", + "async-lock", + "async-trait", + "beef", + "futures-channel", + "futures-timer", + "futures-util", + "globset", + "hyper", + "jsonrpsee-types", + "parking_lot 0.12.1", + "rand 0.8.5", + "rustc-hash", + "serde", + "serde_json", + "soketto", + "thiserror", + "tokio", + "tracing", +] + +[[package]] +name = "jsonrpsee-http-client" +version = "0.16.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e5f9fabdd5d79344728521bb65e3106b49ec405a78b66fbff073b72b389fa43" +dependencies = [ + "async-trait", + "hyper", + "hyper-rustls", + "jsonrpsee-core", + "jsonrpsee-types", + "rustc-hash", + "serde", + "serde_json", + "thiserror", + "tokio", + "tracing", +] + +[[package]] +name = "jsonrpsee-proc-macros" +version = "0.16.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44e8ab85614a08792b9bff6c8feee23be78c98d0182d4c622c05256ab553892a" +dependencies = [ + "heck", + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "jsonrpsee-server" +version = "0.16.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf4d945a6008c9b03db3354fb3c83ee02d2faa9f2e755ec1dfb69c3551b8f4ba" +dependencies = [ + "futures-channel", + "futures-util", + "http", + "hyper", + "jsonrpsee-core", + "jsonrpsee-types", + "serde", + "serde_json", + "soketto", + "tokio", + "tokio-stream", + "tokio-util", + "tower", + "tracing", +] + +[[package]] +name = "jsonrpsee-types" +version = "0.16.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "245ba8e5aa633dd1c1e4fae72bce06e71f42d34c14a2767c6b4d173b57bee5e5" +dependencies = [ + "anyhow", + "beef", + "serde", + "serde_json", + "thiserror", + "tracing", +] + +[[package]] +name = "jsonrpsee-ws-client" +version = "0.16.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e1b3975ed5d73f456478681a417128597acd6a2487855fdb7b4a3d4d195bf5e" +dependencies = [ + "http", + "jsonrpsee-client-transport", + "jsonrpsee-core", + "jsonrpsee-types", +] + +[[package]] +name = "k256" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cadb76004ed8e97623117f3df85b17aaa6626ab0b0831e6573f104df16cd1bcc" +dependencies = [ + "cfg-if", + "ecdsa 0.16.8", + "elliptic-curve 0.13.5", + "once_cell", + "sha2 0.10.7", +] + +[[package]] +name = "keccak" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f6d5ed8676d904364de097082f4e7d240b571b67989ced0240f08b7f966f940" +dependencies = [ + "cpufeatures", +] + +[[package]] +name = "kvdb" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7d770dcb02bf6835887c3a979b5107a04ff4bbde97a5f0928d27404a155add9" +dependencies = [ + "smallvec", +] + +[[package]] +name = "kvdb-memorydb" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf7a85fe66f9ff9cd74e169fdd2c94c6e1e74c412c99a73b4df3200b5d3760b2" +dependencies = [ + "kvdb", + "parking_lot 0.12.1", +] + +[[package]] +name = "kvdb-rocksdb" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b644c70b92285f66bfc2032922a79000ea30af7bc2ab31902992a5dcb9b434f6" +dependencies = [ + "kvdb", + "num_cpus", + "parking_lot 0.12.1", + "regex", + "rocksdb", + "smallvec", +] + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "lazycell" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" + +[[package]] +name = "libc" +version = "0.2.147" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3" + +[[package]] +name = "libloading" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" +dependencies = [ + "cfg-if", + "winapi", +] + +[[package]] +name = "libp2p" +version = "0.51.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f210d259724eae82005b5c48078619b7745edb7b76de370b03f8ba59ea103097" +dependencies = [ + "bytes", + "futures", + "futures-timer", + "getrandom 0.2.10", + "instant", + "libp2p-allow-block-list", + "libp2p-connection-limits", + "libp2p-core", + "libp2p-dns", + "libp2p-identify", + "libp2p-identity", + "libp2p-kad", + "libp2p-mdns", + "libp2p-metrics", + "libp2p-noise", + "libp2p-ping", + "libp2p-quic", + "libp2p-request-response", + "libp2p-swarm", + "libp2p-tcp", + "libp2p-wasm-ext", + "libp2p-webrtc", + "libp2p-websocket", + "libp2p-yamux", + "multiaddr", + "pin-project", +] + +[[package]] +name = "libp2p-allow-block-list" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "510daa05efbc25184458db837f6f9a5143888f1caa742426d92e1833ddd38a50" +dependencies = [ + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", + "void", +] + +[[package]] +name = "libp2p-connection-limits" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4caa33f1d26ed664c4fe2cca81a08c8e07d4c1c04f2f4ac7655c2dd85467fda0" +dependencies = [ + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", + "void", +] + +[[package]] +name = "libp2p-core" +version = "0.39.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c1df63c0b582aa434fb09b2d86897fa2b419ffeccf934b36f87fcedc8e835c2" +dependencies = [ + "either", + "fnv", + "futures", + "futures-timer", + "instant", + "libp2p-identity", + "log", + "multiaddr", + "multihash", + "multistream-select", + "once_cell", + "parking_lot 0.12.1", + "pin-project", + "quick-protobuf", + "rand 0.8.5", + "rw-stream-sink", + "smallvec", + "thiserror", + "unsigned-varint", + "void", +] + +[[package]] +name = "libp2p-dns" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "146ff7034daae62077c415c2376b8057368042df6ab95f5432ad5e88568b1554" +dependencies = [ + "futures", + "libp2p-core", + "log", + "parking_lot 0.12.1", + "smallvec", + "trust-dns-resolver", +] + +[[package]] +name = "libp2p-identify" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5455f472243e63b9c497ff320ded0314254a9eb751799a39c283c6f20b793f3c" +dependencies = [ + "asynchronous-codec", + "either", + "futures", + "futures-timer", + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", + "log", + "lru", + "quick-protobuf", + "quick-protobuf-codec", + "smallvec", + "thiserror", + "void", +] + +[[package]] +name = "libp2p-identity" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "276bb57e7af15d8f100d3c11cbdd32c6752b7eef4ba7a18ecf464972c07abcce" +dependencies = [ + "bs58", + "ed25519-dalek 2.0.0", + "log", + "multiaddr", + "multihash", + "quick-protobuf", + "rand 0.8.5", + "sha2 0.10.7", + "thiserror", + "zeroize", +] + +[[package]] +name = "libp2p-kad" +version = "0.43.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39d5ef876a2b2323d63c258e63c2f8e36f205fe5a11f0b3095d59635650790ff" +dependencies = [ + "arrayvec 0.7.4", + "asynchronous-codec", + "bytes", + "either", + "fnv", + "futures", + "futures-timer", + "instant", + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", + "log", + "quick-protobuf", + "rand 0.8.5", + "sha2 0.10.7", + "smallvec", + "thiserror", + "uint", + "unsigned-varint", + "void", +] + +[[package]] +name = "libp2p-mdns" +version = "0.43.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19983e1f949f979a928f2c603de1cf180cc0dc23e4ac93a62651ccb18341460b" +dependencies = [ + "data-encoding", + "futures", + "if-watch", + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", + "log", + "rand 0.8.5", + "smallvec", + "socket2 0.4.9", + "tokio", + "trust-dns-proto", + "void", +] + +[[package]] +name = "libp2p-metrics" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a42ec91e227d7d0dafa4ce88b333cdf5f277253873ab087555c92798db2ddd46" +dependencies = [ + "libp2p-core", + "libp2p-identify", + "libp2p-kad", + "libp2p-ping", + "libp2p-swarm", + "prometheus-client", +] + +[[package]] +name = "libp2p-noise" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c3673da89d29936bc6435bafc638e2f184180d554ce844db65915113f86ec5e" +dependencies = [ + "bytes", + "curve25519-dalek 3.2.0", + "futures", + "libp2p-core", + "libp2p-identity", + "log", + "once_cell", + "quick-protobuf", + "rand 0.8.5", + "sha2 0.10.7", + "snow", + "static_assertions", + "thiserror", + "x25519-dalek 1.1.1", + "zeroize", +] + +[[package]] +name = "libp2p-ping" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e57759c19c28a73ef1eb3585ca410cefb72c1a709fcf6de1612a378e4219202" +dependencies = [ + "either", + "futures", + "futures-timer", + "instant", + "libp2p-core", + "libp2p-swarm", + "log", + "rand 0.8.5", + "void", +] + +[[package]] +name = "libp2p-quic" +version = "0.7.0-alpha.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6b26abd81cd2398382a1edfe739b539775be8a90fa6914f39b2ab49571ec735" +dependencies = [ + "bytes", + "futures", + "futures-timer", + "if-watch", + "libp2p-core", + "libp2p-identity", + "libp2p-tls", + "log", + "parking_lot 0.12.1", + "quinn-proto", + "rand 0.8.5", + "rustls 0.20.9", + "thiserror", + "tokio", +] + +[[package]] +name = "libp2p-request-response" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ffdb374267d42dc5ed5bc53f6e601d4a64ac5964779c6e40bb9e4f14c1e30d5" +dependencies = [ + "async-trait", + "futures", + "instant", + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", + "rand 0.8.5", + "smallvec", +] + +[[package]] +name = "libp2p-swarm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "903b3d592d7694e56204d211f29d31bc004be99386644ba8731fc3e3ef27b296" +dependencies = [ + "either", + "fnv", + "futures", + "futures-timer", + "instant", + "libp2p-core", + "libp2p-identity", + "libp2p-swarm-derive", + "log", + "rand 0.8.5", + "smallvec", + "tokio", + "void", +] + +[[package]] +name = "libp2p-swarm-derive" +version = "0.32.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fba456131824ab6acd4c7bf61e9c0f0a3014b5fc9868ccb8e10d344594cdc4f" +dependencies = [ + "heck", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "libp2p-tcp" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33d33698596d7722d85d3ab0c86c2c322254fce1241e91208e3679b4eb3026cf" +dependencies = [ + "futures", + "futures-timer", + "if-watch", + "libc", + "libp2p-core", + "log", + "socket2 0.4.9", + "tokio", +] + +[[package]] +name = "libp2p-tls" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff08d13d0dc66e5e9ba6279c1de417b84fa0d0adc3b03e5732928c180ec02781" +dependencies = [ + "futures", + "futures-rustls", + "libp2p-core", + "libp2p-identity", + "rcgen 0.10.0", + "ring", + "rustls 0.20.9", + "thiserror", + "webpki 0.22.1", + "x509-parser 0.14.0", + "yasna", +] + +[[package]] +name = "libp2p-wasm-ext" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77dff9d32353a5887adb86c8afc1de1a94d9e8c3bc6df8b2201d7cdf5c848f43" +dependencies = [ + "futures", + "js-sys", + "libp2p-core", + "parity-send-wrapper", + "wasm-bindgen", + "wasm-bindgen-futures", +] + +[[package]] +name = "libp2p-webrtc" +version = "0.4.0-alpha.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dba48592edbc2f60b4bc7c10d65445b0c3964c07df26fdf493b6880d33be36f8" +dependencies = [ + "async-trait", + "asynchronous-codec", + "bytes", + "futures", + "futures-timer", + "hex", + "if-watch", + "libp2p-core", + "libp2p-identity", + "libp2p-noise", + "log", + "multihash", + "quick-protobuf", + "quick-protobuf-codec", + "rand 0.8.5", + "rcgen 0.9.3", + "serde", + "stun", + "thiserror", + "tinytemplate", + "tokio", + "tokio-util", + "webrtc", +] + +[[package]] +name = "libp2p-websocket" +version = "0.41.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "111273f7b3d3510524c752e8b7a5314b7f7a1fee7e68161c01a7d72cbb06db9f" +dependencies = [ + "either", + "futures", + "futures-rustls", + "libp2p-core", + "log", + "parking_lot 0.12.1", + "quicksink", + "rw-stream-sink", + "soketto", + "url", + "webpki-roots 0.22.6", +] + +[[package]] +name = "libp2p-yamux" +version = "0.43.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4dcd21d950662700a385d4c6d68e2f5f54d778e97068cdd718522222ef513bda" +dependencies = [ + "futures", + "libp2p-core", + "log", + "thiserror", + "yamux", +] + +[[package]] +name = "librocksdb-sys" +version = "0.11.0+8.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3386f101bcb4bd252d8e9d2fb41ec3b0862a15a62b478c355b2982efa469e3e" +dependencies = [ + "bindgen", + "bzip2-sys", + "cc", + "glob", + "libc", + "libz-sys", + "tikv-jemalloc-sys", +] + +[[package]] +name = "libsecp256k1" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95b09eff1b35ed3b33b877ced3a691fc7a481919c7e29c53c906226fcf55e2a1" +dependencies = [ + "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 = "libsecp256k1-core" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5be9b9bb642d8522a44d533eab56c16c738301965504753b03ad1de3425d5451" +dependencies = [ + "crunchy", + "digest 0.9.0", + "subtle", +] + +[[package]] +name = "libsecp256k1-gen-ecmult" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3038c808c55c87e8a172643a7d87187fc6c4174468159cb3090659d55bcb4809" +dependencies = [ + "libsecp256k1-core", +] + +[[package]] +name = "libsecp256k1-gen-genmult" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3db8d6ba2cec9eacc40e6e8ccc98931840301f1006e95647ceb2dd5c3aa06f7c" +dependencies = [ + "libsecp256k1-core", +] + +[[package]] +name = "libz-sys" +version = "1.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d97137b25e321a73eef1418d1d5d2eda4d77e12813f8e6dead84bc52c5870a7b" +dependencies = [ + "cc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "link-cplusplus" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d240c6f7e1ba3a28b0249f774e6a9dd0175054b52dfbb61b16eb8505c3785c9" +dependencies = [ + "cc", +] + +[[package]] +name = "linked-hash-map" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" + +[[package]] +name = "linked_hash_set" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47186c6da4d81ca383c7c47c1bfc80f4b95f4720514d860a5407aaf4233f9588" +dependencies = [ + "linked-hash-map", +] + +[[package]] +name = "linregress" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4de04dcecc58d366391f9920245b85ffa684558a5ef6e7736e754347c3aea9c2" +dependencies = [ + "nalgebra", +] + +[[package]] +name = "linux-raw-sys" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4" + +[[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.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57bcfdad1b858c2db7c38303a6d2ad4dfaf5eb53dfeb0910128b2c26d6158503" + +[[package]] +name = "lock_api" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" + +[[package]] +name = "lru" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "718e8fae447df0c7e1ba7f5189829e63fd536945c8988d61444c19039f16b670" +dependencies = [ + "hashbrown 0.13.2", +] + +[[package]] +name = "lru-cache" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31e24f1ad8321ca0e8a1e0ac13f23cb668e6f5466c2c57319f6a5cf1cc8e3b1c" +dependencies = [ + "linked-hash-map", +] + +[[package]] +name = "lz4" +version = "1.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e9e2dd86df36ce760a60f6ff6ad526f7ba1f14ba0356f8254fb6905e6494df1" +dependencies = [ + "libc", + "lz4-sys", +] + +[[package]] +name = "lz4-sys" +version = "1.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57d27b317e207b10f69f5e75494119e391a96f48861ae870d1da6edac98ca900" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "mach" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b823e83b2affd8f40a9ee8c29dbc56404c1e34cd2710921f2801e2cf29527afa" +dependencies = [ + "libc", +] + +[[package]] +name = "macro_magic" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aee866bfee30d2d7e83835a4574aad5b45adba4cc807f2a3bbba974e5d4383c9" +dependencies = [ + "macro_magic_core", + "macro_magic_macros", + "quote", + "syn 2.0.31", +] + +[[package]] +name = "macro_magic_core" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e766a20fd9c72bab3e1e64ed63f36bd08410e75803813df210d1ce297d7ad00" +dependencies = [ + "const-random", + "derive-syn-parse", + "macro_magic_core_macros", + "proc-macro2", + "quote", + "syn 2.0.31", +] + +[[package]] +name = "macro_magic_core_macros" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c12469fc165526520dff2807c2975310ab47cf7190a45b99b49a7dc8befab17b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.31", +] + +[[package]] +name = "macro_magic_macros" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8fb85ec1620619edf2984a7693497d4ec88a9665d8b87e942856884c92dbf2a" +dependencies = [ + "macro_magic_core", + "quote", + "syn 2.0.31", +] + +[[package]] +name = "maplit" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d" + +[[package]] +name = "match_cfg" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4" + +[[package]] +name = "matchers" +version = "0.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f099785f7595cc4b4553a174ce30dd7589ef93391ff414dbb67f62392b9e0ce1" +dependencies = [ + "regex-automata 0.1.10", +] + +[[package]] +name = "matches" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" + +[[package]] +name = "matrixmultiply" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "090126dc04f95dc0d1c1c91f61bdd474b3930ca064c1edc8a849da2c6cbe1e77" +dependencies = [ + "autocfg", + "rawpointer", +] + +[[package]] +name = "md-5" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6365506850d44bff6e2fbcb5176cf63650e48bd45ef2fe2665ae1570e0f4b9ca" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "memchr" +version = "2.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f232d6ef707e1956a43342693d2a31e72989554d58299d7a88738cc95b0d35c" + +[[package]] +name = "memfd" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffc89ccdc6e10d6907450f753537ebc5c5d3460d2e4e62ea74bd571db62c0f9e" +dependencies = [ + "rustix 0.37.23", +] + +[[package]] +name = "memmap2" +version = "0.5.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327" +dependencies = [ + "libc", +] + +[[package]] +name = "memoffset" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" +dependencies = [ + "autocfg", +] + +[[package]] +name = "memoffset" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1" +dependencies = [ + "autocfg", +] + +[[package]] +name = "memoffset" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" +dependencies = [ + "autocfg", +] + +[[package]] +name = "memory-db" +version = "0.32.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "808b50db46293432a45e63bc15ea51e0ab4c0a1647b8eb114e31a3e698dd6fbe" +dependencies = [ + "hash-db", +] + +[[package]] +name = "merlin" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e261cf0f8b3c42ded9f7d2bb59dea03aa52bc8a1cbc7482f9fc3fd1229d3b42" +dependencies = [ + "byteorder", + "keccak", + "rand_core 0.5.1", + "zeroize", +] + +[[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.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" +dependencies = [ + "adler", +] + +[[package]] +name = "mio" +version = "0.8.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2" +dependencies = [ + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", + "windows-sys 0.48.0", +] + +[[package]] +name = "mockall" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c84490118f2ee2d74570d114f3d0493cbf02790df303d2707606c3e14e07c96" +dependencies = [ + "cfg-if", + "downcast", + "fragile", + "lazy_static", + "mockall_derive", + "predicates", + "predicates-tree", +] + +[[package]] +name = "mockall_derive" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22ce75669015c4f47b289fd4d4f56e894e4c96003ffdf3ac51313126f94c6cbb" +dependencies = [ + "cfg-if", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "multiaddr" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b36f567c7099511fa8612bbbb52dda2419ce0bdbacf31714e3a5ffdb766d3bd" +dependencies = [ + "arrayref", + "byteorder", + "data-encoding", + "log", + "multibase", + "multihash", + "percent-encoding", + "serde", + "static_assertions", + "unsigned-varint", + "url", +] + +[[package]] +name = "multibase" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b3539ec3c1f04ac9748a260728e855f261b4977f5c3406612c884564f329404" +dependencies = [ + "base-x", + "data-encoding", + "data-encoding-macro", +] + +[[package]] +name = "multihash" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "835d6ff01d610179fbce3de1694d007e500bf33a7f29689838941d6bf783ae40" +dependencies = [ + "blake2b_simd", + "blake2s_simd", + "blake3", + "core2", + "digest 0.10.7", + "multihash-derive", + "sha2 0.10.7", + "sha3", + "unsigned-varint", +] + +[[package]] +name = "multihash-derive" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d6d4752e6230d8ef7adf7bd5d8c4b1f6561c1014c5ba9a37445ccefe18aa1db" +dependencies = [ + "proc-macro-crate", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 1.0.109", + "synstructure", +] + +[[package]] +name = "multimap" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" + +[[package]] +name = "multistream-select" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8552ab875c1313b97b8d20cb857b9fd63e2d1d6a0a1b53ce9821e575405f27a" +dependencies = [ + "bytes", + "futures", + "log", + "pin-project", + "smallvec", + "unsigned-varint", +] + +[[package]] +name = "nalgebra" +version = "0.32.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "307ed9b18cc2423f29e83f84fd23a8e73628727990181f18641a8b5dc2ab1caa" +dependencies = [ + "approx", + "matrixmultiply", + "nalgebra-macros", + "num-complex", + "num-rational", + "num-traits", + "simba", + "typenum", +] + +[[package]] +name = "nalgebra-macros" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91761aed67d03ad966ef783ae962ef9bbaca728d2dd7ceb7939ec110fffad998" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "names" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7d66043b25d4a6cccb23619d10c19c25304b355a7dccd4a8e11423dd2382146" +dependencies = [ + "rand 0.8.5", +] + +[[package]] +name = "netlink-packet-core" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "345b8ab5bd4e71a2986663e88c56856699d060e78e152e6e9d7966fcd5491297" +dependencies = [ + "anyhow", + "byteorder", + "libc", + "netlink-packet-utils", +] + +[[package]] +name = "netlink-packet-route" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9ea4302b9759a7a88242299225ea3688e63c85ea136371bb6cf94fd674efaab" +dependencies = [ + "anyhow", + "bitflags 1.3.2", + "byteorder", + "libc", + "netlink-packet-core", + "netlink-packet-utils", +] + +[[package]] +name = "netlink-packet-utils" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ede8a08c71ad5a95cdd0e4e52facd37190977039a4704eb82a283f713747d34" +dependencies = [ + "anyhow", + "byteorder", + "paste", + "thiserror", +] + +[[package]] +name = "netlink-proto" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65b4b14489ab424703c092062176d52ba55485a89c076b4f9db05092b7223aa6" +dependencies = [ + "bytes", + "futures", + "log", + "netlink-packet-core", + "netlink-sys", + "thiserror", + "tokio", +] + +[[package]] +name = "netlink-sys" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6471bf08e7ac0135876a9581bf3217ef0333c191c128d34878079f42ee150411" +dependencies = [ + "bytes", + "futures", + "libc", + "log", + "tokio", +] + +[[package]] +name = "nix" +version = "0.24.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa52e972a9a719cecb6864fb88568781eb706bac2cd1d4f04a648542dbf78069" +dependencies = [ + "bitflags 1.3.2", + "cfg-if", + "libc", + "memoffset 0.6.5", +] + +[[package]] +name = "node-template" +version = "4.0.0-dev" +dependencies = [ + "clap", + "frame-benchmarking", + "frame-benchmarking-cli", + "frame-system", + "futures", + "jsonrpsee", + "node-template-runtime", + "pallet-transaction-payment", + "pallet-transaction-payment-rpc", + "sc-basic-authorship", + "sc-cli", + "sc-client-api", + "sc-consensus", + "sc-consensus-aura", + "sc-consensus-grandpa", + "sc-executor", + "sc-network", + "sc-offchain", + "sc-rpc-api", + "sc-service", + "sc-statement-store", + "sc-telemetry", + "sc-transaction-pool", + "sc-transaction-pool-api", + "sp-api", + "sp-block-builder", + "sp-blockchain", + "sp-consensus-aura", + "sp-consensus-grandpa", + "sp-core", + "sp-inherents", + "sp-io", + "sp-keyring", + "sp-runtime", + "sp-timestamp", + "substrate-build-script-utils", + "substrate-frame-rpc-system", + "try-runtime-cli", +] + +[[package]] +name = "node-template-runtime" +version = "4.0.0-dev" +dependencies = [ + "frame-benchmarking", + "frame-executive", + "frame-support", + "frame-system", + "frame-system-benchmarking", + "frame-system-rpc-runtime-api", + "frame-try-runtime", + "pallet-aura", + "pallet-balances", + "pallet-grandpa", + "pallet-nicks", + "pallet-sudo", + "pallet-template", + "pallet-timestamp", + "pallet-transaction-payment", + "pallet-transaction-payment-rpc-runtime-api", + "parity-scale-codec", + "scale-info", + "sp-api", + "sp-block-builder", + "sp-consensus-aura", + "sp-consensus-grandpa", + "sp-core", + "sp-inherents", + "sp-offchain", + "sp-runtime", + "sp-session", + "sp-std 8.0.0", + "sp-transaction-pool", + "sp-version", + "substrate-wasm-builder", +] + +[[package]] +name = "nohash-hasher" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" + +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + +[[package]] +name = "normalize-line-endings" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be" + +[[package]] +name = "num-bigint" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-complex" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ba157ca0885411de85d6ca030ba7e2a83a28636056c7c699b07c8b6f7383214" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-format" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a652d9771a63711fd3c3deb670acfbe5c30a4072e664d7a3bf5a9e1056ac72c3" +dependencies = [ + "arrayvec 0.7.4", + "itoa", +] + +[[package]] +name = "num-integer" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f30b0abd723be7e2ffca1272140fac1a2f084c77ec3e123c192b66af1ee9e6c2" +dependencies = [ + "autocfg", +] + +[[package]] +name = "num_cpus" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +dependencies = [ + "hermit-abi 0.3.2", + "libc", +] + +[[package]] +name = "number_prefix" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" + +[[package]] +name = "object" +version = "0.30.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03b4680b86d9cfafba8fc491dc9b6df26b68cf40e9e6cd73909194759a63c385" +dependencies = [ + "crc32fast", + "hashbrown 0.13.2", + "indexmap 1.9.3", + "memchr", +] + +[[package]] +name = "object" +version = "0.32.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0" +dependencies = [ + "memchr", +] + +[[package]] +name = "oid-registry" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38e20717fa0541f39bd146692035c37bedfa532b3e5071b35761082407546b2a" +dependencies = [ + "asn1-rs 0.3.1", +] + +[[package]] +name = "oid-registry" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bedf36ffb6ba96c2eb7144ef6270557b52e54b20c0a8e1eb2ff99a6c6959bff" +dependencies = [ + "asn1-rs 0.5.2", +] + +[[package]] +name = "once_cell" +version = "1.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" + +[[package]] +name = "opaque-debug" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c" + +[[package]] +name = "opaque-debug" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" + +[[package]] +name = "openssl-probe" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" + +[[package]] +name = "p256" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51f44edd08f51e2ade572f141051021c5af22677e42b7dd28a88155151c33594" +dependencies = [ + "ecdsa 0.14.8", + "elliptic-curve 0.12.3", + "sha2 0.10.7", +] + +[[package]] +name = "p384" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfc8c5bf642dde52bb9e87c0ecd8ca5a76faac2eeed98dedb7c717997e1080aa" +dependencies = [ + "ecdsa 0.14.8", + "elliptic-curve 0.12.3", + "sha2 0.10.7", +] + +[[package]] +name = "pallet-aura" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "frame-support", + "frame-system", + "pallet-timestamp", + "parity-scale-codec", + "scale-info", + "sp-application-crypto", + "sp-consensus-aura", + "sp-runtime", + "sp-std 8.0.0", +] + +[[package]] +name = "pallet-authorship" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "frame-support", + "frame-system", + "impl-trait-for-tuples", + "parity-scale-codec", + "scale-info", + "sp-runtime", + "sp-std 8.0.0", +] + +[[package]] +name = "pallet-balances" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-runtime", + "sp-std 8.0.0", +] + +[[package]] +name = "pallet-grandpa" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "pallet-authorship", + "pallet-session", + "parity-scale-codec", + "scale-info", + "sp-application-crypto", + "sp-consensus-grandpa", + "sp-core", + "sp-io", + "sp-runtime", + "sp-session", + "sp-staking", + "sp-std 8.0.0", +] + +[[package]] +name = "pallet-nicks" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-io", + "sp-runtime", + "sp-std 8.0.0", +] + +[[package]] +name = "pallet-session" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "frame-support", + "frame-system", + "impl-trait-for-tuples", + "log", + "pallet-timestamp", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", + "sp-session", + "sp-staking", + "sp-std 8.0.0", + "sp-trie", +] + +[[package]] +name = "pallet-sudo" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-io", + "sp-runtime", + "sp-std 8.0.0", +] + +[[package]] +name = "pallet-template" +version = "4.0.0-dev" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std 2.0.1", +] + +[[package]] +name = "pallet-timestamp" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-inherents", + "sp-io", + "sp-runtime", + "sp-std 8.0.0", + "sp-timestamp", +] + +[[package]] +name = "pallet-transaction-payment" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "serde", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std 8.0.0", +] + +[[package]] +name = "pallet-transaction-payment-rpc" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "jsonrpsee", + "pallet-transaction-payment-rpc-runtime-api", + "parity-scale-codec", + "sp-api", + "sp-blockchain", + "sp-core", + "sp-rpc", + "sp-runtime", + "sp-weights", +] + +[[package]] +name = "pallet-transaction-payment-rpc-runtime-api" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "pallet-transaction-payment", + "parity-scale-codec", + "sp-api", + "sp-runtime", + "sp-weights", +] + +[[package]] +name = "parity-db" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78f19d20a0d2cc52327a88d131fa1c4ea81ea4a04714aedcfeca2dd410049cf8" +dependencies = [ + "blake2", + "crc32fast", + "fs2", + "hex", + "libc", + "log", + "lz4", + "memmap2", + "parking_lot 0.12.1", + "rand 0.8.5", + "siphasher", + "snap", +] + +[[package]] +name = "parity-scale-codec" +version = "3.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dec8a8073036902368c2cdc0387e85ff9a37054d7e7c98e592145e0c92cd4fb" +dependencies = [ + "arrayvec 0.7.4", + "bitvec", + "byte-slice-cast", + "bytes", + "impl-trait-for-tuples", + "parity-scale-codec-derive", + "serde", +] + +[[package]] +name = "parity-scale-codec-derive" +version = "3.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "312270ee71e1cd70289dacf597cab7b207aa107d2f28191c2ae45b2ece18a260" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "parity-send-wrapper" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa9777aa91b8ad9dd5aaa04a9b6bcb02c7f1deb952fca5a66034d5e63afc5c6f" + +[[package]] +name = "parity-wasm" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1ad0aff30c1da14b1254fcb2af73e1fa9a28670e584a626f53a369d0e157304" + +[[package]] +name = "parking" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14f2252c834a40ed9bb5422029649578e63aa341ac401f74e719dd1afda8394e" + +[[package]] +name = "parking_lot" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" +dependencies = [ + "instant", + "lock_api", + "parking_lot_core 0.8.6", +] + +[[package]] +name = "parking_lot" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +dependencies = [ + "lock_api", + "parking_lot_core 0.9.8", +] + +[[package]] +name = "parking_lot_core" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc" +dependencies = [ + "cfg-if", + "instant", + "libc", + "redox_syscall 0.2.16", + "smallvec", + "winapi", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall 0.3.5", + "smallvec", + "windows-targets 0.48.5", +] + +[[package]] +name = "partial_sort" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7924d1d0ad836f665c9065e26d016c673ece3993f30d340068b16f282afc1156" + +[[package]] +name = "paste" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" + +[[package]] +name = "pbkdf2" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d95f5254224e617595d2cc3cc73ff0a5eaf2637519e25f03388154e9378b6ffa" +dependencies = [ + "crypto-mac 0.11.1", +] + +[[package]] +name = "pbkdf2" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "peeking_take_while" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" + +[[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]] +name = "pem-rfc7468" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d159833a9105500e0398934e205e0773f0b27529557134ecfc51c27646adac" +dependencies = [ + "base64ct", +] + +[[package]] +name = "percent-encoding" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94" + +[[package]] +name = "pest" +version = "2.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7a4d085fd991ac8d5b05a147b437791b4260b76326baf0fc60cf7c9c27ecd33" +dependencies = [ + "memchr", + "thiserror", + "ucd-trie", +] + +[[package]] +name = "pest_derive" +version = "2.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2bee7be22ce7918f641a33f08e3f43388c7656772244e2bbb2477f44cc9021a" +dependencies = [ + "pest", + "pest_generator", +] + +[[package]] +name = "pest_generator" +version = "2.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1511785c5e98d79a05e8a6bc34b4ac2168a0e3e92161862030ad84daa223141" +dependencies = [ + "pest", + "pest_meta", + "proc-macro2", + "quote", + "syn 2.0.31", +] + +[[package]] +name = "pest_meta" +version = "2.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b42f0394d3123e33353ca5e1e89092e533d2cc490389f2bd6131c43c634ebc5f" +dependencies = [ + "once_cell", + "pest", + "sha2 0.10.7", +] + +[[package]] +name = "petgraph" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" +dependencies = [ + "fixedbitset", + "indexmap 2.0.0", +] + +[[package]] +name = "pin-project" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fda4ed1c6c173e3fc7a83629421152e01d7b1f9b7f65fb301e490e8cfc656422" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.31", +] + +[[package]] +name = "pin-project-lite" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "257b64915a082f7811703966789728173279bdebb956b143dbcd23f6f970a777" + +[[package]] +name = "pin-project-lite" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[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.8", + "spki 0.7.2", +] + +[[package]] +name = "pkg-config" +version = "0.3.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" + +[[package]] +name = "platforms" +version = "3.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4503fa043bf02cee09a9582e9554b4c6403b2ef55e4612e96561d294419429f8" + +[[package]] +name = "polling" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" +dependencies = [ + "autocfg", + "bitflags 1.3.2", + "cfg-if", + "concurrent-queue", + "libc", + "log", + "pin-project-lite 0.2.13", + "windows-sys 0.48.0", +] + +[[package]] +name = "poly1305" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "048aeb476be11a4b6ca432ca569e375810de9294ae78f4774e78ea98a9246ede" +dependencies = [ + "cpufeatures", + "opaque-debug 0.3.0", + "universal-hash 0.4.1", +] + +[[package]] +name = "polyval" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8419d2b623c7c0896ff2d5d96e2cb4ede590fed28fcc34934f4c33c036e620a1" +dependencies = [ + "cfg-if", + "cpufeatures", + "opaque-debug 0.3.0", + "universal-hash 0.4.1", +] + +[[package]] +name = "polyval" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d52cff9d1d4dee5fe6d03729099f4a310a41179e0a10dbf542039873f2e826fb" +dependencies = [ + "cfg-if", + "cpufeatures", + "opaque-debug 0.3.0", + "universal-hash 0.5.1", +] + +[[package]] +name = "portable-atomic" +version = "1.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31114a898e107c51bb1609ffaf55a0e011cf6a4d7f1170d0015a165082c0338b" + +[[package]] +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + +[[package]] +name = "predicates" +version = "2.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59230a63c37f3e18569bdb90e4a89cbf5bf8b06fea0b84e65ea10cc4df47addd" +dependencies = [ + "difflib", + "float-cmp", + "itertools", + "normalize-line-endings", + "predicates-core", + "regex", +] + +[[package]] +name = "predicates-core" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b794032607612e7abeb4db69adb4e33590fa6cf1149e95fd7cb00e634b92f174" + +[[package]] +name = "predicates-tree" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "368ba315fb8c5052ab692e68a0eefec6ec57b23a36959c14496f0b0df2c0cecf" +dependencies = [ + "predicates-core", + "termtree", +] + +[[package]] +name = "prettyplease" +version = "0.1.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c8646e95016a7a6c4adea95bafa8a16baab64b583356217f2c85db4a39d9a86" +dependencies = [ + "proc-macro2", + "syn 1.0.109", +] + +[[package]] +name = "prettyplease" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8832c0f9be7e3cae60727e6256cfd2cd3c3e2b6cd5dad4190ecb2fd658c9030b" +dependencies = [ + "proc-macro2", + "syn 2.0.31", +] + +[[package]] +name = "primitive-types" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f3486ccba82358b11a77516035647c34ba167dfa53312630de83b12bd4f3d66" +dependencies = [ + "fixed-hash", + "impl-codec", + "impl-serde", + "scale-info", + "uint", +] + +[[package]] +name = "proc-macro-crate" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e17d47ce914bf4de440332250b0edd23ce48c005f59fab39d3335866b114f11a" +dependencies = [ + "thiserror", + "toml 0.5.11", +] + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn 1.0.109", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "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-warning" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d1eaa7fa0aa1929ffdf7eeb6eac234dde6268914a14ad44d23521ab6a9b258e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.31", +] + +[[package]] +name = "proc-macro2" +version = "1.0.66" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "prometheus" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "449811d15fbdf5ceb5c1144416066429cf82316e2ec8ce0c1f6f8a02e7bbcf8c" +dependencies = [ + "cfg-if", + "fnv", + "lazy_static", + "memchr", + "parking_lot 0.12.1", + "thiserror", +] + +[[package]] +name = "prometheus-client" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d6fa99d535dd930d1249e6c79cb3c2915f9172a540fe2b02a4c8f9ca954721e" +dependencies = [ + "dtoa", + "itoa", + "parking_lot 0.12.1", + "prometheus-client-derive-encode", +] + +[[package]] +name = "prometheus-client-derive-encode" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "440f724eba9f6996b75d63681b0a92b06947f1457076d503a4d2e2c8f56442b8" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.31", +] + +[[package]] +name = "prost" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b82eaa1d779e9a4bc1c3217db8ffbeabaae1dca241bf70183242128d48681cd" +dependencies = [ + "bytes", + "prost-derive", +] + +[[package]] +name = "prost-build" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "119533552c9a7ffacc21e099c24a0ac8bb19c2a2a3f363de84cd9b844feab270" +dependencies = [ + "bytes", + "heck", + "itertools", + "lazy_static", + "log", + "multimap", + "petgraph", + "prettyplease 0.1.25", + "prost", + "prost-types", + "regex", + "syn 1.0.109", + "tempfile", + "which", +] + +[[package]] +name = "prost-derive" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5d2d8d10f3c6ded6da8b05b5fb3b8a5082514344d56c9f871412d29b4e075b4" +dependencies = [ + "anyhow", + "itertools", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "prost-types" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "213622a1460818959ac1181aaeb2dc9c7f63df720db7d788b3e24eacd1983e13" +dependencies = [ + "prost", +] + +[[package]] +name = "psm" +version = "0.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5787f7cda34e3033a72192c018bc5883100330f362ef279a8cbccfce8bb4e874" +dependencies = [ + "cc", +] + +[[package]] +name = "quick-error" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" + +[[package]] +name = "quick-protobuf" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d6da84cc204722a989e01ba2f6e1e276e190f22263d0cb6ce8526fcdb0d2e1f" +dependencies = [ + "byteorder", +] + +[[package]] +name = "quick-protobuf-codec" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1693116345026436eb2f10b677806169c1a1260c1c60eaaffe3fb5a29ae23d8b" +dependencies = [ + "asynchronous-codec", + "bytes", + "quick-protobuf", + "thiserror", + "unsigned-varint", +] + +[[package]] +name = "quicksink" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77de3c815e5a160b1539c6592796801df2043ae35e123b46d73380cfa57af858" +dependencies = [ + "futures-core", + "futures-sink", + "pin-project-lite 0.1.12", +] + +[[package]] +name = "quinn-proto" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31999cfc7927c4e212e60fd50934ab40e8e8bfd2d493d6095d2d306bc0764d9" +dependencies = [ + "bytes", + "rand 0.8.5", + "ring", + "rustc-hash", + "rustls 0.20.9", + "slab", + "thiserror", + "tinyvec", + "tracing", + "webpki 0.22.1", +] + +[[package]] +name = "quote" +version = "1.0.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" +dependencies = [ + "proc-macro2", +] + +[[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" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "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]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "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.10", +] + +[[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_pcg" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59cad018caf63deb318e5a4586d99a24424a364f40f1e5778c29aca23f4fc73e" +dependencies = [ + "rand_core 0.6.4", +] + +[[package]] +name = "rawpointer" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" + +[[package]] +name = "rayon" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d" +dependencies = [ + "crossbeam-channel", + "crossbeam-deque", + "crossbeam-utils", + "num_cpus", +] + +[[package]] +name = "rcgen" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6413f3de1edee53342e6138e75b56d32e7bc6e332b3bd62d497b1929d4cfbcdd" +dependencies = [ + "pem", + "ring", + "time 0.3.28", + "x509-parser 0.13.2", + "yasna", +] + +[[package]] +name = "rcgen" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffbe84efe2f38dea12e9bfc1f65377fdf03e53a18cb3b995faedf7934c7e785b" +dependencies = [ + "pem", + "ring", + "time 0.3.28", + "yasna", +] + +[[package]] +name = "redox_syscall" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "redox_syscall" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "redox_users" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" +dependencies = [ + "getrandom 0.2.10", + "redox_syscall 0.2.16", + "thiserror", +] + +[[package]] +name = "ref-cast" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acde58d073e9c79da00f2b5b84eed919c8326832648a5b109b3fce1bb1175280" +dependencies = [ + "ref-cast-impl", +] + +[[package]] +name = "ref-cast-impl" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f7473c2cfcf90008193dd0e3e16599455cb601a9fce322b5bb55de799664925" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.31", +] + +[[package]] +name = "regalloc2" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80535183cae11b149d618fbd3c37e38d7cda589d82d7769e196ca9a9042d7621" +dependencies = [ + "fxhash", + "log", + "slice-group-by", + "smallvec", +] + +[[package]] +name = "regex" +version = "1.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "697061221ea1b4a94a624f67d0ae2bfe4e22b8a17b6a192afb11046542cc8c47" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata 0.3.8", + "regex-syntax 0.7.5", +] + +[[package]] +name = "regex-automata" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +dependencies = [ + "regex-syntax 0.6.29", +] + +[[package]] +name = "regex-automata" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2f401f4955220693b56f8ec66ee9c78abffd8d1c4f23dc41a23839eb88f0795" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax 0.7.5", +] + +[[package]] +name = "regex-syntax" +version = "0.6.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" + +[[package]] +name = "regex-syntax" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da" + +[[package]] +name = "resolv-conf" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52e44394d2086d010551b14b53b1f24e31647570cd1deb0379e2c21b329aba00" +dependencies = [ + "hostname", + "quick-error", +] + +[[package]] +name = "rfc6979" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7743f17af12fa0b03b803ba12cd6a8d9483a587e89c69445e3909655c0b9fabb" +dependencies = [ + "crypto-bigint 0.4.9", + "hmac 0.12.1", + "zeroize", +] + +[[package]] +name = "rfc6979" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" +dependencies = [ + "hmac 0.12.1", + "subtle", +] + +[[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", + "untrusted", + "web-sys", + "winapi", +] + +[[package]] +name = "rocksdb" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb6f170a4041d50a0ce04b0d2e14916d6ca863ea2e422689a5b694395d299ffe" +dependencies = [ + "libc", + "librocksdb-sys", +] + +[[package]] +name = "rpassword" +version = "7.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6678cf63ab3491898c0d021b493c94c9b221d91295294a2a5746eacbe5928322" +dependencies = [ + "libc", + "rtoolbox", + "winapi", +] + +[[package]] +name = "rtcp" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1919efd6d4a6a85d13388f9487549bb8e359f17198cc03ffd72f79b553873691" +dependencies = [ + "bytes", + "thiserror", + "webrtc-util", +] + +[[package]] +name = "rtnetlink" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "322c53fd76a18698f1c27381d58091de3a043d356aa5bd0d510608b565f469a0" +dependencies = [ + "futures", + "log", + "netlink-packet-route", + "netlink-proto", + "nix", + "thiserror", + "tokio", +] + +[[package]] +name = "rtoolbox" +version = "0.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "034e22c514f5c0cb8a10ff341b9b048b5ceb21591f31c8f44c43b960f9b3524a" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "rtp" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2a095411ff00eed7b12e4c6a118ba984d113e1079582570d56a5ee723f11f80" +dependencies = [ + "async-trait", + "bytes", + "rand 0.8.5", + "serde", + "thiserror", + "webrtc-util", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" + +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + +[[package]] +name = "rustc-hex" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6" + +[[package]] +name = "rustc_version" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver 1.0.18", +] + +[[package]] +name = "rusticata-macros" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "faf0c4a6ece9950b9abdb62b1cfcf2a68b3b67a10ba445b3bb85be2a293d0632" +dependencies = [ + "nom", +] + +[[package]] +name = "rustix" +version = "0.36.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c37f1bd5ef1b5422177b7646cba67430579cfe2ace80f284fee876bca52ad941" +dependencies = [ + "bitflags 1.3.2", + "errno", + "io-lifetimes", + "libc", + "linux-raw-sys 0.1.4", + "windows-sys 0.45.0", +] + +[[package]] +name = "rustix" +version = "0.37.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d69718bf81c6127a49dc64e44a742e8bb9213c0ff8869a22c308f84c1d4ab06" +dependencies = [ + "bitflags 1.3.2", + "errno", + "io-lifetimes", + "libc", + "linux-raw-sys 0.3.8", + "windows-sys 0.48.0", +] + +[[package]] +name = "rustix" +version = "0.38.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0c3dde1fc030af041adc40e79c0e7fbcf431dd24870053d187d7c66e4b87453" +dependencies = [ + "bitflags 2.4.0", + "errno", + "libc", + "linux-raw-sys 0.4.5", + "windows-sys 0.48.0", +] + +[[package]] +name = "rustls" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35edb675feee39aec9c99fa5ff985081995a06d594114ae14cbe797ad7b7a6d7" +dependencies = [ + "base64 0.13.1", + "log", + "ring", + "sct 0.6.1", + "webpki 0.21.4", +] + +[[package]] +name = "rustls" +version = "0.20.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b80e3dec595989ea8510028f30c408a4630db12c9cbb8de34203b89d6577e99" +dependencies = [ + "log", + "ring", + "sct 0.7.0", + "webpki 0.22.1", +] + +[[package]] +name = "rustls" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd8d6c9f025a446bc4d18ad9632e69aec8f287aa84499ee335599fabd20c3fd8" +dependencies = [ + "log", + "ring", + "rustls-webpki 0.101.4", + "sct 0.7.0", +] + +[[package]] +name = "rustls-native-certs" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00" +dependencies = [ + "openssl-probe", + "rustls-pemfile", + "schannel", + "security-framework", +] + +[[package]] +name = "rustls-pemfile" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d3987094b1d07b653b7dfdc3f70ce9a1da9c51ac18c1b06b662e4f9a0e9f4b2" +dependencies = [ + "base64 0.21.3", +] + +[[package]] +name = "rustls-webpki" +version = "0.100.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e98ff011474fa39949b7e5c0428f9b4937eda7da7848bbb947786b7be0b27dab" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "rustls-webpki" +version = "0.101.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d93931baf2d282fff8d3a532bbfd7653f734643161b87e3e01e59a04439bf0d" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "rustversion" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" + +[[package]] +name = "rw-stream-sink" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26338f5e09bb721b85b135ea05af7767c90b52f6de4f087d4f4a3a9d64e7dc04" +dependencies = [ + "futures", + "pin-project", + "static_assertions", +] + +[[package]] +name = "ryu" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" + +[[package]] +name = "safe_arch" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f398075ce1e6a179b46f51bd88d0598b92b00d3551f1a2d4ac49e771b56ac354" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "sc-allocator" +version = "4.1.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "log", + "sp-core", + "sp-wasm-interface", + "thiserror", +] + +[[package]] +name = "sc-basic-authorship" +version = "0.10.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "futures", + "futures-timer", + "log", + "parity-scale-codec", + "sc-block-builder", + "sc-client-api", + "sc-proposer-metrics", + "sc-telemetry", + "sc-transaction-pool-api", + "sp-api", + "sp-blockchain", + "sp-consensus", + "sp-core", + "sp-inherents", + "sp-runtime", + "substrate-prometheus-endpoint", +] + +[[package]] +name = "sc-block-builder" +version = "0.10.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "parity-scale-codec", + "sc-client-api", + "sp-api", + "sp-block-builder", + "sp-blockchain", + "sp-core", + "sp-inherents", + "sp-runtime", +] + +[[package]] +name = "sc-chain-spec" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "memmap2", + "sc-chain-spec-derive", + "sc-client-api", + "sc-executor", + "sc-network", + "sc-telemetry", + "serde", + "serde_json", + "sp-blockchain", + "sp-core", + "sp-runtime", + "sp-state-machine", +] + +[[package]] +name = "sc-chain-spec-derive" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 2.0.31", +] + +[[package]] +name = "sc-cli" +version = "0.10.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "array-bytes", + "chrono", + "clap", + "fdlimit", + "futures", + "libp2p-identity", + "log", + "names", + "parity-scale-codec", + "rand 0.8.5", + "regex", + "rpassword", + "sc-client-api", + "sc-client-db", + "sc-keystore", + "sc-network", + "sc-service", + "sc-telemetry", + "sc-tracing", + "sc-utils", + "serde", + "serde_json", + "sp-blockchain", + "sp-core", + "sp-keyring", + "sp-keystore", + "sp-panic-handler", + "sp-runtime", + "sp-version", + "thiserror", + "tiny-bip39", + "tokio", +] + +[[package]] +name = "sc-client-api" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "fnv", + "futures", + "log", + "parity-scale-codec", + "parking_lot 0.12.1", + "sc-executor", + "sc-transaction-pool-api", + "sc-utils", + "sp-api", + "sp-blockchain", + "sp-consensus", + "sp-core", + "sp-database", + "sp-externalities", + "sp-runtime", + "sp-state-machine", + "sp-statement-store", + "sp-storage", + "substrate-prometheus-endpoint", +] + +[[package]] +name = "sc-client-db" +version = "0.10.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "hash-db", + "kvdb", + "kvdb-memorydb", + "kvdb-rocksdb", + "linked-hash-map", + "log", + "parity-db", + "parity-scale-codec", + "parking_lot 0.12.1", + "sc-client-api", + "sc-state-db", + "schnellru", + "sp-arithmetic", + "sp-blockchain", + "sp-core", + "sp-database", + "sp-runtime", + "sp-state-machine", + "sp-trie", +] + +[[package]] +name = "sc-consensus" +version = "0.10.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "async-trait", + "futures", + "futures-timer", + "libp2p-identity", + "log", + "mockall", + "parking_lot 0.12.1", + "sc-client-api", + "sc-utils", + "serde", + "sp-api", + "sp-blockchain", + "sp-consensus", + "sp-core", + "sp-runtime", + "sp-state-machine", + "substrate-prometheus-endpoint", + "thiserror", +] + +[[package]] +name = "sc-consensus-aura" +version = "0.10.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "async-trait", + "futures", + "log", + "parity-scale-codec", + "sc-block-builder", + "sc-client-api", + "sc-consensus", + "sc-consensus-slots", + "sc-telemetry", + "sp-api", + "sp-application-crypto", + "sp-block-builder", + "sp-blockchain", + "sp-consensus", + "sp-consensus-aura", + "sp-consensus-slots", + "sp-core", + "sp-inherents", + "sp-keystore", + "sp-runtime", + "substrate-prometheus-endpoint", + "thiserror", +] + +[[package]] +name = "sc-consensus-grandpa" +version = "0.10.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "ahash 0.8.3", + "array-bytes", + "async-trait", + "dyn-clone", + "finality-grandpa", + "fork-tree", + "futures", + "futures-timer", + "log", + "parity-scale-codec", + "parking_lot 0.12.1", + "rand 0.8.5", + "sc-block-builder", + "sc-chain-spec", + "sc-client-api", + "sc-consensus", + "sc-network", + "sc-network-common", + "sc-network-gossip", + "sc-telemetry", + "sc-transaction-pool-api", + "sc-utils", + "serde_json", + "sp-api", + "sp-application-crypto", + "sp-arithmetic", + "sp-blockchain", + "sp-consensus", + "sp-consensus-grandpa", + "sp-core", + "sp-keystore", + "sp-runtime", + "substrate-prometheus-endpoint", + "thiserror", +] + +[[package]] +name = "sc-consensus-slots" +version = "0.10.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "async-trait", + "futures", + "futures-timer", + "log", + "parity-scale-codec", + "sc-client-api", + "sc-consensus", + "sc-telemetry", + "sp-arithmetic", + "sp-blockchain", + "sp-consensus", + "sp-consensus-slots", + "sp-core", + "sp-inherents", + "sp-runtime", + "sp-state-machine", +] + +[[package]] +name = "sc-executor" +version = "0.10.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "parity-scale-codec", + "parking_lot 0.12.1", + "sc-executor-common", + "sc-executor-wasmtime", + "schnellru", + "sp-api", + "sp-core", + "sp-externalities", + "sp-io", + "sp-panic-handler", + "sp-runtime-interface", + "sp-trie", + "sp-version", + "sp-wasm-interface", + "tracing", +] + +[[package]] +name = "sc-executor-common" +version = "0.10.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "sc-allocator", + "sp-maybe-compressed-blob", + "sp-wasm-interface", + "thiserror", + "wasm-instrument", +] + +[[package]] +name = "sc-executor-wasmtime" +version = "0.10.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "anyhow", + "cfg-if", + "libc", + "log", + "rustix 0.36.15", + "sc-allocator", + "sc-executor-common", + "sp-runtime-interface", + "sp-wasm-interface", + "wasmtime", +] + +[[package]] +name = "sc-informant" +version = "0.10.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "ansi_term", + "futures", + "futures-timer", + "log", + "sc-client-api", + "sc-network", + "sc-network-common", + "sp-blockchain", + "sp-runtime", +] + +[[package]] +name = "sc-keystore" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "array-bytes", + "parking_lot 0.12.1", + "serde_json", + "sp-application-crypto", + "sp-core", + "sp-keystore", + "thiserror", +] + +[[package]] +name = "sc-network" +version = "0.10.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "array-bytes", + "async-channel", + "async-trait", + "asynchronous-codec", + "bytes", + "either", + "fnv", + "futures", + "futures-timer", + "ip_network", + "libp2p", + "linked_hash_set", + "log", + "mockall", + "parity-scale-codec", + "parking_lot 0.12.1", + "partial_sort", + "pin-project", + "rand 0.8.5", + "sc-client-api", + "sc-network-common", + "sc-utils", + "serde", + "serde_json", + "smallvec", + "sp-arithmetic", + "sp-blockchain", + "sp-core", + "sp-runtime", + "substrate-prometheus-endpoint", + "thiserror", + "unsigned-varint", + "wasm-timer", + "zeroize", +] + +[[package]] +name = "sc-network-bitswap" +version = "0.10.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "async-channel", + "cid", + "futures", + "libp2p-identity", + "log", + "prost", + "prost-build", + "sc-client-api", + "sc-network", + "sp-blockchain", + "sp-runtime", + "thiserror", + "unsigned-varint", +] + +[[package]] +name = "sc-network-common" +version = "0.10.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "async-trait", + "bitflags 1.3.2", + "futures", + "libp2p-identity", + "parity-scale-codec", + "prost-build", + "sc-consensus", + "sp-consensus", + "sp-consensus-grandpa", + "sp-runtime", +] + +[[package]] +name = "sc-network-gossip" +version = "0.10.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "ahash 0.8.3", + "futures", + "futures-timer", + "libp2p", + "log", + "sc-network", + "sc-network-common", + "schnellru", + "sp-runtime", + "substrate-prometheus-endpoint", + "tracing", +] + +[[package]] +name = "sc-network-light" +version = "0.10.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "array-bytes", + "async-channel", + "futures", + "libp2p-identity", + "log", + "parity-scale-codec", + "prost", + "prost-build", + "sc-client-api", + "sc-network", + "sp-blockchain", + "sp-core", + "sp-runtime", + "thiserror", +] + +[[package]] +name = "sc-network-sync" +version = "0.10.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "array-bytes", + "async-channel", + "async-trait", + "fork-tree", + "futures", + "futures-timer", + "libp2p", + "log", + "mockall", + "parity-scale-codec", + "prost", + "prost-build", + "sc-client-api", + "sc-consensus", + "sc-network", + "sc-network-common", + "sc-utils", + "schnellru", + "smallvec", + "sp-arithmetic", + "sp-blockchain", + "sp-consensus", + "sp-consensus-grandpa", + "sp-core", + "sp-runtime", + "substrate-prometheus-endpoint", + "thiserror", +] + +[[package]] +name = "sc-network-transactions" +version = "0.10.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "array-bytes", + "futures", + "libp2p", + "log", + "parity-scale-codec", + "sc-network", + "sc-network-common", + "sc-utils", + "sp-consensus", + "sp-runtime", + "substrate-prometheus-endpoint", +] + +[[package]] +name = "sc-offchain" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "array-bytes", + "bytes", + "fnv", + "futures", + "futures-timer", + "hyper", + "hyper-rustls", + "libp2p", + "log", + "num_cpus", + "once_cell", + "parity-scale-codec", + "parking_lot 0.12.1", + "rand 0.8.5", + "sc-client-api", + "sc-network", + "sc-network-common", + "sc-transaction-pool-api", + "sc-utils", + "sp-api", + "sp-core", + "sp-externalities", + "sp-keystore", + "sp-offchain", + "sp-runtime", + "threadpool", + "tracing", +] + +[[package]] +name = "sc-proposer-metrics" +version = "0.10.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "log", + "substrate-prometheus-endpoint", +] + +[[package]] +name = "sc-rpc" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "futures", + "jsonrpsee", + "log", + "parity-scale-codec", + "parking_lot 0.12.1", + "sc-block-builder", + "sc-chain-spec", + "sc-client-api", + "sc-rpc-api", + "sc-tracing", + "sc-transaction-pool-api", + "sc-utils", + "serde_json", + "sp-api", + "sp-blockchain", + "sp-core", + "sp-keystore", + "sp-offchain", + "sp-rpc", + "sp-runtime", + "sp-session", + "sp-statement-store", + "sp-version", + "tokio", +] + +[[package]] +name = "sc-rpc-api" +version = "0.10.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "jsonrpsee", + "parity-scale-codec", + "sc-chain-spec", + "sc-transaction-pool-api", + "scale-info", + "serde", + "serde_json", + "sp-core", + "sp-rpc", + "sp-runtime", + "sp-version", + "thiserror", +] + +[[package]] +name = "sc-rpc-server" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "http", + "jsonrpsee", + "log", + "serde_json", + "substrate-prometheus-endpoint", + "tokio", + "tower", + "tower-http", +] + +[[package]] +name = "sc-rpc-spec-v2" +version = "0.10.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "array-bytes", + "futures", + "futures-util", + "hex", + "jsonrpsee", + "log", + "parity-scale-codec", + "parking_lot 0.12.1", + "sc-chain-spec", + "sc-client-api", + "sc-transaction-pool-api", + "serde", + "sp-api", + "sp-blockchain", + "sp-core", + "sp-runtime", + "sp-version", + "thiserror", + "tokio-stream", +] + +[[package]] +name = "sc-service" +version = "0.10.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "async-trait", + "directories", + "exit-future", + "futures", + "futures-timer", + "jsonrpsee", + "log", + "parity-scale-codec", + "parking_lot 0.12.1", + "pin-project", + "rand 0.8.5", + "sc-block-builder", + "sc-chain-spec", + "sc-client-api", + "sc-client-db", + "sc-consensus", + "sc-executor", + "sc-informant", + "sc-keystore", + "sc-network", + "sc-network-bitswap", + "sc-network-common", + "sc-network-light", + "sc-network-sync", + "sc-network-transactions", + "sc-rpc", + "sc-rpc-server", + "sc-rpc-spec-v2", + "sc-sysinfo", + "sc-telemetry", + "sc-tracing", + "sc-transaction-pool", + "sc-transaction-pool-api", + "sc-utils", + "serde", + "serde_json", + "sp-api", + "sp-blockchain", + "sp-consensus", + "sp-core", + "sp-externalities", + "sp-keystore", + "sp-runtime", + "sp-session", + "sp-state-machine", + "sp-storage", + "sp-transaction-pool", + "sp-transaction-storage-proof", + "sp-trie", + "sp-version", + "static_init", + "substrate-prometheus-endpoint", + "tempfile", + "thiserror", + "tokio", + "tracing", + "tracing-futures", +] + +[[package]] +name = "sc-state-db" +version = "0.10.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "log", + "parity-scale-codec", + "parking_lot 0.12.1", + "sp-core", +] + +[[package]] +name = "sc-statement-store" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "log", + "parity-db", + "parking_lot 0.12.1", + "sc-client-api", + "sp-api", + "sp-blockchain", + "sp-core", + "sp-runtime", + "sp-statement-store", + "substrate-prometheus-endpoint", + "tokio", +] + +[[package]] +name = "sc-sysinfo" +version = "6.0.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "futures", + "libc", + "log", + "rand 0.8.5", + "rand_pcg", + "regex", + "sc-telemetry", + "serde", + "serde_json", + "sp-core", + "sp-io", + "sp-std 8.0.0", +] + +[[package]] +name = "sc-telemetry" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "chrono", + "futures", + "libp2p", + "log", + "parking_lot 0.12.1", + "pin-project", + "rand 0.8.5", + "sc-utils", + "serde", + "serde_json", + "thiserror", + "wasm-timer", +] + +[[package]] +name = "sc-tracing" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "ansi_term", + "atty", + "chrono", + "lazy_static", + "libc", + "log", + "parking_lot 0.12.1", + "regex", + "rustc-hash", + "sc-client-api", + "sc-tracing-proc-macro", + "serde", + "sp-api", + "sp-blockchain", + "sp-core", + "sp-rpc", + "sp-runtime", + "sp-tracing", + "thiserror", + "tracing", + "tracing-log", + "tracing-subscriber", +] + +[[package]] +name = "sc-tracing-proc-macro" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 2.0.31", +] + +[[package]] +name = "sc-transaction-pool" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "async-trait", + "futures", + "futures-timer", + "linked-hash-map", + "log", + "parity-scale-codec", + "parking_lot 0.12.1", + "sc-client-api", + "sc-transaction-pool-api", + "sc-utils", + "serde", + "sp-api", + "sp-blockchain", + "sp-core", + "sp-runtime", + "sp-tracing", + "sp-transaction-pool", + "substrate-prometheus-endpoint", + "thiserror", +] + +[[package]] +name = "sc-transaction-pool-api" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "async-trait", + "futures", + "log", + "parity-scale-codec", + "serde", + "sp-blockchain", + "sp-core", + "sp-runtime", + "thiserror", +] + +[[package]] +name = "sc-utils" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "async-channel", + "futures", + "futures-timer", + "lazy_static", + "log", + "parking_lot 0.12.1", + "prometheus", + "sp-arithmetic", +] + +[[package]] +name = "scale-info" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35c0a159d0c45c12b20c5a844feb1fe4bea86e28f17b92a5f0c42193634d3782" +dependencies = [ + "bitvec", + "cfg-if", + "derive_more", + "parity-scale-codec", + "scale-info-derive", + "serde", +] + +[[package]] +name = "scale-info-derive" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "912e55f6d20e0e80d63733872b40e1227c0bce1e1ab81ba67d696339bfd7fd29" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "schannel" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c3733bf4cf7ea0880754e19cb5a462007c4a8c1914bff372ccc95b464f1df88" +dependencies = [ + "windows-sys 0.48.0", +] + +[[package]] +name = "schnellru" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "772575a524feeb803e5b0fcbc6dd9f367e579488197c94c6e4023aad2305774d" +dependencies = [ + "ahash 0.8.3", + "cfg-if", + "hashbrown 0.13.2", +] + +[[package]] +name = "schnorrkel" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "021b403afe70d81eea68f6ea12f6b3c9588e5d536a94c3bf80f15e7faa267862" +dependencies = [ + "arrayref", + "arrayvec 0.5.2", + "curve25519-dalek 2.1.3", + "getrandom 0.1.16", + "merlin", + "rand 0.7.3", + "rand_core 0.5.1", + "sha2 0.8.2", + "subtle", + "zeroize", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "scratch" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3cf7c11c38cb994f3d40e8a8cde3bbd1f72a435e4c49e85d6553d8312306152" + +[[package]] +name = "sct" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b362b83898e0e69f38515b82ee15aa80636befe47c3b6d3d89a911e78fc228ce" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "sct" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "sdp" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d22a5ef407871893fd72b4562ee15e4742269b173959db4b8df6f538c414e13" +dependencies = [ + "rand 0.8.5", + "substring", + "thiserror", + "url", +] + +[[package]] +name = "sec1" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3be24c1842290c45df0a7bf069e0c268a747ad05a192f2fd7dcfdbc1cba40928" +dependencies = [ + "base16ct 0.1.1", + "der 0.6.1", + "generic-array 0.14.7", + "pkcs8 0.9.0", + "subtle", + "zeroize", +] + +[[package]] +name = "sec1" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +dependencies = [ + "base16ct 0.2.0", + "der 0.7.8", + "generic-array 0.14.7", + "pkcs8 0.10.2", + "subtle", + "zeroize", +] + +[[package]] +name = "secp256k1" +version = "0.24.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b1629c9c557ef9b293568b338dddfc8208c98a18c59d722a9d53f859d9c9b62" +dependencies = [ + "secp256k1-sys", +] + +[[package]] +name = "secp256k1-sys" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83080e2c2fc1006e625be82e5d1eb6a43b7fd9578b617fcc55814daf286bba4b" +dependencies = [ + "cc", +] + +[[package]] +name = "secrecy" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bd1c54ea06cfd2f6b63219704de0b9b4f72dcc2b8fdef820be6cd799780e91e" +dependencies = [ + "zeroize", +] + +[[package]] +name = "security-framework" +version = "2.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "semver" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a3186ec9e65071a2095434b1f5bb24838d4e8e130f584c790f6033c79943537" +dependencies = [ + "semver-parser", +] + +[[package]] +name = "semver" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0293b4b29daaf487284529cc2f5675b8e57c61f70167ba415a463651fd6a918" +dependencies = [ + "serde", +] + +[[package]] +name = "semver-parser" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" + +[[package]] +name = "serde" +version = "1.0.188" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf9e0fcba69a370eed61bcf2b728575f726b50b55cba78064753d708ddc7549e" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.188" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4eca7ac642d82aa35b60049a6eccb4be6be75e599bd2e9adb5f875a737654af2" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.31", +] + +[[package]] +name = "serde_json" +version = "1.0.105" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "693151e1ac27563d6dbcec9dee9fbd5da8539b20fa14ad3752b2e6d363ace360" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_spanned" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96426c9936fd7a0124915f9185ea1d20aa9445cc9821142f0a73bc9207a2e186" +dependencies = [ + "serde", +] + +[[package]] +name = "sha-1" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99cd6713db3cf16b6c84e06321e049a9b9f699826e16096d23bbcc44d15d51a6" +dependencies = [ + "block-buffer 0.9.0", + "cfg-if", + "cpufeatures", + "digest 0.9.0", + "opaque-debug 0.3.0", +] + +[[package]] +name = "sha1" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest 0.10.7", +] + +[[package]] +name = "sha2" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a256f46ea78a0c0d9ff00077504903ac881a1dafdc20da66545699e7776b3e69" +dependencies = [ + "block-buffer 0.7.3", + "digest 0.8.1", + "fake-simd", + "opaque-debug 0.2.3", +] + +[[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 0.3.0", +] + +[[package]] +name = "sha2" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "479fb9d862239e610720565ca91403019f2f00410f1864c5aa7479b950a76ed8" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest 0.10.7", +] + +[[package]] +name = "sha3" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" +dependencies = [ + "digest 0.10.7", + "keccak", +] + +[[package]] +name = "sharded-slab" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "shlex" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3" + +[[package]] +name = "signal-hook-registry" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" +dependencies = [ + "libc", +] + +[[package]] +name = "signature" +version = "1.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c" +dependencies = [ + "digest 0.10.7", + "rand_core 0.6.4", +] + +[[package]] +name = "signature" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e1788eed21689f9cf370582dfc467ef36ed9c707f073528ddafa8d83e3b8500" +dependencies = [ + "digest 0.10.7", + "rand_core 0.6.4", +] + +[[package]] +name = "simba" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "061507c94fc6ab4ba1c9a0305018408e312e17c041eb63bef8aa726fa33aceae" +dependencies = [ + "approx", + "num-complex", + "num-traits", + "paste", + "wide", +] + +[[package]] +name = "siphasher" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "slice-group-by" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "826167069c09b99d56f31e9ae5c99049e932a98c9dc2dac47645b08dbbf76ba7" + +[[package]] +name = "smallvec" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62bb4feee49fdd9f707ef802e22365a35de4b7b299de4763d44bfea899442ff9" + +[[package]] +name = "snap" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e9f0ab6ef7eb7353d9119c170a436d1bf248eea575ac42d19d12f4e34130831" + +[[package]] +name = "snow" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c9d1425eb528a21de2755c75af4c9b5d57f50a0d4c3b7f1828a4cd03f8ba155" +dependencies = [ + "aes-gcm 0.9.4", + "blake2", + "chacha20poly1305", + "curve25519-dalek 4.0.0", + "rand_core 0.6.4", + "ring", + "rustc_version", + "sha2 0.10.7", + "subtle", +] + +[[package]] +name = "socket2" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "socket2" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2538b18701741680e0322a2302176d3253a35388e2e62f172f64f4f16605f877" +dependencies = [ + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "soketto" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41d1c5305e39e09653383c2c7244f2f78b3bcae37cf50c64cb4789c9f5096ec2" +dependencies = [ + "base64 0.13.1", + "bytes", + "flate2", + "futures", + "http", + "httparse", + "log", + "rand 0.8.5", + "sha-1", +] + +[[package]] +name = "sp-api" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "hash-db", + "log", + "parity-scale-codec", + "scale-info", + "sp-api-proc-macro", + "sp-core", + "sp-externalities", + "sp-metadata-ir", + "sp-runtime", + "sp-state-machine", + "sp-std 8.0.0", + "sp-trie", + "sp-version", + "thiserror", +] + +[[package]] +name = "sp-api-proc-macro" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "Inflector", + "blake2", + "expander", + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 2.0.31", +] + +[[package]] +name = "sp-application-crypto" +version = "23.0.0" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "parity-scale-codec", + "scale-info", + "serde", + "sp-core", + "sp-io", + "sp-std 8.0.0", +] + +[[package]] +name = "sp-arithmetic" +version = "16.0.0" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "integer-sqrt", + "num-traits", + "parity-scale-codec", + "scale-info", + "serde", + "sp-std 8.0.0", + "static_assertions", +] + +[[package]] +name = "sp-block-builder" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "sp-api", + "sp-inherents", + "sp-runtime", + "sp-std 8.0.0", +] + +[[package]] +name = "sp-blockchain" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "futures", + "log", + "parity-scale-codec", + "parking_lot 0.12.1", + "schnellru", + "sp-api", + "sp-consensus", + "sp-database", + "sp-runtime", + "sp-state-machine", + "thiserror", +] + +[[package]] +name = "sp-consensus" +version = "0.10.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "async-trait", + "futures", + "log", + "sp-core", + "sp-inherents", + "sp-runtime", + "sp-state-machine", + "thiserror", +] + +[[package]] +name = "sp-consensus-aura" +version = "0.10.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "async-trait", + "parity-scale-codec", + "scale-info", + "sp-api", + "sp-application-crypto", + "sp-consensus-slots", + "sp-inherents", + "sp-runtime", + "sp-std 8.0.0", + "sp-timestamp", +] + +[[package]] +name = "sp-consensus-babe" +version = "0.10.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "async-trait", + "parity-scale-codec", + "scale-info", + "serde", + "sp-api", + "sp-application-crypto", + "sp-consensus-slots", + "sp-core", + "sp-inherents", + "sp-runtime", + "sp-std 8.0.0", + "sp-timestamp", +] + +[[package]] +name = "sp-consensus-grandpa" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "finality-grandpa", + "log", + "parity-scale-codec", + "scale-info", + "serde", + "sp-api", + "sp-application-crypto", + "sp-core", + "sp-keystore", + "sp-runtime", + "sp-std 8.0.0", +] + +[[package]] +name = "sp-consensus-slots" +version = "0.10.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "parity-scale-codec", + "scale-info", + "serde", + "sp-std 8.0.0", + "sp-timestamp", +] + +[[package]] +name = "sp-core" +version = "21.0.0" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "array-bytes", + "bitflags 1.3.2", + "blake2", + "bounded-collections", + "bs58", + "dyn-clonable", + "ed25519-zebra", + "futures", + "hash-db", + "hash256-std-hasher", + "impl-serde", + "lazy_static", + "libsecp256k1", + "log", + "merlin", + "parity-scale-codec", + "parking_lot 0.12.1", + "paste", + "primitive-types", + "rand 0.8.5", + "regex", + "scale-info", + "schnorrkel", + "secp256k1", + "secrecy", + "serde", + "sp-core-hashing", + "sp-debug-derive", + "sp-externalities", + "sp-runtime-interface", + "sp-std 8.0.0", + "sp-storage", + "ss58-registry", + "substrate-bip39", + "thiserror", + "tiny-bip39", + "tracing", + "zeroize", +] + +[[package]] +name = "sp-core-hashing" +version = "9.0.0" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "blake2b_simd", + "byteorder", + "digest 0.10.7", + "sha2 0.10.7", + "sha3", + "twox-hash", +] + +[[package]] +name = "sp-core-hashing-proc-macro" +version = "9.0.0" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "quote", + "sp-core-hashing", + "syn 2.0.31", +] + +[[package]] +name = "sp-database" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "kvdb", + "parking_lot 0.12.1", +] + +[[package]] +name = "sp-debug-derive" +version = "8.0.0" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.31", +] + +[[package]] +name = "sp-externalities" +version = "0.19.0" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "environmental", + "parity-scale-codec", + "sp-std 8.0.0", + "sp-storage", +] + +[[package]] +name = "sp-inherents" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "async-trait", + "impl-trait-for-tuples", + "parity-scale-codec", + "scale-info", + "sp-runtime", + "sp-std 8.0.0", + "thiserror", +] + +[[package]] +name = "sp-io" +version = "23.0.0" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "bytes", + "ed25519 1.5.3", + "ed25519-dalek 1.0.1", + "libsecp256k1", + "log", + "parity-scale-codec", + "rustversion", + "secp256k1", + "sp-core", + "sp-externalities", + "sp-keystore", + "sp-runtime-interface", + "sp-state-machine", + "sp-std 8.0.0", + "sp-tracing", + "sp-trie", + "tracing", + "tracing-core", +] + +[[package]] +name = "sp-keyring" +version = "24.0.0" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "lazy_static", + "sp-core", + "sp-runtime", + "strum", +] + +[[package]] +name = "sp-keystore" +version = "0.27.0" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "parity-scale-codec", + "parking_lot 0.12.1", + "sp-core", + "sp-externalities", + "thiserror", +] + +[[package]] +name = "sp-maybe-compressed-blob" +version = "4.1.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "thiserror", + "zstd 0.12.4", +] + +[[package]] +name = "sp-metadata-ir" +version = "0.1.0" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "frame-metadata", + "parity-scale-codec", + "scale-info", + "sp-std 8.0.0", +] + +[[package]] +name = "sp-offchain" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "sp-api", + "sp-core", + "sp-runtime", +] + +[[package]] +name = "sp-panic-handler" +version = "8.0.0" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "backtrace", + "lazy_static", + "regex", +] + +[[package]] +name = "sp-rpc" +version = "6.0.0" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "rustc-hash", + "serde", + "sp-core", +] + +[[package]] +name = "sp-runtime" +version = "24.0.0" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "either", + "hash256-std-hasher", + "impl-trait-for-tuples", + "log", + "parity-scale-codec", + "paste", + "rand 0.8.5", + "scale-info", + "serde", + "sp-application-crypto", + "sp-arithmetic", + "sp-core", + "sp-io", + "sp-std 8.0.0", + "sp-weights", +] + +[[package]] +name = "sp-runtime-interface" +version = "17.0.0" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "bytes", + "impl-trait-for-tuples", + "parity-scale-codec", + "primitive-types", + "sp-externalities", + "sp-runtime-interface-proc-macro", + "sp-std 8.0.0", + "sp-storage", + "sp-tracing", + "sp-wasm-interface", + "static_assertions", +] + +[[package]] +name = "sp-runtime-interface-proc-macro" +version = "11.0.0" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "Inflector", + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 2.0.31", +] + +[[package]] +name = "sp-session" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "parity-scale-codec", + "scale-info", + "sp-api", + "sp-core", + "sp-keystore", + "sp-runtime", + "sp-staking", + "sp-std 8.0.0", +] + +[[package]] +name = "sp-staking" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "impl-trait-for-tuples", + "parity-scale-codec", + "scale-info", + "serde", + "sp-core", + "sp-runtime", + "sp-std 8.0.0", +] + +[[package]] +name = "sp-state-machine" +version = "0.28.0" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "hash-db", + "log", + "parity-scale-codec", + "parking_lot 0.12.1", + "rand 0.8.5", + "smallvec", + "sp-core", + "sp-externalities", + "sp-panic-handler", + "sp-std 8.0.0", + "sp-trie", + "thiserror", + "tracing", + "trie-db", +] + +[[package]] +name = "sp-statement-store" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "parity-scale-codec", + "scale-info", + "sp-api", + "sp-application-crypto", + "sp-core", + "sp-externalities", + "sp-runtime", + "sp-runtime-interface", + "sp-std 8.0.0", + "thiserror", +] + +[[package]] +name = "sp-std" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2585fb8f5f4fde53c2f9ccebac4517da4dc435373a8fcaf5db7f54b798da66c2" + +[[package]] +name = "sp-std" +version = "8.0.0" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" + +[[package]] +name = "sp-storage" +version = "13.0.0" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "impl-serde", + "parity-scale-codec", + "ref-cast", + "serde", + "sp-debug-derive", + "sp-std 8.0.0", +] + +[[package]] +name = "sp-timestamp" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "async-trait", + "parity-scale-codec", + "sp-inherents", + "sp-runtime", + "sp-std 8.0.0", + "thiserror", +] + +[[package]] +name = "sp-tracing" +version = "10.0.0" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "parity-scale-codec", + "sp-std 8.0.0", + "tracing", + "tracing-core", + "tracing-subscriber", +] + +[[package]] +name = "sp-transaction-pool" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "sp-api", + "sp-runtime", +] + +[[package]] +name = "sp-transaction-storage-proof" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "async-trait", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-inherents", + "sp-runtime", + "sp-std 8.0.0", + "sp-trie", +] + +[[package]] +name = "sp-trie" +version = "22.0.0" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "ahash 0.8.3", + "hash-db", + "hashbrown 0.13.2", + "lazy_static", + "memory-db", + "nohash-hasher", + "parity-scale-codec", + "parking_lot 0.12.1", + "scale-info", + "schnellru", + "sp-core", + "sp-std 8.0.0", + "thiserror", + "tracing", + "trie-db", + "trie-root", +] + +[[package]] +name = "sp-version" +version = "22.0.0" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "impl-serde", + "parity-scale-codec", + "parity-wasm", + "scale-info", + "serde", + "sp-core-hashing-proc-macro", + "sp-runtime", + "sp-std 8.0.0", + "sp-version-proc-macro", + "thiserror", +] + +[[package]] +name = "sp-version-proc-macro" +version = "8.0.0" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "parity-scale-codec", + "proc-macro2", + "quote", + "syn 2.0.31", +] + +[[package]] +name = "sp-wasm-interface" +version = "14.0.0" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "anyhow", + "impl-trait-for-tuples", + "log", + "parity-scale-codec", + "sp-std 8.0.0", + "wasmtime", +] + +[[package]] +name = "sp-weights" +version = "20.0.0" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "parity-scale-codec", + "scale-info", + "serde", + "smallvec", + "sp-arithmetic", + "sp-core", + "sp-debug-derive", + "sp-std 8.0.0", +] + +[[package]] +name = "spin" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" + +[[package]] +name = "spinners" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08615eea740067d9899969bc2891c68a19c315cb1f66640af9a9ecb91b13bcab" +dependencies = [ + "lazy_static", + "maplit", + "strum", +] + +[[package]] +name = "spki" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67cf02bbac7a337dc36e4f5a693db6c21e7863f45070f7064577eb4367a3212b" +dependencies = [ + "base64ct", + "der 0.6.1", +] + +[[package]] +name = "spki" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d1e996ef02c474957d681f1b05213dfb0abab947b446a62d37770b23500184a" +dependencies = [ + "base64ct", + "der 0.7.8", +] + +[[package]] +name = "ss58-registry" +version = "1.43.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e6915280e2d0db8911e5032a5c275571af6bdded2916abd691a659be25d3439" +dependencies = [ + "Inflector", + "num-format", + "proc-macro2", + "quote", + "serde", + "serde_json", + "unicode-xid", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "static_init" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a2a1c578e98c1c16fc3b8ec1328f7659a500737d7a0c6d625e73e830ff9c1f6" +dependencies = [ + "bitflags 1.3.2", + "cfg_aliases", + "libc", + "parking_lot 0.11.2", + "parking_lot_core 0.8.6", + "static_init_macro", + "winapi", +] + +[[package]] +name = "static_init_macro" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70a2595fc3aa78f2d0e45dd425b22282dd863273761cc77780914b2cf3003acf" +dependencies = [ + "cfg_aliases", + "memchr", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + +[[package]] +name = "strum" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f" +dependencies = [ + "strum_macros", +] + +[[package]] +name = "strum_macros" +version = "0.24.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "rustversion", + "syn 1.0.109", +] + +[[package]] +name = "stun" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7e94b1ec00bad60e6410e058b52f1c66de3dc5fe4d62d09b3e52bb7d3b73e25" +dependencies = [ + "base64 0.13.1", + "crc", + "lazy_static", + "md-5", + "rand 0.8.5", + "ring", + "subtle", + "thiserror", + "tokio", + "url", + "webrtc-util", +] + +[[package]] +name = "substrate-bip39" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49eee6965196b32f882dd2ee85a92b1dbead41b04e53907f269de3b0dc04733c" +dependencies = [ + "hmac 0.11.0", + "pbkdf2 0.8.0", + "schnorrkel", + "sha2 0.9.9", + "zeroize", +] + +[[package]] +name = "substrate-build-script-utils" +version = "3.0.0" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" + +[[package]] +name = "substrate-frame-rpc-system" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "frame-system-rpc-runtime-api", + "futures", + "jsonrpsee", + "log", + "parity-scale-codec", + "sc-rpc-api", + "sc-transaction-pool-api", + "sp-api", + "sp-block-builder", + "sp-blockchain", + "sp-core", + "sp-runtime", +] + +[[package]] +name = "substrate-prometheus-endpoint" +version = "0.10.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "hyper", + "log", + "prometheus", + "thiserror", + "tokio", +] + +[[package]] +name = "substrate-rpc-client" +version = "0.10.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "async-trait", + "jsonrpsee", + "log", + "sc-rpc-api", + "serde", + "sp-runtime", +] + +[[package]] +name = "substrate-wasm-builder" +version = "5.0.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "ansi_term", + "build-helper", + "cargo_metadata", + "filetime", + "parity-wasm", + "sp-maybe-compressed-blob", + "strum", + "tempfile", + "toml 0.7.6", + "walkdir", + "wasm-opt", +] + +[[package]] +name = "substring" +version = "1.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ee6433ecef213b2e72f587ef64a2f5943e7cd16fbd82dbe8bc07486c534c86" +dependencies = [ + "autocfg", +] + +[[package]] +name = "subtle" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "718fa2415bcb8d8bd775917a1bf12a7931b6dfa890753378538118181e0cb398" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "synstructure" +version = "0.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", + "unicode-xid", +] + +[[package]] +name = "system-configuration" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "tap" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + +[[package]] +name = "target-lexicon" +version = "0.12.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d0e916b1148c8e263850e1ebcbd046f333e0683c724876bb0da63ea4373dc8a" + +[[package]] +name = "tempfile" +version = "3.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb94d2f3cc536af71caac6b6fcebf65860b347e7ce0cc9ebe8f70d3e521054ef" +dependencies = [ + "cfg-if", + "fastrand 2.0.0", + "redox_syscall 0.3.5", + "rustix 0.38.11", + "windows-sys 0.48.0", +] + +[[package]] +name = "termcolor" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "termtree" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76" + +[[package]] +name = "thiserror" +version = "1.0.48" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d6d7a740b8a666a7e828dd00da9c0dc290dff53154ea77ac109281de90589b7" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.48" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49922ecae66cc8a249b77e68d1d0623c1b2c514f0060c27cdc68bd62a1219d35" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.31", +] + +[[package]] +name = "thousands" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3bf63baf9f5039dadc247375c29eb13706706cfde997d0330d05aa63a77d8820" + +[[package]] +name = "thread_local" +version = "1.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152" +dependencies = [ + "cfg-if", + "once_cell", +] + +[[package]] +name = "threadpool" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa" +dependencies = [ + "num_cpus", +] + +[[package]] +name = "tikv-jemalloc-sys" +version = "0.5.4+5.3.0-patched" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9402443cb8fd499b6f327e40565234ff34dbda27460c5b47db0db77443dd85d1" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "time" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a" +dependencies = [ + "libc", + "wasi 0.10.0+wasi-snapshot-preview1", + "winapi", +] + +[[package]] +name = "time" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17f6bb557fd245c28e6411aa56b6403c689ad95061f50e4be16c274e70a17e48" +dependencies = [ + "deranged", + "itoa", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb" + +[[package]] +name = "time-macros" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a942f44339478ef67935ab2bbaec2fb0322496cf3cbe84b261e06ac3814c572" +dependencies = [ + "time-core", +] + +[[package]] +name = "tiny-bip39" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62cc94d358b5a1e84a5cb9109f559aa3c4d634d2b1b4de3d0fa4adc7c78e2861" +dependencies = [ + "anyhow", + "hmac 0.12.1", + "once_cell", + "pbkdf2 0.11.0", + "rand 0.8.5", + "rustc-hash", + "sha2 0.10.7", + "thiserror", + "unicode-normalization", + "wasm-bindgen", + "zeroize", +] + +[[package]] +name = "tiny-keccak" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" +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" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "tokio" +version = "1.32.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17ed6077ed6cd6c74735e21f37eb16dc3935f96878b1fe961074089cc80893f9" +dependencies = [ + "backtrace", + "bytes", + "libc", + "mio", + "num_cpus", + "parking_lot 0.12.1", + "pin-project-lite 0.2.13", + "signal-hook-registry", + "socket2 0.5.3", + "tokio-macros", + "windows-sys 0.48.0", +] + +[[package]] +name = "tokio-macros" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.31", +] + +[[package]] +name = "tokio-retry" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f57eb36ecbe0fc510036adff84824dd3c24bb781e21bfa67b69d556aa85214f" +dependencies = [ + "pin-project", + "rand 0.8.5", + "tokio", +] + +[[package]] +name = "tokio-rustls" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" +dependencies = [ + "rustls 0.21.7", + "tokio", +] + +[[package]] +name = "tokio-stream" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "397c988d37662c7dda6d2208364a706264bf3d6138b11d436cbac0ad38832842" +dependencies = [ + "futures-core", + "pin-project-lite 0.2.13", + "tokio", + "tokio-util", +] + +[[package]] +name = "tokio-util" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d" +dependencies = [ + "bytes", + "futures-core", + "futures-io", + "futures-sink", + "pin-project-lite 0.2.13", + "tokio", + "tracing", +] + +[[package]] +name = "toml" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" +dependencies = [ + "serde", +] + +[[package]] +name = "toml" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c17e963a819c331dcacd7ab957d80bc2b9a9c1e71c804826d2f283dd65306542" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit", +] + +[[package]] +name = "toml_datetime" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_edit" +version = "0.19.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8123f27e969974a3dfba720fdb560be359f57b44302d280ba72e76a74480e8a" +dependencies = [ + "indexmap 2.0.0", + "serde", + "serde_spanned", + "toml_datetime", + "winnow", +] + +[[package]] +name = "tower" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" +dependencies = [ + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-http" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61c5bb1d698276a2443e5ecfabc1008bf15a36c12e6a7176e7bf089ea9131140" +dependencies = [ + "bitflags 2.4.0", + "bytes", + "futures-core", + "futures-util", + "http", + "http-body", + "http-range-header", + "pin-project-lite 0.2.13", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-layer" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" + +[[package]] +name = "tower-service" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" + +[[package]] +name = "tracing" +version = "0.1.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" +dependencies = [ + "cfg-if", + "log", + "pin-project-lite 0.2.13", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.31", +] + +[[package]] +name = "tracing-core" +version = "0.1.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a" +dependencies = [ + "once_cell", + "valuable", +] + +[[package]] +name = "tracing-futures" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2" +dependencies = [ + "pin-project", + "tracing", +] + +[[package]] +name = "tracing-log" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922" +dependencies = [ + "lazy_static", + "log", + "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 = [ + "ansi_term", + "chrono", + "lazy_static", + "matchers", + "parking_lot 0.11.2", + "regex", + "serde", + "serde_json", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log", + "tracing-serde", +] + +[[package]] +name = "trie-db" +version = "0.27.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "767abe6ffed88a1889671a102c2861ae742726f52e0a5a425b92c9fbfa7e9c85" +dependencies = [ + "hash-db", + "hashbrown 0.13.2", + "log", + "rustc-hex", + "smallvec", +] + +[[package]] +name = "trie-root" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4ed310ef5ab98f5fa467900ed906cb9232dd5376597e00fd4cba2a449d06c0b" +dependencies = [ + "hash-db", +] + +[[package]] +name = "trust-dns-proto" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f7f83d1e4a0e4358ac54c5c3681e5d7da5efc5a7a632c90bb6d6669ddd9bc26" +dependencies = [ + "async-trait", + "cfg-if", + "data-encoding", + "enum-as-inner", + "futures-channel", + "futures-io", + "futures-util", + "idna 0.2.3", + "ipnet", + "lazy_static", + "rand 0.8.5", + "smallvec", + "socket2 0.4.9", + "thiserror", + "tinyvec", + "tokio", + "tracing", + "url", +] + +[[package]] +name = "trust-dns-resolver" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aff21aa4dcefb0a1afbfac26deb0adc93888c7d295fb63ab273ef276ba2b7cfe" +dependencies = [ + "cfg-if", + "futures-util", + "ipconfig", + "lazy_static", + "lru-cache", + "parking_lot 0.12.1", + "resolv-conf", + "smallvec", + "thiserror", + "tokio", + "tracing", + "trust-dns-proto", +] + +[[package]] +name = "try-lock" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" + +[[package]] +name = "try-runtime-cli" +version = "0.10.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "async-trait", + "clap", + "frame-remote-externalities", + "frame-try-runtime", + "hex", + "log", + "parity-scale-codec", + "sc-cli", + "sc-executor", + "serde", + "serde_json", + "sp-api", + "sp-consensus-aura", + "sp-consensus-babe", + "sp-core", + "sp-debug-derive", + "sp-externalities", + "sp-inherents", + "sp-io", + "sp-keystore", + "sp-rpc", + "sp-runtime", + "sp-state-machine", + "sp-timestamp", + "sp-transaction-storage-proof", + "sp-version", + "sp-weights", + "substrate-rpc-client", + "zstd 0.12.4", +] + +[[package]] +name = "tt-call" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4f195fd851901624eee5a58c4bb2b4f06399148fcd0ed336e6f1cb60a9881df" + +[[package]] +name = "turn" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4712ee30d123ec7ae26d1e1b218395a16c87cdbaf4b3925d170d684af62ea5e8" +dependencies = [ + "async-trait", + "base64 0.13.1", + "futures", + "log", + "md-5", + "rand 0.8.5", + "ring", + "stun", + "thiserror", + "tokio", + "webrtc-util", +] + +[[package]] +name = "twox-hash" +version = "1.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675" +dependencies = [ + "cfg-if", + "digest 0.10.7", + "rand 0.8.5", + "static_assertions", +] + +[[package]] +name = "typenum" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" + +[[package]] +name = "ucd-trie" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9" + +[[package]] +name = "uint" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76f64bba2c53b04fcab63c01a7d7427eadc821e3bc48c34dc9ba29c501164b52" +dependencies = [ + "byteorder", + "crunchy", + "hex", + "static_assertions", +] + +[[package]] +name = "unicode-bidi" +version = "0.3.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" + +[[package]] +name = "unicode-ident" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c" + +[[package]] +name = "unicode-normalization" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-width" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" + +[[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.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f214e8f697e925001e66ec2c6e37a4ef93f0f78c2eed7814394e10c62025b05" +dependencies = [ + "generic-array 0.14.7", + "subtle", +] + +[[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 = "unsigned-varint" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d86a8dc7f45e4c1b0d30e43038c38f274e77af056aa5f74b93c2cf9eb3c1c836" +dependencies = [ + "asynchronous-codec", + "bytes", + "futures-io", + "futures-util", +] + +[[package]] +name = "untrusted" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" + +[[package]] +name = "url" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "143b538f18257fac9cad154828a57c6bf5157e1aa604d4816b5995bf6de87ae5" +dependencies = [ + "form_urlencoded", + "idna 0.4.0", + "percent-encoding", +] + +[[package]] +name = "utf8parse" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" + +[[package]] +name = "uuid" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79daa5ed5740825c40b389c5e50312b9c86df53fccd33f281df655642b43869d" +dependencies = [ + "getrandom 0.2.10", +] + +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" + +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "void" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" + +[[package]] +name = "waitgroup" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1f50000a783467e6c0200f9d10642f4bc424e39efc1b770203e88b488f79292" +dependencies = [ + "atomic-waker", +] + +[[package]] +name = "waker-fn" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca" + +[[package]] +name = "walkdir" +version = "2.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698" +dependencies = [ + "same-file", + "winapi-util", +] + +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +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.10.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.87" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.87" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn 2.0.31", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c02dbc21516f9f1f04f187958890d7e6026df8d16540b7ad9492bc34a67cea03" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.87" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.87" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.31", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.87" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1" + +[[package]] +name = "wasm-instrument" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa1dafb3e60065305741e83db35c6c2584bb3725b692b5b66148a38d72ace6cd" +dependencies = [ + "parity-wasm", +] + +[[package]] +name = "wasm-opt" +version = "0.112.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87fef6d0d508f08334e0ab0e6877feb4c0ecb3956bcf2cb950699b22fedf3e9c" +dependencies = [ + "anyhow", + "libc", + "strum", + "strum_macros", + "tempfile", + "thiserror", + "wasm-opt-cxx-sys", + "wasm-opt-sys", +] + +[[package]] +name = "wasm-opt-cxx-sys" +version = "0.112.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc816bbc1596c8f2e8127e137a760c798023ef3d378f2ae51f0f1840e2dfa445" +dependencies = [ + "anyhow", + "cxx", + "cxx-build", + "wasm-opt-sys", +] + +[[package]] +name = "wasm-opt-sys" +version = "0.112.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40199e4f68ef1071b3c6d0bd8026a12b481865d4b9e49c156932ea9a6234dd14" +dependencies = [ + "anyhow", + "cc", + "cxx", + "cxx-build", +] + +[[package]] +name = "wasm-timer" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be0ecb0db480561e9a7642b5d3e4187c128914e58aa84330b9493e3eb68c5e7f" +dependencies = [ + "futures", + "js-sys", + "parking_lot 0.11.2", + "pin-utils", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "wasmparser" +version = "0.102.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48134de3d7598219ab9eaf6b91b15d8e50d31da76b8519fe4ecfcec2cf35104b" +dependencies = [ + "indexmap 1.9.3", + "url", +] + +[[package]] +name = "wasmtime" +version = "8.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f907fdead3153cb9bfb7a93bbd5b62629472dc06dee83605358c64c52ed3dda9" +dependencies = [ + "anyhow", + "bincode", + "cfg-if", + "indexmap 1.9.3", + "libc", + "log", + "object 0.30.4", + "once_cell", + "paste", + "psm", + "rayon", + "serde", + "target-lexicon", + "wasmparser", + "wasmtime-cache", + "wasmtime-cranelift", + "wasmtime-environ", + "wasmtime-jit", + "wasmtime-runtime", + "windows-sys 0.45.0", +] + +[[package]] +name = "wasmtime-asm-macros" +version = "8.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3b9daa7c14cd4fa3edbf69de994408d5f4b7b0959ac13fa69d465f6597f810d" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "wasmtime-cache" +version = "8.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c86437fa68626fe896e5afc69234bb2b5894949083586535f200385adfd71213" +dependencies = [ + "anyhow", + "base64 0.21.3", + "bincode", + "directories-next", + "file-per-thread-logger", + "log", + "rustix 0.36.15", + "serde", + "sha2 0.10.7", + "toml 0.5.11", + "windows-sys 0.45.0", + "zstd 0.11.2+zstd.1.5.2", +] + +[[package]] +name = "wasmtime-cranelift" +version = "8.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1cefde0cce8cb700b1b21b6298a3837dba46521affd7b8c38a9ee2c869eee04" +dependencies = [ + "anyhow", + "cranelift-codegen", + "cranelift-entity", + "cranelift-frontend", + "cranelift-native", + "cranelift-wasm", + "gimli 0.27.3", + "log", + "object 0.30.4", + "target-lexicon", + "thiserror", + "wasmparser", + "wasmtime-cranelift-shared", + "wasmtime-environ", +] + +[[package]] +name = "wasmtime-cranelift-shared" +version = "8.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd041e382ef5aea1b9fc78442394f1a4f6d676ce457e7076ca4cb3f397882f8b" +dependencies = [ + "anyhow", + "cranelift-codegen", + "cranelift-native", + "gimli 0.27.3", + "object 0.30.4", + "target-lexicon", + "wasmtime-environ", +] + +[[package]] +name = "wasmtime-environ" +version = "8.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a990198cee4197423045235bf89d3359e69bd2ea031005f4c2d901125955c949" +dependencies = [ + "anyhow", + "cranelift-entity", + "gimli 0.27.3", + "indexmap 1.9.3", + "log", + "object 0.30.4", + "serde", + "target-lexicon", + "thiserror", + "wasmparser", + "wasmtime-types", +] + +[[package]] +name = "wasmtime-jit" +version = "8.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0de48df552cfca1c9b750002d3e07b45772dd033b0b206d5c0968496abf31244" +dependencies = [ + "addr2line 0.19.0", + "anyhow", + "bincode", + "cfg-if", + "cpp_demangle", + "gimli 0.27.3", + "log", + "object 0.30.4", + "rustc-demangle", + "serde", + "target-lexicon", + "wasmtime-environ", + "wasmtime-jit-debug", + "wasmtime-jit-icache-coherence", + "wasmtime-runtime", + "windows-sys 0.45.0", +] + +[[package]] +name = "wasmtime-jit-debug" +version = "8.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e0554b84c15a27d76281d06838aed94e13a77d7bf604bbbaf548aa20eb93846" +dependencies = [ + "object 0.30.4", + "once_cell", + "rustix 0.36.15", +] + +[[package]] +name = "wasmtime-jit-icache-coherence" +version = "8.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aecae978b13f7f67efb23bd827373ace4578f2137ec110bbf6a4a7cde4121bbd" +dependencies = [ + "cfg-if", + "libc", + "windows-sys 0.45.0", +] + +[[package]] +name = "wasmtime-runtime" +version = "8.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "658cf6f325232b6760e202e5255d823da5e348fdea827eff0a2a22319000b441" +dependencies = [ + "anyhow", + "cc", + "cfg-if", + "indexmap 1.9.3", + "libc", + "log", + "mach", + "memfd", + "memoffset 0.8.0", + "paste", + "rand 0.8.5", + "rustix 0.36.15", + "wasmtime-asm-macros", + "wasmtime-environ", + "wasmtime-jit-debug", + "windows-sys 0.45.0", +] + +[[package]] +name = "wasmtime-types" +version = "8.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4f6fffd2a1011887d57f07654dd112791e872e3ff4a2e626aee8059ee17f06f" +dependencies = [ + "cranelift-entity", + "serde", + "thiserror", + "wasmparser", +] + +[[package]] +name = "web-sys" +version = "0.3.64" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b85cbef8c220a6abc02aefd892dfc0fc23afb1c6a426316ec33253a3877249b" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "webpki" +version = "0.21.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8e38c0608262c46d4a56202ebabdeb094cef7e560ca7a226c6bf055188aa4ea" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "webpki" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0e74f82d49d545ad128049b7e88f6576df2da6b02e9ce565c6f533be576957e" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "webpki-roots" +version = "0.22.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c71e40d7d2c34a5106301fb632274ca37242cd0c9d3e64dbece371a40a2d87" +dependencies = [ + "webpki 0.22.1", +] + +[[package]] +name = "webpki-roots" +version = "0.23.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b03058f88386e5ff5310d9111d53f48b17d732b401aeb83a8d5190f2ac459338" +dependencies = [ + "rustls-webpki 0.100.2", +] + +[[package]] +name = "webpki-roots" +version = "0.25.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14247bb57be4f377dfb94c72830b8ce8fc6beac03cf4bf7b9732eadd414123fc" + +[[package]] +name = "webrtc" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d3bc9049bdb2cea52f5fd4f6f728184225bdb867ed0dc2410eab6df5bdd67bb" +dependencies = [ + "arc-swap", + "async-trait", + "bytes", + "hex", + "interceptor", + "lazy_static", + "log", + "rand 0.8.5", + "rcgen 0.9.3", + "regex", + "ring", + "rtcp", + "rtp", + "rustls 0.19.1", + "sdp", + "serde", + "serde_json", + "sha2 0.10.7", + "stun", + "thiserror", + "time 0.3.28", + "tokio", + "turn", + "url", + "waitgroup", + "webrtc-data", + "webrtc-dtls", + "webrtc-ice", + "webrtc-mdns", + "webrtc-media", + "webrtc-sctp", + "webrtc-srtp", + "webrtc-util", +] + +[[package]] +name = "webrtc-data" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ef36a4d12baa6e842582fe9ec16a57184ba35e1a09308307b67d43ec8883100" +dependencies = [ + "bytes", + "derive_builder", + "log", + "thiserror", + "tokio", + "webrtc-sctp", + "webrtc-util", +] + +[[package]] +name = "webrtc-dtls" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4a00f4242f2db33307347bd5be53263c52a0331c96c14292118c9a6bb48d267" +dependencies = [ + "aes 0.6.0", + "aes-gcm 0.10.2", + "async-trait", + "bincode", + "block-modes", + "byteorder", + "ccm", + "curve25519-dalek 3.2.0", + "der-parser 8.2.0", + "elliptic-curve 0.12.3", + "hkdf", + "hmac 0.12.1", + "log", + "p256", + "p384", + "rand 0.8.5", + "rand_core 0.6.4", + "rcgen 0.10.0", + "ring", + "rustls 0.19.1", + "sec1 0.3.0", + "serde", + "sha1", + "sha2 0.10.7", + "signature 1.6.4", + "subtle", + "thiserror", + "tokio", + "webpki 0.21.4", + "webrtc-util", + "x25519-dalek 2.0.0", + "x509-parser 0.13.2", +] + +[[package]] +name = "webrtc-ice" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "465a03cc11e9a7d7b4f9f99870558fe37a102b65b93f8045392fef7c67b39e80" +dependencies = [ + "arc-swap", + "async-trait", + "crc", + "log", + "rand 0.8.5", + "serde", + "serde_json", + "stun", + "thiserror", + "tokio", + "turn", + "url", + "uuid", + "waitgroup", + "webrtc-mdns", + "webrtc-util", +] + +[[package]] +name = "webrtc-mdns" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f08dfd7a6e3987e255c4dbe710dde5d94d0f0574f8a21afa95d171376c143106" +dependencies = [ + "log", + "socket2 0.4.9", + "thiserror", + "tokio", + "webrtc-util", +] + +[[package]] +name = "webrtc-media" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f72e1650a8ae006017d1a5280efb49e2610c19ccc3c0905b03b648aee9554991" +dependencies = [ + "byteorder", + "bytes", + "rand 0.8.5", + "rtp", + "thiserror", +] + +[[package]] +name = "webrtc-sctp" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d47adcd9427eb3ede33d5a7f3424038f63c965491beafcc20bc650a2f6679c0" +dependencies = [ + "arc-swap", + "async-trait", + "bytes", + "crc", + "log", + "rand 0.8.5", + "thiserror", + "tokio", + "webrtc-util", +] + +[[package]] +name = "webrtc-srtp" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6183edc4c1c6c0175f8812eefdce84dfa0aea9c3ece71c2bf6ddd3c964de3da5" +dependencies = [ + "aead 0.4.3", + "aes 0.7.5", + "aes-gcm 0.9.4", + "async-trait", + "byteorder", + "bytes", + "ctr 0.8.0", + "hmac 0.11.0", + "log", + "rtcp", + "rtp", + "sha-1", + "subtle", + "thiserror", + "tokio", + "webrtc-util", +] + +[[package]] +name = "webrtc-util" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93f1db1727772c05cf7a2cfece52c3aca8045ca1e176cd517d323489aa3c6d87" +dependencies = [ + "async-trait", + "bitflags 1.3.2", + "bytes", + "cc", + "ipnet", + "lazy_static", + "libc", + "log", + "nix", + "rand 0.8.5", + "thiserror", + "tokio", + "winapi", +] + +[[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.11", +] + +[[package]] +name = "wide" +version = "0.7.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa469ffa65ef7e0ba0f164183697b89b854253fd31aeb92358b7b6155177d62f" +dependencies = [ + "bytemuck", + "safe_arch", +] + +[[package]] +name = "widestring" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "653f141f39ec16bba3c5abe400a0c60da7468261cc2cbf36805022876bc721a8" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" +dependencies = [ + "winapi", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows" +version = "0.34.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45296b64204227616fdbf2614cefa4c236b98ee64dfaaaa435207ed99fe7829f" +dependencies = [ + "windows_aarch64_msvc 0.34.0", + "windows_i686_gnu 0.34.0", + "windows_i686_msvc 0.34.0", + "windows_x86_64_gnu 0.34.0", + "windows_x86_64_msvc 0.34.0", +] + +[[package]] +name = "windows" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets 0.42.2", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.34.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17cffbe740121affb56fad0fc0e421804adf0ae00891205213b5cecd30db881d" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_i686_gnu" +version = "0.34.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2564fde759adb79129d9b4f54be42b32c89970c18ebf93124ca8870a498688ed" + +[[package]] +name = "windows_i686_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_msvc" +version = "0.34.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cd9d32ba70453522332c14d38814bceeb747d80b3958676007acadd7e166956" + +[[package]] +name = "windows_i686_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.34.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfce6deae227ee8d356d19effc141a509cc503dfd1f850622ec4b0f84428e1f4" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.34.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d19538ccc21819d01deaf88d6a17eae6596a12e9aafdbb97916fb49896d89de9" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "winnow" +version = "0.5.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c2e3184b9c4e92ad5167ca73039d0c42476302ab603e2fec4487511f38ccefc" +dependencies = [ + "memchr", +] + +[[package]] +name = "winreg" +version = "0.50.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" +dependencies = [ + "cfg-if", + "windows-sys 0.48.0", +] + +[[package]] +name = "wyz" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" +dependencies = [ + "tap", +] + +[[package]] +name = "x25519-dalek" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a0c105152107e3b96f6a00a65e86ce82d9b125230e1c4302940eca58ff71f4f" +dependencies = [ + "curve25519-dalek 3.2.0", + "rand_core 0.5.1", + "zeroize", +] + +[[package]] +name = "x25519-dalek" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb66477291e7e8d2b0ff1bcb900bf29489a9692816d79874bea351e7a8b6de96" +dependencies = [ + "curve25519-dalek 4.0.0", + "rand_core 0.6.4", + "serde", + "zeroize", +] + +[[package]] +name = "x509-parser" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fb9bace5b5589ffead1afb76e43e34cff39cd0f3ce7e170ae0c29e53b88eb1c" +dependencies = [ + "asn1-rs 0.3.1", + "base64 0.13.1", + "data-encoding", + "der-parser 7.0.0", + "lazy_static", + "nom", + "oid-registry 0.4.0", + "ring", + "rusticata-macros", + "thiserror", + "time 0.3.28", +] + +[[package]] +name = "x509-parser" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0ecbeb7b67ce215e40e3cc7f2ff902f94a223acf44995934763467e7b1febc8" +dependencies = [ + "asn1-rs 0.5.2", + "base64 0.13.1", + "data-encoding", + "der-parser 8.2.0", + "lazy_static", + "nom", + "oid-registry 0.6.1", + "rusticata-macros", + "thiserror", + "time 0.3.28", +] + +[[package]] +name = "yamux" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5d9ba232399af1783a58d8eb26f6b5006fbefe2dc9ef36bd283324792d03ea5" +dependencies = [ + "futures", + "log", + "nohash-hasher", + "parking_lot 0.12.1", + "rand 0.8.5", + "static_assertions", +] + +[[package]] +name = "yasna" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e17bb3549cc1321ae1296b9cdc2698e2b6cb1992adfa19a8c72e5b7a738f44cd" +dependencies = [ + "time 0.3.28", +] + +[[package]] +name = "zeroize" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9" +dependencies = [ + "zeroize_derive", +] + +[[package]] +name = "zeroize_derive" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.31", +] + +[[package]] +name = "zstd" +version = "0.11.2+zstd.1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20cc960326ece64f010d2d2107537f26dc589a6573a316bd5b1dba685fa5fde4" +dependencies = [ + "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]] +name = "zstd-safe" +version = "5.0.2+zstd.1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d2a5585e04f9eea4b2a3d1eca508c4dee9592a89ef6f450c11719da0726f4db" +dependencies = [ + "libc", + "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.8+zstd.1.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5556e6ee25d32df2586c098bbfa278803692a20d0ab9565e049480d52707ec8c" +dependencies = [ + "cc", + "libc", + "pkg-config", +] diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..538fd8d --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,8 @@ +[workspace] +members = [ + "node", + "pallets/template", + "runtime", +] +[profile.release] +panic = "unwind" diff --git a/Containerfile b/Containerfile new file mode 100644 index 0000000..01a4a54 --- /dev/null +++ b/Containerfile @@ -0,0 +1,31 @@ +FROM docker.io/library/ubuntu:22.04 + +# show backtraces +ENV RUST_BACKTRACE 1 + +# install tools and dependencies +RUN apt-get update && \ + DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ + ca-certificates && \ +# apt cleanup + apt-get autoremove -y && \ + apt-get clean && \ + find /var/lib/apt/lists/ -type f -not -name lock -delete; \ +# add user and link ~/.local/share/polkadot to /data + useradd -m -u 1000 -U -s /bin/sh -d /polkadot polkadot && \ + mkdir -p /data /polkadot/.local/share && \ + chown -R polkadot:polkadot /data && \ + ln -s /data /polkadot/.local/share/node-template + +USER polkadot + +# copy the compiled binary to the container +COPY --chown=polkadot:polkadot --chmod=774 node-template /usr/bin/node-template + +# check if executable works in this container +RUN /usr/bin/node-template --version + +# ws_port +EXPOSE 9930 9333 9944 30333 30334 + +CMD ["/usr/bin/node-template"] diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..ffa0b3f --- /dev/null +++ b/LICENSE @@ -0,0 +1,16 @@ +MIT No Attribution + +Copyright Parity Technologies (UK) Ltd. + +Permission is hereby granted, free of charge, to any person obtaining a copy of this +software and associated documentation files (the "Software"), to deal in the Software +without restriction, including without limitation the rights to use, copy, modify, +merge, publish, distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..337faca --- /dev/null +++ b/README.md @@ -0,0 +1,164 @@ +# Substrate Node Template + +A fresh [Substrate](https://substrate.io/) node, ready for hacking :rocket: + +A standalone version of this template is available for each release of Polkadot in the [Substrate Developer Hub Parachain Template](https://github.com/substrate-developer-hub/substrate-parachain-template/) repository. +The parachain template is generated directly at each Polkadot release branch from the [Node Template in Substrate](https://github.com/paritytech/substrate/tree/master/bin/node-template) upstream + +It is usually best to use the stand-alone version to start a new project. +All bugs, suggestions, and feature requests should be made upstream in the [Substrate](https://github.com/paritytech/substrate/tree/master/bin/node-template) repository. + +## Getting Started + +Depending on your operating system and Rust version, there might be additional packages required to compile this template. +Check the [Install](https://docs.substrate.io/install/) instructions for your platform for the most common dependencies. +Alternatively, you can use one of the [alternative installation](#alternatives-installations) options. + +### Build + +Use the following command to build the node without launching it: + +```sh +cargo build --release +``` + +### Embedded Docs + +After you build the project, you can use the following command to explore its parameters and subcommands: + +```sh +./target/release/node-template -h +``` + +You can generate and view the [Rust Docs](https://doc.rust-lang.org/cargo/commands/cargo-doc.html) for this template with this command: + +```sh +cargo +nightly doc --open +``` + +### Single-Node Development Chain + +The following command starts a single-node development chain that doesn't persist state: + +```sh +./target/release/node-template --dev +``` + +To purge the development chain's state, run the following command: + +```sh +./target/release/node-template purge-chain --dev +``` + +To start the development chain with detailed logging, run the following command: + +```sh +RUST_BACKTRACE=1 ./target/release/node-template -ldebug --dev +``` + +Development chains: + +- Maintain state in a `tmp` folder while the node is running. +- Use the **Alice** and **Bob** accounts as default validator authorities. +- Use the **Alice** account as the default `sudo` account. +- Are preconfigured with a genesis state (`/node/src/chain_spec.rs`) that includes several prefunded development accounts. + + +To persist chain state between runs, specify a base path by running a command similar to the following: + +```sh +// Create a folder to use as the db base path +$ mkdir my-chain-state + +// Use of that folder to store the chain state +$ ./target/release/node-template --dev --base-path ./my-chain-state/ + +// Check the folder structure created inside the base path after running the chain +$ ls ./my-chain-state +chains +$ ls ./my-chain-state/chains/ +dev +$ ls ./my-chain-state/chains/dev +db keystore network +``` + +### Connect with Polkadot-JS Apps Front-End + +After you start the node template locally, you can interact with it using the hosted version of the [Polkadot/Substrate Portal](https://polkadot.js.org/apps/#/explorer?rpc=ws://localhost:9944) front-end by connecting to the local node endpoint. +A hosted version is also available on [IPFS (redirect) here](https://dotapps.io/) or [IPNS (direct) here](ipns://dotapps.io/?rpc=ws%3A%2F%2F127.0.0.1%3A9944#/explorer). +You can also find the source code and instructions for hosting your own instance on the [polkadot-js/apps](https://github.com/polkadot-js/apps) repository. + +### Multi-Node Local Testnet + +If you want to see the multi-node consensus algorithm in action, see [Simulate a network](https://docs.substrate.io/tutorials/build-a-blockchain/simulate-network/). + +## Template Structure + +A Substrate project such as this consists of a number of components that are spread across a few directories. + +### Node + +A blockchain node is an application that allows users to participate in a blockchain network. +Substrate-based blockchain nodes expose a number of capabilities: + +- Networking: Substrate nodes use the [`libp2p`](https://libp2p.io/) networking stack to allow the + nodes in the network to communicate with one another. +- Consensus: Blockchains must have a way to come to [consensus](https://docs.substrate.io/fundamentals/consensus/) on the state of the network. + Substrate makes it possible to supply custom consensus engines and also ships with several consensus mechanisms that have been built on top of [Web3 Foundation research](https://research.web3.foundation/en/latest/polkadot/NPoS/index.html). +- RPC Server: A remote procedure call (RPC) server is used to interact with Substrate nodes. + +There are several files in the `node` directory. +Take special note of the following: + +- [`chain_spec.rs`](./node/src/chain_spec.rs): A [chain specification](https://docs.substrate.io/build/chain-spec/) is a source code file that defines a Substrate chain's initial (genesis) state. + Chain specifications are useful for development and testing, and critical when architecting the launch of a production chain. + Take note of the `development_config` and `testnet_genesis` functions,. + These functions are used to define the genesis state for the local development chain configuration. + These functions identify some [well-known accounts](https://docs.substrate.io/reference/command-line-tools/subkey/) and use them to configure the blockchain's initial state. +- [`service.rs`](./node/src/service.rs): This file defines the node implementation. + Take note of the libraries that this file imports and the names of the functions it invokes. + In particular, there are references to consensus-related topics, such as the [block finalization and forks](https://docs.substrate.io/fundamentals/consensus/#finalization-and-forks) and other [consensus mechanisms](https://docs.substrate.io/fundamentals/consensus/#default-consensus-models) such as Aura for block authoring and GRANDPA for finality. + + + +### Runtime + +In Substrate, the terms "runtime" and "state transition function" are analogous. +Both terms refer to the core logic of the blockchain that is responsible for validating blocks and executing the state changes they define. +The Substrate project in this repository uses [FRAME](https://docs.substrate.io/learn/runtime-development/#frame) to construct a blockchain runtime. +FRAME allows runtime developers to declare domain-specific logic in modules called "pallets". +At the heart of FRAME is a helpful [macro language](https://docs.substrate.io/reference/frame-macros/) that makes it easy to create pallets and flexibly compose them to create blockchains that can address [a variety of needs](https://substrate.io/ecosystem/projects/). + +Review the [FRAME runtime implementation](./runtime/src/lib.rs) included in this template and note the following: + +- This file configures several pallets to include in the runtime. + Each pallet configuration is defined by a code block that begins with `impl $PALLET_NAME::Config for Runtime`. +- The pallets are composed into a single runtime by way of the [`construct_runtime!`](https://paritytech.github.io/substrate/master/frame_support/macro.construct_runtime.html) macro, which is part of the [core FRAME pallet library](https://docs.substrate.io/reference/frame-pallets/#system-pallets). + +### Pallets + +The runtime in this project is constructed using many FRAME pallets that ship with [the Substrate repository](https://github.com/paritytech/substrate/tree/master/frame) and a template pallet that is [defined in the `pallets`](./pallets/template/src/lib.rs) directory. + +A FRAME pallet is comprised of a number of blockchain primitives, including: + +- Storage: FRAME defines a rich set of powerful [storage abstractions](https://docs.substrate.io/build/runtime-storage/) that makes it easy to use Substrate's efficient key-value database to manage the evolving state of a blockchain. +- Dispatchables: FRAME pallets define special types of functions that can be invoked (dispatched) from outside of the runtime in order to update its state. +- Events: Substrate uses [events](https://docs.substrate.io/build/events-and-errors/) to notify users of significant state changes. +- Errors: When a dispatchable fails, it returns an error. + +Each pallet has its own `Config` trait which serves as a configuration interface to generically define the types and parameters it depends on. + +## Alternatives Installations + +Instead of installing dependencies and building this source directly, consider the following alternatives. + +### Nix + +Install [nix](https://nixos.org/) and +[nix-direnv](https://github.com/nix-community/nix-direnv) for a fully plug-and-play +experience for setting up the development environment. +To get all the correct dependencies, activate direnv `direnv allow`. + +### Docker + +Please follow the [Substrate Docker instructions here](https://github.com/paritytech/substrate/blob/master/docker/README.md) to build the Docker container with the Substrate Node Template binary. diff --git a/customSpec.json b/customSpec.json new file mode 100644 index 0000000..580c56f --- /dev/null +++ b/customSpec.json @@ -0,0 +1,93 @@ +{ + "name": "Helios Testnet", + "id": "local_testnet", + "chainType": "Local", + "bootNodes": [], + "telemetryEndpoints": null, + "protocolId": null, + "properties": null, + "codeSubstitutes": {}, + "genesis": { + "runtime": { + "system": { + "code": "0x52bc537646db8e0528b52ffd00583c1d046e0c05fd0f501040ed281dbd6acf2a88f391b3a593c79cc53ad8872859fe4a9aad4c5e1414a7221e884ed856ab806ff7f3f3a5f49e52129ae13a53be28e5122f732e17b66a5bee1e4283f8dbdade7bef2da59432c9141910970e210f173e7bf7f2cdb5de2edbec5dd77adb6cf69e6951734e8173f6eef53358b1a10aeb95b6cd4b92b27acc6f08fea8c19c97c24d6082d8e1316ff32e6b6cf939abcdedb2adb9d4e876d976e6905cde9153c2797786d79c37efc2df9c7d7247b2670eba9b675e1437cb7f94393be48e64ce5e120d7fe367ce5c92eb35efe8f2f6a2ceecbdae2438e7312f8a458df15bbbd2a0bc42e3249df48bfad9790f4d27d2431dfc741493979fee3351423f513fbdeba1f6e9734ee79fe91d71cb8a56d4b1108de7c95158c2c4921ea0217d7a9dfe757a928e3aaaa887ee85420fddae490f5537a1873af8ea2c84f1d537d043f12bb3f98a22faeadc43a8bf1c06f737bda87db4b6350808c4d77e9496afae71438e3a4970ce73d743d1ab9f7a487af5ab87a057afce3fd53be23811cc75e5478f7efd2707d6f7474fb5ea6ecf52293af7d0457d64bf64dc1e498c91dba3fb7011fee800e0224734ee04b0b38e169d7f2eb7be5d93fd2db182430d6ee0d0a405072fdc78a3e20884c39731a60461c099810ccca83802b5b3e4d9fa93fd7dd0ef1553dc40b77be8b77b8e290fbd52e6e5c55c51375d7eed423dd44ed44341c4edaf095175376837a63cd4dbfa9bdef6dcbae2c44befd41fe4d6b3005613b61c8d2b18dd152cbcdd079600df85ceb9d33849d77ebb8f317aece0e315a68f7e8a7e69400b41d74f3cb7b6ccf18dc4736b882efe7b6e091103e81ab449966e88f3778505fd2bc30f5d3cfb4e08ba78e6b905049987689e5b5ae2fc90e796962d90439289e1e6939a3c3b922cce119f4445e7ef521c6ea090f8bb0406092d8ebf4b58e2987fa5a8214501ac68fa2ba54cd373928bc57af62492c57a9ef3bce3cf5d82307eae79e8da4e127ce99ab4d335e69048ef42c82989dede3502cc4b6f6fee8874e845b12dffb4d0f628996b5efa5cf357caeaa54f4fe23973e6f4aadb8b7a828940c7ad1360f1f6ed6bbd4d3bd77c5b101e7248fcdba59db201f4965a897f7bb4476d2ffce9cd2181733e09ce99d1eb49023d3a12e8d15bd2b8c5c5cb2ff54fefb64f811f7df5d17eb416da25edd95713b60cb42290957191ce9e9db904862348dfe1225c83148540d0a577afbfb4880b130749e7247309455caef008fcd2bbed5d2a3fa5ff0525f8d02ffde8d829ebb46de3d609da7cd2ce4fb9282c81f96fffa5df41d72067a46bd7e018dd6820672449b258ec4696996de81b862540386d9ebd618a55ec192c41d62d7247b84dbdaeeba27d5d115ed7fc74a053347464a03db770c0e34f3e1ac714a739e3469532de20a28b2954ec574c710b0a2152c0431f70c0008b8a9d3d0d3aff5c216844f607a53ba782744d630e09f5ae3ff58b278feccfbb4bf1a1637eea21cda3a37aa86a35cbbc9b39e659ad1ebdeba1cca36bd5c2d732cbfd717f9b430e09072ffbdbbcbb39e6d5f26f76297ee61a6c8651a75a7ecdf267f6eb21e6a0ebf3d0a3fbf410f42ef5e9d1b50821b5fc98bd1a00fdb24bf34f5a6fcc51efcef0d4d9deeb5e0f3d723c79a26b9263cab3f5f7d35ff4eadc5ff58aba28b2e5fedaa5bdf093e09c3973e6fc5d3d3bb54bf1d9a1859c11f6a6d76d27ef21f6e85f0ff1fbf4907ff4215c247ef49f8fce3f3183d30b2b75dcd281f5900559dfaea5d86ea03b8ace7f21ab9f5b4c723c7ce8cd2981ac67ef42d647d79833229ded14f9ecd226e99e3ddabbfae8cc45aef49e24d94b2f69e7d979cd0bfde5397fa337bfd61b5bc8eaa0c30fc30eb9244fea3e7a3e906585163dda0674d0655177af6fd4433ff50771d8f28dc39b6ff80de8a0c756d2785bc50f58e3143a6ee1c0f4f3b965c5cb330f945ed4d2bbbc18028d84aebf1d0d16e9987bc0eaa5f456103aa08a7802931be4c4c8dcde1b7b731058fd117b49549efdb643f6b83f865a58617a6edd00e7efce4b2fc073eb062c5e6a507210583df777e5af1e6a9133327ba3d3ad44029f7a515f3dd473043e75ea5d0f7d5af8fc23bda3aebd6824ec1c35b4991710f2118d8b6c2f5fdb692fba9cb4bd877a8eb4478fd4a1cb1ebad38fa24ba7d4af1e6aba7d5117f50a16e9b41d2b12022be85dfd4997aeed0825517999045f7a1ed0b8e34e6c9b7dd1456f973246d7e0262d7c238d7b885b376cf96bb31af7d0ddbe535b0371081d75f813e8b8650398e7960dacbf207c3b029e5b55c2f8e68ca0be1db5f5d0e5ed5d0f516f3f69cd19b928750d6ef035c851d7a85d824946647fd293744f1d7228f05367ce08f777b787d3bbab9fd7e545f1b257fe95be14bf3a7346a617b5a63117bd4bc347bfecf5bf9cdacbfdcdf0975feeefc6f0975feadcdf85e12f2f8ad1562f89868f4e2dff65afcf4bd7e0562d3fb5fccca9203f4e9b143fbab4dc1f74e68c40af309e40bb579cd1d26f0b1fda2b8287ae31ecd6b924f868a13397643e94df967fd59049152c20d071ab8a13cffff5d0ddbeeff7eded43aa70f9f6530ff5b773a7a0eafa9c80e50b0ee22feaad87d8db8520188d7d3a7698a4e316abe9eff5ecdd96e7162bcdb36f3d0453acbaa767e71ff68ebc011a8ba0710f4186cfaeed700ff1b3730fb5dfeb35f8c10958d27010bf0699e3396107a6fef8a3f4e8d02367047a0c794ed8414b7ffcedd1727fd1b5b8410bbfb976e6a4c7fd1535734624e420b0fa2e6ab887c6dfedb0dbe31584493476fe615bd441df20148ad12184b0a317358cd13bc6083d46670e76fbf5edf5286997de3009f4f66e7bf48e1cb640e39febdfaef1003a8d43e8b8bfe8cc19890eb92333b058ac2a1f7b283abbec2178f5d75ed4d16efdb5ff74f7f4edd0a5dfebdbb5530fb5a37a087ebb4f0f456fd7e0868a5ed4452ded14105ecaea7ae8d743af470974e9d0a5b7043f7acc1981de850ffda7bd237f16c02a429846e3e79fdb7dbb76f5d0fd20fba2837eb76fdb415701fa51f424b4fdad9f4239ad37e622d06ff4ab872efce8ec5ab4de4567670e89ec8f3d7a577fec45adf506adfc2dce27d59f1284db74a6d01d2d6ed0c6e7b88812647d52037e0a7de8ed1b1751826e7ecaf6d0db75b88812647d52031e7a3b732a4816eba11735e49274ac87bef5107f3b734920eba1177551177551b3e5fed8f9a7bda3ee5900ab86fd86c6ad716bfc75d0d919cb9e08c1093ab2ac8a6c4c464536452645c6441626636541644d6425c880c896c8c06426c8569009910d9155c9b26458b21db22b19539643a6438643e644d64366449682ac884a44a682ec0b36a76aa17c64445436754d35a396519b2a19758cdaaa5b542d6a16158b7a45b5a25651cb542aea14d58bda4565414553d5d434ea17354d8da27251cf5433558cda440d53bbd424aa13d54b65a2aaa0a6a0a2a00a5187a83f5413d42d9555b3542cd5073a078d43f3a06fe8195a052543c54c26661353099906f542b7984b4c2d261695892231b7a836cc2c621e110f7925ea41e74c23e609645345629631b7a84e9843cca649c63443c200da205f30c7a85f6418d20caa82294676841c23a19062e4137205940719463a91fd104d30a7904ac43668178a029a02ca441462a2803611dd8863c42f620b2218f38c98465413d1a04cf4ca4442a221d7d42a920fa9469e5175985e241b5912720dc9c44ca22e51c1c4256419138c5c4292a165e80b2210d20a79453c23db229ba06e4816d521b62618128c984364a26fc035322cb232f00d68063c631e4183907ec02a3d039944768279452c41d482de105f9079a152cc14d41b221f95075a85b621b58844644a5033b08bd807cd81da10abc420a617b38b7844dc42e18848c421a211b50769258aa172441b6697f9058a4177906a645c240ef186f8c4e4325520d9d038ea11d00e58078403e9806cc03460131c0396913d01c9806d5037300c9806b6007e415b100d6441968593264c3ac0010a98f00b4862800496a05082028852d04a0186124004010718c1004143e00d01f04010000094b4171a7c86920faca39114271e6012831323189830d16074018a1113265950d0d44368e68184e4a40524242727e001c3d20b508c90ee6023a30f3089b2c4640986179e18850068dac152909e38593272818991d10744987570940f4079c244044a463224317912c32f41310281089c2cf109878d5a8012050a13274c9ec4f0462d408912812528324469a18507c0a4833f10258a520c4c62780283142523282188c244044647224c17b00b46505e7822058a0c4c5a8832e5890c49464c9694a2c460a4c464e909083c208314a23907bbf084c992911425195af060be79210617a0385142128029870b515a3072018419074b1181d1111329524460a4044a942752a41851c04e38588ad193a5274a51605892c18990e986a14479b2e444490617982c454192c2e4490cef444986df60bec121601285c993185ec9e84829ca05a03c7102430b1ff8800a76bac1464b4e5c7882e4640a1323198c6490c00a2e18bdf08293150a30db6029472d18c1d0421b96b204c548c90806284f7cb201e5c9077ae61adcc21329509e282dcd60c444044831c4e0848992910b484f64501db5100549e533d560291f4c36ec8489cf5cc32060e264c9890b4e968c52e099698ce0099293274b4fa03cd960aae1a316a220798089d1920c2d18cd601464a2c14a514ed8181a2179c0c91214193ec064a90523a5272e4079c28489077e8551dd7081058de795c62d16ebe12a7a403b4da78131c02a4f7483d3061b30736c9e3c25cb49e76419a9bc329e40728b7183b565dd89b366324a39e59ccc1dfb8b32669cc91867cb8ed90732ca669e3352197bb26c66299b5bca668e30c638a58c51c6c90ca5ecc8dcda0750d33c6089cd2923cb29254729a58c93999be3388e8b5996f194cc324a399963e41da6dcb2dbe111616bc99279f294526a524a299ba384cc2ca7649e53422a638cacc901c418396b09995963282333d7296b8c1d3bc6c891a3ec183b36cbc9dd0c194e9627c952f29c9399638c51ca9650462999259452c61842f440ca286564c9cc52cad871ce397fa6902c8b314e9a5129a41380100827a5dd9c93cee9d9e99046dad16c4e10628c73ca19218c734a3a27f3acb17ba763374b2965954d67949359664f6450441e6e11284501811108e8856434c50889c90c4e40004200f8002f444162f20294272fbc1005c9031294a4848031094652a41829c50082282d3051329a12a5052325264ea4b8d0821193031c0d258084185a3092924289e0034f948ca608a08325274a46508c5e60a2800324200124b860c424ca520c22506a210400b860a464e482521426430920c1e889d212012008980f60a4f401264a51969cb4100509c9890f912100cc1025044b01184a0009ae43c20198906074e404c9034c5e80f20406294e607023103c59822283921784e8034b320020c80c4630305982f2442906262d4879020225274b5244e091e201c7244489a2f4c1510b4e3c8084144589003e4e8c943ee060c9e8050f74a42c49793283914fe5034089f264a9052752a038515a62b2f404042088f2f53009333cf98091520c5e10252746482df44c81621479f8004ca044792245c9680a1317a018c510831326462f38518ab22485c9d20c463e53a01845005c6e9aa9acba0953a1529b306dc2abd5eac29aace00aae7628152a54628ddd840a5c51a1129b508154a874135ed1d58a52a1b2ea265420152a54a8ac6a13a6029b30152add640579459bac2015d8840a5cc1262bc854a8ac5672359b5059416ec2dc640557b063135ead562bd9640557b009af6013023419c8cc1004529c70afed88f9bb14a7bd4b94d6bfec5d3d3542e5eb6d2d7f97faabf7d4a24b8fe108d4db46a7f67616c919895e33750f708476e9f3a10a7a5b2dfd7149aea7deb6b5f4d7d493ead34db6c7de9ee4823df843774fb0880efa257a29af1fba13cac77f7a287a48f863d9f3568ee9a0df537b171c1a0fb0a39c704b7799cd4337a13fd87a28e59cf3ea6fd229a187c6e7a19fb074ec5d304bc7de9574cad8b0eadc191e4ad1419f56681c42275d7e976fd72eeaa777ef952a8a40edd5bb4b1f2fd2637e63f8e8dde9976b97dd72e888fa6bef52dc9977afa726f4d714b3b2bf4a3df8d30e79692fea51b2eb500f51fe10f52f51979f7aa8fae557a75011a8fd9a7e5d9207d0c9879c941e124a0901d430a1e66374f9d1eb89be7aef0f15531c81a4b773b5144ef7d31ff419626ac775fc5e9cdf6e73e9c989def55f12533b6c3eba8e9b8b83d36d1e47a08bfacb4d1e47a0cb72fc2f374d8fe37c643f3e7a17e97bc8eaaf3d7246387a33f40785e8a05f96f3dde5590054e60a6b8c8d094486a069197c4324e673d24bdb347bf5473dea5da49f9f9e4dcb9f61716b4e7af5e9d5bbfdd52f6776fe91d36b1295e72428654b0979ea3007499ffea4ecfa93de4522dae01ca3691a73435e88d9bbfef3ccbc847aef4f7e2fe7744d5b113dbbc633f0764fcffdcd342f2fb788fa93de45e2a68fde3112a14d997f44bd3a75ce370f4369debd344dd3344db357e8affe300ff3eed2fccde73665fed174e929a9827e758a5b2c16cb8a0afa6b9777fd35aff6fa579f1e9a7e45a0de38efce2fea2b0699ba3be4dbb1cb75bc9d480f5dde4844bfe397b79bd04399b7efd8ae3fcd2f7bf5a7b98eddfad3bcb3a806d29cb3b23fcda73df5a739e48c68dee545f1fa7b7d5fd49b567a9b952d1966c2a60aa1e8dab5cb729ae5bc9cf6329acfbee818cd5fc8f45dbacb2f64fa663ffeca3792795149feedb43aafe921311a2a3ee47046ce4ff9d0f2734c692ebd7dd32c3710cb814d58f71acd25bbc93067bf9c06b924f4d2a110bde6d25ea29748a24bef12bdc41cdafbf35073ee1451046abfaeee2fd1c3087451a887fe97e8dbaf3f7498826ef3f64bf43bdedb75ea7c503f2ffdfa9097ae43e4a5730d247dee78dc9fcc5cc7deefa773f60afdf494e4b76bf6a2f0d3236724f334aceb0f6a1ed2cf536f4e090d65f89003cc4fea99958f59fe68ab9550887e7a47327a5b7fd0dd3c0b60a503259b2bd22712eaa1fc240450c3441a4828f9ed32b2d158e3e81a9c913312a38d5bb4b0615fd1d8bbddf336a9bdaee8a0536fea5dfdb54b38a66bdfa2cfbb241f3a4b08bb48c19cf9dce2c245870f20a5087f57f34aef5279e91763399cede5d35a60843566e6a8d8a59d118a38aacb63f1185aa45feca308eccc654084178266a45259a44b69d921a7a4873a5b61ba5417d3a5aacef65259a159aacb317b854855a7c89fde930476f939efea7ba8b7a43aff0a9deaa2d44bdaf9e97db9561fbd2842d65fd57204bad7c7d5ecee21c5455a26a9921eed0a9d4a3a738c5ed2ce7f91ddd00822624c215584c69c02647df42e643d732a742f3dda29f26574e6c8cc41ecf0049a26057e63de1174cc7d90f3b79520074d5fba3e89e7bce6cc1dd93ccb9c3914f8354f06d42fa11e7a5951ec4b7dce992345fae65a983e6e6d39736c6e8d2991be39e4946c8eb92637c821a9ae39b49a637673c929b91c3af49883e06d0f73cddec6a65c9f140361dd25b8a2b0ebd0384a271d7a74984227bd00ef43eba9c76b63a1090f78c89fb083252cf8902576d026f65017fae94b7ae8feb0d043f76b02430f5d14a781400f416ef510c6cf9ebfdb5f4ef3c15f6ef3a683bf8c476aaaee847042ea913a435fa2cff07f7a2809ce51625fa24a987c3b6d67d81ef31068e488d60d724762744882a74e430d3550b9a83463dee5dde8ec971ea11e9550af47c9ade1dba1b77b0fb58daec186d45302bd7dba4fb5dcc2614b776af180e6a99ddff510539f35082490676e0e0f61a716ce79e6583ca459551e7ac7381818cdaf09cf3bce39fba987326747f590e6ec3efef3f510f5d56796f36a57af695aa679516fb6a73ae61c99979eb9c611f0f2d231d758ca52c72d1eac3c4be9b895c58f97cef110c44bd75ccb366aa56bda0a6e8e61766a709b49f135d7e0b66359c59ce6473d4a2e9f7e5d978e33974276613a97565dc332e7c732ef4875ccb1cdab854fb923d974ccbbf0af2cbb3815a467ded1f42b5dcaeaa9574e8523ead22fef52df3c6c42d6b48db9cdbb34fce6d45ef9d4776cec2bcc075059d9f12bcc07a00e554571b3999744c34ba736fa8e6595a66d3b965559fcbbfa6a9560de11e7d2b92e3acea317b5e49448a71eb9249a53ef72ae793d9a5f3ebdb9249cd7a3794aaa53af4e3df3ab5e47358558af24d231ef52d75cd3ecddbc07737ecda9edc1bc23d335d7bccc6e7ee16f9a6347996bde857fa96fce9c0a9ac71c74358f8e791c74318f2a48d7bc9b39f5cd6a5e1429fc0cb3f021857f893c5f13ae0d96d0559e5d4788a887a27b515381abac37263459b46089233b115e36731075e9d056a7913b02bd7a175e3d4aa057875e3de8d9432fe3a0b84d8ddba195fd356da79c0ad9b3675ce442c9a9a079190775ad16b29eda7b7d3b735077959f5ed79f08dfb519cd850e7aa6f194762e0f5d5aef27d4607310d8bc2df4cd1e359276e8d0394ac72d2c4e7ce65cb27cf69b6b5adc2087e4ba981f699e65deaeb5ede15c7e7ce6bc6d3fe745dd9b640edaf1e96d757cc7de96dc91761defc26f8fdedc91f6ce8b62677b94b4eb78bb8e677b9464df9e7d7b1f7050ac5d4cb12a7adb537fd1775ca7722a64bff9075c24fae454e8e1a0e89bf7818eeb58c87ae69040d6171e2fea2ea6783cd940d1e38e77afa77ed49ef9f5a286c06a8b2c2b6a4d72281439e48e406f2e497b76a4c341d1773828b25e725074402759559e730dd3386fc79983b01dd7c1ec8dafb98ea68369ce59259d9dcd8b7a67731d8ddb1cd3368f7988e6619e7943e7b63c79aad7f5473defa777d2e94a84d6f6ca0f7f4a40ad956d056aad350f8d2d0e5c68906b377feaaf9d390e9a6daffea6c3e96c2bd0c99fd3392e62a4b9081d3b3b3b3acef9e69aafd0658ef9e5d57776767676da68700d66e34f491222e14f8273380eaa76e3a0ead0aed0519ff7fa5a7de322edd5392ec25fbd6d4da34d999fe453e42775efc341451d7421ec8196a47a6fd256af8e39e677f5d28b22664f9dd5aa9d025fda29f0abb4d5b56ee7aff6e84ae1c2bcbb7aecf2a228ad764108a55f1042e8976cbf20847f5d1ee8da61bbec8f5ddbb13db26d8f746951287ae62112caf65a9d3b9204e7282d6d9fd48087312469f2975f47a64b248c86c5bafc487a754d7ac43ca5248ec362fd5290bf3cc6a5ed2f1562c8ac525203be3948fa12fdccaf52e64bf42f674e0993c71c84c73cb3490d78c84152621ef310d9dc9169847a77f5d4a5bd2e0bfdc2679ff6b64b25e95db58f3821175d831c9c16a25169f1f2eeea2f78af586bf5eab1bd241ad8a3e58fd06d527c08ab27f954d7aefe2eccabbd55f687d5ea717f977797fa9320202f9d621eed8d3ea57b24c9aaf2f7f2a40a4895393fe5facba1bdf3487abbe6d5bbec56fd5e57f57b79d265c5862aaf34853ef429f5a5acbe7a51ac96fa65f9d9dea41ae7a7532fea6ba95f3a6693e24baf27096c1969a716deead4db4ee9eb48fff4cb993b921461b55ed9a13d6a67e85df9d0ab8d7de15f7e79173a7bf524f1af94d51fe1a49844bef48ea277c4deec17a479f42754038d025d7358acbc0769105a0a743a3b5ca463a0ed24a14e9d428c9d3167cc3367b6a7fed833db59ab513b05fe854f1dda2990bad60cb9a50ef49c83a83da2ae753d547dcbe06bcc19e1c9d3f597b9d0630e570f8fa86b997311f89b750e62ef7a48e8d9abedfae3ebab12ea9ab78339e45ab89c3d547fec9877b2f0993a967977f599437b2174cc8b22b4177ae69a9661d7f5d0315b290f699f9287b463cedc11f910b3b17948fb7dc06a8b873ca4fd01ab2d9e7948f36349118b8e590f7449ba8f5ed46d99da3b1dfa657ba09704bf7a3e6858ac2fc06b70bb6cd0b3d30a6915dad4f2d2a7dd4077345d84bf939fdf888b2809fd17f615bbc0a1337bd4b3722548459d49882a4b0f9d5efa07599aee22fd74a1bfa7bf3c87045865853accd29f740c74176679e997e778e934b0771108065ca840820a316e582c1575a98296259be8410536a4200b95952b412ae84c4254ec56aeb4aa3a130354d0a96562808a86302b40a7614904920e9b5e3a751ac2ac509d7a34144520e9d5a321cc0ad4a147834720e9d413badc6a41bfdcc431c8e18b2f79acc1041c66f84bcfcc74ac5a09114616471c6186cd983e54ac62bf422b388ba582597a4884970eb53c0b804aafbae5119a0622500462e70d76f0e37d9e5b3bb079a1d50e67d2a5a4f2d1e19b97debc547af5a050ef52478a50c4f9e941f12b1d3af568a533a7028fa1e5a9f7e59a7ea9fc9df64e475a71f90a85c7d0f2d3ef089e560f0abff949a12cc04aeba7d704468b11d69cf1ee0c1f1db24b1b9db90c7ca1819dcace9c3973b8a8b0a43867ce7f610180872482e8a214429727d2b09662e037ff8535c29a33ac290bb0d29a81c5636851b1df11fcb481dfa8308fc56f54ec97869fde851e7984cb2d1db4fc12fc2f2c0edc80e2863a582c157b34b0538172040ad4a802088ba5ba3cd69543d2bb313cb7020f1c6e28118815164bc55ed42908f9e831955ecda62bd0388e3ff5b78230011abb05baf64d8b52dae910d639a947af734e8d5a1f0ec22139233d5d1a4982735e3af57ca4b4f065f719ec171799ceaecd08e3e5917aa41e9de8a2d123f518a34f9ffe68bb21a7e5c9431d52ef910ebfbf47b6417d56cfa73feac9fe2e0e62f8d2b6191a4f975c843afbe422d012e96f3a9b17ea6f3a73d7e7a747e628b06d3e9dca7cba095cc439e8f2e9437aa8ebefc27c7a66b9812effe9d4d540d7edd93a756aa0cba73399bf447e7a0f17813f1db33efd5d1ed550eb9747eff2a8fe2e6f870eb9cb7baac7efefa95e129cf3d5b9c5d4f4dc623ae34ffd5d4e93e4639e4f7f57b59383d899931cc45ed4d4c2a70257b363180dbea641ce48e69b4baf9673e6229a4fd7347b64f5cc1da947d5d9377bab43d7e0738b298c971cc41db1ed9cad8e59f8ed976b71637b39672fc72c3f642feacb06adcb698460b102395a4d4c56e0a86ef71c44145352c500364c4086191fc0f8628d8a9d8da6f0224598d73884ceff7a6da7a9834e08a78ae2edf9ee729a36321daae96ed79d50483f6f824784088e4e3eb7c690298aa9ae7a52cc4b29a5ecde74fc5d37e493d2bb3e0fbb314f7cbb0fdda3a3cfad314bfc45fdedc48c4101d31823ac08e0b905050da0c88351cd730216d66f92e7841d5afdf10b79ad37d9de23653fc6827e72a2306413eaa14e4bcc0cfefe8841e3af50087f893c844fb491b1b5d8df8ea4bfb586dc3aed412f3a21cfad27da3c74e39685eecab71f5ca0e3d613613c083ae8cc3f7db5193a28820e7a950e86ee850e7a510b6991bfc873f5e7f747f274fdf580f9d8333d6e9569bd74a24ec5168bc5aaa26a2f82000b2e04f1fde121595858e1e284e1d60adafc0a9ce8bfece6fb39ce0958c2b027e8e0c69ea0c39ba1be3c07e8d356f0a39f80a5a93f7ef6be502f6a687dfa6b47c5d4d5404d3d9e137670d31f47d9910dae82886885841f7d9859b38508182ca184172bbec8b162e605475c4a481188b478a38235da80a38c3dd48861020cbc68a1061469d0808b2cf3076e00445a1811a20a106e7e60c28b1aa8ba985ae1c0f4c31814a0f1230934aaeaccfaeaf2baf2f5ab7b0f85f0d5bf9892aafa445a5cdb732b0c1f4ff3680201d5c3a9a20b1300ea07e5e3281fff41b90f1c1d1ae5289fa2d806962214b8e58014eaf2d65c41a1504484dc0715533f435040f9c73db7c2b4e0afd0c3aba70c52cc4057c843c8a98d773825c4e6d99710b15f1386b8bf0e18cd6f1049c72d27e23ccf73ab0939cfdcf4a286567457a83bfdfcad1ed2cf3bb544fa83616c484955759fea42fd1155bf424fa43f2814539b77a17f6d8561e2abcb1b54d537af8eea14abaa77917eb62d3aded8fb1a08fab43ff6d46d31856a20e810c22b3a21a24e41168bc5625241df3a75a9a09f582a48f5e83a786e8589e2e5732bcc130fbd236ec918fc80d1592c4d67b1584bf3c7a70c1f6f7e6016dd3d4d24a28fd7c74f12c4cb17254022f23468478d7a17cacba5ac3e66de51f48bb9c89d5e33e8738bb11ff3db4f9f621ef52e74cd8b22a4e1a96bf64eaf59ba0938ef4c38f1ed2826bc7cbb4fff7cbb163915e25fe8d43be28e40972e3923d2b5694f1b3cd361ce2a6033c99c0efd28fae59533522b67a4d24a934ca7de9d7e149ddae9908b3eed9174796dd3f26f9d82aa76c859210dd23ba6cca5d9baae29f3e7870b297fb88722d43ec8bc8836fab64979ab5fded4a55f24a2bf1cc3ac34d355e7bf725e2f3b75a9dab74b8529f0a1273d28444fbd23e9d3db8e74589860bd019e5b4b34bdb6031fa5790f5d3034f42a7d83188779d5674fe647985f9e617e39767dd5bb30fc74eaf192bfec48a86fefb28e5ddeecc8321d7c98027c88c6122d307e8001f39a06b7a9691b74e0dcd0e5c03d70d407473c1e44e3b13a8ed90e3a0f982dcfe31b18a62f72e2972d1fbf68f918e9c65c121defa680f09a774e391582380f8f63f6a21ec3b01def01abd7783ae7fe3aef9cc7311ed7b1f7e4ec0fe0c077bca835baf1581e672e02f039f0a2e6718c7229e87810e7b11786e771caa58079e7dca993dfebe4b7fb93d7f380d59fbcdbf1ce834859fd8e2703087ff27a343fdaf1936b3b7ef29d1d3f79df8e7761f84ede85e1837810e7f1a2c863efc9298f4f0e05f81c78107b83b88e977dd105f154e0c079bc230e7cc73bda9cc78bfa649150cfe39dbd413c24d473e061de45427d60af7c94474e09741e6f2ec9e6c9fe38cfa7f378d7038ffb43b9ec0fd5a5d079177e072ec4994ba10317d281bd545e48e73caef1d8f8425c9b1b668538e452b8419ca7c99f627cc8a5703b0fe23cf13bf06e0d2fc4a74f2e857e218ed97ee652e83c8877f2eef4a5f842fccafe30ef3cee0fdbc0bbab17e26de073032f6acc6ee05df8188fcb1ed29cc7b33cce63b32fbaa5c8e3995d82cfb3241f2bd3f528811fc4e107f1cee3bcbd9e24d03b87de7937ebec91e6976b904b927d10bf9610b38495d7209782e6d765b5205607faf505ce5fdadc98d3f1eeea51bfe3277b61f8d3e93b47f1f078e73d28ef76df3907de81e5fe38f06ef73c2ee4f43cce9dea710e38f0eef53cdeddc04f2ec47b2c379010ef5edf7977f31d2f8a3b96fd64a96f602f12ea83f8e63a760afc202eb924fd413c885fded53c4810ab03b907acb8a883d8fe20de851fc4757cc70af1ce9e9cc75ed4f378dcf1a3ce4fbed3f9c93b3f79dc1f8fefb8108fc78b6210dbcf63efe6f5753c88edef09e2473cde79102feba2eb49c2e39df3789c779c737f9cef70fd3ade91e69cbd9b87847acdbb9cbbbf442e0ccf2e392393f51209f55360920d1ea27ae704da85167ee9a05274f67a92307b4af2a1ed992f59287bac7e777b544739a9bdf227ec3dc0ec7891afd35cdca436338ad5cd633c75d7e7a2a077bafe46dffa3bf5d72fbfebaf4f3d24ff99875c90ecf524892e5d7a577ef4e0141df4d5676d68fca343e72839cd0166f6414d09a3b7cd2434e621296397d07eb99fb99f1dfe9112fc22ed97a15d6a1e6abfeccccdcc2e3d76e8cd2581ad8e30e680c79b0d2075c7a30aa3125a6cf3d30d373d841042a15fd2df9c944208218417ec6f3ac781a1bffad27b4afda376e85d5b172d34d8a4a917c361380ce7f417f5ece35f985cb581df4f88df213ca97b49762db35f36701e2196c2e9b0ac036f178a290ebcbd8ba9138f0bf1feaab707b15288f5c92c517fd53bb01f0742412c3fe6423175e2f1f62fa636c8782caabfea9d2deaaffa8e75407fd575ec0a2cf4577db31be8afba669b7050f50decd54095630a8506aa7ea43f8344417ab6f1afdb4b1d2bb7ebb5938f06397bbbd77cb317f59aa724370ef6104db5d65aab17b5d05767ee0814a23faa7ef925fa09e2b7f34f9d4ce8af4f964803b50bb11c81320f62b3a246fae169a9028d7f2e74f3ed504cd74e9db27e665f74dcf4176a791574550b04e42f8f48dc54a9b7795f3067c73c6ea07bb9a90df988d5bb44b0934fe17499639a63ded9abc20aabeb54589dabbe411d7b519bbd420f3d25f937b3d7ff5e77497ef4cbab1dec3de69cd3882acc1c299121fd418088e8ea410b1acfdd699820ea8f9dd1080df97e883c8b695aa24946a1f52459927f2fbfdefccca1e7d0eb49a23974e8dd9e24de950fbd3bfdb6af5ef37a926cf235df3c25f94844bff9eab58bbbb8a6c7367b6954d39c6a1ef777b975d97bba2eaf9787027c291dd01f53ea9376f37cd9b2e9cf67c5672e09b7befb571c9434b8283cc3233ae84844cfcc5cc441a739e7ec36f07302a49f9fd3fb63df2e2995e8a0cf3be4d987a0e81a1087ce5131caef678505a34982d1bc3c6d1a0a444110bd6403012e420307414ef39708b786746a030d0489e4e011c70f189cd04e9d1a02ebd0159de10abafb1387f410e6d1bb18dde7f2e9d13df33297cf1c967948db5fd8e5797f17ec24340ea1e35c3ebcdce6d957e8146c45200c73147a88f2f8e5309ed91dd0431a168130676758c4637e5325c02d3c02e63701cff7e775fc7e43bef32bb4f925826113c330a76430c769dc856110621836b1cb1b0262818129d3436de15f18866118d6d07215e2b1144e777f289cae3adca1bb30cbcf87de8e3517ea984f2b350c8526349ed69ce3bc25f9dd4dfa6be769ef38cd8e10eab3cd2271503b64c5146c3510e6f7c21c3a8161d031cc9b608e6118b6549ff3e99843343dc439e6b0d5439b63b0f5d806a187c44dcf39734638f99a959f6118c6681e730cc39c7fb015063337be8f455c24060e82ce777b8e42cfe3ecdea92e0245ce759cfd420dd1782cfcbeb84574a5e9b22e4c47c463f9b5d83f9f79734a7ccaf021079b25fd41ef2c1a0f773e8f4019e42c7c1d17f2980ae2d1bf18c45e110832c714117ca2bb8ce6a33ba087368f8e02047a48f3ebf288c4703e13328148f38844f499474e49102f5f00a1651e1e0fdd3cf4ebcd43af7036d01f944d3b5db1386c3df521f79482ac9f6754a7508840d499b6e93667a1bf0df447bda8291bdde5374f9d92d15db8056ee9a10acbb495f3d4a117323dd41ee577028af9c2cf424cfd3410f5ebeaa4b7791775b1a1703a14620a6669207a2feab089ee329b2d4f9d851eda9cfa069af41018ba854b0f654e1d76e9212f0db5f450961e82bec12c4fa1b724e533f7c341edd36296c2e91a92e9a05fc87a15f521449d6215f5ebe729aa876674ea5d4c49a7ce3fd43b82add90547ea37c61827e539a7c63ee4d9998366646f383d8744388829cbb974d0affeb8d1d89e913631d827cfc93ed98f2633f3d575137c31ec8e32463f9ad2631888c63fd44a67faefb995849bd68bf0dc5262cb2b81c77bf0dc52a2e9b5b84d2fb24be4d25bbed6a75e10efb596fe2abdf297faa153bfedd1fad9c9a9777582f8bd9c799cba10ee9410a77ef2ee92bc624a88c7a5f89873deb910cb0db4e3412c3750e7694e9d638ac7dbc17c569b7dd1e9784b4bf237b7d917dde52dc5af9b73d3d99b4372045d7ef58e36afca5ff20f322fbaa57897e2b7b377a198f99877d45e93b477047d7e9d9a77579153613e9cde6d2d4fb318e34f7f315ebf4dea52c2f012e965204f517f61a8f0a90705f5d23b822ebde83289a6f7e79617341ef388fa8bde143a6d8e53a1f5f235b971a79644a0e8b4ba846236bf90cc43efce9aa556ead52567a4b68aa2e48c404a650f4d6fa6ce024be0afce5a7aa8baf46e55cb2a683f9b49fbea15b535a1bfe84b32a7de1399a0bb441ffd8a9777bfbfd7471abebab4deec018e205dcea4f87352912b9deec0684c103a33af9aa5fc1904e492d4afccb2b6b34f87963b0b7bcdd43dc0112084edad85adf469dba585ce6d24f21c42e31eeacbd9b7ae539cb36b8dd9f66aa56746dab1b698eca1de9c3ba5e35af5e83ab6fa4f0f490fda7b7dc4bc6efd41ce9e1a083a379775d151c790506fce08e6dc43980763c5fcb219a7499b796377fbe9a1ccbb28b851db4660b4547aa5b5dc43e310bad6f23ef63484eaaf9d1d12d1b909450e4042c966ea217ee9dd032c815f6af969372abae84cc6b777d74377ddafcbddbf89061a43af15c36ac5aaa4720bf539c904c15be492c821e008d3a3b79d2ee1085706f1d3935afaeb1e028ed01e2d7f8c51462373b6955a66905b625bb9a5bfd5cf1893eac55784beabfe8d31c648bf8874c84153d230a68b525e43d2e3ff5194d18b73ebba819f1220fdbc740ab56b6be25154ce88f44bc618235f3ad2bb3100d1418f4bf2e5cff4e8ddeb63a57e6badf592343685da198d7f6e475d7a9727f3749e7ec4f22ec59f2e7d4efd4d9fb6c94f971646d141975e14a75d9a3fa777f5d7edc9fe78c26846d3e0988da1d42494d79dd35e57747e34bdabbda3bd7a072f5ed07c019e5b2ad8213d577fd0f93729c7453d66cf67b0a4f1bd59d9dfd6d9931d1df5a6773be9e9ece183927274fe176a815a62ca1908fa75dd4ecb992c35f8f620fdeb500c4d82f5d135cdb943bde61199d0a918fd329a9eee69af47029b736e01cd75bc1a00e09a735e0d615600806b9ad700826f5e8f74566dce2a9f0ea5ed249cce9f29a62018068a5ebd7b4def5eed14325dde457917f5173271cf6778d0e2db03d3f43d087e89fe8a2767f798ea7176a1980280b36b114e7721180826a6dc612ba63af0b88147876e3cded141403e3a27b37017caf9e84b62aa870101f0cb6edec7b500d830136015abccf480c7731bcf667858e29b9bc0667d5cb33d0e71f8c037c7c103d7dc2d546910e51d38733dd5a7c70350e4891781a90b81a297c070841b24084c3104bad9dfecb55847d7cedc454667e482618eaebd631d1d1117911e5d019c824b60d85fa2971e04c341d1e39bee42304a9723e1a4cb91f0d30fa21d9d74e9693d8d28f5549f0e000b826d3dbacb2eb162850347b9950dbc03872d313175b9772f08868b5c5dd35f7e219b4d7ae9e22bc9bf90e963162e827974c803a79e3050f4c87c0811fd422e47741ef360f0d2f55f86d323011f0780b3d0e30170c82d01c1311608360000906f74d04a7fd1318f86cb2f03b2c4ca07ee816b9133722dd1aab7c4c7ab214cf51a3ef0cdf957887ea87abc1a3c70ad47021ff8e62b7ce07104dabc7a2b78e071046a6a4f166575bc03cb3907b6f30dec8e0bb1990791c0b43d4b369f00ab36b740ec43a5f9c93ecab2aa03cb2a0e2cab36b0ac3a59a89a965f88151c769c39cead6cae05b1ac8259fa8b168a8940d1371b9db3d1756cf41d1bbdb3d133cb6359d55956ed5856e958567196559b6595665995d9154bc59c9125104c048a6f74500b6482603e7a84a3837e215377b0aa1da4a5f10fabb8d5289346d664468d3ccca8d162d2d911030410490c21024b763982731344ab88201e347521d371ce743143cc99239c38d3050b27ae2bce0f7eb49b2098ba6839f30320646a8d43a6c598a1c539c334c719262c7cf5f68a1d56536499b1438f9619385eccd8c1668bc71ebae693f240cb8fd0434781cbc35353b7fcb0e2efb769f1638cbf44fcf0f2975b1cfc6534cf680cdd21a51935691eba09d2e5f443d46ca4f17342001161d0714ae3f3200c1790f9d28072a496333a40396c180e86c797310c870d6a53c3849a2690369f1e5a92dc924bdd2c168bb5d4bda6d9e8ee09ce24ce62b1ce9873ce18a3f4961a0e195d1e49afeb2fc618e39472ca8e6de685d3b729a79c5ed79fbcdb4be99bf4d3943418ba107ac3e8c31a97647decfa8bab194527fd8dfc2438c7cdcbedd4db76a27e619c97ced52f8413a19b9790cd4b874d31d55a1ca689a9cca57791a09c97be9de2d8ba536b99de7528146d2d1f619abf5d4602519579d04d048a1ec7a0209cad3b413952cb19a60bca91ac69458c167ad20aed743aa1fa8b72ba76fba743873689ca4bea03dfc7073bf9bc7142f9f417c348e9974f59ed555d9b9b74fe282597447257dce1e28cb4474ec909e5336953e9bdf9440321a5de05bd4e5e970dd7d69de468e8b172f5aef424b51bf536bf4d9efaf4a79e5472b9a4f59294d2fee0bfa059a6a884990edbe307599aae9dbdbb23dc2274ddef67e4e831b53975a44f8ecd524aa9779b349920fce741182e88e2fa24ab46cd6ffdea977e9d5f5d7211ce6b7c2ed27975c84576bc7a73111dafde45dabed86f74d53f2a9fd2d059e6a0e93b1672d0741ddb1c349db39283a66f76ba367f7a467f3a567fbabc6678b9d597481bab61420d1312cad631d19d28e5d6dbd65f3cf5f6b2e5e6465e5b77379fe8e03dfd949ed41a4a87fd95a17e4f2fbbe577dfab216479914e3f678cd7552fbfd84be990535f04423a7ddd9b4efabda4d77d97772ffeeece4fafdeddf9fbfd7cea9d3828baac1295e0dfd3c72b52ea219d5e7a734a104044182ed8a6f47a9240393db7c0d4c8b1bdbbbabc88f9bd6ec73ca96b955ad9a6ab7ee5c7abbfd84d47a132ef760c84cd24feb2af8dd6ea2dcd0761ce9c393fe7f4f6e94d992f3d2914cf50335dccc851a799269a0603769043d4a08928b42ce1654d0a5ef458b303105e14f14715785c767cb9d22071c5225c660b52946903873cba04d244cf1169689146183b82f0018f220850c71799c31857beb8610833758c8112c78c2f7c0862057e94b9e30f3860a2195bca90b5c8157a6ca9628b229adc68e103cb0a8cb8034d1f70f27801087454c9618b346eb0418f1970c1639c21860d437441e6cd1e2e40a25b6ac86b43175576e032660b360d70c30467e670838226aadce182a7737c816c4800439a4963822886f862a5883d92e8c14c1ed3cc0b3837be98200e31d428630936de7c7144bc028e9978424364073b9040a20d2daeb043e98c0e800c9165873ae690a3bea1a5d65acb4420ae34933e4f506bad7788997794e9eca812ef68657580b175f4d90444a3a9049b1a24b23262378fe0220541e4804329a534884bbd2207206ad448234c16363e157879820b0af4f0a3f50227fa88a3033cba6023093e0219e305036e887881143298411e6fe0e0da6cd9e1b4c616d9841a5578f1264c107a9c4972a20830da3871071a7ac449238fa76e6a9739e79c656c6edccc39271a72b66b090558c4ac81021fac6c51f3255303858c02101a4c51250c1a2b027963ce131a5ac59a55183cd68083881b0289b3022dbcfcf1c49a28ea986303207ab8c174c4b9024e164d5cb922461671d02127d2f107c65cd8a1c41371c04933674d1b415421c30f34d058230b194fc83823892a479cc0071ab4d169430ea594169969c4b4a0cd193170438821e250a1baa84f63471a3d7e4e28aa3051b1c686323e84a19a6c94a1592e3698a0177002a0460d845063830e58c648530697c68d0d0a1f54ac608f3746f420c61a6960a0f3c50ddc99cab2210e2fdcd41188116ee4d400cb1521b018c20f2d78bca1c612d00d931b2d5d250283038c133245ac01a68a983750708123f25053449318707c612313a006972dbed870040cd62832c304192c695ca9e34d1910d6fca145d31531f810820dd3171e4e70860f62dcb822478f1fee48234ce439e6e8b1c3187f14e1c31a25519c71c11c5be06c394115645c6ac0f4b0071d7ff4500598377f04910105196ab8ac699a13a6090d0861ea52cd97700e2d52422cb2375b18ce1b2f5b8d810920bcbc71628b17636010441349c4200b34b0e0014e0dc638c38939e7a4230b4647105d9139e39639e79c5780d92e2c4a8005113fa77773ce098219973cb0196be0e0d1060c347a2441451278fcc0440e3998604c1e6bcc800c3082b7483347adb56e89407cea6aadb5569644d36aa4a8b59b48f4197276d4d431479a1ffa68a2a5c6ca0c52434e992c8ea872c31d65a86149b80598d511787451031d7cc8c254823358e6192d71489b228038a20939ea48a2892261041661c831c28d1839ac9c68230e374d30b187152cf040d343461629680a030ba63953e421c716355628d1071b265053859ba76350196499010e4d6da2c0c30c0e8c7982f5850d992af2e0838b3ac45862ce39e79c2de8b25d6a3c5184162f08e48833da8021e7e7cecf3072f8d9fd6449d1e58d29d694a00734aa30328085cc981df06819b166b6200646a8d1041a1aa481a39a6090f939c1e8e227093fc170d903076f5a3108c4893fc6c80102796821831cd4b051e3863c8a08400b5653d0e0893900a1a33505180600c38b1072f880c71156be40818c434c1aea011c68a650a2893344b480bd7803c61c575ec00216b0f008244d139d1cad12e66806f4170c6051830d385e646145113ab081451976acc1a2861773ce39e70483b55d6030f57460a8e0e774a9038f1a72f80d9c39b63c356347d09bb6420e124f298d5dc811d2a6ccdc228e05b0708186cc1d7cec118339676eb8de0461831064b04822871aa868175dadb5625ea77badb5d636c268202e6a038d069ab3fbcb3214d60e4c50a1851b70f8f066ccd7205fdfa0f93a821d64500148939538dea82a0b62adb566257428c9718ae95af9925d7dd3e5abcb5a6bad5dd7393da335a5a194ee3ca5945236dc5c92524a69097398c17a2871831870e6f0c10d1407c8c10a32306013c60b172c52f073a27199250b3740d411c61b239260a28b3059c0d1b2e843c7882a869022872bac0064055ccc98c60cfae28eed0b366090473590d518e2053d8429819a2bda80610544c0d9a28d1b57defc99236a97362803e6a0949f524ae915692eb9fa810c22fec022270a335ee815719e5ee107083b9881e38b269aba5cc186ca0c1dd18d2e5aa4006870851c2e59c280230812dae411e6873458dce185ea8e16f83c658252f994524ad3305d324d0b9ebaa4b4c89b18002c5ca0050e2b08332a505dd41375e4f1850b173ba2d0a2dac38ea7787c03c0c4961c2764dc11664b96297e2863460d59459aa74f598003973cfaf8a18b183a1840cf48c3268c2d5db0b8d1c40426aab982e72f90451f677c80838d2ec02c600e4a29a55988b9241b2d1dc62401a7071580a14595a7540b2c7f7aca458b0f35e0c2b485185ca84c6817681c4277bd7c9f73ce39e709d5d39d8bcc9f73f61cdd9c4570c48940fcd8f51bfff147930ad468c126873a5417f565a4a16a74c848c0650c209818c30717c4a12ae1eba8df0bc9d69ff4983a35907409431365e4ec50851064dc50c594760610399e08a48a953d54138b297ece345afcdc7e16f93927f54efd496f1774fc277972b983c6fd2c35ee38e288230e4a6908466814b2a4d451903aac9452f1e6697c4a299dde2647c72f97f041398f012707309cf0a30a145c61c738c3882b9c20e2092eace0c222800a28301a02155fb20d053305ec0cc5f424e9365d7bb04dc7befad5436ff55a8cb18b94720b843ca7f7f49ae90ba6579c3dad038a50e80f5281c445c5102fa594524ac902992098b288c1620a2c9ea063871380e1070db4a8e41f2fb9975430bdd47949c24b29a594730a9d2960404340a188085d3bcf2d298040d134da65bfd1aff4ab514a5b74cec9afc1cdc812a12fc618511188af9cb39b329bd2c62b022d89101e4d89ff4504d5b1676e05c962ad00592c55f55e815baaeaa11081d88b1abe6cd28cba9de71699371aff5ca1de9c6eb10252b851031ac489c1196bd8cd0bbca0c1125ed490028929c8885398b1c101be687fda3b3db7c804f2da738b4c1f428d86c63fb7c57c3b5cd3ddebcbc414852d98865236cde4865a56c13211a85d6be297e1fcf4cb719e05c5c89900ab9a44a02ba6aab7772895b44b2250f5ead540bf69dba5d76301e9d3a757c3e552c52a0d6ed5fbeb2557046a297dfa6565f54b4a97dd25a6a6b737989892de09886cdc7483e9af9d78e82c8e4016984e7d3aedb18074ead2a9d0128f40dd5d2250bb04f3edf76a31dd540f32683cb7a210f341cf2d325ebec570918e83a44b976e5efabd5e4aa055570452a3bb2de6a54b3631356920a70b4bba6cc514abd2bc6c7ae9b1155335b4c3a698eaeab3bd7a2c2ad41b3a98984a1353354c671353d3a3218c05a01e52b480a5babc3a0d54a84fbfaa47857a61a2d740657aacd8e68e2058aa76313125264dbb69395dcac41454498f4d514e4cb116303155c2124d6254d2a5185926a6a015488469b189acd870628a556e22d3cb8e23ddc08e71b48b8bc056b16b3b609e05e658802d58068a814d729a05d3b089e3060e472024b0f3954a731daf473a07c1486fc905bd7aac0e6e617aa8c50234689e398f5b80861ddf9cba52120b3c5e9d05ea9c1bf972b916ad52f4ce67e7d39592a4c04f4a9a00ab747c02ac0ae2492cf45800cb1c7356e9785d0482ce428f05745c880bf16a5005f190d8de1281a0f3d8cef6b4535fa9b46827c02a2b3a8eb906390b648e796461731d678e058d851daf992210741daf273ae7284420e85a6bb9dde5a167b6a9277a4b2e0f1581a057efa3b6a7bd25421168a5a2b2b38a5d67a071cf4144e482eb2262a10ed090514aa26889f4c75e2811051d52e4f1c5177bf01969d470b387166ec4c0893257b0323e782024d41f9194b0092ba25023cc1a57748942ae4ca0861b428c6101206948a19254d0f1727b49451f2f85bc1ce1a58c725cf1fbe1e0b915c5964d0c223d1dd0a94bc5ce9c9a4e7af43a54143bf4d01daa3b111913c8c72caa18638cd1899810fd122132c14da7f3dc1a13e76f979243431ae8bbb6e7d6983763def8fbc91404050505f5c1b2a211678cb30b0ce5f30aad088518bb3805998f535861808f314e39a647445aa12bba777f0cd0012062dad861c49a2566c07fe0d0f4450daa6c81c30d3f43c6a4f9eeb935a60c6d2a038d0d645d0e9df1a8240a95cb83899804ad538866682641400133150030381c128c06c4215557e51e14800b97c2524a9f89434190e428886118c6186288210000020c20c420a4dc60077193348c1eb87bc91d34d5a9cb113aae4208b792a7eb717b1dda19c3c2f7c0f7148c695948d44859b1c3da1b1579240a8efb6aff85d05cffeeef704ac890e82c73293e79bba1858db330e417bcba91b8d8cbaf5c0045e6714c4857e542d5e4e236fce83151c09970711fe5caafe5a387357938b22014ca33d077b8781e1910c81e765d6dd5957058c30c3cb297429b53c91b8d428f8c3c6d7e02ac060050cddbe8880b6d491aa70f09248cca36023c5c3ac46e6290d470001b37b77011108202f9ce84f775b0e064d7c02e5f7e0d2629d2224e3c9988abd50df06525339499340e0fcfc848ec96b0cff35f964afe36e03e91caa9077a8a0d09e391bc145e58fac60bf57104280b2fb4c79cdd86962ec05945238d358b0d948c6e698037efb21b54a4d08591617354a5fd3ca1be7c2d4f0b5796d2fd417380d1eef35e7fc202e2002c08048d1c54e749653865660c5d4c0cdfd78c35a0c4ac2036b3bf96ab932c9906a12b16c46ba00b9c3ee8452ae443194b7e7c8b20e9e1cf40cbfb468b683c7aeadb0d51edc187cd3e8f7aa948ab3066f7f25218a4d1ddca6f5700eb102ba65336a5bfa8d31f7d03903500ed58a5cf322c9cb9ab8b398c0102b920126d85497c5066cb71baaa7defc65598d0da630b4e688530c1d8feab8840b92b7834e80014b617d242abe62215e9cc91704832bb18a50ecd8e5d68b0164d4e7f86fb349573ec582f89b3710a939d75dab1564bed12d2828edae61f42490f1c122b5402f1d8b8420312b1477583f90070e1e346d2691172ac938b84778545ee6aaf961b35a9d92db5027855fd940ecf23e4679570f87689e10607f7285df5ec45e27d36f4c271b6889b87602ed3b6acd4c83b5bc5eafde8ab2f8631d0727718e6b90fbc90e12cb193364944fe3c0fb7198f06c41848cd983e76bf274d7509bd9cba0daf2b04ceb1c5652cb60bfef3c2e700d61698d4fed29c334ff723bb64dfdfb188ca24509eb6a6c688e42f05793dfdad9b14e0a32bd585d828d96d0a715251c5ce4e22106f0edd37891136d2344a37c0804e901c0c0367fa77eb010814abfa007a7678928e2158770e40bd3983ceec086ea464c9e5ba51b2fb6c4812898169da8382c6da8defc42edb1d83a5ecce485db41e078824e86b6f0124ffc215dc86bdb231fc5c658e1c8a3fc55bd4c760e2a58eea3531214f42ef190b3f8b397fb7ae78bc20f1b4211c91f0c27b784c08ef9bbc330ee16de488486055e1a54f306bf7c474c3934f1143544d47c33afa051011dc09f21c826b1271a84d44ac733dbe22d1451a32d98b3c70a82efd2fdf5c7a9142ed02bf86a136a2cb8f3cc05d4073a9def01f1cb6aea777502d621e135799e90759ca0fd8b5367337aa2d7a22ce251a79d8dbab3d54daa75b893548c2c885c603d490f2512e12ebc3ae7e69ba31d7100edced18d55b85b0c30baa3e5b3e03bd9a3a3f2c6b9f07ae6eb097ffca39b06c808dbeef3b8c6f8daeb692e266c35489c74f4f10e59cb418cfbcc7f61724deeae41f521d3a7120a2c07ee43a74337269c19b89c8b2674f1c13aaa8e1e49ac2cebbeba1ab0cc7edd5b4a17278bc31cd638e1120c3fa8bee42c3551756f4d360f760e9fc07971af87a52626cf2b8add6e63490e50f7b5bd5e75521f90a0ee2d25d33f7327e17c5b260d6ec0ebef1e9366bf2347103096cc288203ac041a330e74a2290aa65a8dfc34b86f356c1d2cb055a7d589c5a9c18a27513a3a4c67ee46239056509280ca9dd6295f2f818c8ceae60000db91cf5360b9490e728469c18dbd2b3705d22e9bcdc4d339e72b78e5b9e0b1cb5db60a8dc9517d16344bc3fa212a6a82d5fc0a0db98e078e55086bfb8ea40ec0686f1bc50dceb4b8b41a8445f44c86a8ee33c35ef880e2adae65269113926aeabadc2ab9775bec923814f15ef6dd12e52fb4e6ed809aabb845f705b8294cc7948fea04068c90e14a893037c18f77218012c7ebad0c7a753c12a6317c3cfb043e0f3c6a02cecec15ce2ad84c815d971a862c96f678e97d6da927bebc947f0bda8fbed7972baf02d9958f61d3b2684c0b3ebbf2cee6e0fd03cdf48501f9177073c7f3dd659af8dd4e73b8ec470e53f0e1b7e79bb9de928f2fd9690bfbae3a13b65c3f659118eb6a7ae162f12746b9f5dfbc96ebf7696a0910416f0f273c302703a17b80cbaf29b2e8925eb8ee10a2f8e8dbe7d0ebfb5a3eb17972316ab5474649a04487ae883e362f4a96312977fda15550858bdbb7bbaf0d791f25c540e0627948cc922e93292ddbe6c63815283943dc616c38d38007b31017a18a23607f13105f9bb2ae4383df557fb6cbb30f3e4d59681e6e30cb95ee2dfb94d78043acf41af513ac2e2db331f02d1e3096320456d54b1903628034ec8699b6117bccdb442feb0144e3bbf2786b87be1b1343c15ee01ccf47ac73d6456c80aa4411daae3899a438b5b0ac085716886b0dcd382b4d37876660ab3e0e4f07fcdae3c556a6520c75f5c0c53034fbd0ba1d7ee43bf64ca7b5625519b8df503fa315a6b04cb5bd03e4b62654a2c839527105293357c76567750f887a956af4af39e81b9d3e9d1f48faf81b1d0df639a9ed1000ff3e5ca5591f69ffbfe8b9c85500532274509038285f8416008b0356b8f42b8440970a728804f5d8e4746cc014329d65aebbe83e354c784e3fa70c1927c3075b3636ae53ac8bca1929a6ca8fbb1a610dea527be8f503c1d5819ee7c73cf8e80d36a01ad826f7e97036b0a197e62e20c877d2c5483afb2b246d67e641a67b79ef1cb87dc6a57342b1e21ea4f20598ac565cf1e021995a99129efdb20014035841d1701ffc5389adece78b11dfd06634f821ca186264c5efcb43388ebf314e145a1d4e16be4f5d840feb6ac39e9a090284b1de6d632f0a8919dfd2054b13f83b84221858cccb69d718ffbe0b27caa173a329ec0087e53e0b2d376cf71fe825ceebb692811cc141732a0079a1e5132798a8cbdd900b682aa5c2260ea83d329a51c92f3d3de28fad2d390a1c6b6b536374a652c6a964793e8e8e463cb25258c0aaa5b95916cb593e0bb8be9a76859f002415b4d1ce0cf2683c0eec7ce5d78aba165d10681863e46f21680ba603242f2de9c7351e9c73ae394dba008ac1ac9fbc1f8982dabe23e9cc80fb3e3ce53b9db51d5de69de47451b567278455b75440c499b482ad70d9ae6cb911c06a0cd2229b52f36621f819c15a4064606d678c175893a268c9c8849af859f43744b4ccec3896b2629fe46ee925fea75958f4658861d878c50fc45dafc0a416171706474ef4f38b780f5de7142ae62a0a1e07159caaf4d494220f8505c1f363e3574e90918f111945eed1c5a540747ff88a5c347fe89297dfe6c301f4c84a070cd3c4b17091ea2bfc411bf8f70f9f9a6256bbc0464b2c8994a9b5066ece52950a8d71bda3d008d7e2da2863309a595bea41286dcb7df15f46cb71202d6ef8ac2e03aa5eb70274fd32ba33a298e7ab99be6ef2f54e78ecfd61d1559a13691291c01cfe95b87157b49bd7270c8fb2516c153c12494bd86eb6adcbbedd888e94684ccf29d9e2bc16778ac07b29a4d692e3c12bb76212b698e363eee0200af95226803e9a8bf0379da581651045c5401695c7425f738368ab51045b31c32aa05f892f26b86ae8714078699145217e53cd02c21856304323fd305573c4bb4e17ccdcb9397f42473eb1c67df6c21640334b971fa8a30677b8e6b097ec8844a9640bd76ee18b0168c547419f114ccbc40559cd95a82b21a6435c62d296a32b66367e9d02cf1b4655bbb2e72e52b10c7a93fb4681a2e1189580bf6b10771163da3227344656662680241a21569f5a324f73859bc65be08a477375aa7f700b0de8e867cff8d43453d4afd65ae1072916c26952a05ca752e721db3fe86dea348c2d09454962313d2171e8deb4c0a24739053171d2c616e00796e881bcea65acf99115cf7c987279956b2590ca299e0656d3194b1f81e8d2e2152a4c7dfe309c195e19492e1dfe5b3a1f8386539439eea66a81ea89121b45e750a1aba7a7d35a8ef2892db442ea89c25f29027167368a8a452826c63793901255aaf3a72ec7c1b7839d968f55b6cf19aa3dc71d9b32ccca54d7d0640e95dc0632e392c1d15a76f55c623c2c25c84389ca11ba8d49b07a60ba9a6acada378ad8024f43f52268c3d6f0b3ee75515df62da3a99980cd711940fe1ce59a179fccc85399422fd2b148bf2129ca3b8e4b3fd38a5875d55bc791122c69c1905a9740b3265e823855aa1b44bbb05da1ab0918fd00c8ac03518f51cecb7ab8063f511c0fa00bc48d3d1e581daf4767314fb07085cc4895557869e04872b066e2880b9f5b2ac7d6a5e83ca55692e8c92c49962d47422707ca27076d6528d38134dd8764b643e7437236d1111bcc26b06a77bf63ce359712f09188162112a3352120cf12deba3c3032451e0f02ea2d5c1d520a8e94a3e8bf49a0e45b06c4ed804c5d6c8082f9cd78a54ed309ff8b4c6ff6cdf261a6465daeb199c5a60559c3559c395793c1c6d68bacc04d7f065a305e4837b58fd63af23894835730eb699edd014a24d0aef6298c40c77e0a923371611047c46a0d5cd161008fdfac45885e7b371e90117dfa1b170c4ed9332feeab774edac5251f070f49fee231597aac10bebd222f617681c51a5f82a35cb51f2358262a0e42a2b8666cda72b94071f6f8a0941cb36fecdeeb86de53c199645a33d98a6cebdb54762246fe57200a94a60d7bf024dbaf72363b41d742c2533d81dcc3d64e8757c6b874435a30ba42378a0e644d42d81a1dce0f0c9438b823745a381d6fc9e0dc5c35f5639f4a7bcbff5e3efbed500a249e908ab41d54aed40534cd11a43a5cc271d32fe7ff052a3685dfce4a58a0460c7a30e5934bc8dc46bca40002a83b03c201d6900a64d8f5892e605bcb3f109931864f6c6b8709f8297685640fd3fa155ae78a41c70da424e5aaf8e41a25d1ac80641fd0d0da4a63706306c63f7a46941222669ae5348270f693784ecf99135451032a73b4ba1054332a3cb93aef0d3c825f45814121644e4f07e1b74c9f6b34b75f908a0fdcb52a0061b465119fe22c889b92ee96d79711b4b128f96b9ddff1eac032a596bc1a67c69b901f544334e15ed622d70a0af929ddaf5fb5153223975334d659d1052b133beca8764e52a1c616412e8e8896acde902fd7b32f2c8bd965f6b9038bb404dcfbf5e985ffc48f9150239c920f4f5331aab206982c9944f345142d54dcb6d06cb7c8cc0a877ba549f41bdafd8a8a8c629a4fde0b3a08c3356d8b2f6646efa6429269e8c0a0dfd1c48c3432a709333c3b8e4ab8f4c5c3151fa8b0d7ec6be9fd7b15fd140f31933a8c4a9ad38130359afbb76f3314c9a7780af6e31fc861b8e17068d67ee4cd92a3bd1443acbdd4850a63089d6377198bf36a608201f68d0023d6d959550568a0c2bbafafddc27c44ebe32d58e1a314b7ee88a1be343f3ed9b900c5566e310136e4fdd1ca9e4c48d3188954789556d86ebb48230211e88c1128fae9c75069cd46dcbb6052ab1bda8d08af54344b4882f601631f7c63750ac835c6c59706d8aeea22f41c93bdf1d1ab3007e5b2e5c942157ca655a662d3ed337adfb182fe960e31eef72e4c9647d1c066a7a27b52e54fae9bc82b56c0a373e6167f140998deceb35f0e66eaaacc0530cef35935451b83b3716c22a58105c05d86bd9f928cc4650a25d4098603aa124cc3b63ee8b45a352e71b8078f68c4f70245c6c56a2e85417a7631972512b756f48d2fceb7faf21a2ce5d59742a7154e9b88011ef476274c7bc9709c2b78abe9642168397aed4f5e38ccf2417c35d5a9472480d55e159134256fad99981437d8f9339de12b7c66cea212d56b7cc686b6dd288474ac0f983ba3a1f7178355caf181887e59842630c2aa3e83a67f042a1f24a86546649d9e396d73783f79e1b4f59f65c70850a22b8e9160532b0f106d9a1193224607b212092c6d6259dc2888025d520c7c9698097d0da5d4570bbdf80436b64cb2960ee4d914ec6c3d08236239f30a2f052240a39f343f7acff12a8932ea8cd6b710222e2b98494bdc86b5c2bba345ee9d5a7f5132c4646df7d9e5edcf571529782cbb1ba868598667ac6ae4d307804f045cb85b71bc1366951a530f292c44a9f9d685a30ae0b828bc575404bd9b095eada1fa9149fb5b4394b2c62a7ab8b13426008553bf746d0f35d768bbe0410d040034d0e77178c8c7985213d4a4eeca84b316c27b3e95a13533a0a6b3d08601efb5827b00599b86a62f2be5873aa4fdcf5f9d4203b46973b4913aeb1ba47638fec206597f488914ca73f63ae86976e46eacd1e100fa7b136ff81416432efc420b3a3a5feab17f121650e8438ddf6af6e98009e77606c6154d2b454e414cf9490530649c296fefd39c30f833fb9391d97b7602754931e1e8da50fb0c7d6ccd9a4e839bf14aa64a8a7409501632d388e08eaa37202338f444c4a5358b713b8f28c17e09590af800d04c0294fb71d1390cc105f54c9eacfbe11a5725b6f51666b3d6833bc04904807f0085c6fe5f6bdec211e4ceaf0ecb4674c201079ac361e5d1a7c1e26e10428eda9506aa1b2a96414133900c6e0442f1f1660125b0606b31f187e22a356b42140c56fa6f8c618ca14e913d0a5a2d59885ec0c3ddf2f2dfb2322d974440b37c26346a9ebd3de93f0206dce8009c98034c682f98516d8edb71dcdde0e0bd55d75fc0aba79cc5e853191100d582269e5570fce3bb022ea2da52140788be45c81a9ccf52a76a6f0e064cf97c94eb1daf1eb7b1a97999dd457c5da63a14e1aa6b4f5111b2a6d2213a2ea8fb2e272845273b3d30592e4f43595f6d55842950d02baa08f708ee90244fdbf35671ad1e99edc3e8426a86bfd74599187be39cf7f67b71a1a8267d2a0c51d2837d917fd6c1c0d0bdda62e9ca42b7edd0a57aec8a8d4f4ee1743705b7adaac65bf2fbd88c3217487f6656c14004d456b10bb39a45261e81e39d12c45a9210f772879c13e584e0d882be81a802e0661e19b17141d8f5ac8d5b814f33a61e7ab813e4fc9bc6f45e5d37126b9c305818fa2af96f9c7bec0490d399f24fa0d7b68bccf219f452301beadc15b7b1f6d8c34d005ef107cab62703ce2b3a4384680b331889e886139044dc737cdf82625614eaefd35b47714dd5d83363c63518a1bfe452b45c07efaf6f2c1bbd7680b0f56b0e9dd4ba8a39126a6c3d152a9d9fb071836e9d9f512d4c434599d5316a4742ec80ee4ad879cf09a2e3ac166563603b5503397551931cf5f3995985e24381178a5e1bdb51ec900c14ba6232108c655c52d3e1cf6d81cad036877ff859466800677f9dcbcbeb70e0e1ac0f64bd360a563eef1620c74f316172ba0402ae5680c3948fda6e5d76880d91cbf825c8377604ff1441532e398e3a16977ee153f198f45aa0beb74cbb37bb67b6428904abbefd40d9c4f556110139e359b2d689337d075786473838d094fe40406c0542bae7f0b512376ed841e06e603ca1997e0734982899adc6a9cf2b58ccadfcba8df43f2f2e5627a5d6dccb1478267fa8a12b177c10cde7aac966c039d1b441f6b3ec49a857d011305e15f3868b003cb2e16c44faa20dc14fcf0dbd4b69215369740c13498af3a3b6e359c06bc5b1bf8796c274465070f51a91683df2ddebfb938d9b120dcde18e783c5fcad757a3e6500bd81c6c7f25773d8d12c02aa9b42e92d9b7ca981338477137e38e5bc18f84c04f783abe51d1c7a4dbf492ac9808bbe1532a1e43fd85296b788d084bf1e7a4267dba15d40f287b16bc458e7fcea0743c4796a6c4a37e0a6d21c74dc77ef994755ae11e942c84b9ec9f94a364b5697d7d51ff83d596e2b20d84449cf8ff544dbcc634648f1fa4b25a9a4ae09eb15ea08521c868c292b5ce3df5a42b7b3819c43e765ef2a9ba0d46477613cd44ab7646c7a9bd6424d5f2efa05351daba50d6093839a0ccf62144d72c5e88cc00e9988bb18cc2e57fcd5f6e0fb12036c01567220e2ffaac968728668c1e1e90c6f2c28a1817d280fe3591ba3ac1295d8e3efd00ca8800a5ff68648208927eef49bc2423826ed345ea4567f13dad9557a0a7594a593831af2442c6dd81626364b6d25cc2c6b8c2ffdba5f1ce8d3bf9675e7fded48813ff7e7dcae490aa5e9fa552f87275f63e72c75b90da35fc2771f01dc777ac169f57158ebd65ff5bac3ef6fe1705ba490fb39205070a04cd427978638bee5ffa73c1d84e44720845411ea8e4df93da68a61fdbc798acdb3b514705461feb232244ce5afbaa5dcf69407842a0c99175beb4e4bb473e8fe169e97ac9161b153b9d3fe2446fc06a011a7c6c8fa80c5296471684dc4b5fc76a994224823bc55b66cc758b430916ccfe3d476c605e1053f3a7b445f47a9b712eeecdfbd84ec611d93b1243f9014929b224f84cb327f7d0c9f04d549bbc15f9367f64f050cb33e535667f1073de4865fbdb0b2e1dcab9f1f8f7c54bbfe69c74fb08503d43e467f55eb7f362b91710b30a6fdf71b47fb0b5f936c102d7d5efe4c7aeb8e54a628a8fdfe14d1f67e4e8a6256efdec4196ecbb6eeec1127f6a05cd3ff3e83e8a1353eed5a65c041971e11c7f039ae96233a8b587a1a6f0750786139c43cbb46471c286ea5f23022864a5422120f8baa6fc81aff447b30cbf91f96c35589689a9a8527eba217142b74227d468f5084dd0ac242a2c8060c3cd8202924c91b305646250230a25457bb751b762073a289010adfc91e0ffc0d025ac9bee913452512fe56e2c49c6a135dc186b36b150a65a75e5646ab83f4567fcbb2cc750f4450bd2288383c95f32b5c4063151be8f80bcc3dde7ad55e4284cc283707d29bf481315c08d79bc94fdd25418025f25870ac9d62983c8913385f53a2220e6069f6a9164b2b501375f827469ab99cd429e1ea3ed7c62cb548c33a8b5a45d878acb8740e478456dec4539374f62933605a10d805f2db82030030ab184d33a24efd55d4bf1f99ada496c1e82805a7a025e02333fc0b674723b31515ef2d07b14dc34c679429d9d404a13139fcefa29a22538af86a0102c3fb823bf9beb7550622293636971919eb26b4cbadc0ab4c2703000864274f9b764f68f64744663b1e4571d492093806bf35522e855232b9de87804df38dfb76a786103cca3a231de97f091c21b88ce2febbd4db6cac5dabfbd5af2a0e354bb1e91ba0a62b88f9bd3757964764c84f367064139ac8df62739d655346a1ee1349f80d10a1a73290f1aae51dfd35a7c721aeecbb15fccc4c4948a9062a0d760d0432ca081dc51de9a8b137a67b274e520100b04e0762bd990bafd84bd0de3d9da98e85196a262434c1bf6ced9f9203e800bd878b45d964463e4a37992614776e65ca007d3276e2a340b4200b893d25d77496504ecb7440eaa097aa067f283660bfe3056f7344f35da2edeb0a51536098caacc6b3e800798a098b2e7ca122e965a7ba6032d30899d986e3e5193880d7519f76a9269cb602c86a1b640bd05d85093ba87ae83fc2a5e3747a17c818b9b57bd7c2554e39e4b682d0f130d99c3784441d70d476b2496125da5591b4fcb741cf0459755934d1bad0050036d1147d1f0aae596e4bdf09a6460cd81a8e09527e00e483e185e06a56214efcacee789a5cd8059e01d486bef28b08ddad7230f132a947fa0bd9ca62e6b4c04d2307729323324c153c1d349873913a1f785a4532405b9403290e5482c3f6806b9e3943961cadf8a194cf7d9cfd1038d099789a441b299f5fe35e0491f9d77fd0ead57329d578fc80f72a286a51d87b1a84fa899bb456710c83a2abeff25214dd7e1373ed00a8e49422d6fb8887f46de413ffacc6976b0b8218d07a50fe3b95975b50902727ea6ebb4aee1baac31117bc9f036ce9a9d56355c947142700ef55b12d0745f62638134ebd7d0f1758d56536516728b383589e89f69057d7c79c5ab46b0da0616d2419eecc251cc1f189953738dff07626c7adbb6de1c9c8428b78ba3e428570363a0c65ef092bbf982935a9e417485267f9403c65eaa28095a7ce13566a9625d685d01268ff51e78f272b4ff5bde4a32c34c021ab554f9b1142572f6b904bd44294840ae2902a57f9f5c49762404d38ee1ac1d3c0804a3cc549ae148231b4513863c2a9a5ae48875420b714ec027aa61f4e620c54e3aa30c3781eb7bc39d83411a57e64f6df05ea27a6e0ea1f4afb148514d8ad09b92a760fc72f0042059cf2b83a0cf3b72d9d33461446fee7658e262409f8b7d6dc8c18e9ea9e5981f4dd0c7884ab602432cdbed7e85753415f2841861d01964189a31502543a8ae1889b3306cbe84fc10e53f3e924d3d0331bb01bc2003c97807c4f55380a8cb06565e9858a1933b95fe08ed6426f485d88b55320130dfe44e195482296709fb6bbc097b427cb44fcb5934c029a94ed9bfab82d4b3782b22c9511bff44ea22707ceba5a2ea8c2255afe82b03c165111d9dee5e12058e4ba05783239209fa45e80cd57a8e5386d68a35d203dce2ba083e01140e7dfbba2ccc7f9d45347c0da9694368ea2b70d9b946191d622042b28840984034ad372aa2bf81d1e26bcd61cbcc08bf49857c3c59aefa10b4f1a0309e0800711403bdc8346bd9f1a19f2baf495ba71750934b661e54b24146d0b2e448a65f1f48aaa81465587bc1a3b77919b2023828f277e39c978af9e6c465a692cb34bbf855450e0a75991e6a1f314b41deddea588c64f97686286e5ce1c36c13ad1e45316b21775a60e3b629541907298eb32d22c70c207c89fe9634e9a1973f3d75df49bb0ce820a612ab584a90e502679376cb1fcb1f84ce315ec6f3be718c2cd29eeaadd5a56574f0e7f0f9f31332ce038f795aae2ec8f84ffb036ba44fe00fc9a083cb112051f92525511d3829b8be08343f320c6ff8d308298fdc0fbbf0a38bd417a560152e2b7f22e3e5645fe12b73e22bb1e04a06f5547cc48b5e9786dbed68dc7d57c3dd3bb4dcdfa92b7787c1427eabbde52575c4570659366d98e980089ec4bfb28e3b642c5a4041b5d0b35e511036ac518a0603bb1178ff48b3e8cea93da4b620154fd4b2471999ac22d993685430c5771821486144de7cba46f72a92016f5c446622b2c8db9b5db41193a434c82e01942c518744f8fbc3c4153233b20415a092005bb9a44e71a481b32ee1f3481eaeefcaec6f8981f7dd71782244928403a10c246e3ec4b8f7ffc93bd517bf5f19f286a997406c026dfe85f47b5e08ccafbe7687c4f0774e9bd93d114b2ec8d7e9f7a509c9ab1a4781304d0577e6173d04c0f968dd0830d7abad2e128e0de61273e02021ed22117024b8975a7b633dd448f40c30d954611b1c9002b6e3281e2dc7b7f9f18b4ac89449044bdcf3896b4578df6a2e82aca6b1ccfa846c5ee1bf7309d2ce6721b8b88176413a9251c8e9e4e177d9009741c4fc6d9076659c88126cb2f064304f12f1b5f1e6827ae6dae56c5247522af8d710cc714af394c98575c1a47a4e8f6ff0ebcc6121193b64c4c24d108d2fba168096d214cb340e0872f513d109ea33226fc353f0fc954d4e7c16a53f01e28553b12486806091c4ad81414d7a6cea9be40e187a95fc39aff3b3cf7674634db77676896b9bb7adb468b0868328c2a701f54ee559cc17b03f1bf81830942bc3a8bd3bf8ff6dc9e550be2021ee63f677ae29a37ed1cb4f3aaaa959217063683d151b772ca66dc17ccc70087c094d6f003bbbfa06e04b434bfe60d65b13cce62c4a878441843f4cd3597d95a377311148435e386ae490aab7b10abd0fd5fade40ebfe7c0d8647ab52cd89c58e821144f4b0e411d4df12fbf5e849c0cc4649aa04b1520b64b79b622eda14f7bebee8681e60b4745455159ff157ba63267852f0b6100aeb3fa34959a3a2b6d1bc41bc921330c3c281a0cd6e2465b226796942482dad6a7b7e32bc18ce22708110eaf5dad5c52ee18a7e689f881df07e23657ba8179684847a4d55c98b17c367d692743d2c59afb21d04e18b20e2325b8bdb51626bed4408f0f3d864bce109469d9aff7b81550c9135a442d2a517bb460b645bc6095bdf6fce8fd8985acf52ed6062aba208561bb6021f0b6ba3dba2d25a1094b8623b9f091c8b91b50c8943451f62b1554d014c482370cb49762ddf9ca66a9c3a67394b8548a68b5424b5578157bfe42853603dc400bf64449e5498cee1327cf028819eda5f5823535ddd19e4a3fcbf7c3c2dca7c11af3efd9e624cc46937aeb6b1a0ab510032d0c0c774f0967a0117d34f8a1bd5371cef1d4f0c7e8cfd45020e26b19bad737815ba44fd1a9b98c9970553a880dc17c63f3f75831208bd963fd648c7f6639ffe6d51448f06847f1599318142d920807f275a42c9ae38af45f05b6728f9e4f8314863ac27a694cc620f5fcb30fd3602fe90cbeee85370a7ea1c9e75504da284fc6bc8318202bda47aec23f9757ffc9f510f517a2128c32094a7c669a3cc9e28031523e22233acb5b50e2d49c3c0e809b08570e6ece4c45bfda0507d2a1c7960b480f649c440c8a88cf2e220e2339661fb6a04735b9021bf7fc26e38adc1029cc9f46638d28d345cfee949e9929dc68c754ca57006fa96f85555d6dd88aba6047cfd1a55402fc3645194cce48e0c9ae0de38d8dbe4f3af6e46b0bbc206af414bd9dab4d2e4320db538f33a0d7adfb29cef300b9c92e6aaa61223b8e95d7da4a85ee853f298dff2046f8cad449874a8692497eac8209b028a5bde094cc0b09611a11de27099769176b5639ab9dd0dfa480a684d4c6c80bc30cc2fdd2de263df49a9faec0552cb84d7906b77b9bd6556f59e0a79dd6c8b2146bd893c45825e6359a383a6877801407194cb4d09a02e0a5890826353ecbe2d96e0831eb1e10445db7423d4ea10ea68d199c0fd4b083dc44cfcdc5a17ba621a92330952091265b13dfffc17d6b7cdbec0183b4d540092f8521568f0b5866b87104782d5081da0f1707e521f6370d12e82e35e1e0a24e6d1fa81df560e553eb0b6c7f6cb1818290388bd9b7653c2512250f558e0021c1210d1c04140380b024847f958348162c4e9a2a00a35696e27f7a1d2186078c7668147ab432c1eeec1cf9bbd5827400ec39bc29f3240d5ba4edc9c125ccbe04e49f79c13a404af42720202e3861f7fb933894852ef9dedaa7f835c9d136ace07ea6dfa46c0989766ef290343c85b885b3eab350c47324ed0b5fcecc959fb845d6177156252301e54b35c965fe473ffa8fa6c112cb9549a1beebd6a2ab217a23c9e2f43504369dd381818a191df8860568551ffff585f68ef0a4b127453728a65c29aa46ce66daaa6c6ab642bb6284ce415b7a576b701f08c28bb84a990dace9179af4cc81dd2fb30e34fe2327d8b043868479d9116837370f1d1e70a83b54b355e875f07074a6cb25015adb05876a3203f68cfa9621ec260a3da2709bc46f8f506ee8ebcb5b93655d43ac0461f96ebe06bd3dbc10a2d7b1d118778b657ff19ecccf3b000ade1b9e9073a20722d387aaad5b2b705ef921c0f64b796b88bd09093ff067735cf791d82a2a2aeea6c0cb47627963c31b1e794cd3c296e73c468d025b8cdde2e9800820f460935d3a69a35bd4180cca54114e857751ca142cabfdce66cdac2bed8b2e2b8b24b36a5b9452cc75b16d8b409188705ce21ff29d735b11cb20365487fc9867e744111af59433c9ca9c579f581dc3600cb8069065faa9c4d16143caf678442e5e6e93bca7cf5bde229374747dfe442f6a007339a34f189218f3977fe425175187b8e60ba0ec0d7b13af0b8f751b100a7e92ae3a2adcdd55de8bec745e075e834d82c698c0d4f28d220fcae8f10e7cc2e360026ddae4b02ef2c081b199312fda65191a9cceb3296c763c92004aaf66947d36c44f097e14af83105210452d1090dd139deb214e3c1aea54d543a52c48c76a1014e3fc9eb8aa080d674cd4ce9405b1c4633b4797d894b4990118f29fa5e500ee11419559ecba2abaf41541454abd403720adfc11d901f039536af0e0dc4eadb9e63ced725a5fac02c6f8c0134684dc9a905b5822b4a6fa4907ede87ef937804003005f6d8736671b5c1adefe693fb4bd66f4e5d7eb6fb86f82ddcdb0241b8cb38f20b6459573a8742d7871b2d92b94c4bc33f8d7e1336e601784eac5da15e3328cca583057027da549b41a791a87ef586674533c54c70ac36859ce889c71baabc5974127b0c52891f36482621c704a05da59fc910e2a1c1239f9126004bb2fca437149b4d2dc1bc6541349632875e3429292609a95e3a639f5006071ab8689f5e2cc334e71063c58dea211bd3b70061161c11122b6f10abf403a3ec09c9689281c793d605c4f471397c3b4d5275179479461f541f68309774f73182987fa19e34d452fe69b55c02cab57e2e3e2e8d1cec654ba001d5e3e038119e98dd3ed3b771db8c10f8a07561f85700a8b430ba7fa82e12543e0d64d64233cfa878edfb63138958360f376a002338db49041df09b20328d60c85c8136be3aca1a7979d719deb0e42eb14b2cedb5c03ba0333e792ea7a1a4787e504a461878a9caf6e41f01432e9830d99b6a36410da971796dd8a88b1c59c2ebfd23af5c893db48ce4e680cbefe3eb1037c0932ad3fd1e99223f29117d40925820826413f25b88b4cdacf4aeb7303aeaf1cd223e95e96558f10a60b601e5915cd1bd62091f32ba2db91587f7a7b23ec2e4fa6d86a627dbfe03c0bc49d13c1f3bef04f196aedce9c0aee3d638117e9811093593d54e699ceb511aa185f842ab642dea416b46949be123870e99944bc158471c8c4801371d14a42dd248c5aea556cfff3ae5aaf7b898bbd56dbaa3de70710dbd61bdd7800ea22294404469106d1d2f3a346bdb745f3050dde0b9e6f2fe9c3a5feb6d22c398f77057bfd5dae74e88309499308e83c79c1e93d4d43137e1ba9dddc349e5b0d09a58be0a9d9f140075f1254359535b697bb73933ebb62a0bcb7ee6a95c48c1f6bc7797a3b455f82427f7570d30464b4cd11b435bc07ceba2cb548cd1f433c0273ccbd3198fa95c8f261d2986555c04b512eb6580ac2da0c8c106e88501c228a21df0b18e83a4190be7afc7ddfb106018ec940716272877bb675ac32c9fe7f5624009c3e026949a8047ba91860785d78f5d2584d2633df9f0d1ed1371e513ad4b494d49e06b60605ce71247c6c623b1856d5763756d1a6d802906f7954cb6ec3fb4ec1f6a4c51a01e542108c2525e7db7cdc7642984ad63c0cbed750dc2bfa5f1a39066d1df6ff0cc50c0cc80b312e8a1566ccce8befd5905820e5ea6e654cc25fd9836aae5663d5bb61074198e12d4db1aaef3c821abb54df0d0258a3b4b57e20cf9bdd7f0579dd52837b2ccbc042e2a82fff1763a25518015ce5191356e0811277237433f8a7e1987db3a7a44280c5cf2ad31954d40b564f875d53f67739cdad1d816fabd6158defbb920b2be7a633e41e8ac9063285d11d363aaf6240368b38b73312620e73f6f0edc6749ee4791df2fd73a1d541d786ae76b60a3461467e73a931686e833f60c7b6ece7803b90d1970254df40c0ee2dc82abcd7d910333dc7626b028d1eb96a5dd058c1c1a45cf0cbc6d602eda27c6e7137f75ac3bb51deb68c91fc555aa53c528d491494809366ab524aee885880aa20d68d6e331def26312db8a5271fa62ee80520ed58973a2bd11afbcad414d787e5364969dfb36fe8b5105650d3043c5fb10aa1f2e015a6af8e609ce99fed2bfc99f0376783f62466bda25ca5d24d9d0a21cd5c27673e452fc2321d2414fb2300af21e9385db3743c6e9f31982b1e49987bd3272cbb9da7ed475422861dc6d6e55f768aa9442257698f63db82cf4adebc5199b846c902ccd39cd1eca04fbf51a21ce4841b1116542ba8fdd519d6af3eb2c1508c5afbc49a63b05de5d0ba210ee4428c4ddf43f887ff811515742a8dd8701587ca7b168cad60b92180a1b37ee0ac2ca7dc7d73bcc4884d844c73b24b591fa0f09195488b0476f91c82c117f6f18eaa3838587b2762acde7730de5da4896e72c40d6e58e2bd9c2937071bb5700e127ae42fee31d8b09926aecafb306e2648f6d283071ff0bf1b08a9824a650a54d37a79cc71cc046cb16cfe31f65e5f5574ae559dae1dc0b16d388490df0bb6fb19565768d8bf291ab2dc35a86ea0bb8193df244d7f90f3aa4e011503bcd81c78046ade90cf9b7b6aa2801f02912e2315a791c1989f0b55e572e13ed092de9c46d95b04faff88af49cd70f9bdc300f889db869d637b01944b7ac695934af357232406e9d5524b1c0599c9e00cae79131a54471fddac235d4664618323feacdcca561b7d6aab1202401ea8a2f3d70a1e3089940f20aca7a9e588cf9d7812fee641bd9118d68c75e520bdca06871de3930e494c0d49f5e9eed57dfcf39700684154d44a50d21c3f91fde98c10d62ce31e2510a9b6abbb9c870ae3ee7a4e8ea2a6b1560d93e4a461fc34dd2bb7078f252267eee81131295be34e4c1b7a57e1494acb0f96e7060226f1049d30d6e0c68064e26bbedd5daa469f7067c31882f72aa0e82dba43fee486f1989aed4a18621000166c0ce976d76cdf93779ebdabf5220ccd7fc68151f928ae99507dcdcf1ae75d0f2e083ffd7bf850074de2fb0054ee048e001c214626e5b1ddf39caeb01c2f82f53fd9a97702609312c0116fcff2c514c19eb300f8ca1e72c8537cbb2b526b850f4edf0cbfc51f43e1a28d5ea8299d04786e62e390577c269be2a8826f8dc73a5453cf14a98c4e66c320f0a84f95e82e4400be0fb57983267433177a0eba62cfbadac5fb790f5f813cabffdb19cc0b3121302390ffa49d22acf2e024b72ea0629a8cbd651d643480051732833811d696f604522a47961a2eb570444b52723155883b14d9dcadeec5f8b0c0890c6c64764c761fa47e73fb6e2a72318ccc38a39177bad2f052576399fe01495e56d2475dd6933467a61db44c9e753f563ac4c26910c6dcbbfc55f0b011e1757ac21fcf79889e85aacf4302184cc7f34e6c5831fd6c9c3f4ab844a4e664a2dfe68d3d0970aa73f122b02bc8049ebf5bb7a9ab4e01a34e61d52923461b9f0c595832348b9fb4506b0f15740951bcb75d74cd6a7e213becb36050adb445117cd795208e5ad856990b4a3a6b0bbc9c9703a64dd0197039d4d8308d15f943d102a4e930617eb2bb0fc56add88ab3d5f66a2075281e551093bf487ca2fcd00d8263807461541cf07ec98c82ff5d0e1206d84c1e725e47a7f8f316a6e2972a835728effe476303d77d7465be40b7e8638491db5957729a51f151d10a2c130b8623f57cb8254435aff88a6529eee78cb818b18b1f4441901f9976d19a523587f158e7e5b9737084845c3934c0449cf8e34de414b7a8b4fc2eafc019b126cc970e28fedfa7e33492159e148fa12c9cc92b0fc9c3712751dc891b2e534cf54e985e3d8a3609356cf9763d60f7f832715003264ab1291111b28c7fa3c119858ae41da4b63e49a6096cb28ed7103f28f54562eae9f77858bc760bf94a1ed42e103be28f6b114f3780f4c10bc83a0dc573000b27e5e913600bf39104a9465a8075fa284e0fd1f73566c8239746f8764570f0a84e4e43b85a1b06f74d90004a7f3881705de56d5a229f4a2f8b5e5464870b40ded56e45af0c4aef13e46aabafee5e7aa5b4b3f3d5769e4850ef97df4fc37faa9a9b260190a3591283cc9b1315a732b2c2727c57b82fcb34306b415f04306bfa1c6cfc18898893823abac8498c46254c917f8755730bc3b734bca02fc1801e3b358713121c93548b068e45a37e545cecb1bc2b67d6dd3675e6d332701326c002f16ef333c60ae761db13cb89a58701aeb705659ef0f9cebabf59a07bab80d757d8ddb43195d98255c7c962f4b089c50fe6cc0886424744fec7e79783aaeccdacf67bc6523895ba37eb31139c0ab2d9a01ece4dd94dad6bbd998d191ff0818e73364de180bcb3b22e27211c3c0c271b545a232745014bd7d9304aeab7d3293264f7b41ab049a112d3eb0235c8a4bd82e2c541f47d268943b0985086d2ab631758ad8056cc3bc565b7822d768924155111a3e4f81e66a72bf682f3179251f30751c15ff9049e8be2d96d038bf9dbc4a0e86a383a6bc985bdb080a12210ff343d161c2fffb26c55056a7bd20511eaa453186e2be16ee30f6880d4c4f32bbbcf37497bc406ed2e12d542aa3533cb6c61d1501ce8e518b4112d35ee289e41ffe9d94ed49b43caea74ce962a8ac1d0dcaf0404b2229c443e3d44d0db91509f4c1ce1ce30aeb9654383bd60141cfc1f99afea52432d014ed1f4a794523dfa9e05b35285f96a06de7a275ba09fba5e8e576ad0b53ea873ce3db9a92dea5994d279da87a1536a22d5a43a8bb36a2c69d6e907304a9d9377fadf90000f0117726afcc6a30374076ed78f96f4b9bce10e5afe2d200ca0d693306860801d2900c7511f0f81cfbe5140b8a9fc031a27e667dc798f3aee9f07c23e3cd9b6fbb9287af829866a4b18d61fdb680bd60bbdf15da2e068dbb980bea2df31be652d3dfddd7902b72988197e5b0a424a2cc0de5f0082a686c6f56c1930461b1abc3903b37856aa1d1e8533a4eb4870df17db622df3dc63f3f777a5e660d290e15509fc1ff854f494219a373b00ed3c30ba2b22483fd69edb12f8374f83725a7a775f903a01c0c9bd48593b5598c11b5631d45a5368066b9ddb8e8a042f796ea666369c16c96532b7610a60da0878b40d88ec7a47a308926822aae445066628efd6d7e613cff47906c7bec4ff85f197763ca9c5c48e8ecf57bac1c0b2616e7a21a01e2c49b96006fa90f7574a462a7e3a18a6156b03512001c404807d3094511f660af18cf42f628f2c3017fa7b2860325122b2a189162b23a55a00bedcbaaa9a09264565144a36ee177b4fbaa145c3cb7d0ae015b7f1f4319c2961f16c2f44ead8b6d4d18f5879b18491a1b237e354655f725befc9e7be0ea9adccc03304790067de80eef33a954ea87b8772ebfc1e3cf12535c7ab9ad314238f1d02e032b62ce465ccc4610d94732e9c69c0d7599f013b3d3deb69d7720e68a46ad711ba85279a9f25b23fa08b3b4de4fadd01fe1dfd20d1132819a313bdc16f6cb67b01a69e13b9c861447a5048081c2f677aa7dc4240457e1f227a17af0a7a4f3f55ff50be33711e92335e488813fc348c58e0cebffd6246c634283dcb52e068c76f802add6dae5c222a53b4200505b819d50f91cc2ee275de157ed9259dcca19de175919f73415ce1fb53f65af152f4978b98162d4e993b372e34ed29a83c336334c8c0844c900988097d1daf718071e631ff582393eef4475ef180d807c6ec1fa24d3a8593d3bff101e33f203f415bfea321a0b41c2f3651dad6d09e8f935b16439b48066732d20e0e53393c956c51919de323532162a087d65f2853a98bbc0282faa989242dad70f382ac9aa6fbc9ef48439829d396c7af94cb28d88def34e42d566114378ac708ee184cce1a70e72ecd3ab4d7b2c615f891b08e6e3ea6f08c6b037e0fd122c628ca9cb6bb933fe8a2451fdbc17d54ac41d7f1121ceb3d2eea6590b96139230655f269d80bdac65603de01860f62106b44975c6ac3f3a33f7c66b4a027f3e0661259a85e57b83fca7a01774e3b2a7e64934ffe47233441020bfe6f72cadcca16ba2b64e45b7f6bc808fcad699b566cc19dc3bb5374b6b5825f80eb34bc18742d6b2c98c37b6235a60ddac7107d1fc0b4a6ef505accf8a945f5aef70d8b4c9627da789efb0f1828c0000f8ab881ab4227ef296cc04df1da1f123f6bf4549b8e47f3c6c40d7024bdc0ac221016561bb03c9024c1e3d91a5e209bafd125e4d991f3be9971754fa9eb99c93a08e4cad1d47044d65c7a5a80a59b4a9e92764d8d316cd161f67e5d47ff2bff5ec7542ae0800e019a5597effd138e79a3856cf9c0cc78526c5d3d6aeabc2ae1ebc3dfd41137c124e48096ff925be1238bcc1a6127f10cf2e9d06654a65674f6e1cca45fc56f545e1ea2c630dd683aa1c3584d26750053efa4b4f16e802e82403424d68f9d4efc8d82ca8a246c7b21b54524365bd29aee3feb3a91cef000acfe315c0ede095818bbbd264031e0d4ccec36cb2a1ecae955c91994513a5b1277874b4856b56ea4a6fddec0ca779988c12ef1887ba649526602ae89a8de5ce3ba489ef23fc3d1aa42287454a27759cd3a677774ca5c4354242bc2b2e072f5de2874a2c7e6d6d1038d70c3d13e4f2a0295cb9a96e1784d584c256f188a9f2aa25fe65a24c97aa632f4a998a7f16295f5ccc98fd9e8a77034563281e0553d809ec613a4318b53926ecf7165fc4f59bd4bee4146e24fde3224506e07f63ffc52a2dc8706c67530000859ee5b08ab10a02b9a2b4b19574d776e35b79cf1b49da0d6fc5468646c91a71f974d09f3067b6d7f92905791c9d8f1cf6951046c20ab03288a637ff75a5c3f41e3442ac42abcb75c787e9cbe9571d1f09cf0fa2584acc4124e0eb95292064181fef2cf5159a9f62c0b41b683b48750e49a84ba1f74e9066b1293253930c9ac59b82b84c6e4d2d9e896922ef18daa7a08e404ec9c03006f8a70c5f784bde18ce89dcdc317a16b64c4cbd14384c8f5ae258390ffdc65ca65fec76af59d1188bd910aa2825f082cbc7f00f6a5310a4d733c21023c055a9743e0074133201f4063c843fde202e3387dfbd099436b8c2498b2180b4234d796a0fec91ab44f2c0b2144374845c5419bb3ca4e3d93b3d25bc7c252a1a6a399bbc7b18609e699c389e2cc72b403f4cb320a47b5ff641a0b9a06e34e5bf3701343a9e545055993de040db264d0bc207c01af2fbba592e7b4e0c84a8f71269c197d1148262b2b8a721948d956fe81ff93ac3388401173d0fe00a211157d5579c758afe996ae1fa0a77d7164ac42ae58da6f7f8a6319482c363a8508d72927075e6e83684f6c2e9b861c516859cf1d36da355ed946a73cf1eefb683d25350176ad7daf672512b5e668f6476bdec7e5294c74e6361aec68e89c1b2957da4075f3d9f063509e6dfa0948d75a915fc215f032dbd4a88ed94ecb4be03df1f0ea2780ee72010c372feff4a00b6e715bd72b9fb35e377e3bbf41387bc4aafe032caebcc5763828ce6cbc5fea359a163672f5ebc8b50e87725086b039e884fb1a261c41381829b4bcd0280f70a283ef82bb901ae67700820cf18fb2645f3a13d0b92e8528f8ee5773447be2823a74d10647f59a692c93c3b9b1214e3d00d7ceeaf5984f2b06a3af2ccc7515e4f8867d7519ea78abd3fab8e768fb9e3b44d64a2fb7c19ca91157da9348c9ead52ff9d5101856be743878e0a4c4fe2310a7e212715fa4a1effc28f31386da275278b531f0a5e920ac4abaa7d2b65dfe4e7c5727d52ebe646fc5fe4be57d463c36b662a6accf600f7aa8b116a3ac8b255771c44dbc435bd21103c9dbdb594215590c1aa3bbc12229ec4af3fc6adf5fa4b9a8225412abcb844e2664098cbd3dd6c711800962bee682784c3682b838e24304a61bba3e52e3c25057eb0d40eaac537eb802261b4982a2256af47129b0904533cb1aaeebe89810958486f60c1aeeab8ac7cafabe9d791b1c00d2e377bfb3258e2becd3f669c171a776e97f08bc16b89e9a6de2ed04e4a90f0bf542bfc51796a02be2b1eea5d8c68162c5a291d15c2997875c86a18f5e31d30d2bcfdbf27a83d6ae1d416e1a1df209040ddc792203818d079e1c188086d5df3fb8d1a629ab7522277bb7e2127cc15aaeda3557e996f1b214397e90e3f582765b888dd79eee83ebfa5f8ec6d27bd85ee6acbf35a41574cb7579dfc9b0ce4efdecec228a2667158c4bc074b3b64401e4cfe193b521cb600e2ca88268144845b44b7f92bc89cba51cd9048198e96c1eaec50e7367b08f9833aac80dafe63efee8ad796ccd2336beeb71055c2d12a6b260455227f1d6158347637d7209adb6766935686a00e839e8dee26210786f90dfd6fc7b8daa89490774f64ee7f9ac6bc3337cbf9876e045133d3464fd814d73d929446465df37c872bb223366719a04f935928f1c13c4fcfbb9842cca95144dc28038150b219447281584f6b107a733c7e01e78de909bf9f6479a99bef05a2b212a305b9018bbbccd8d62ab476b7bc009281652a495c8d6516c0778e090da687205127d7da0250c322969e3d668441adeb818eba5920a7b5233bd31998f698ca178a81eaad70878c2e9120d39a36e0073498f972935632adde6e9186860defcf408a0c6d870d0848df5a6749cd86d480d0803b642c125f8bee57bab7b0725c0236c3d5577bfbbaa0b4bccb95e9499cfb03a03da6773df9e4043eb3ae3bac407b3bd787e5080732c425898e98095f4b4ba35f552388d7793ff7e6f9ade8925d298f5cb842533a80f66a484b58d05795325b83c92f24d612c2df43fcc8e1280779f9438f0f8f79e1c023cda354ec41061257894bd9c1268433e2d47ce10f0c0e74e4db5388cf1ba111116ca2f3da7b4a88bfb5614d1a5fb03dcebe4d6d10d9d4a2ed26f7d95a2f9a013a8c38bd0a798711caa5c8de01f44a2c114b805b376522293d45b5a472667b62d5406acd6c72d34f76ec5eea4afb59a06d445838eb3d6d1cb497c66aeb468098459bb4c0f6a8e097aaa45b71be197c69c3b451b8906bef311fc129249331848778394ace29b8c625588c42b08a5aad80a3a562b1a9761dd7863ab4fe9c7c5cd4870ed9ab1ed88ee724a7209cdf92046fc4413d6938a0930e00ec35d01c33482e5642c507224a854b224fe3008c45f94ca04e3b8d2a4b9a2b984afd6e417405e5a3787f2d6f70b21ee3fa99438a84b04e9f0fe6d29d266256f408bf8458958ac9a04331e1a5119bde467299212c3e3d18cc29e7d04fc24fd58360ef9e00eb18cddd96934b21a94acf866c449e06090ea23d1ca8d751d3e6c5d34ad26498a881a53227ff53f65092453d126bc84e8c7e671ab885d5b6d204aef05b29f3c09c0d55e0cf9f3ecfa46f4ef406a19ec9f3b06f8b2501401d8e34b3d30b1fab898b08755bec72e92a60ff400a57b2fb56deb35c2216a9fc2d9760f948b2980502915a9b66614ba0b51519d309487deef8267bef0c0d4106374a569e858ca15833b823434a19c047b05be7718623b84689199e7ef04d51b8be2c88b78898c56628bce1e55ec08f4e7a0417b7a58280b82b4b397c866dec7019db74f81b4806c7748cf2b9c801be60bbb6ce253a61acc78645d1b1021378a32eefd8892f47d33bef0339ed32ab4e0e85974fd72111e28fecfda5c75d9423344ff67a63f3f6c180e53ff9c6394916f297af13bc3681c22f54364793dd1aa9998e1cd7fe8c408fa0594fc620b3a7a733bd602dc5aee66955acecbd13c9f9a136d990ffc5b9ed3674791dc4c72afed669c5306dfc88001bf87022fa91160bb07e0da05fa5c103005a163363787c60e593e1fe8049db5385c0ba40f7a0fa130900f621f7bc6e90b277796f7979aff137435ba85f113a89ad38b2eb8d83fb784a0a495f2e865d6a42f4687bec6cd2358d195f5375462d5825899c09a4d4de92a846b7dceec55850566891a8df1276b96e34c2ef5b621de735b97eb7c5deafe15b5ba05a11f7c96d3305662a006aec2bee5f6dc882eecff1f2e46fcd071440fe96a02836ed1b7f3231f6b1a62253162c02b19977db9055bd06c277ce06b434d10ba4386f13d0203bdb1f0ed7fb155ca8d610a58b7439134eda739845d0ce1179e4a65d3c274b80c681d1e2ec00ddf40e443909621e634a650cd67c7d319eea0100f66f36c56e7379cabe422e9b000e0fe09e939f0e49cc47476e2567dfaf900d9545f311b80215fde7e68851bf9fc6f5a1d74e15e3fa3a1841ce8f4834a2d3a8d390396f452f3b4c7dbc2d594c128d4e27f1596d3974ddd5f1fa0a2a0483344875ef4ff01248739988545e4fe8aee3a95b9e0528d6f2c0218f99214bac4ea922c61c17955d17b44a2f684c0f0f64fcbd029a6cf7583b07989d1205babb4e667899c70267f0e873a8aded4dc9e7ffadf6fcdd3e96283b6146bc97c636a0dc9775ebd40ffbabecde015536e0dea03586f3df79addf14942c199609f4c74c6fed20e941af5d3966528ee5b3da638e8739e59d0006ca6cf9e9ab3d0aa58d686b8139434685cbd0c22c4f518c71cf5e24931c1b3d7176e6b07f267c0afc5d4fa7ba78d7b46a2980bcc476258b0714fd62860246499e635c8dfa0ec2bce1d138b03898056e2bc3c19b7dbba8818233e8161a80673f103f87a2cf529a9e7f88f31ef106e234a2ed38cd110c093183a3f116cd9407d81d66f25f1d63b31d4daf7432a13d80637986dfe07647d048e0f84f20c572050334a070ac50125c9b3c09a4feba6b4b6346b144bfea48bcae512133f9b9e2a910f3ae1a448ff737c73e7842a506a58e627b821df1e99a0163e09572ece919c1750feb9af6bb58106674d5adb7b6f22f79632259902e20c730c380dcce1eeeeca1764acc168a8cccc8cd1645f7c6b133fde65305a51c39aef28479bd940404a83d233bd873af3928b4871e58e7893d6a319fe693d99210cd21217350401868c050e97d10b70e09185892ff8c8e572390143367a766e8283d899887938afe33f642bcfce425288f090a77c8f1abf9551e20166c517873be6842a9e3f5c32cf312856895686b0e4403f8c59e8f8d08879c0308b5d2e972b08642e9e7dc388f4ec31298ae71c7c18cb3c0789ce5cb83972a850c2c9193970e2c61860b82fa525b098b243d097166860dfe802c10b2b70e83066083b80c0306e79761c7ab0030625901053048691a803476e04e146962fce1802c3a8f47cc614740ce1040f42518401c3b8e4c20d674861451670240101f2181b8490e30522314b9a6f7802f36190201feabce65bc56bae695ec9bc5614a5cb6bee526078cdb5aea5a58a14e03937752d8e83e840f1e13797cce3fde6b46b6d21e8700af5e5b91862d56261d5fe9614d1ead563c4aa7d2e8e58b51fae1110d29bdce459d732b1a8efb2b639965e2075ac6bd19acdf199cfae95519e9ba4c75c762d4c16e0e7eb275d1e7eb95c2997cbd5c292cb05b29790fb9016bde01a42aba821cacbc778f4ccc56ecb51cf4b293fd2977197c59961871439d80284174fd8f041c68f142c3824ed40e60d9acdf99e8cf1ed3854ca102a02b979d94fc0ccf1eda84ac694247cc40eb62872e2c3b7ff58238c0b0663ce30536481195c57c668410a0e6000e598f2c28d8f2e7eaef8f6531f1dcd400631b80205153c80e1ea9b2706247000628b17928e003b891266c52197cb1505eceeeeee38bebbbbbbbb47d76ae93702582e3e0c12ea30e0432143bc08d7cb0b3dbbe4225719cf5e514f9e5b00e3d953453cfb6a8b6030c6051a3cff5079769baec57b44a578a1459e2acfa8f1ed35b38a5d72b95c2f80910b4f433e0cf2ccbea1907fc087439e9d483d3bad78a0f1eca82ccfee4bffca23e9f975a68867a7e95adc33bfe0d14208cfde752d9e4666d008f2ecdc143cb0c8b3c92e667ef8768d6b6a5207142509d18d80ea18c4f8e81e609e68ea5a2ca5d3ae252317df2edbb3327718318067c7ba164b29aa738fc6f8a61fdc51040e35c0a38a104fc0b0fa54c1e2092f6da491d4421790e3b38fd0ac115a151d0e4c878a42a1563d1f5f7634f1dfb73777a1e202cdb38f40421225ccaa4b968809ab943a9551d943ae7e274ec56dc92899e70076c0d078d4908b757041e43d873247bfaf32af0fb7233eba90df57992adb968fd3c335c2b2d5b234a356495ff9ec289da33d51a49ab42e845b161f35925dcd28d29e9a91ff7c714ada40204a99d904a7a2cfd737893815bdcda8a1097878e912b831e32514254eed335173a66fdd4a8f62a15786d630d1ec6b8ffac647cda23dac2afa101489cac447e7233ee2233ea243bb63868607e5ce9844346f684a9a12b362166d4933b301314f153ab27c8c439ad2e6faa8f3a1a6f4710bfad87db8097de4c0701bfad8433f5880b64c2192e13583110d4755909827e42c92982794669498279c4b2c314f988d89659827a43c501e96087b5c378622972674c00cf9300e8931868da50f23998f6f7c18cd7cad5edda4645aa243461f7d0cf3644a9952a69429654a9952a64483e2501c8a4371280ecd2556aae8e1eab59c0a312c8f6d9944db1533cc335dae9eaee9a215e51f4ed7c492c512616fc7bc1034be5d2b07c97e127681341f925645d7a0a80bd2f892568d0117e43cdca40cd038f7e520e99cf305b74342f3e5b012b8ad3afac8479cb75f15e60959e8859a45b1b42afad010aa3a6ac88f3e7a98fa90853e0a356bc1212c1f79cb4726faf8fa48875a95061d62a66189749b724e48a1bd1df3bb44336cca199608a5de09f8c52f97ebf9cb51a1c996916189983cfa66f24e60c28e796dc9e57aedcb89ae1f4ec51df3d4db31ef9a02340568bb48297a060aaac23fcc931385ac449f44cda2437468124d223a3489e8d047deda67e301286dabd3bddb75f40f6b0efb7e749a6153d2b8f0bded94cd052f98406a76d0b347f7e87179a6c737c271657f399453ecf1cfa86ed425e2e3d939895f487cc6b78801fb851501cf5f4855cfaf56b12f8b9156c51e7acfbebdc1612ccb57b57ee6e9784e9df1bc5ac36b204eb177a398158d843c7b04829ef9f51c5f3938e243ae7330f46108cfbf4647eb4100ca18e6097bca1b314fd8403d857972ea9fd80bb7c1af67672446ad8a9dae8795919ef70beb1be106621e32681acffcc60518c496c8917d26a8dd916eb33bd1236d564e92cca9d3afc9b62a731f3027096d3242abdaa9fb8061347a6e9aba3bd1235265348e8e70bd0f4824872ab0bc5c6088f2d6cb49d2aae8f4a35e4e124a657b4e7f166010fbb683246b43444a6b8deb9a0d04a218c5f70f6b111969b473accd5aad6a7d69edd55221faf8ed6a8fe4d85667db95502afb42a9fdebd3086f341258341ee34e9ba276bf455bc0f0399b6bbe397747baf85cdb339f5e0f3783dabecf3d3b75f95112f1e36f35be5d991130f9f45d9e9e116f044eb51955d25a77251e4da6fa87ce5a689f539fb2bdc7ef6b0e311ec3a1f2ec6b0e2fdf1e81fafb9a83cb1bd15c73d7de9b656455eda6c65e28f985f5f79544ad9838ee830f3ef0e04790203900d86e381c1c1cc7d92277f38107710070de07be79413c8873fe4110078017415e21c781388db7829624390ec457f0c07132cf400fc7f10c9c1c8811e63e90524a29b120dedc07d264fa3ef82088a7c0e71b052439992be9e138aee4e4407c0be2e54c0fe23ee0075ecefc7c4edf1c00ee036ea6693251d4929452da71e5a5afdc31319ae85c0d619e5d63ce996301ce3ff0249c7ff035d1421d005f130fbe9ce93d1cc739a75f92cd837c4d72be9cf9e5649f057a388e273939103ff9f603c7a371205ee7fd03c75b1088b76004fb870fc675695b1d8a42f9930a6edc03e7c7c9a6031f61349a12832210a7922487898093983bdd2207c4350fb53910941166c00844768aef2e989432027129d344048a4331cb16a2c83ce126a9d0a4cc92669190d41e92b060b0d9d3934928bbd3ce5e14f26294a86adfe20cf48b40bb437d3b1430a7df91fd499d661f122029f0c1bc59118855ed116889d000f13647799acb2bb5731cc795e47cdb2a9c2f07731c5f50c9b62afb72301ccfc0e638df0a5a92a05cf3158078063407e240be1550d882b3c78d67721bd96346507afb370b8aa08425493d7c30ae89439afce709055d8867402dd19f54f0b4024ffea4823d628f1e5c3d9d3609c4a52fe95c76e0f2874b1b492351d287945266895dfb76486adc087b4e2278e34aa46f361ee79ab739f7f093c78e09e6353527aff11e352707e245d0c6ebe19a7772f698609e437b9c80780b9a50da8f9b97de39dd524a29a59452b694524a29830459ba3b524ecfa1de0676473a7b25704afac9e3405449efe1fd3c7170a302429adfb88070cd78a9647764ec3a63e7ed72e887a4c7c98df046e32d8875de82db8d17c1ded887a7f90fcfc6515ef50ebc1a6f2f625e7c1f276f5bd537de4eb949e73ae93435d2abd4a4943ea5ac3e187736d4acce76ea7163133b70cddbe350b3389aea1d462c351e46229387d1480c1feec38b400bfe40da22f7c3d372f21bef60f34eae7937be6d37bef969bbf10e7c9c6efc87b6456d8b39d139f70173e2976381cd354fb2b9e6d1b5af8996f825d19cfb9ad8b8a679931eec03662e59db56a9846645a055b5d36c95e2fc42d42a45a09e25c2114a8c128122900834cf5f04e22e07d37c8b5080801608a887794ce054b336d7362d7b26f28fc467227d7ae6a71bdf2e07fbdca8487c7c71086889646fe3144bddf2612492defca9f1ce7f684c884518e8db029b9f3cc9e6a7af8996e94d7a7c9bcf2f89e6375f139b4f7324db5d6073cd4d88414311cb16a29711d009250029c5a41a1f8c69a668df68b37eb43091ce2405fa29d49ffec441ce7f801ce4fc89839d873544350b0890cdc39e1b5f144a5b2425cdc2f1f6252734eb87f7c9bb87d3b8875bc6877b1885a2079670aa3d7e4a388594e5dbb1158729c12ce003727e011f90fb9af8804db4244139e7403c49132a20f73569320544f916391a6ff3ced39c8138ca71bc0537e6683c20de79281c2f82ecedd30b2cf8d381494371272c07c3a22b61d637d4bec4041598e78779b6688e2cdf6b34a5b744f121f7dd500ec6f8263e5c33ff1f46202c22619ece01976f27a17d43ae7d8b71d5ac20ab20ab20bb136466945294631bd89df6e9712082d01ebd1238d5aa5e40b863942cd274395d7e47f633a71f12207e810581a0be6d550a7c1e43f2f373f21fd84b2f7b271db8931f598dd3f80d77f268dcc633790faffa76cee520d936cd6fbc5fb0c7fe8d177f9c98bcfacf4f8dff74bef90f8dff7036de10cd5bd2aaf6cddb2517906941939256b51be19e15a77ac5c28d0fc65d0e68ed76daac08f618ad7a522b4f71ec5a548c6f9fd2b7433269ab7ab69b2002ba63be9bfb8b2d1f7d25a77e74a9a17f04a34720a397aeda227141588f2e8479388fbe629ecda30f611ecd734468fee83aa925d2795c0f0df0d19dc6b96b69ce1de7dc1df9f11e3f0b526f7a7541a35645dfa40bb5a3f7f67e6f3b6dafb1087f374f292c003de631fa4449f638ae80fc4ac0272ecce1e9c35a672cf3cc3c836d75421af4ed9bfce2c7dd3de01cb98c36295cfd6eaa59d4815ab51455d129ad31aa9638a855ed4bdc51a8f871d00f35642336c5359924bfa86b8a1a8bb41207358b7aabb13beda1d66be8f0edad148b4ca25663894c1aecce151f62bdc67cbd9a35ad5895f6e174a308427b6362ce40cd30beb117f6faf61043e37b6652f40f3ed4eea19a389a4c2bbd5f4ea25864ceb120b4b74f1a2c9149c7eeb493d99da21ace49e6dbe7ab5994d68a4265f3f5edf18e6599b0aaa55824040b821c1be9589ee975a0c88471e97bcf88e3dbb76cca2ceb06e3ef163772d374f930fe18b16477a2639e0870b42f95411ae4645b01c4321fbf4a14f384d1ab874aa3b67f25881feac429e6186a58a38cb139a3ca5448a0ca1ec69f8f8e4da9ecf187f6b64a7e6134629e66c5325de6db065bcdd63ed41e3a32efd409e5eb3962ce0c76bec956a22e114109cc8335abf3f871454225b9d2d2ef6a6138e3d743b045e2949c09c812bc1166a325923933898d25525a6b9c128b7015f6adf36878e382d8b94a2cc25e2208ec9c719588318d1035be5d062258f3356101a4f964100b354b0ab58a9de8d9b92ff42dcfbe7d210acbb31c7a66313e6c2ecf1eb2516fe1143bf53a4b7b8d6577d8d94b2cd24314b13bec98508d1e369668d4ac06dbbb23f251d83358f7761ba5ca5746c68f7027427f618a7e966599cfec8b94f63a26777d7668424aeec6ae82d61aba693de88972d54429574fb45a6103160688aea8126094e84a0721492be56a196c45abbcd0570ccd221f5ea0c25ccd82a8554bef987294e5884b0f4b52b060030b323d2879e528a515d5ad0183cafd16c9b085ceab06f92d92618928325cf9f15b5405a879a69c52fafcbe18665b9dd0f5f4376ed9527acf2e33bf9572487635bb241832ca253ee3638cee3a42563d4784f051890736eedc50e7a7901de0f8e9723a9d3c40f17348cacfa12e7ef6e0c34fdac10e60befd99655cfa19a512714f9d470d399d54e4be4f41be75be857cfb8643dec787217cf7b6531d88f8f68ad2c1cbb7bb951abe3d6545e9db573160e2db7ba07cbb91de61876fa75dab93b8eeeeee8c22e043ee8b1c7e00f3c21a4746100951c30dd4e8401c5338a1c40cc4c83003f8c214a56ceae080e5d965d7e2ee6e1bbebbbb1b04a13a9e9d7d74a8e188385a98038e175e3e3e6c81c71618c40835f1649f5091a1db74da602304bc14219c38b1a3872c66806135a18a25e028e2072b58e8685474f21d661ad550e757e88a4e5704361b058399a0a9c38d5a228b4d2f2709d6e42686249440eca3d3cb49329b6c6d80f3f30137e9420de53711f38dda1e52da2c04c090c50b64afb4590b268a2d9240ee02644741a921fd584a19bde80c1344e0f4b636c0e669145d21b7999fa6969e9eea806766be8129f3743875628ffc85281965fcf9b0c7f4e17a71e1c31d0303ae2b0f90d103132fd061a4440da000ba1cd5518697289482007dae50f921020c186a1c51051804143880b4c843092c6eb823f31ab21082c17391909467a7cc9d422ef55b74c316371471af2eb62db5447c7d6311f9d508c2f4e9bc44e277b33bd3a76f915297264d7a8c31c6a8b98c713d2e11f91de17e3db544788897e2d474cd734e4d37793a9c9aa9e999b7e2d4ec915daadca33945f419c5b63a612715894e69ad28d4ee275f358c46d2c80146b18c6962464b84e6d935794b2cd3aaa31a46a3cea28635469ff4e11e6df9129ad5ad9a15cbd4657550d72c11eaf28b6556ffadbe0f95921d247ff0a1867bf4dd43eddf2f5cc123d99d58647f2983db89c0fdeece2cb202fa94fad24f7a99cd6a709dc6224d3dd47e3d1ac522fdf1168f552c11fa7112bb233ba8592ab44a3aeda0d941acb4f4d2639966f19656c994a32a2d53532b0d0ad5b947a3ede3a4564151dbd9a3504b57a15329772a1456fac5e8adeaa48c37a46de3e9fa95476898b97b8c2d8cdf54541d1fbfc5f9d1f37edb49d33e7ee3703e7bde6fb339ce9d34328c3ebf4929638cb45511c5a96d2aaa94fded1d8d4da9913ba80651546ca31abdbb5fd8b68d5b4a14b79c1ce7949cdaf56d72c4b07efec2157c3a9cdaa6097d3e47021dc6f0051f3f37b62d46ee6e29bb23ebcd8975add4eeacef66594629e5d63399ba230bc7b6d1aeb5dd5bc8cf3e39fa6c14e27777d7dddd9c9cb46b996296f4f47590b80174119d0802fb6658d79a8e7547f8db334caa9002a79ab08a9d5d2716416141609f127f52b03bec217fa8d3df0998942cc6e02820bb64f36b3a6153b02ceaf4d36115470f230dcf518a0b9a877bc76b3a6ffa2a350add68be0e26a5623fd4f6a1f65043cab17b274d8e04b047219ef9e8fdf10b57f04b69b3a8af579347d9a9b79d10b555536adc4c76679279a224e399c40f77893b6177a4a871762d993401fa727d9347186b548296d061e3062d74d4f95b7403961b86ee2082f6e06a4c1d7028ae9e9ae3ea09158b6c5892e23a5c6c02a9554b9f3bd9a094d239558e3b05b1818af9023bf13a53b3df221b98a8a1faf82db2e14a94a3cadf221b866c10aa618b1ebf4533cc504316f2896ac36ff4a5d297c8cb2c2f3d02ccd32f7d0412a49491ca8f8b5e0d465059bf6c94793832c7ed1835363565ce643b7f93316c6692b689b5b871ad99e8461377675d32fbc8487bc0a2b72dbdd4ee48c7be96524acf3edaaa18240d73b4fe4291f5273b4ef6cbbe40bd3fb6f0a7bfc2881d64e8d2850c5f8401ae155a640003032a6ddc000c2b0cb1d79120fdcc5297d6a5eca8d5d3df8e571fcb58d151e64394d2871415c4757290d06669ce9a0744c1273d2075200a9a4c266f73ea799a7742ce05163479937d812da0de02932be0a5cbe5fb4962ce7e484cdf0a63c9c61289459863e4f670777799f0a7c02f04f56d650eea16d180f445343c3d7a76ae88869f673f75c7be6d87993c204a4408ea617be6ed9ab6552abcf410f32cc43c7a0952e0971ff51ef4db56f5622c73d032b7d99c96cc67e67353f30533e3a6c7046b8f1230fde4362f729f0d0abe6dbe7dc3b8e9e558a073ce95741fe74a36d7aaa8286c1993afd2fb803e203b0af1cc639f477df37e36afad62e7bc1fceb7559af6aa286c994fa11ff30577119039f5e8f3ed463a443d63d20be59b7c761350c053df36ee6e7734a66f05fc94db22c530ac374f0b530c63c96d740773239c6153769b7886a161db666991dcc69cc9d382b9f49824895f5c958905cfa66725405a50e8f912a4d04f3df53ea0c9b7ed24d0fe85999bbc1f933fd18242cfa7d008c030117c9ee34f90bd9085504ea0c767be6ddc5d9e34f45b017fd6d1bba38094194f4e6a59017f96c9166a62fbe2a6e60b9e1d853e63e6e399f831c17c875978f6d849403eb6028f89f498607141989e02eaa747f62801f9dc49df26d7debef456c08ff9b6cd71254d2899477e5db46db3a4ef7a5d22eceb364b647fc14d7a4dda0d1c944016b623f8278b2d200b21f8a0c30c4da20b6461a700e5a72527bacf472861844016403853c717f9932404b2b08ab22404c6498fa988610d3888c06d72d26b125b20020964a19f80cb0b08b94897d2843ebf6d189db104b6b75d01b2179f05f689ccae6d79db5abb252d5ed0a0064123f8caa4cfe6b78b14366e7e8bbac8a18bea86fb2263e6631119321f237f28c4332f6f503d468eb10b95239ea3e9b7a80b283edc570c19cf4a4e757737c5b86f897928a5942670bfdebe3df70b4bf8f5f62612357aa37ebdbbd6fab6943d77599987dd25e8eeceb8dddded187a3721b66dbd84d0d3c33cbba9e82b3f36f9e82da793e023708a87ac38c5be9213e3a20a49a52636b1a83aee582683a0b25f3f557e1a4ddc72cc13812e6aec28356a9c89ca6f7d38ab92619aa925c69499721095fe1651e9212ed5eeb7884a953caaf65b4425ca376bd9f4154d3923859959a8557ba5d6fc164d599241adbf4553929082a0a8dca575cb87a8790745d5d02dc3b41e213dcdae85f934a28694ab27f68670ca68ca940228a32b266290b452ae46b105a3750441437741ea49e9aa0e283158b95c2e179856ca552f44acda17f5622451aba66fe4c0beea416335a4670aa3298e7ad52c6a5a95497a8e0164f613ca4ddfbe144a548a25eaecf569c592659aa7e39caa1ca515357f8ba6003db705134444af6c1b09f3605c7c9ca6eda3cf2c955b398da89413f2e9645e8a4cb5f97dc941e6d90a1c98a99c1828eaa64574a37650832e952ac130c801c4f30c72f0f0d17f8aab555d0b33794150334b0d571f3dfa6a484f0828294454fe1649e1f221ea05832d8cef1fb287edd151ec855b1483954f815feece866c62c951fa86498f9e94fd5b33737316bbbb2a46c0af33c07314aaca6eee2951a8e8f10b99d99f3d9680033b46ab228fd7b42a56348f586e88598a681eb8e6118c860120944862cb1b528829ba01104261a8c1849936ec0035df6669e08a29567049a3ca90143dc27cf9e2820b4e8610c2a545a2d77cc3b8e5350fac90e13df0c0a9071e7891aee581001ec7294e15651ec789742d9c9b9b9b9b9b9b9b9b9b1b6740d7bae90d53bfaddac1f8cd69155ffce63dacaea5f907a902cb07719eae15242727c77584e4f82a27c773aad0e173beacf1dbea375f40d7da34edcb98d77c48d7d214d0b57256524431e46d6cd6cb6b8a31a880818a2d8c6c781b5f1999f136de63e48b0e6fe33bc50e6fe309e85a3635d0e1a5cb1d5ebaa784308f8d4b5f49305e86f032064a98e7c6a57b40fa4a29b07819445a91382e3d5691d1ca1697cb25454e11f432cb1105a5c723e6d99739120453d0a164c4921d724c0165d1133ac06471c5eb0b2430ac4e643803c51a66707124879cc10d568e98a30b1dac68436af1061636281124461e20cbcb0d77b87104c58d2e524aa1c6e7e43802ba560e7d801644f3a2852045b86000f0e172f1c2e135979ad35718af79cde135471585f19afb0eaf79aa8b19aff92a88d7a240e3352f585ef3d2c66b8e448a2daff9aa6b6948dc873a8fa3c3873d8f43801978c841155e406102080c538fe3dbac13c688e20a2cf08822cc1560b87a1c1c47e1b853791ca738af171ec741e85a380ef890fbed14e437df50e7371732e4b7107e73b93541c36f454d84f9cd89a0df9c08f3db1336fc56f404d26f50e0f05b16bff901bad6a6f337be61cfdfd4bff10d537fb3fa9b9b1cfec6fdf5374e6f6a60c4dff84ed7baa1c2c626c8dbe8bc8d90b771ca04d0db78b561228bb7a18195b7a1c11a6f43c4c4dbb890ae65b33240d79240b4003d102f40d702528499aff1f1353535ae53e3ab9a2c737c4d8f1a1c6a5c09f3d8788d7ba0a6a6a6c66bc26091658b2d66c0c28a1935687c71e20934b0b0824c0debc35316a1016479e23557752d0d6563e328e671c0db38b5c922c3db78aa6bd978971a213b444aa7447c79e955ca4b47796a65f492889f974e80ae257b2a0c647085901258e4d08314e221d3421e61bcb8a18839c08d08d76f3e80aeb5b900ba560d4a09291ee53a5d0b556ff8ea9eaabeaa4ad0e0eb566da8b56ab5fa3c210308179488e2ba230db03671d9a0091876d02148892a81971a64bac8e28d9f9f1ac6952e787002c4135ac0708d9e7ca58100af7900ba9676d27122091c5efad7b524caeb5ab50332df817bd7ea80fe70d48f1f3f7ef8eac70f34fe8716255e4bc06bfe41d7d200d0b5a4075deb478f8fa3f7e141ba960f7afa530d7f72671ecd4fae733af98a5931c8e57241014f6acc40891ebef8c26506578027df662931d2a18a14299ee8a20c18d63ff936f12729c3c82de4075286a0fa70bd709982c32588978ee272e6a5bb0c8e5e7aea8797beea994197974bd060c41a0c9aa685f1e122bd0625a98a9818be989962870d53afb9e6abb956e535772eaed7b8c0e035a7cd5ac10d1e82b4206206399c804ad8f19ae3742d0d48d73af5400289efe1a8aed5e3881fbe9b866f771d21abf61e3021ccf04a9a456bbab720f1dda3a30c5dbd3d56b1e946c287a00fa3510473d37d54068616a01c01dde00ab0d70063881ba000e20c2ec02e801b3798f9e165441424fa0a510db8986307349e300186d1d5c10d64bac4f183959f24401c0c71c60c3056e00813048691e8aff81bbff10ebad68dfc0d7b5efaae5e4ae9fee5a594fea36bc97dd91c61c6dbb88fae6543b39041c4861564b690e20e30ac5f6b0c5f9d36eb1b8ac30d1eeed081cc18603d028caf7eea5a15e76b8e48e26bbc47d7aa09f29a66449723825e13e235bfe95a5a0c6fd0e083501470a431050ceb6f1b0cbf5951c6193190b1c14b0e498046ecf09bdb78ed5a9d44e33bc5d3784dd7a2a1763cc795f19c7b4a0817e6cb733db84885d39ce39af3e5b490c173365c9cc2819c4721c9f9724eb9fa9c0b910339aa9811e58b19703e4c5c61c365869727ccd8c0b9600836acfc303425cb0f9c01c4cc4174464b1c5a8cc17918315e4ae9550b272f9da66b49d487415ef5edb4082bdf5e8bf876141b7f04836fef344dd35c73ae6b6901f82d8b2f7ef3ad6b6d5ad7e2ba2ca47ce7a6aed56171e54d264799dc3b25c48485973775a62f2657c23ced26f7c06632f90977bc89cc1793c720e6916ef258c5c4994c4e4df5b5262cc23cc739ed5a1c1e4dbcf1451933a890120486f5a594f2812bc828ea52c6c91c6880528b1620bf15f19b635d6be340165a0c618334aab0234a94f7c9a18d332e35ce98238d2e606ff1f2edb36bb563e17acd65d7d2be6b99b86bcda41fc3a9f66d84b0a7bd707e26f47c548a4952f04f1666673e33f35c265bfaacccb3672e333ecc6cf06116665996859952c6c6b36f98013d676136f49c8519d173f612b3208839f38c256149589967c76cc07e9eb12c3ec4420cc3b010037ac6426ce8190b31a267ec25832983194ea2493489e69c134c38b978f6e9629f3fe1dc32c339f4cc541684e8a1c4e3239533cfd2ccb3efd273909462c831cf2ec1302b5e092517cf6de6d9a5ab8b2c3294329440cf52b66ae959a9bb1b0cb39a84cdc5339b79f67675c1a57f3aec2dcf1d36d073d843cf1b36d173bf9e7d979ebdcc4733cfce2ee61fa12d203b233527a5a2d25218c55823ac6ab2445cccc326f60da35009cdda6627c1032c02662f283bf7f08f9c7312fdf4088c40421225cc5a70f20fff7cf46efee129566a189da8a1ec26eaaca38632fa2c533b4b0de57711f555a51335944d54c6a386f2d94c8dae0ffa0d80cf174740c4516088492b14aac7080a0b01d195142fb45614ca63504897250f6121ac232915ce1289621394d25a51a879439d536a1450bcfc66f9f6a63444796ad53dcf599867080bed5931d3aef2e32d5b1d612a3b981aa5dcfd24948a7de83f6d4e9cda1df630d6031fddafcf65ed12695f9f1f36679452cad8acb8aae8266af340f867a835fe51da4cca217d778d5c2cc9c834d83630b57d6bef0873efb5e9eeac3377cf39310ccbb2ac4d2693a67995397ac72fe48f3e63b347e68e99999b9b189665d46b552d6634a1cfc78f26b12dc75fd96f647d8562138f1a5d1a21bb83623bf9299bfb5b0eb1e588105fce6f206a487fe651dbb5eff9dd1ebdfeee8fb66a935cf442e9e54820943ebfb109dc89897c135072462f94bff4b795cd332e66fa2f30cc57673772774b9ba2067931e857d5fe65294c99efb581cbfb705f467647ca90ff10a716db8279cbd940408a10a7d6d7434ad9f5f31b613d235e046e589754d4705f6d547932c73c4ecc2b8166f216686e4325e6f16bdf9b3e477de1ea778ba988186b5e324f4667f4f6cce3c7e22e0b84df386e43a1dce90ff5ee4c3392fbed80f65896c9f49d907302a7b46c4f5f7b54addbc1b23467ed3ba155ec04f8a0fb849f0c9b99ec4cee2be38c0e29a594529a78e8659925125d9a5c7aac63875a251d25438512720b2f919224bf5e4a36327d53a955ed3cd4acb9d4aaf6a5d0954254d2d0b763433b7924966f39347f26d0744da5f9494ec94f56c184e45016ca2adf1e6242df1fbfdde8ec52569142d28a15ccf5d1a71be1ed5a732249200924813625854209f42cc441bb4386535d8653cd4bbbd38df45d01f9f2e31f4e49a0f9cd23fef9f650027d0331cf14e6c15cd2898d5bba118e46cd921e1b092929a941f9f52b891a36996f0f6319e629d36622b3d2167d63194d388153d1bbcf8d6a98ea8eac6f1b52aee98fce396fe79e099c8a5ee39dc0a9d87d25a0515d693eaf38e63aefd88dfae353508179368f7126514fbf4542411fae52094b241e590f434845ceb7dec8449ac051ee5ad433c2a9d8f9d6794ce4775ca69945355c2319c797292d7cb4e2976a09269cc03c9a2f998fb17ea1cfd7ce6bbc30f5354e69ad21eab91ad7dcc6f356751e3b116a9cc68d74f536aff1f6693cfadb695ce735b7796f1f7d93678453311502a75294a23e4c7d2ca38ed0ac128c64cba094fd1675c1e5c3557a55ee418328eb6a6b3b5d16566bbc55eb98b7dd5f2859ca65817d24731a4cd49bdfa221dcd0f97e8baaec0084a5477af1a88f7ce472b96a0063dc8234608bada91d801663c7786904f49ae9f60d63956fdf305af98e577c28e387257ee872e58a16dfbe02e2db7b683002c41cdf3e421048aa7cbb92254b7c7b09ccb3454180f956418822170d3f4042481184c3b74721e6d9222c4bdf1e878630c2123bce2bb5e670c34920371802898720243872408d104304133678428b2b40285476a0e1ee7e8ea371e30ca123d0d8728688ade20a284952789181146280d8b0694fc2ed87929d2e6bc1da483b58a0892a0ac874da3d44d08aa215e5764cf701e7d74473cc9b98325fa79ae7512f87dd94c35f8e05a8639e8436d1c25f12cc4d18a5927a8651cc87595ed956279c414f5f5e04d951cdd2127d395f1ea155d8d2530fa3d053cecbc1dc07e4bcf372b00fc90f7be73ee0469df3b88cb7799899ba20e7a85651d792646ba225093bf735a1ada2cedbc74abe60489f6e5f4e92cdd937675f3047fb529ca2be6a157599f462b1d2aaa853baa8104531569aae5651577a0aae0efd4a3083e41adbea849b14631401a7625cb23b26cf3293c9913693977939d235f701d728477e3916c8dce4493237b974d3d7448bfc92985c337ddeaaf626db2a1fd007d544757e7577da6d76a731c79c3d211f11236a43d01c004441ad014029500b01a807d4be6d55f8c1af9bbcc84e97c82caaec3cc711bf1d0a91d29490d56e9941ecbbbf12a2e3a89309dc4b09f463be6d9c9a28f4cfcf43a1e58c181625a53db4c784e653a0ffdbe4e6a454049a47219e495a017dfa25e11412936fce15592980b58a826329e7e44947dd377d29c40f6bedba34c7e6e3d4e3c6a6d6f838f5b8b1a935dccd73d3326a92317e24702afa6e96619e65988f538f1b9b5ae3e3447bdc6436b58672164310330f812c99f885aa3386b091f22931cf6836ae8b54cb68bae85cf4ed88fcedd34c34cbb22fdca429a3a68c66599665599665bb4342c73732c82a92065983ac41569134c81acaa81285a210f30c310ff52c0a611f46a139b4548342b1ac4156a1a1d630a7ac5243fa4d436ddf645c297b7aa814dd66f5d5efcd47dbe6abdff42e955a85ab679065b422b444803c7b1c5a22d1d9630fcb437c74ed4e6c6155ec31e8856728ae25ad629aef30b5afa84b561f3dec69b3d6534ba48bca78e3f9d9872c91cd99f5ccf3bc80e728332cc6e8a6ee887cfa85fdd4334f04bb33e5266d12fd4a88df922522884b9a1571e8e1d9e510cf1e2312cf3e8576879794a192252929726c94c47c668661d333acbd54148a423c94f9685ca18c41ca69dfa23170fc168d51faed4f849a377d36c5b66cb4c48dd0279a3fed0ebb94616e7f4b84e6593647cfa06b74246e53cab93b232cc9b02d1974939252e7ee087fe6dc11fd2260048ebacfd8945d6bfa862d169b26f3ff68a294524a7d77a8104e91e09e64624c89dbb81adf3c498d6f1e7ddb9cfb9aac40e39d6f7505ce37afa931d51a9a996866dab8ce697c85cdb9ce6968bce37cf30c701b4d6707b7711f46339a99342db53b42562498789b41500ccfbeec464d828065d15d2d119c67023c7be8fbe5798b9e57cc5f387d85516c45f3d25be698dbe38f9d083193325bad82be885944671e2628b0e0fa969d87425e87591c7311c8f200d914fbf687409ed98d7ac212e9678f40cdf2a86237e23d43af9cc8ae4275ce9354e73c3ac779f73559a1c6699cb3f1262b6859a173ceeb97d3be60751f70ab2795ea09f2895d8a3ee776ef52cd9b7f9b1ce745170a2cb85273a9aad0ac15b424a1f11a5f81f3ced94f68d60a345ee339ed493ae73c498dd3787739fd65a0fb3250f3a9d02a769acf48abd8b73b8153775437d28d9039b720bbc722bb20b4b31b2000cb637276022c0f75ee3e05f417aa3efaec5ad4b76cb3d834da6f526ea9dd5991e021e194dc9da51334dea0d8321b084459e2d47ecb6ed9edb188e951ec13682d348439f34264be1d07eae7d2d2aec5cb99646a7bf41ccc7d1efb620ab13b125f625262915669c50d9a40e328f6eeb7b188e9b70b143264ba4061235a51c37de3d937b339fad85dc075802550f31c0a561c50f171c62512a97f98ea9234e9800834b9f66dab661a3f48d040ba81996727c1dbb8bbc082524cf50f53fddb65ca111f2110056904a31015bfb0461165e9a3c7df32f6ee449fde08797cef52c6263a8acc58fa2d2ac3cc5bf15b54c6953f314f4ba7ce1936651345695cf9fe52e05701ea43155c2e57cd2fcd57eeb763e24c3c05fa4ca667bbd3ae797177da4d1ef7cb2fec97dceeb06713c3421a6e91fd2afdd860b6a2efa25f0fbb8bf6f52568d9524a1937955aad7a7ae2eb0173876d9748c76dbbdaae89323373dc9d75e6dd9d92d99b9963c76d3434261fb626a3b79070d4f5cdb675400dae78810a30a3c60b5ca722c4df30e082bbbeab0d8242617caa15cb5a3351adbb98ded269e671cbee2ea2bcb0adce16b9e50641a1303ed59a61cc51cc933ee54bf982996255fc74c254a9b352aa69ae6cdedd68a2d9dd89338dd710f4854aedfaea05b4bc473b3a7093bbd4e031c5c9123544311a02c3d54b46a24aa6b95c2ed711c8c408303210d3831c3288825694a77c5c6b64590b32371031cc15131c0431c519656079038e2d2fd0234918b99cc07185144f74e694410d759e755274a5834f0f569268210630a818630c3d22c995c1c089962b6450060c1562c0a512b3a286b4801d61c290438c3cc220b344a211774c27e268630a2f599c2455e162587eb62257ca24ebd2574ae93d524aafd2539229d534dfd5bef044b12facf3034f414c51c6b0e4c43cfca150ec272f8589e2ea2985b984cf8ffaee3a5dafee5737531ef5891a9e9e4e39a7cbf9b5c12d952a9f25878a7c0a834c9a66e67232e1a37bcf514d387d94529a70fa28e1e8acc606329052641c91818587d854ce3971f839b139e7bc41104746d0cf49d130c2a6d3e74e930c20eaa574c620838a4d66cb1a22636743a44f236a5d7d292139d4edb7680c2ede3586d187527263bc5a9579ce2ad41ccfec46ede0651cf2d533d8a48cedd33ff03db3d15dd9d147c67834864d1936318b171dd4136ad533845346ab1e0e23067fd1d9ac486a8572948b01835541f5ec9e3fd48144156ea4e1431e2f1f20c820828c2ac0800149082cb22e322d46d8a2f1c4971bbe8001858a28347003a12b6290d8828e2cc21071181ad064115384c7b63a5bd7a2af4f724afe04a8b769667b649fc6cccb18f01c7a1f93f58c069b6338ad2eb8de7eb6b2065bdc94cd1af164bebb9cef56dff55d538ec94473487221110823cbc718a3896eb6bb9bed189f34355eb5d93c1fd782319a7882598ab9a4e134138d47515eaa55d16bbccedba2896a9e34868deddd054437793d18b714eb31db9d1b7b7eddbbbdbbdb3bbd6c2e232b8f1e813a7eb4d29ab4a4528e52aed21aa7c41fb64297348bd2a4246c8968b4f1158962a4f92dba5123d112f1f1edf115bf6c0cf36d83ef30167d7b16b38ca7bcc458c962c718630c531f53a1cf2f0f35d2aa5eb5aabd55ed188ef6a57247bdbb1613cca96f5ae639da2702bfe6ac08e505660cf36c911862c417185734171446141fc6233194c2e0f26164239ab29865991f899fe1c42f741194c0a906e777eae6a03132ec8b1ef64a442c75f5683ecae5c999eef3b3a6f33015e9725b97553dba2f8bc6a3af96c5797423cbd278682b7aee25b1d778345ec79a67f266887a6f3eaa552cbfd3d765509f8cbb0832e298a915abd8bb7d25bdbb87797a7731ef590d59495f0de918573dfef2d3e1147b6ca222611e2914ae9ea55cad8a9daeb22aab551d71e3218cf910cc0b213ae6e1102c04e6c118c396457b7a21708afd77c963edfbecedf39010e297e2147b6ca2a67eb9e8e109794b12e6893e6455ec940ee92fac435e3a4182249a7042a9288824ee40800b7978b1e3862cc0d0210eec893258114fe401850bd107a536c884b102838c0f73e0207bc2c80811784386187080050f57b850c97206124a108d1106d20f6174986186342292c0b22244d0ac08b70c53252b52c5d0e059cc9531a80f530b16528bede3104f88e98f88274c4f28419ff0329ff83277b621b87401051b62c880811534c0255baac04195379266d802862b306cf0ec128c319e9d0a2902e30a30baa08eb4169cfd4d1eeb4bf985266a327d14d5bede121b6cdddd91474ad9f24b739c622fcb4ccdcdbd5f98792742e6981b69ea4dcf4c487d4b7673cff9db351503498b0f2563b1313333cf3d8153516e73ce3999e7d29fca8e0d51a34f479e62eba52c08893514749ea9d16523c1cccc357c869999af10c06f31e6acf37f5f84a4f429b00834bff4e363ae1c26f34d487d6c570da9ecc9cf5f5882221c6c484331c62fd8b009f7889777d78fc45faeb79bbf242fc61c157de1c4f42aeaa2c80b3236dcbc57ba23f1ccaf1f91bfd159847eee8845e1a54a9536f000859fd440869c1fa850516f72e0292acd5254332e110eee0821b6cd3814574f5a4e3aa7caa1bc873b0541c2f2a18e1ddb5165d3f661ad41a61134a33463252acd6f5117402ca54a1b8ea8344b7ca3665c98886a7adea15621294ea1988d8c5051fe8513242a3e4c1d51a497afd72a09d5835a327ad9b32f8f494f1d4b1275057df4e8648bc4a40521ba192ffc7a04029aa2ca0d2dc00007b8498c89f2861a5c6a88a10b188722962dcc185c5031e222c3146018893a1025c90b3cca2c71e5070ce3eb04378881162de411839921c03016dd9084195db8a2d8020b1846a41f3e8c493eecf6f0615cdf45ed8eb04bd6e3cf1291bf27e8f91260de448513d695304f74e1d78dd45d8f4a649867ae6fc1755b3ca1a99f427e0ee9f9e946a8fce4a6d182f9b95c2cf9e1e7989387abc4860f0f974c741941e567fcf9e161049af2338c55847e7a1c92e36736c38825cb4fd49c1e5f5a7cf819bd4cdf3082f909644e8f4960fcd4a65264e36724f3d3378c657e3abb8c7e4e069af23388875ce5270bfd741e22e2275ff989250b97267e3abfd200322783612e7e8a01a6869aa11bdf5c4708f300c0375f8109f3db8f4d09f3e0f8e61ed83ed8b66ddb3cf06df36ddbb6cdf36dfbb66ddbb66ddbb62b84f8cf3f8f40d7fa3ccff33c8740d7f23c8d7707bb96530f3cf0c0030ffcbb96073bff01982bff811be95a1fe0e0e0e0e0e0e0e0e0e0f803ba160e00ac88e201e00ee85a00a0f2e7c60a28fec61bd0b56e42e85a5b15625ed38636d75c4708b324a8bd56451aafd9683c685aa757a814cc16a5a19e65cccd8804000000f314002030140c090563d1784c93c53d14800d7aaa4864549c09c45992c330659031c810430800008088cc90a60d50f86eb7319e2c827107971fb0085b65f2821f0d531e6549a19e53cd21c3ee99f936e94156175d153e7c1670e6a97ce85b74ae9c2a2f0ee11104876936f460b6c860bcb2e586f8340c8ac554962816eddc43161691415fd22d7d7e50fb71094a7ec24d89e5f0e52357bba73ecca2615bd59268b50d8e99a015c5c660b96cb92901a0c40d082720eba133386e0beab4f5d704fcf9596ffd9e7ef17967d8b6742ac58f019f754974a9d5fb6705f37157a9cb7054fb14e6986accae5defcd855960e0ff87b3cc0dd46b52f185e0c14e0e324371cd5f03a5ea066b5c8453e344acb5da00e20b94aadb4e44fbf9090753552edb6beec7198e85448696aa1feecc3750be83b3ade1b2dd72e121a18e774a2c7dd5de3ff4ca0e8cc5edb61dc0e16b139aaa0aaa2d10f7f50dab135a8dcf8dd75a13ca182718b683160ed2c7730ef59b01a61bba45b47ab9040188c1d1213fd34b1c6f96b3f4c2debd3e55459ebf4508abc3d1476f4a4e3782110ef0c3e89353497db579b75060e12c7d27ebef1cab8e58dad109a63af0b77cee71b5244d58448cdcd6904d565d46f5dfa4efe49991ff1ab99b19b0e93f79f2872ee43e497c47b5cf7c045655ba9bd59196043425d921067159bff3f2aafa387c2ac25957e660de395eaff67fec8f956b05babecf57e2c009bb52e274c5c2f04c9ec4c595cc8c9bd5293fc119dc238c5d9133f23d3e9531e3e3611d597ab5591a116faacc45ce30f5bc6058035a08ec457344927c2dcd95c381d331edeb1a9603efa03133eb98a3e0d98c3063bc6ca8ae030d47bb0bdad7e52066b4de6c6a71735d48a7bf9b52423de6137860b5710833465fdd0681b4adcabd571f4ea9beedefe9df32c49911a49be9924342c832579e968edbcff1a04d4375f3fa69cc5d15adad62d99885e4ba10ccd0d03a76396aa0027a7a44997ace604a7246c59e835f8faa6f467771a0ca8099fb8b7a0d4678b22c89c42299706993382691a049c2fc101b0de4a0d7b9a742c7e3b36264f21b1b8d5ed313affb5a65e3c83767cc2d12876aebad8014ede3445c08891cea3c994d00457f144a47fd34d96bffa07c6c1ba60929e78c95699520463d40927e35a4ec8a626842888ea6f8b441b4993bc99660d36ecb6366b534e0bb5c1a404c2d1e8bb87bc3adee6fd1583f704fe317a5ae6d9b16a622f09b1f2f4c8b990b17ef650826fd8861fad377619ed50e838b805eebdb93f02da32eccebb02b205a3991c1fee192588238775da98ca8ef6bbd9133b5470f4566d07a235a0553beb3a6befcad271c644a2091222c3cea57ddb8de8b99cff5b73aad01dca53afbcd0231c76997af965767ee26bc7a5e762d2442efe388315e3d71a39b17bab01efd4778e5240c6142002454f58ff825e9cfe22300cd294c59dbf788578f8c135fa1accb429b14577e8c5a17f7640c79d572bea4885cc433cbe003a24b685223fcf04cb6cfa9a5de37dbb5f02e805d9ad577e2bbc9eb561062a8d0beaee428515d1aea096edb264234d11a18495a671b443ab153b3d40e8cc1813251eb106ced8f2129c231b86c935dc89fc94309af10138ba16560a153cbf035b02c584995f712ef4973f109583aded24458d2b3862e82796b090f23af801799c4cf6afe7b47b840cd3cbcfaac1a88defc658a37c8ec4072de620fe5f1d84e8faa716363f8c44014882c310bdeea861dd5dcf86b6e1dc2d9b9e0f8d28e6f2e78f4f1d57d621f3cd3d137502c9f6eafd4faeb44cc6ed7d8c445ed0bf5d9402dd25cad2912df83c300512db22b3cb93e5c9a9e22351ddb76665e3d0062ecb45b3beeaabc5e78b239f158b170c3797c6a026e153d9e17e96d7999b067ce949550d57f2ed911286770a35868f82747e1c9625c415b48dcf8dc769f217d30930595840645fe252fffbd1dc5c4e7b647ff487ca82f1d0029e6217bd8abadd1afce68243c02c6b0b7f353f805161f7610a0820fa6f992312fb31667237ca869160ddd1059417a3eae162a68a3c9ef8219018cfaf549c395cd7ab2fc94b33fa515103b2369b57857225c0214fa3ee613a9166cb19a378e3edc26708ac4523b0cc49300c96e79d3cb8eeb5f9e7ed2846ad6eba1f766fdc8a16b1aea3accdc6c8ad51124e53cc7bbd348ad80b6272de5739e20c763ac29321b8621a4ee87d9314306cf709c12b29707044b60dca9438887ae51f9c01d11b7c56309faee97630a9fbab19d90753f6e32e8ed2fd5c468631b8e997d524d659d331ad1ec4d4eb0f259e26ab2ae9ae6b66e27dbee8d185c9dbd90ff1dacbd486b8070b74e1e9631025b9e499840e127ac35fddf0184d32adb294ca6e8cd102741661ae5564947f30b886c550ed3ca555e2cc01aea424d0e70cbcb59d26d6c56e1d25e20905b9f9bcc67f8a3ab5fc222a114b8bb35f424bc4d50b81e51ad74fc2ca160721ee9752cdf3c903953b4a7505e1e5af8d19e29ec647535937fb8f07e1ec2cfa41550eccd9c19b6d6fcd5606c33d88e51cad475290b42545bd7861df5041119e50b6310d3fb59405fe1634ffb9e1df01f3e4ac1599e8fa63c51f2cabedc78f66aa4694715a4d8ea54d783e660a8c3885c5c7d02c98cb30dc9a50af2deb28c0cb3a9a789aa756cf2ed4ec69c132ad78cb3cc9264969d93fb1399bdd6520c7db3d32a61b4d58a193948f0f32f8822d4faacded30934134132b1cd9937562a8b89d7b22e43716b1c9684661974aba01505a51027f8f9b91c8aa6e1dd0568e261f1574155ef42e0a6ed9327091bae2921f5939f6aeb05a1156532a64718d5cb390628434df83898572a544ac3a8c089cd8c948d7e394209278df4ac45c114ab57d67fe0ca80402c08ab6e4fc5d9ce9301cc022282c30da10605f045c782c6978ed20d0a707232bd5eb2a4c35f1aed30b6edb37d3aa31e35ec3872de47c66fd6ed5964fb5137c8b72bf16d27416da4af3e38117e2fa32ad2d99c28d7a86daf826037e285311fb469b7b4e49455449bf811115c2c220e7de712988fca3801524e18a436904f6f07753714bd54030c8855cdf3822502b636fa33940f3d5b3d68a693ac76709ab21bbb37c6a59b239173df06cdaba5da5500c67f1c398a9fbbaab4a1661103fe3586ea71fc503f0db2b88ab99fbd8b25d100c691e373c109537e2efa3833a931e6eda83148e9dfaa8d8a903ef6e0066000b43446e9616d5f52cb328943016ed1e0eb266f778a958ef4ed8fa3965ea88cda19e60145aac4d1e0c57440e50310337814bc040635ea126e43158088a18ec12a5aff2c443b0330cf8c3e5753419d16462c6184c31d5b8f1455b09afcc57cde7a69d7f6f1ff14aa70c6c72e064ab8db22b63d3badb040374c479f2d7534b6e1c03e1c76a8f5cba854e97ed0dd705d1ae299f6ce4310771b2b0588b8659a7f566637188339ae91b3076f0c5fae9528216d502b91d25be7045faec51b728c51adac64cb23bef1a8c840e6d8e48991e4ba2de580f0bb8c205515def322442aed6654e2228270ad951bf2d5a12f625c4fdaca8b5807dfeb0667d6939eaf5045636d806dc7c76788a31b8d89757dd3b8dd2616c0481874df4183651f67130ba95fd12e7666cd146eda3835de08c7977a93c1f20c570aec5240663dbf6bdebc2c823dffc2f33152a0b591ecc0d33eddbbdd74e173210c1d2b1b776c9b4ca8cd42259da634a41e00381be53afbf91900c5ac0c14cb56981599b4981975ac13279c627c9145dcc8b0ec8755e5af3eb3cac9cea7820ed1e7e750061902a8b24a46955397799e9d676758f0e3d01b021ecde301c04442b63ecbb8d118db859cb9d3c0429aadf21548afa3c93eaa7406113ddb19ab69311651f491f3a3aecd5d52648813f3ed875733800ebf4deb962319b1d185be3b9472fc18c59b6ed25c8a5709852e7d192cf2eeb1d4c361f1103a2889069110b6ddeff6bc7d6186bb8d2d40e21a6c185f78740b58967bdd210debf978fa58e32caf69245504734aa1059cfcf00cd7c48766b0dd73955775fa9f6ac5fe8ae1cb650b82fb6c9dbca2500c914a4da7325fa23a5a12b55553141e6da635ea0c2bedfdfea8b9abb92ff37c69cb3dea7aafe356ab0eb1b0b8e9ab4013d40aa5eaba8a0931352b0ea707c5b734b1152509aac211d9e6edfa21bacb6da241bc048ee5a2159f369c62a706897aa68ffea509f62a1f13086511db829c29d3fa55bb0bdd2973ff6ae78ec78a5d1dfe42a3ebb619988d7b74b8142d47141c521c437708d4759c4b152d0b313223b1eec6c7b3637ba2ffa1b6ab3076194a6cc6a0779482f55d8a26312a50571573498a0511166701a3152ba83b3aab7b7974a77f55aa16661063cc1a8fbafc178c96e296a6992d907a2e43d2a6441e9bef3b4a2211d4dac114803efe3d138ddd7fa38fcce2fc87211038e014df6169f097b6f59aee8c71749748080e78a46bd6be408435c95b374787a54890a418bdea0823e79c103b036e845b0d97baf80f051ba4f3cc1a3c5326425285ea4bae76023b7057c32febc86f9c28a6d271174b1f0141a6a029ba5c5812621908c9a3e20b010a29d7eeacc92494d660b77a8d73c235361d4abea3ca80176be5268a85b03263398ed863b287a9ab2a2ec218aa5694be961d616ee308c0acafe7c458dc5ecee0130d869c151353024fa229378cc126a01bd3a840eee6762499c286dc10ddd55b2203916fd73a6ee215193c74cb9a70c37be4cb86b13b9a36a80aebe0cb5591abd88b59c1ca02899fc9a256f7cf5f7958a7af4335b49fa99451d091e189ed67455ad65dc23c1034289fa67a4af48333c8f4fc1c9cd7860a9259e58ad55f4c23eebda05cc153a4019868a5893ca490a8b04bc2ea445e138b99c9469ecc723fb9cc02b8d7150403edaad4f25ec9f2da313959b92ac65d70d1bdf2fbc82d802cc4216577371285dfb0be4bb48a0eb5adbfad835718c170560087b4b4753102e19e6a9f4f5829085c9638788465c04204ab63f5f893a1cb224bf781b828683c320050928f7bdd85a83e4ed1eeb66dfc4073b6236561df1a901f03ca3bd79e5570e2dcc103f5a3d57300efea8f3f3e8925dd425fb4bfa3c0ae9a5e8240ac771b453dbc944503a28260923809e12def9b5b29cf317ef343510a77fc5bfaa2b62167deceed754d20f311c5ac8e64fbdef3ff0224cdb88bb200f5871f773314e03c0e85ec8cf2b1ed8899287c20e83b826038f67458b9982fce5bd03fa5bad8b54587ee08fb26635040292a367b1d4748349cfd790560a4788272bc17f2aff9b2d96e871b925adc83fddec8e7a94a94347563a611b1da3549aad02050fd711c57f75df5362f28c335afeacabc900893c2cfcf8558c68e653f7f2d7d760e0de014655cd8cde6515dc5c353c0d553d16fcba730f05c6b2cf1d4a190c0a84462b7b1be3839185c945235019921cda0ed350f4a1d95c7a8d6cd429b8c79c29e8052630c0eb97e99e24e0fb2c1080fd54b39c7f99859a638682dcdae4307d36b37ce51d5ad6393a1b23ec514a4bb0efa1a2e4ffb435c86ad36ee4ab46f7fc0a64ec9345638accb69496c14bb308dcdcc2cf184688d59f14e71bb45a7efc62a6a225e0ec46bf35602cde897946923f558be2a565223f08a794a52fda24f3212f6f0cccb76c01b239764a51325bd79c94c9e15dad68b9ba0cdee4e28a22c15eeb0b260eed3450f4c3dfc72e112356151ced4b1f72c8fc730b1b0100040c1e5d3fc6e74bbd544a6c2144b2316b96e7edccd16ce1ec64f3ecc826951a1dc8c236ec612d12eab147001edeafe1cef637d87569f982853c47445ed5389a06593d63ca4cf757c1940f0cf18e5de634344282e3484740ab76cd7d9e94af7d8ea9160f812b3f81ea7abd26f80ef52e076780b3042c9500d407ab5c7ab8a4a257cc6d92c22b83dbc66b4d9fa32697e0742660bd25b5c3f82736ee91ee4ef58e220424e1b1cd9a5e220dd3b402adc17ca85c96fed11967f44ead7fa2d277407d360c4a5c844c61d96b949626bc6dc6f4979fc81ced755f905094fa46486afe935a7436e4a4194e0c1804fca483f36a2cf9322e64ffcb3626acfa0efdf626da2d91b33510c55ee94b58124c854ce22c52bc1b90bca91c2486e6d20193db9d6068942113690bed65c62d9dfb7b805dda9856e830d31a82306df493628c4b86c6c4602cb48475b393a80b5f7b3c987ee9773bcae86e0386c3a90bd05b3d6215c20c03694e6ab396adc2d62a4d1efa46db9fc0406380c75813a54b2a2d190a9f723fd6d386dd441b4510c2310eb76f45e24667857080af6a467f022066c3bba35958b94f7b608da85a4c1aab943518907b270858418a327424008c34bd2a8cbffdb81ac806628fa2d72a24125f2da7d3be73a84f5352caee2662d12ab224391954f74c78a3f1fda5d98453128f391510e8606c316967457024ef162d56015362fd7abad37345381a9514b08e896c5780b5c90b206ffe8473bf42894f652d1d37af2c63de70ec1b9a9ce1898422c8e61f428016d16fe5601754ce9dd2ccceb3f5fd640948535dbc2a7ce717c249c5d9ff5bb3e92903baf0ea6cf4b47ccf0e459c4222a9304c3499c4ac5b9032f67d2a662bdda046d32b695e100e2319907daae30667c10fcefef6f153e2ed03980e32587aab1c628354d8e5091b3fe8b5cbde657bcc23a69d6023f7a9409d183e9c4f33c99b84bc7322f776f017c72db8d30b211413e0d4044bf364524cb765529af1fd542982e7623e1866ccf985f75b7b0c620bdba9d40bebe4a66c32ed88c0d3143fa72234436f1d7ebc752e0b6ffa24bb85762a85d8ad798e63ebe0e86dae79ebefe570d031ab26ee03fe81c96c12aec0c1a84a82d2a70e7c5f7ae2148b796b72f75df16b3625f17aa56a415d5e83b23e56eab34001816bfae118db8c54955614b71111cb6074c61686154b5a9efebca0386cdae0308e44f79a42ebcd1168008a33ea01c59ddf3e856d9f3adb7cfd8e17cc428131fb689cfaabaf78207ee83a65bba4fd8329b56730b47d340899ddd48a4bb62c5c6680bf66eca9adc5884f4c08cdc8050cffaad48f8a5e79548d58f5406406a270766b6206def7d97066d9e0544aee1d807ce012e3423f49229906acfa092615f43584692dd29c4068d5c2e097127d83d7335cd6d96da0d97487e80c8a43aa40729ec2635a57622291dce9a131912f2bf4e820e6b44bc325dae58410a15d84afad69a9326047b6f68bc75d6d98e4242df34d83a058a2eac643f8f3d187609ab5dd7298ab3bf9bc221b0e1b0d31087d589c3888070953f7570b745caee6e27ce29dc0f80a5854917cba30d93126bbcd8682be4867a7e0423687446457a0daa80bf21c0ddead5a8e47e14714aae79e82997dd8298abc4f64218cfaf5000ad3147a342a82198f88ab2442ad01c634b141ad66db56b1ac6d2099392dfb44e84e12c4060e9721089e870c3ae4d708343ba6f752004d4109d6c68b78eca7353ba3b82bf927c615e0c634778b668b94a6114c2744f8a434e071be9d40ac841bb2a7176bbad84fc3bcce914ffb30b3ba7d3d8eb2cc47b3a610ae22c67791afe1a16786e1e68ffa48aae2a2032adc277c10e85823c392b9a645531e9a80f692ff864aa63636261844996c029a2350f171baaab07bd7a844ac91bfe006c6b6c20f8e25bc334e39267ad6453c2963bd24aba106bf5b35ae510c174454e348c56524b0658790d579c5525151474ae0c0777157b55d84395f816ead5800edd4def1d2f578b532b25fda4a45660aedb4f740bf830c5278a9cdaac4652024ad0b70be34e08913d0b6c808dd904696a57be50a47718a44a31e448fd754f9fa14a8ef3496054a8eaef08386db40273c0595811fdf69760d3dfc56b5f735cd31b63f5a2cc4743fe3e4eab1037a7894c3b693ab03856c83951d869dcf8b2e2c4a4662e163415ad61aa74c88604000003da3c2925465c433c2ae954fed39fecba8614270a85650dcca8024517f7e503f09fb24aa0952afe80c5344d680ccad5a996701601069a177a109ea25459e19a081a193aed6fd26230409c82fea15bab741fcb7709af4daae8104903afc8b6e71d0667e3a1d28fd717cbd655b37ed210f2832e001a881091cb25b702487d8f50aa7383226658c501cb2e016a9e7a8662bca0210950063161aa27af54ca7e1504ab923e3f356771d117bfb45122cd0d42fc99132bd32b71eb09b274dd6a48abcbde0c81492bd9c172848638efbc5e951920749978659554f0eb5905c419c5da83dc30981f0ba9afdc2aa2d74eec64af37776cf37f1b21e6b7f22e44e602979f939ba437fba1581b262825f7b7db9f9951314d1283103d1f0705416b076ada66343340c68e848d9104b20b631b7d0e7edab9914cf40939a43e7f3b9812172aecc9f3a4ea6fc339ee3c4e9908f0f1940b1b5242621a03a10d8a412d56df5a68090f3904488425f2d4d82d677a532ca62cd98cddd3b5ce8b1d67a0a19159d2e6afc2070e4420f4e3cb3fc2b70a5049887df2f5048c1b442f0ab48be1d21cd6c6cacc3726f72199c834656c97b19e304f3a98be0e037ce85d0ba1786653a59b18a3a4a732266e10354a0a413af6053471132d8c8a4443f3106365c216b27146aa2614250cf00fc568721760f261a0f2c1069561816dd3338142bf0bba8a1e0b52bf46a843583a4e292d33c8598eec2bf2ab87ce4d0ca634cbd03a4ca3f19d331122aed2247f41e47b4d0d53563eba791910cf25e7b6581241bf54c6048ab6c6671ea2b9258396ec818d1bfe1ed5ceecc3d1e3b46b5c449ded3982110b86afc745b30ce972afd2ae6c40861872267268c2c1b7ac4c34f6619b4ca41a72adde6e32acf30bf864e4cbb42fa39e6b2351b47fb53ea5a86cbc232b3c0659c7aeb9249e59ac61b5ac2fda0916b0a0ec2ed3c6adb3badc8207fcab9a834609d34075a13fbb9cc2c685b33ec9238133255b4cd9002fbcfe0e2626484897e51a8274ec6b2a3e82b7c26eb7851681929a81d25c32742b37ee6789f142422ea995e8bd636367c856db06e74e32fb44793ba618c6fed7238b5639e46c1795e6f2d3dbd7db6a16abd607a538f412338e96790b2b9aafb467c500fa020f526a7c87538aefc8db0bbf3a8d3254126a6c3b4f720b2866aac6ef678a7a866b6ea73c55755f5d16d318013ff708ad9aca53c7204348c65567a7e4bff04c65645cbb98ef443772357616c16bbb2e7559f2248f7f82b28039c657575e86e83b6617282315a9614bd48d3f3b91c24154bd035fc956a8ff9caba3f495ec3fb0b6c179795b5bceaddcd210b414ec3a98c6fa0621092fe57b4848db58f8b3f4d98964caa33467871a10994b012d765ec5d965bdce1092ac225e6e11a7e9eac8c5a197cf72fc5d45bc94c88aa91c45b19bff8f5f6eb8897a09eab1f0ed003ea5afe378cd9cba338b6f7617733b0869994c24b1c748cdbe2f8442128588eaced4615418472ea65478e9e878803302746e41e2ab83edcb1314084f258b99dfc08d776fcca19717f806b2c38d825ea5f40fbcbf5958c34203badf64e2c5510b3bffa5cd162710c1ac91b2aa1c10c18c4f01b2bd0646d1b777d721bcf60b6eb36d30a1253732ed26268546ce827e8a30d6c3634763dff8a3dd883cfc10ac5fcc48db737d7a6845f96411228434020455e12c48df705adf5622a1083fdc175f29b76855f56651c66da8b969d09b943f8d70eec1d363fca512bd60ccea8c8b2e43a0fb0749ccd26e4d00a35e5e5af1a01c556b7f7647a51ff6bbfca3fed86a17c2fe5086ad824328fcc2325a59bf2c2a9335f1283118ffe2c1924e71880bfccb845ee685139223c63c736892d1378b12320ffdc6f2d486a9b8d72d3cef95bf4d09b571a46f8f1a31da7504f19c335d9106eb3f4d0e362506e24b4177d05538f42da61b729530f72421e06258c917c3bb8fe902f5c101857aa31c37b80c70ed7ab0118ef8d786f93439bfabf9919dffa7f14a757cf1d4e2b06ccc8547f88d1d588680c8482c6a0b559a41815a1215a17894033c67e16448f09bbc751e7cc34296f26fb270837896aa1ecaf868b201037b1571a8556298113c12c27989ad8d1d289e3db95a3e5d599805106e140b22e9b8375851dbaa925993390a631f1010b64d51dcf3cd75207a04d26b58af196e84b753f3e1d62a195643cac5690616debc2490b317fdbbc89647df43ca632b0f4ba6a2ce22a51f3c4139ebdb8123e5a5a4858846d99149ca415500356b8d02948c2b71af2836a9c91f3ff364f6b461af7a8e9faf96b6a8ab6c28f81055ed49f885dfd3c5c52f87809cafe4f2c5298befdf5b034b829f06746b4a6a98b40042a5725736ac1eb4acba7b625e5b3cf2e9f1e479d2ba2bdec5591a92993190b4d5e24f24ec71dad3d38d7996613ed06f88775232a040dd3fee70e68e3748629eca8ab1b0f87c93bf6cbc16736fb9a5a3af6939ae80a31eca8e77ed2dc3271c1bdcfa34b1b36770897844754ac73e19febbbf503cd67cf50693a33a7eeb834c591dd1d994f83b47e4d835f5d4fe351b536bfb54b18c8253e0953b159cd06f51a1d73b1e0180a9676b3b226ca77ee90350163e061f551cd119b8a907b2afe2c2ca42d2ac8218b62d13995542a24030cc0b68d1387c0ed08ffcb3890c035a3947bf5b2cd01cdc0c1791c786b5efc2e5b4212e75b1fc36388bb323703bc603f4545696786a50a0e6866b86a0c5054087807e05c8963d60e2bc87ad71c9089bff3516d595f5fe9b04357bab415ff50463a693ffac16e0b35709a4f31f019c21cd66886cf06f7d8c0070f80cee59f72ae67b05eaa3d8854dbf56370489489248d133aa5f6531f2d0d478792b2818d2a5dc5888ec8321331c14e17f711d18996ab2ab8fd9a966ace8a6df0995a4850a06a0ad4558fe3ac0643e771d022197f6b248f1c00548d14196b8aec798f7a52e098e970e44c4767c0d1c25175a45b84153dd047e7df8f24259f3a24bfe272a7322db94ebbd01f9e8008f1d6f836e53a3b877039dabd9f8197a756a046d77f2d513f6a541e643326bb79381514c8768ab6ac6c93cd63a86b9b137c0982ab1404de88092901b7ed66dd975e322c54b160aa74bb59b3c4ea804c81c24ed4b8934daa635841969b306f2efd1c436df26eac7dda51ef004ec9cf24623c28aa98b549483cc96b0a19c486aab0e36bc9e8f2ef228bf3c1895f3a0d365eb1666270a5c0034488713fe07517d3caeb913db38eb035775b0d68fe74db2481e0f36c4b79a3303023b7a4a95d44e33ed543f525f25a8bdd2849e480befcbe33aa048188b438e056629ce1665c7ab1ba95a1737e4c00b7a559c7652d35960b49426d6e7ca8e7de1ba2a501b73d526b95a0d71c5e8dc6f7ad8171e9c78499fc5f14e52b5dd93d504b05279d67a179738b1495f6165c5ca1c900794852983ca87dd82d8e8687682dc3ec3f2da7a9d0e223f1f6ef75e914c569668a726679418db2b10e412654da775124c36462a296e81d2c57fc4135c85335ddf47be40f33163bcb92cf6b9d89b6b848b98e11ac6f26cdf61d6e2cb0c28cd0784545877035b441d910d8d568123a2ce96802a15009f6ee0f233dde96fbfb7ca4b2de2ae0112a7a81013a5072a5d50b015771003a83eaacc146e8e2a5d7c239163b4d0e22362445426a4cd25141f29a679501f0648af63f5856f7db74cc7d3e7673e510159b09bbaf495981af096d80ba07eb8f0a263591501f70bd6822062b638c28e3ebd6e89a275d4bf82c6efdfdb9cb4c3c79c36795cd1ea03adc99207aa707116afb93296414f11248fdd0d84a266365a01c72ee7aa1ef5a480b9b0d58cbb0198ce36f22ea3005555c1222620046b620b64e284c06e0acebef097a9aa40e89afc53e18c739b122d3e6902ae369283fab32e5a727636013d0a2b29f037fdc9777d275e88f101c787b9db98cb86e87da92ae7e2e85c5173a826e21112be21a71cf663805b22c981096c8cbcc89da141f83878c53bdd9937efae718768d69188642032467de88bee7978fc8120e405a51397a1914fc6a4befe9e057b2ed639fd37b303a9db939273baf4dbd2fbd85b5c878000a68442113fa52a223b525ad0f45ea3350bf91d474cedb4b43ac4ecba5ccb371190354004b38578f5e48d259eda0e38975d14073a57b555e63401a3ea9d32e508c46b2af425886a5474b383ca1edde5696adf293600d28c2ee1e2c90f31663585c55e7e0331847029ad806c4c4f04232b454d8ef6a42f26658d604c7011b5e0f0c2f52e6ce9dff262c236f3c94eee28ef72d68be96aca74aaaee6802101b38e70650a2b44689379cfead0edbf99a20d18a8fbc1083092c5896729a329d30d7f1b35042ec3924bad0e2c61d8195959f1df385b8de9d7b084ced52c44c60abeb85ddacd02c651e97f2bda10111cdc6f5809a80964d5fe5f769bc35bd004e68ba1cfc2730bf373b4170dcb2bf4c262f524ba303209f0f239e71facbd6031f44e624ccec9e2042aaa8595109ea59e57f4808e58514acaccd0e65dfb84bae3eaf2d99f45578c11dcc770670bab0c6d18519631ce21876ae4d64a4c429053661283989cbc9e33acb8172849560ae7d7b497bac82ab31b90bc964664b4e14537c4e98601e72487500dc240a3cf41da5ee2dd9b1e2693cb9330ce5c98cdf493b0e95e86c85b3c218cc5fdbeb43550ca660ec7be6923fda6cd294f8943f2c79fe41e13acb9c2d6ccd9a09f1ef19ddf9c854088e291eaff4bd801d2d801c83735cedda6341c32478481e017a407c6cc8145311137ae94b0e75d771bcc5681ecb9f6cc60ede839b686dc3cfbc176fa830bdb884f73db236e078abadc37411a5915c5f40372d49d13872543d13d96973dc9af5489326e36b7095218a814244a3f8c945095ea538b96da860d336096f77e5f24e268d70eaa53455fb86623f04dea777a466a9d1953eebc11f4a647d86c4adb111eade07a240c5c84cc0146ea1cf945feba39ee9ceb40cc1c9f963331c72412ef87d0bd917bd5273967f50625852b3842e1312a17c14c39fa16a9f4803c65f4e3442d221c5bdeed7ee46d73f09b733438186d404739181010fddc1d00e03cfce29c66e007869e5fd0360650f9d3903af56d7838be699233d38ae4d1067198275bf6378527b96aa282c76a8a27bb129e223c1f0c43454187b6cd8c76a96ca24701978942fd09458d26e3b44940fea80e356d87f36cad9aa60434e3c739037d0c49f1e436ed5de0101f99760a85dad6d46a669315c4d48eb3823e541ff38028db0c27ed4dd0040d75e016814ff81a16022f166aab662ee6534b9b76b9b4e06f339d3af4dd0cf33c3fbfd4f990476f88a4f796a8aab766c442b4ee27d341ac93c92f94d814ef8051045148d05d4517d4503aa84cbc26695693ae23b2fa21a7c4c403a4dc0138278ae7d00b2f0b5504e4ac676f73306d6a016d6280700bbcd5828022ce7582686fe596bc98522259200aeab497c64cd1015d4af4c956b688559e44cceb64571e89e0ac923a5f6b26a04af7f284afb001bafa67fdcbc5a37035fbc483f19a2d331fc4c164b6893634a248d2c8588ebc623bf9bb3b7ff83c74a1a7b1f89d9673f31bafbbb16dba33a01050fa2f93e45ece99bdf589ba18e9bae35d6a4ee68f6cc2310a5a9e36898e43af64b10ffb3fa683074e995cb8ce6494d9bed355e2f5d98c2946d6b49dc9fd9dca2495ae3cac532372b97c098bcd608a00318abe3af0341b4184f7c9171dec3c11b2166ff4eebe748b0649917b31fed289c214702e3c004039550d791d2076634f2fe8545cbb0d57981d5e86b4897110ce60ff0f4b09b9a5a5d38e7f60bac275c2582b34c180f965e61cff9477f22c9dc5920c459d373d87b8127576b40c61cb4f465631c3a53a6f3b84759eb46848127c78e253653636551e259688599ccd5aa2fb86deb13990b3958a97a509485e0f2f97f5f465b3727ff9d1d86cff0a4b593740a07d06441e1d671bd22f33a27d70aeb9366ff3d89dd5889b879ff949efacc1ca0b750f9cc407b5e2306be3fdbc9f989353834f9fcb133085aa62ffd89ebb78e135e6aedc44e47df20a862427a2d65d469a3bba02f086e8fffd7a63162ef226ee47abdfac28ff1c47737c2d35c3df3d33e129208a1e4f70034b0716d88c501f29a664b6a7f1262646a5e6178a611feba2e6fe823aea8f80e83bf46d1405214eca184728aa635c564451e482ce708f4a28a804c22c7350f5840f36f905e3c3d63351740349cd5b9923062d9aa125ebf6ba07e8c07d86eac17cc42d97cf1e66decacbe237b969b92b69e0d045c2206678129d5bbd08abca6622d038d1a4c4ad31f873fd900551a5d06264d1653016833809225a8ca2fdcd36ca3c6c0257434fb155e71d792038c94cd18e3210055f0ac9b03c4b1899b114cd49adc36976b0cd1da7a6e957e0175c547c8d5daf6dd0b318c2c06fad79480d28be704099859603b6778861010559161ba326d14a4cc2d6bce42b6faeef65cb637a3c7676850949378f273f11394d60321e80ce3c08688ced92f8672a032c94b53e29dfff60caec9b1a0cdd06f249ac2e6ae43101411cbfe0e46ebf819b03c472842781da104b7b273ad41b0ded370e431d490cac0a6138f8a465b5033b18d51997dd50aa83a533bb54766b11e04fc761a91f80b6d2b4c5d4e5a79e3bdb6b4d153da52f0ed5c8b3c6e477d1132d1e76b4e1f952973f88e63db573cb04feec82986789b352bdbde5bdf7e1fd496bebec199ebb721b90b351b74601fc9c1a6d502773e233cc9c8afd2306e739f53530f4b7e320b8e7fec1ff08dc00684f19d66fbab253ade6c2bbdcbd87fce39ea3dbde106753a553b63f3433b36eb8cac97d7e62fdba8cce7b1361339f39e62ca898d2265cda8fa35469dd71c9c7e5a3195c5bf840d62619b5d3b18ec059caeb28c7574063352821f9ce25779a4ef16c5eabc826d72a0061a1d941b76102f5651f0d610496530e8b1dde19e102bc4fd062d1a94b6ab3a8d0448cc39184ec2fbe1d5ca703367cf93dd55219e8ddd24c5999ec76675aa126ebda25f8baf37e922e923c0377a583d791e39572943cfb24788b6f0d122edf05acc4db53ab91a0be50424600ec0afe5380a16c3e514df56f50740439102882a760746701c7982330a824aa599bdd526a4be28a65ca52263e9628c83e7f86d048a561a7240b226cbdb281d2ed51af5d9014089fa7926398c89347eb683b117e700b37c7db43577d81fc7b736e74960858ca2bd6cba6ecbf1adb55bb6e9abd1470263990aadbc8a537876f64d06e53bd9d1252db81b62b2f1e2ce9e893eca41be25d193994f88dcedbbb760349983adb2f5627bffed294913c62ca4bf0e786506a96e4ba58ed08e887be96e19f4f91c280467ffbf6cb82dd7e74545da2c68452219dc86bc0ed9cf4af6a6f3f12c45c44170aebb14c32073d4dcdc520cb7ed662ce06018ad688a6300e4c11495591edc1c8b09993b003b721ddbacc3195770330405d24b5248112aa05806ad56e9ec866aa8b2ba4615eb86f46af56bd0139ec9d3ceb3ddaab8d2169fd1917b8fcbc74fc0e46ebd2b03473593a1f6d3c3b826ea9bfb7ad3dad0ba30dfc2bf2c136217bbf8f006bc4e41342e71613a1a4738d30767b93841db4eeb475a08a1df7f9d430e5bb70b81417a2fce689d22c85ca438f36e5750ca63e5cc9712247ac41e43508c4134c71071b6cef0ce5984554743b98c81d24f70e1684048f22525f8f84f41003ff545181b3b6514902a23e9456a2d68ca62411b4221e0a633c5d8f175939196ff80d59df273cd4bef5c9222dad3f016bd7de2aaace69958a2cdcf55d954669796f2af8504d543ac1a221d3f281a7d92b8cd9745505f00c99118f7a460584ec3cf4b9a6134296e31e866560ba0c73388837a41997de3b1da2fa400bef9b22e8e99f75f6de502ec8ddb3ad1e68c4bd956f8a9192369f1438489cc9365c4db59515a3928de580194847db34950f7ff54b87121758fee630eb8ce7c5ee64ff06544820f2b83d60faf82313e8e063d2cdd807aec280cba3c85473441351c88f365fffb87007df68a8538d8c4f05c441b0515e1c0c5a5c8a2c8e8a2ecee84747cd326acd0e12b9ab9ada2aa11a46398533da5dd2b7901ad8bb8c9781df7d0b83eab352b4957522235c0f6ba2b04142659fa2481389649b00a9b918bf0918e9857f840ca258d508cb212a4eab3cf2bbdc0b46f5df337dc4765b3c7b8b7adb3d08c864280a2b1c1e3f2dcd0ceb74b27d518485631e14bc09f5f29b068b9b35562df952ffb5e43458c946daea85db0305e2115a38bcbc503a3364bdc93bdc1a91617201c80b67fb9f5f7f18d3f6b41df7fa352a5a8e67e86cfa51ba8c744085ac03a79c6f056bb3056e357c85b62492a94bec206a09938ccae0d359e2574750ba2e9ce0b19d943ff8148ec6d200aef14239204592e659fde29df74d14777d8c74ef09d752f3c78ea02d69590cb57a3a875106d10c1d13981a8d16652965a2b18c430b96fb31e59cdb65d4206e6d0a9757f87d4faea5e3bde51c46157fdee442731e8efbbdcf257e47b5a4101e53a1251d04976c46e0f79ddc203af504fb0f20c50f97228a5c5cd9a58de911a778a8113d71174c3e3d9d89c7c8a2ee756eb698c17ddefebf8ad6e212198deb40a1f53fac6504fdfa1e0ae101c16ccd089a01119559320d9762b5a0a675802e38c3a3ccb81b033009ab97b88c8846d809370bffb4faeec0c492c39d53c54352f2505701365039f16b4c14eec9bd38da134ddd934400be530a8564b5c86b3cf9964d58a35c5f682f234f645b0c151d5d85c3547dbbed730890591398356158fde6ead923cee54fd90641b84efdbabc17ca75add6200fbedf7d73c422a6810f3ee9df59068adcd88b02279634f93a36c8ecad47e47e9e34c059733629025e25688af0679a14841a01a9d3fa2e3c1c28e5009c96aeb0c70baa814b02e84a6650778571bf52724226f3410a96c3102ec89592debdc864140e225d40b7af44ff3484537a21e0065aef4657d22937cf5ecf5d6a0f21595016513ef42f970ae5099bcbbb274d199898d7a65812051150d0bf2c28254f4a621d4c584f4a39bab8e05debdcaa12da90eab03629a65bd492ecd3252c23bdab149fc5d6525b4469c4a2878c03654d828e8b0daa1be773f2cbbe746cf8c839587a85b0c969ef9fbfef55f59b5acda1b989079a9b74cb07a8ea3580a0041f909eaf32b4c78d236f5a77b670d1a9904b4d41e201778b8cb3ec90f57951fe9c099aee9bc3c8940728e3560531939e35bfc8b15c2ce00398091b6133a870982ae5997436be8d020baa79526f9294db259fc6e2a44ecd7c52f79d5476fbcf2a951014a7a1a3e8909cfe87484593d2d985a6979f74f74c90937778c3cd5255c27fa10c8e23f8b39949695d40a3eac8b35205e2637f916311c47b139a4f90acb2e649c184f79c0f79903e413ced924f96a64f8ecbe5252a431c30fa28eb2cd1b5535d0ff72af96c2722466430a742cefcb8da6d058725c25eb26477775e3ec5d98d9082022252d6e4c28124038706f1a18c3acb506f335ad0f9c5daafc9c345f30c005226d3dd3456ded48fad2dfd8cfac78ba78cbde9f329482ff5b34686de4bd8ab1e61b90ee228e9736be75479b5846e1656a56a5774e1f2292b5cf4271dd6d3382e4bbe5546d8e66aac68b8a5df548b66b39280e75f679375ebe43c541e67602dd657df471005c395ef2cac858c1fe9af83d8bffb23036fac72b50dfb11aaa3a3bad9b1d053a769231b4b05a589f0b6338f0ab85a27cb35648d860c8d1a44f29e2316315427537e2635ab5715356d9e3b9452afa94053b285cde7f1952a6990c43984102ca42fec1233ddc551328636c142a6c6135eca0ab76d071f01d3510b7f23896e9bdd106b8b3784486459d4df007d60e9543b26340f63f2aaf6728ce4db94f3ae2acb632ebc9ded10d3a3f21bce53daaa58e6069511f80828b109e7bd4e7302abd9885c98f42fc09fd8b065ff0d139d89d01d238c36b259b4e1fd8b28936489e8a9ccbd2057c62636413c581afefe9f57e695428b835ae6a12ee49ea183696247389b9034600e20b921c0fcb44a103dcf3183c313d46c1d1f8a5d1b81d71d080bb166144929100612759648d2dfd059df684666e1e8535ec48135af83ea7a60eb70103370034168d0f37eaff8c4d03370e3ed06a8f3456a750436c57950942fcf940465cfc5e9202f92ee3d493d4ff91dd4863f5cbd9a6c862e0251b1d0f2fce403747e75654e96ee0f4396986275a6223caa6b5882c15db8591897b99de4687b324b838b5f84b3d8f3d0e94bbeecbdb2eeccdd6d967e9bd3b2b3fe47ceac94e35fe3557524e9d04815177f4e8017622f107dfb8c95f818420ce491ad76103fd271832816ac452700aa6d220f3c92f9589fd1cb0e733442a8ee95196c6f9e9a25a8500d8f22b3aaa1b18ae5feb107ff8982509b1fe0f9caa8ec1f3cb91b358303adacb9461611105f6cb2943a40c13367a957a7781aae22dfc177767a090d8bc0d8754e93094d9efe71281d9416b0f849baef3e4613eec467e5b5a9ae74e9fd71ab482418610a6fccbb27b4e8a6ad90323366555c3205bd9c61cffbaa3d71fd4d2c423fe718271c88ed21639b4492be12f4af3540fe13ff260163ec065831becced2423a7fff323327da1a4a9613d86b2e978ed1ba0fbb88945ca02177af697ca23aa64912f603974af99b76fb863864ce1083634b6fae5d07004cbca6f09ff5fa7b63e2992bb0824b415b4539625c09583e880c31c56f0b7aba06e68902220214d72d2dafcba65c1d8ef17700200432c050a101504493dc3d0ffb68d32564faee0e436a8252bee844d19bfa3881e2cf3dbebfe44db36845bf764ecd234190754984a956580a10addff2c2c771db40e95e070106f395201b3014fdc2bff14f02f9313dff8384860d5217740657143e740276fb91a9116ec733a6dacd190aebd305a4c64f8f73a4a998dc76897e761f35601a40b9e8247f5f46c85cf16b288f99124b09a0c97965388841bf2936cde70017f9bf0eaaea3d1d88b11281e8e85d8f4f764b3f864622b697ae487fe95383f3eb0e30924a07bf8de70ab0a3f40c54012903668c91700ded1bfad1b24fa524572cd366774ebf23be86f314f639d8d239112f2d4a2101e7a91b123958fada1fd7bcc05baeb9210872c202c820088cf1eb069a296aae04e80ef64b7f35891e49d84e3785970357dfe64c72b4a43324c275409b3ea549f8371c2bfd287d321048895ded28bcc4d701aba9f57b234006172f3f6cf7a8909847123e45f46009e9cff0bbd6e344aa5ea92158dd3ee958a0b01064b7bb674a743a09ba4a5f0c6fae747a1255a6dc9650ebcf09538b504ccccfe46b2f45d915451d2419f4aed7d1d9455aa7503ede429be0ed19f7dad148045cc571335ce7b01c86f1ca8ebb58ee32dc3b62fcf26f0bb902ae8a219479feccc457ffce4ed7dddd17417fee7fa425a2b776a664379f0f1fb24cfda4b268690837e6d193fd35baacabe2f10741a7ac220f5140cb0aefaf470776e95830d17c6b45e18082874cec9fc04059d14a956a062fea4af34dd92e8fa3ad169a562e776ac07ee6549853d3468e68517d6d05b4a8eb488fc8a26fdfe288be67294c2caff5fa27fa40bb5d76a3943202e6f4c2e4789610a86d2160a3de1f2b4b258d5e3eb9ff8f1d565b91fbea34b62d37390f11cfa55a34d8fcf2ae83796e6d14258216d447419c1de28f2071f3656a2b4459cf62a52073810103bf0f771f1a2d5024909a1e921f0f6e852b84b5b8e111fb862f2a2538905330a8a7f4bf5a892b9683fc0b7bf8dfac1a4fccbe152164195539aba7dd5ece24869ad2656de9a6789b818ff890dea9f2b3a26549d1775050d162c5a41add2505c3b6f2076785248835dbb489c77e5d3c9a910713b23e05461822f500e60857edec947e28ecdf41f2593e9bd56613189b592c42a5a8e52e6519aed161be1263c389fcc3008522df83f9bb803d36ce928d0c78750c2d08a356ee79bd74ab567f50a660f0bb77022fd44aa6c38e4cbd82c8d5b0640e929119c88779ba74fd7227cd2bb45fdd7460285a9ac505ec1095ada46964fcbadfb76f58e73f384e82860363397d45bfc52e012534cf3251498b6300aa508b2a76da00d7a12efcacaa4b4b5fd714b6aad6e3c629c1da9789749c424318448d54b3c6cc30e2022d27635a1d0256ecba66e493c7aba12519d202c44e7f9064b4fdeaeb426133c01e5913eddedd9da00bd3df6d8040140a079fe28080d24c38ce33a09773ba0342b482bbb9876161c0725639c5db56ed93cad1773d0f10c73c0a76a9639966d73aec51f0fb2bfd0f21de456d7df1b4e91474b7ecc3891346560029af5e156ffeb62438ffb6096b0fd43daff85073dc55f4d9822ac44e9550aabaecb27b1473f22c15fb0c387adb142129bb544146ba80e44d6d71a671174fc20fdc404bdec8baf0483890838df4db78d967ac31e8a03a33ae23c45d239e7c81be12f6e0fd2958ee0ef89f9fc02750e64e613a23a142550306e1e66af5fd0ad4fc536ae4872746ec5a2454bab3593f28f76df80d9b95460b747adaae5d17c0dc4800673dcda5a03d0c643cef2f342c64e11e10edd74d852266a7eeaab459c9888116fcb96c9d3aeff1bbf8d86173b7d07916f5e5862335e963b3868082d939e393b8459dbe4f7d0156805676a5a626cec48fc75e1b59dad68ca2c0a69cda57d9d767dec41415202c26c02849de1a372d05ad8a0d37003cbdb2c1db8e4957399a14e99a17e0e7a9033b706d05cc4fd8266427d431f6ed4e8c9c1dbc0d67b6b98522c17996d2d0562a2d4b4f4719e5f31bcee9685a8b2399a9a4a1c9c809d0cfb6b58e4803cc4c29a83fce908556270f3af151e94b305166a59240a227e4d853610baa20554b2ece9c01c34f2a5bbec8847247707f7119d5734ae84547a092f058e67b47bd4e928505b4bb3b2ae02be65edd3c4f396f956693c3931270ae0dc2d10f1358b1b4391bab1102150457d675681723330a04732b6b9b81084c46cd5dc123d976bab6ea89f6178f4f792df957dc798e08f2a24e064966036e26dae30c44191a5d654afaf17181ec509d94bca68fe87d68950a61bbbfaeb16794b91077612e97e8dc708974bf5399543163439e386110d1f2078c50b765ff37a8c28e455248380a15903a21db5dfb875cea70f7f7b74363af7ae199dce18f00d949ac8ff9aa1c6fc6913c761d7ed0bf5c97b8fa47d1b1c298f1f98cb2c284a6e9f79e5bbd60323575d086692b6edd9c3c50b12df6472c22e5a75a1a2b5f71e53b0d477588d3683b0fd092534e64c13c238172b1f1b732be5de1848d3aca446340fa5726a0ac041ab3e32eec1c310b42112fe87191834aa102020de4e315ce451199a12ad74c3243634c204316bb666ee2178acceaef713ab3c4763026874a11ddf7c7e3df867206d929c7ac5b890c05bde9674c244c8971e9702651bcee7ed00be9e56bb549f31eff19d7ecab3876bf884d14fc002490e7fdabeb0629a92a1c6e182eb57efcef24eacab0230660a5f98e74fad8d9e9a59e0da2de69dafaa0075e06602a4fffc2092936c6f6bbf3ca1aead495597b57c695f7d4264919a420d3aa1afe67012d1d745845c289280f14e4d8d4c3a115c167d2eaab5ca8b3850695b89269d3a438c87556f4dcd9fe6b645c52f197868b5bae99109035ad1ced5cdacd7ca01b36e4cf7bad733dbcb2e3eae189655f4a980c779acdcb7b79d63668d236c9a311a4e744151f31972fa392be99f6107d1e2b099a0dfda8ad8380b4520c19e5750cda56723d0ecee7385eb145c0bb79818549395121d0d000d23236d07ce4a5b0dbc566cfab8fc691b0c9598cb87e67438a80a14a8268ec65ad6aa2144452c90ec08745128e2fed58b146e3d84a6eb2eb8243c2b583dbd50db86c27eda93281256ef3def91094bd53cc89163657446016aac3f9a7c69a01dee269ca3b04663bdc003d31a3ee95e34d92312d934419bc633acbb0c9f8ea6683199a04221c146fd292c7064db9d73626b7a64621f327cb9376b304ff92bd1b2a36795acbe1af40bdf89c2fb1ac34b169093c9c207ec7871cab5db9129914807b64c03f2c292c3734ee216b87f4976006f6443b65d34fed0c187869052f5338303e36ad358cf9f0c615f3a951c06dd91f9977c4302159214a99ee14ecbc852b48f1083946f774d137479de4c2e931cf4c49a5accab95745aafb3d75ecbf04f1e4526ad8390bf29d376652b7f156d697de65f7c4fe815652ff06b1063c02d91d21ae4f33801057f3d022ab7a30b5ee02565acc67e8eabdf334d2e54ac0b83d92719038142cf300db2e3d9901ba964709fd327f7f7d912a61c7f608434ad1f85e0d3e7d46d0b8d9629ba5cbc3bad15ce47c684304efb1113e81df67c7eb14245f0bf8b83953dc209c2b39021bb28a067ebac307f5fa914e4e61bc0979b28d1c5ca5bd9b087ef9ffa5c2b9bd08580a410a2e23336de9dedbfa8829b9aba399d17cd757531c3bb3398da93af1bbc5a406ccb2f3862e2c9ae69d8843f0ce3d965ac29ffb4bc89363f8c4692ebdc82a3996e3ed872856dc04cfcb350e744ffe5f6ee0537261328b722d7f869c0feb8ce720f36551651489dc2d7fd9b38bcaff2d9fe6e56755971e8161705d6e1ac595b0a491c0df78e8169d40fa5f6fb976dec73a86c5d0090d2e0c96a8d7353ad36b09adf5b6de52bc4ad491e099a42747af4c954071a20a7b5c1d4f51417aeda825ed03e4c0b45b7f0cc23258d517960688f566a9dec3b537cc44380a1225255388636db45bccad6d8465a742d7e3f93836be1ed80d2cd0ada93ccc55aa00578802c49e0c80cd4954e9d47774e73ad9f026f81ee2cc48a2946aaf6ca7c5a45a35e08072b9aeedac8e40b641086bfa35b09da4c6a15f522cd17108ebbce18c9420205bdb1b797413cbdf44e8e34e8fb67cfc7eafbf6051dfe1433a27a5ce8a60fcd88bf4785db01fbf2586f22c4073333ee69fdbda62b9d6eae6ed6259c67327469796231e89596262d81a8f5d1c526d58de535bc27ebe4e463cd34a70ac041943fc4cb8761ca485a78979efc937b24ad29d715a91d896496b63dff2168db8839033a6e2d843a1e0239ca1bd02e0f4069ab44689f9cf6f7fb768358eb1052a2798e05244bdf0eb04418f30e674b775c312ba6c9b9af36fb5b65ca3a5425d653a5f89503b54d9fa54774e52b856014a9d2bf60753b4a7081d0f461d0fd4f64fbe8dbc659a65d544b4d2169d0567404e99bf44622879fa5bfadc27922b06cac5e6612982464210711b6693095c57dcaa6ea64ac6abc711ff2d4ab4e8be0adff9e06d89b1cebfb79d3bdb3f3a59000ce0181a9ef35683eb9ed299ecf542913ad9f20ab1a32570753756c554f76ac1e68a90d97cd3cd07f9ce4c91b9d9dd77e757d0754df882147fb19468aa6fc5476a710ce58f58ec0e689b4f06abf92ebc21d032c8bcd2295c54426f5df203b09384dc8168826057da67d726e5175bda149ffc5c1e95fa832425bbf2d34d5a1f10b2e42627bfa1614f0eb9112f0731152924ad98183e3c4efa8e230e8e868b0233d12b4291db8d076de324b35653a5a9fb9c89c9ed8d6d23412f2671ed56656989c2dac0419796be75224303c9ee323f20979b65af270d2e771e2206eba8fe17ab74ffae739247b0f8f74b698ac9d3723761c8f70190d6b91fc6e624421de14ab191af6764c504a6eab6a14dad126d8a65468dd59e5c9afedeb141cc11bb1c870f62aeaa6464048bd9527c73271c7ea3fd102756abcde83eba6053353e2ab96b5971b8843051ccbec6e509f22f43c06bb005d330a233b12161a4f2115454d5d3c9432902f7bde564b23797bc12667f2424208b46074895ce303c26173401390678297913c6af80e1b053ccec26b726ce29cd5f83c3a7991401a14d4075e52fe8696a8682d69479cc85c3353a7f112688480a2374dfbefed00c3fabea19f3313084c9de02517865e992e731fc6061a849b1cd31931a4123b06e32708f8c8047f8310d427ea38c7236fcbf90c4f828a9a8ceaf7d11017ba58b148c877271205ce1ad3935fe4dabf18321aaaeb76c609eec7adde005abc7e923696baa2cec55d49b57d9223cb0c2f90fb6b323938314b4cd224981bf7912b3369d4fe1763d42f057ee53eb3d726471fe23301f1e93da8889093bc44b3bbf7372eb94c7194a0c3d0c69a33da719e84e2fbf79e8904c0c560f4cbdc215537054aa94f84adc2423e475e22f8b193ff553f2d3ff805e41ec67e4a876bd0c6ab9e82205783e51224ae190d7e8e72f7e0724b208147e5db361dbfc35df04dcbf07b6602033024ce7528b813e8450c892adcb6d8b35c2f65c54b457581bca8a1c82f18ab362c2fa3ffcad717e6eaf1239bc226b7d286fd9e5f41d6bef1a95127413ad913b8e754fb994169e038061f6c44a8abb883b3775320fabfa10470569cd32e2ce921eb1c65816c21aa609bf8014983886258d45ff312beaa61e7030472a7429d983b3ab8ae1a3c2fba04913c8dea98933918fb46f500f1d307bc4c7074a6315d0fe36c22fbf3f3fc5435a06dc0238f0814ca52bc5fd5fffced4b187c735420e172b6c18e9a8417902a1fc82faa1518980415cf1dc54ce2d254a6fe14dc3b7c431c2bee99f6ef75104b4e161b06e92494de296485b0bbdf4593fdeeefaf9e387456e06651072bb42c819d8f16329324233789a814b19b3258eb869086d1804e5c3f843f1d921a6d7fa27d87279e4b34aac95961c5035c7e37ab8e9c8000702971715671ad69dd0fb3e4480ebf24cbd3814da971d84a7bd7646f52f04e684377c6f9eba3347c230db31b15a8e701af30e25c59d148c80c09267e06a5e23db05889b4b709de0d21020a3ea2c923267263fe3ad4c2c955c3ad5d44f38ddea124cf4922ef1ea96c91f66389c91529dc709959d1d95f76e8ebc32a0a7e43b667cc19e5c836e797b66a0b5bd9a6005e0c6d4cc8e5074684765f293c3ff2f0f08ef233f5b830eaf673ed3efea29e42988be3afa1161579f3f57f9223dd1f7cb6a95c6fb3b47237547011956a924401f7b73825c9735e28e4cfa4f6d482ad635a2aa127b213484cc63d85d3ca83170f5c4ce2a395a749dcbf938d1effae9c1892a1bb8e6c8eb065d72b65e5fad27f493871df65e4c5cab59eb82c653f7b22fec9ea8dac82a8a77bcb127b1172b013df4bef77237f9d5ae0617c10e2e41df1434138d748d1d28b97e89349c0aade7c0ebee56b1ec238775d226f727ce8fb67a96cb8ad7b75b0dcc10bc64e0f35a40403b339e7a48ffac7d89473d6c7fd9303e9cc48d21295b30484e044508f027537e594ab320a1f006550d7cfc54be6ff5169e0fe29b5e5ac594a457b11593ea91229e9be5a6b2590309534823831d5dd14ad574a4148c55c11723d6e8874194a62365aa667c9dff316e7263d36e85c1d02c59abe132ddf4707b0d99a1fbd3cae03a77520053fe13ad472189e8901881822851ea13705c900cc45ee85fd31710ca980d1857acfd64a9458513c15acaf2e3c1c41a9b136d618c0278a2338d61fc7b0ee1527f358e960334dd429dcd3bbc39304df1ba269c219a4cb2f2497b22ea9bbd1149ca24a7220422c499866444fbfb8469abbc221b2929a9d84a207c9dfa7b5066dc109383290331da4edb587f7f1aace204d1b5e87cf40d5e0275b0bf65e301fff15ef68da9a68d93c734efe1418ef0285bc965ff4e2955bc003f0412af3ceb90862797421de8dd16f4645130787d972d7d459f058841f4926085fa57ff3e8e3a66f138b6283c9394cd35c12c0ddd19e7206129d90a4cdb2e03ac96e74805d05b6f30f335ed32dd7b675732e654d8c25da1f28c9aaf9df0accb5b98a7cc9f8c7e7f0198f4f87970856af2f8040ef932ae49d380e190ee11813bfcac9f4aeb4ff8d5d4922efa591cec403802d532d152feda4283430a4e8c91594383417dbce8835753421de287ca0ac8749b800e93bf9419d186907e9c3c474d0b55da87d473624d1fb6ab4fd8073ddef50fc18b118c4d28f30239a5f46eb88595d378d8edd19e509407a5a2062a04fb1170321ddb54c7998fca585d1f00ca6cde2d9125d28de83cb67c1577ec4e2852a8b38eb5a9de075cacc5d8eede416a6a3c29cca1663b473df0a28db25281951ef41b1014cff4bc9494f9eaf922cedf9dd63749a8e3cddae9dfd7be7b7ba30421804b73e25f24bfb1cd117293adf3161a682e95e9a2ca20c475526dc7d7bc1655f72b9548ad044a9e95f6a08bc501db5178a5fba2fecb61750228ed863c761e99ed79c58ae5712016f9bd1c1ae14ca8ea1a7e8311dadb1b043b60215eaaca8af8347a2939cca8d18a4c5a09fba794f58ecb7d17e02c9083501fb1388a50dd695ff58ae3767d924eb8620045dfb1c77fbfdc9b11d607235404941d7164a5d582db2158b5b3467211f2e65624c660ade300de35af64186d34f3256a368325c3f0fa1765e3c379f68194f1c0210db15b07993d48528a2776862dc43b0a83cfa94590dc79bde1e87887b0db4ce3d0a2e9decd43e88650e66c1f1acc938ad1f43ac0116d56013c4d571ae7ba0814c222340ed68a3850529677d5031ce5e3e639f8996ddfa00193f90c5950e22d339d678ff4b233ff249b6846763cce8cf2d3bdcf4bfd8366ad18cda62090f584fa6ea244b77b9e3fc154a3eaa4cd75502d46d936ec2254ef938e5a27a859ebdf8a90cf9d0c56fad06582f62afe05853ab8f35461f39e58dd972959b92c4362b86732945a3f55f1e67e55ad04125b365dbd0b4d30a10be12cc961077a818c0ed3badf40ad06a35583e806c23629a924b3fe65b48705cda9cda959443f405a0852f4e51a6391e7aaa20cf15668562a134c633fcf7a4b9f6c3c990ff15fe0236c34eb28035455df537fe95ae0904f7d675e4f15b4d823733fe53fa931b2c2afd3f19783d8d08637f54f1723129f672256dcf0866f35eb5e6fd1d1c9c7dbb92c7e433ffc0f3f899f47019647751561a443537e2ec5085aff00db4719aea8aef11c2266648fe73def4efa4b333c990b1d1f15d0141d65df01af666624065615894e9c6a5de5f26e1481e0b011f5c13fb5413898257d2e160b8d3fcf80add56f08fb8ff2807c75bb80b017ae20c4a39002b5f04b9c0b2c0b91062b783e865f44ebbfcee5ae40e4578be488551bfe608b4280c7bf10011ba32f801423dc842b229a85b408aa262d7274c482327961b522823e86f996fa1d370a9561974b39ba9341db6da499d2e074badbd6184b583cbd7a8906064c33d34bbace24482c22f82ae62f88b2041f4a907ddeba33fa6c90e9ab1a0350207bf45b4927e0d4911bbd0136e9df0819b6902fcc5c76eee27bc360e0dbcaef24618ee4eebcc3874f661d418095abcf69f236e9c52e204558b7f414a200e70633a20897ea7a19aaaa92c2ff2a8998d1a4a2cad9afa93e335529acd84c819a7887b478cba3d334d7e26b111c2138b16570fe0403af9f12ce79eec71669d419775c75fdff48fed9e500c05f2fc695b4156a066e4587179dc08e10d2a5b3702955b92649c4310d54b5c12e67bb6c4a17041efa600ded233f772d19b19fdd520b324a9232d504b7a9aa36897b49477f9679c63d398c043839fa416574070ff4fddc445964b69d4f2919419d5cb41f422a4fae6bdb45b4822f3a8b9c33f19549d957096949c007671161d81c8cd8a160bfcac1c11bf964ce16d844fd7c8da3629f9647c0dc68f0168d0f13af14683cd21ec2a63309b967f27db19a0734d15e3b766f8235a944f55590da6da2b2d12a6afece06fdb902234389904628edc55c35f74218871bbf3b110acb85f687636d84d03751c0cd91512a85fd486229032d54685c52938dc232a00fd8e283e11982d670c55e0e33a25ac095b732362697a32d4c80e8040dd99bca7ed6e41f0f7432e90973e41e52de261ca40de80e4f96595c12cacf7a8ae3e4e9dcddfb913eb1f4387fe3403f10f7f3d58572e66e2980a4166c4af53ca4b976071718c72554fa6a6b985675e96514cd26582f503a9320748d5f191037486b3b7a059efdb41a57de3131986a37863d655f4ff86d7329d15c2bc2e7c22c025b2422ec5531d2badebbfdd63b03866645c0f075da2e10daea6c6230ac36147fead76f79f4091a31fc8227e9b6740ffb5c40624c49dde36e3b2a15aede99a03abb5ab664d23958d38a7156474eb3e5fb38d43ea10d70a9928796ec01cdc21fc1e271041d671a4098205e1126bb37ee37a75935b3cf6d42d7ceb5b39df1f8172fa007494dd9a9f13c84c3d5f3115e327856c1b3c819d798a31d34516ad1c33996db8cb26106f4cd43aa3dc394996f758ab163288d5e680079f25e77d634e1f8f0624d7531375d8c2fc1e13b96fc42d0f0ad342a049704155e55f01184f44306be0d49eb8fe6eeb7a74c1080878a029b11cf054c018b16d6b9b1bc86b406564afcd749f283cd0128b78fc1f700dc7a4d499dcd2d71433e1a41b2bea930673f68e2045c9366be9357d543df45ea4f8219d27a72adce06ed94286b8809142db39b7a004eb0b1cc7d78b6f8b1728375d9c4176c09781f9909d5e463f7bdb1dcda88c79b954b06e6a045d417c776fc17cda18e3352bdd1d41694415a54c61c8bb0a40b5f01bbe7ac009a1dd2f44cdf0050564f86e0d6cac9f8213739b60e23eda8b05baba7b8937bb18c4af46033942a4dfe8e565d4b3afba4b94df19bbe9ebe6b581cce85e08e2e75f03bd23668e0cad7cfc955dad407a5ec08c87155021ad1f0d1eae0f960c5ffd05b20753b2cce26bb71730de72e6cf5647ce240ba0ada9f50276b7fb8ea53518acf938fec6864191fd8aab06ddedab020a92703c7ac013bfba9597f2254fdb57b773d73485392a3022d6078fef0ab89773aa2350f18103ecd7038cdcd68bb89cf8bde169320789026eef9ddff9aee88eac8c1f708faf4906c54d029278d14ada3ac6e3a4f0cb9a1e2f20ed24d57714cd76318ce8f7e1507055de8f887dd37aa8b79471be63d09a9b1e0c69bd9de54f11d64fa4448bce28e283bb5c646b38e3e0d8872d878805257edce855959c8a508b1426ccb10a2e3def5111c164946215e6cd81df12743c6a127f9d558aa445638c62a699be0975e722712753885e34ba23b9b4880577c4049b9004c1e31138c45c63bb7f788e10974eab9c081ca2510e570499d5ba0b23b34d3985f7db22513688f3a687657e8562c75a220fd7dd768cacbd36bb4c6e09c1e53f82af2a3567c7cddee378913e22cd21f741853d5b807868d36e6888b75f397824c41cc254106319fd34465d203b700460b2597c20066ab4d1db735776a617dc05096f4cdf5d92f8f6c750f3bd417f98e391e70dd3cb052069fe04a8753cb36e9d43ed77e9525e525d1d4666fc781d4d308452d4cab24a8ba636aa0c3f2dd7b9900b92d83f8450d967a2fe6e966efd1567678722e946ae527304a1ff62026b6162f26e03ca33f990bf64b38c7860584260b26e013ba2e2d086007a33d1543479cc93bd19c7537c75cd27c86b1144d3f2618f521dc1c74a01801e1848a41539cd3aee715a0b99988cc3734285ba01143e8e9728b3d4301d0f69e457082a7908b521801add55893bb7f1beae431ba30fc9318abf42544d3782d93262b8c03e8e426c3b9346417b79e9335a8f6c7713864b223d5b64ec9d9af689efcff18e61abb79faefc64ed3f8bcbd3052ada3940a1ab97d3ff7299294141f2156cb65eff133690a32d807845e703233bbba407ce49bb08747023a12dff6e21519f9bc03e2893034b3b3bea9382366e11bbd9e8cd9ab43ca512297466bd0eba490e16e4c18de53680c5895f837dc248a32c2484551ea9aed11cee3297af2bbb6c57f43253aa963725b0e8082d0b5e744cf2b9ea72d356c23de6f2d7cc925f28a9a96109c18517940ead6a3c4904b8cbfce8866b5ce285c8ab4281727d8044b0e67caa8e1ee153e9433dcacffca87f8628f20f39a0d5db43307f1b7452cf2217ed86b3612fec6e24ba8a695fa4ce7df7172269a805fb875c87699ced62f456d1708c0832f3a4e79ec27bc3d5812fa5d0c1ed250ad1336b176e9ca052dbcb9379c8a080feae36917641b49928f10e44afa122beac14359a98eecbd8d55ada98520a71e031333d50b2c445d95ad0218ad3529cc25648994b53f1dbd0e703967fac56d5b1085e69ab06f5c0a81d4350c8d7453c13a45af1444bbf0ec4fb7b6a534f4a6a5558b37385721e421f2305b66192ccc466c0ba0759ab526de919ab35b62bf6d0af6d0878b00685a90ffdccb544a867990b7751a1809eac850ee1839eadffdfa58f82d8bb4bfe7d59da28ebb0f5701e094557112348a0359f9147e575ae0d6f056275a7dccb33f3cb05c7f42fd1ddfbab67c6532601eb7d1596b5da7df84db5c15b5fadf31b246430401b48a51d83dbfb8fc9ce75f0c28840f6ec16e5033e2752996563252541eccfd1c9132896bb53f11da813e71c20d8a07be1ca21167275b7dc9516c65596562276dc08eb4227c58934b507f2424972748671947bb65199060051cb1204a07508f64c574fceed77c1e0a1bf8a37a83d150ba8f03ffa4cf2058e7b9190bee11426585942a9b599acc69982c307acddd2fb8d9bad562891a099b7f0df36883430ad06e1d400b9cf24e2320cb0f1d7006422edf8341af2083410d7ece1f8625879ce0d10cc7155b2d39106fe11feb10342b2e754ce0325890207d35ad525a41346e3d45dd7db8d0b3ffa75595ad1c8d8aa650ced380dbb0d1b3a36cb5b2db6f642a21d45c5b1c58373f750c7ad08c79d989693633992695c683e1ed9dc40e9a4568e25a877078d3e6e4df9d11b908a5c0dab73ff52dfcc5dcdd39bb7eb586dd67a2333d3e25a0f9c086ef9344730ce16cb026e49848273cdf452c9df9fd7681b50d13b6f894157f0abddea64dd2aa839fecead4775e11e9db8e30240ff48967761832ddb0e345da3b936cf2afaef65e48fc4ea7b100a702a7689c3995f02a3954f6b66e4d4aac8eb9d6075b32bebf16648b251a9b88bedb79605e50c20330d26ccc524ed58f4c01641befcaa856f77f54b080030297104933ffb7633e2bbdf23d97044afec48d3bab7f8eb6d78106af458bf1ebcfa139f6adf9e6d1fd1634b77c0733ce4701d5d49f0f231f99948bfea5c3d3d18b7d7f7e56fadd9e0a5bd826b1ac469fc2a74e65b8c5c69344677a7268a55cbc9965a40017d7d570cbf86e8e591942014f9c2a5ffac6bab404f23a6dfd9ce343637b049cb7bd9d713d056441ab529939e9db3713b3a3c8e8d82cb58f86d4c6df3614edebd750efebaee857f1aa10a96daabf0a52c797abc787ef4b2fe38ebc512ec92d43bc1856b19eaf3bbcaee25bcc0c781caa9d2fbb26a8f0837f3cb2aae75c5284d244271130a1b6938a3229b3cb8ffe49b8083b08c9f898dff274a304feabae8908e18d0547eea0e3e519854de022766a16975d74bb67cd282ab124f3618bf1dd7e36ef7d68337ec750cb2d3f68f34d99d8e73938b07aed1c52a8d0a2fae4360ec881e294c86b91f164075c6c3ebbf95829f0c61f5d00f12786c337ebc4cebe5f615b7e26763950a3f47aa02c5ac25ea52d93441092470c6f8380e0887e307a0d004849c21778f5d7da86b5a00822c11430e3e9d255064d98c45922d1edaf52e621aaa12db04b6d5cd4bda78ef8a17142d6f61c8d508813a0aeb98074f18c853e0c7d7c73529ac0233658b69c8a4b3cbbbca6f27ac80af40e84f406e29a28749904089528850b1a3fe47d65e0caa7a2eb39493d252192ff3dfa551ddaeaee953a41231b1a989a048a222a7b9c8f44c3d0872588125289af301ca69b10bef4ebead1936d67368d5f4e583b77f4a0ca2e7a846f9d9a5559835e511ab76ec274c98c4cb8f42c8c04b9b57be0db3a058908059b1c8c6a4f71c73c76510df24532547a05364c32f902a1d0f554fc1ff30f99c38172842133bfe29167d9c129b1c3427398bc87b5c22675ddaaab78a877a3d34e586a15b1dd0f976b95302aef4503cfcee11deb2598f5edd73fb018d13f9fc4b990f65043d7319c7518d386967a54a41d9eb49b87da046ea1ef97a0ce18e134c3857622f9ab8697e8300a6fbc05254ee73a160cd6b4d7cd35e1c1848a2fef954fa9c1487240d0d85fb0605e0edd588da0fca54c3dc1fb14cb3abbf06fd82fbb33a9862aed19a529724f51bfa3ba542c82f953dc54e527bea75a821ff915c71accc5cfd0f52ca6cd7d2888f0e36789c266fd3e7b2eee02697aef516ca715ba18b799a981383b17e7101aaa06403b6f60e6f8545f542d9f1d082dbd322a46da971e3bbf2d7ba03daec4ab352fa15944b9ccf87171263ac7b904aa92d6b2b1090bb51ed0ef07fb9ce2ac7e6272e9f627f6b60af3b9ace4892524b84427c4e4324b74c353ab8f8d5d62e8b02b22a33a7457866aeb92239a54aa92e50d157df12ec71da97d83a1ce6ce3c4d61803ca99876cbbe5c4dc767cb7c89c540dd6e361d84a0e2e79ac22b818258317185a98da9d58bbe5bc00b7a2f613411f07528056d80b13be548b951f575636c7e0e84d388187b8f8beb425ff3f1112a9f3eaa6ac2de6d07f3800e37521e4b9ac4e297ecd9eca9490d803f5fd7bc057eb03906732481c4efe7aacc843add338e12532caec5e7787011ac3117e55df76a95d3cfe515484fdb31adf714d1c912ba43e85422b67d22de310f9d9b2090bd0c4e93a28c2c49d95dacc212aa393a9d566c1569cad57e57935b736b6b6329d91b2530ffb87128acc87ef7b375030df78e2ff6a3871639d0b620c1321a0c6aa57858df2a6b31d9ca411ee85d24e8113d8b4bb81cab95067d66f24fe726d5017a392a545e14d11b263a91ecf50e562fbf7018ec809953f57c100bbd5feb8e69b34bd6482ebdeb222666562eb497383223ca50db0e74f1cc875377ce64b34ce3f96a5cae11c38429c1f186733645d2190fdd51a6d3ee1ec30215e87307899f5e297bd8159e89e2f0e321ce6d8f514ea82cbb322f1a30ab8bc228ef86803812476d6788e912147810e7a92f8bf995211d6d57d023a65b3c0694a8035ac4028d5930d2324a07adcf97b456f234069780d62b2f25133ab5058e271262b6d9afca066283a50e601c3875ede48e20863016cfbfa38a61de1100bdd7bb4439f40175be7a210d1de6b056f621bc1094316d25217b6f42e49652a69452ee0871085e084538cf983576805a8cb0bca23b684a6583c6ba83b0068e0fa0356660029baa7e40532d458d20d06fe346a5a2aca22a9a69a13ea8950550c5a8767c63dd180685cb16542081831942a0200b133857f000680758ae609157b29418c8268828d8c002cb1533e8e2c462f9818f94336a3843862fae0c41af34b1e21f2e62777754630c56238b1a5a541d7581d4f8510d958678d7cabb15064cd913e1df6ec93e77ab12bfa95b95d6e52a1327a4f38e7f1fc9285b0bd005e2a25349a80bc4a5c787aafc6cbf5f752584ae6b7f47c7782e86fd43e8f773a76405df739654c28ffa0caceb95a8d8e6699ce555f9b0836108ea613e03eba2ce920fd329999f2ac77f34d1b52ed47f330837b78a5fc4593276300ca1df9f8175097196fcee94d06e9d65e37afa3692bbd5906e2544c7af86a41ee6530ff3eceaae4a09a86c4fe5f4eb5a452a84764ad8c5df6fe3fa5648c8f68e3dbf7a6647d1ebf592214acbecc86722a494b267a6e53b16bda7653e17aaf2e53b8f7c2742e6a07e5a8c31eae86e743cfd1fed422db3406e34a9f2bd8a96214095bf71ab98a5b817fdd467aca5381bd76e4084d015f6a717e13318eea543888e6e35647b1dbf75aeb33dbbb621a70e080839158957f8227455e2536e35c47788b0ebf4ec3af1cb6756d8d35f974cbd084f44c7d36e097d1d2f820e117e898e4fa57e5d9fbd5c684fbe08dc0bce929f8247f4e53b8fcbd7ba6f66dd372546391ddc3a0be31710e8d695909b7e7e98ca15f539de51dd0acb413fc7e7e894b08fb3e4a36c5c198aa31ccf0aeb5961a81f421ff5d8a33a2555b06e080ad5318eb3e42b914f3bf97296fc13bfaa0f61bd51c960e8578dbf311f23d9ec9f4e9f754a60fe94bd92d36fdd6a6d5ccdd164dc0f1a9a8939771d5b0dca3deccc0baa0aa1f610320d9080a8901f053b33f70beca054f8d99edef44450bf754bb647bda9432de977bd89f34effbf6ab8eadf13fc0d22bde033acb32cf870420c76bedd6afff436aead3bfd90ad5bed677ffad30fc9fef443b48779ed611e665dceeba7d53e12ae2bff21a6df5e3e9fb8d5fef6a65f524576434cbf3d0cb7da6ee51d064cbf3d1153b7eaeea3aeed89b0ce8eebf4d10dbada47fdbab6473d91ed51dd922a43e89f7e498edf9ec8e9518fea9650530e8e875e09ea6d5c19e550dccf6a1f06d5ad96fe10d4d3dfa79d922adb0da10f433bde711644e9380b36eae9fb497e46517457a76eeb96667fe6d4b88c33752d6721956c64a38200b93d62dacb0d880eec67293b6928daf2d1ffd1386fcd60b8ed0e66bb65c0464a8f0c6eb8608a2a3d10c3b5cd327d735bf7691f4402c3f16e9f924adfb9235acda183a392fa1c1c159c77a53aaf59f06138ae710342b1a05a8473bd4dabdb33128d83704b524dcfdef6bea900abf6bb69dda7a49a7e5301565397a24e687b104208e1bb13554bca805f3cc3634888b3fa7f5a3434b554d56aea924b82440b213bd46ab55abd0b230ce474e812a3c196e0625a6208b55ffbeeeeee6eec890eb55ffb6e6c623242efeede9203ebc0031a5dd068039be148733721dc918242a1c61d49d5b843109bb0bd9effc1dab3e4d0a1fb43a11f6c6d7e67ffcdd24bd8736ea9fb545a659f12c2cfff48aa461be7c1d388d7521a8fba4069fca0522e125017288d26ea494846d808a80bb4058daa9571850d4f125c30d18406547ed0d140196a30b9a28c38aec8808ae3805517280d1dea89892c38f8611aa02ed01629aaa9878ce6c16a01a80bd4065255d5054283c98fd17b77cb08fb8c12ea02a991031a30f01dfcc02953025535d20f7ffaf4f0ecb4d79ce38cd35e2751bdd05ebf7c28e4a686bd828b0db648c38b103038c3256ba84f845850840c8a70e205aed841eedba2faa3f989fa794ed46f7f9aa8df123151bf455aa27e8ce35395a82b9f279e7082c3e4ca14d7f7362d9802891ddc9002280a2c5c1f8da7039fa11adad0e1810c2ed8b9c00c2ed8482289239f282eefbe3dea1c8ed0e20344184f1c110315446c9811031d5cc003970c0ebc70828a1b8ce8010fae246af370041837c8a2c7e789abddb0810d23ac204afa018afd011757fcf8400862bc61e482c0900c7a6cf0e135861457c7a193041b39b0f1e426c9050120789062441c5c20d1c5b55c0c018412517060850c41ae5e377ee8c2881ac21872a283ab6d6c08e286346e9c34f9c2c64fa5b0311d5952c540d95837b641c849e20a285d686012061339c0410a317eb0010e2636b08244edeeee6602a563527d3776456251fb352bb5bbbbbbbb9bfddb83da0f998841edfeef6e6c62adee09a4b042cb7cfbb3a509b90548f5abba405b76b6e460da22833520d29da1c3532a954a6f53e72ccdb9b35d8b6c4544099fd1e3327de99170e5c08a7f041f9792117c5cd9979e6bc64d1fd0af94b6960564c651f5ea0299f1c419387581cc48aa3dea029991535b5bc3b5e5a363032aa4209105970a6035cb5833aa1f9286dc060466b35ba5b075be4d4df269359aa6a04066e054f9bbb13fc6d954e6b27009fe91831cc4dabbd89185404b1432bc6c01b1802be3cfbeebbbbc310f1ecc23e8c951651e3cb8de0d0886f1e031744656c44f6e5dcc759d5cbb5a0d2a646b44108ab5619684e52486c921213d407c05be8cdc4d4804016a7f1681e8e437d50522e355f97b76376f40e6ec21db986f7f22b0a71a834077ec4000015666623e4af01ddd104e0cfaa9c4a3b502dcb1e32736219a935295eadff39887797c66e7a4f49f87a7a7654c446c4dc979309ec9c33c59abe56126f7cf7c602b03dfebf4f77fe934d8197e2dabfff41f09f5639ead216159fe030f2fc134ec4c9166f54f272f29b57f3788da5f646bb22c51bfa9fba69c8ef1481963f4ff08a39fe4afea633c1e5bb37dcd027a6025dfb4cc24b720b09aba12c73713737e9d60ea18875faf9bd83458a2f63b50edc778fa8bf80cbf88885e44ce2f1a1a1a9a8961250c2b61ffa327c6c3a3350c1bbee33f4caa7ad3d238ab5fa3f93795683855756e6b91ad691784dc571a211bd819138c515f4725d396f54693d1b8ca719cd5cfae6fd6ee8520a70e0295cf3c5a2f38d6130adff55dc8f0b5f66075c8ee34a0fea495d6eb2120104eac6a0f51a721429c2527b644adb5a2b55a0abf5fc7ca64df3fc2ca98dcc74721c735336d9bc7a3bd567b2b0819f242aba5f5bc8107e10e682f9f4d6013f83397c236d067ad99fd7f74a3aa43c8c1c66af3f65808071115495787a17675d23755f699bcab4a4c7cf84dfd278db3f6e1ca1ae807177eb712027f812a4cf56620641bf36154e6f7ab6f7a662e4edcd22c8f473df026ee1c9192aa7fece5a8fa8cdffc1dbbe587eca565fa75d3328c15794f14386e58a0f07d81dee05237d23c2702facd4a97a7800207698a4601924462a4faf5ab93d615a5a09005679289d43df4145aaa0bf486193cbc91c553a5289d400a2b5015d5ea02bdc1458e125e004108072d4637647c80ca8f0f8200038e2d5c1c41d18ea4e490e2e8461e35a9fd1a77bfb105186ff4a0f6cf377e2a4c5da0378a7871a9728594993d6ad0610d31053f9b0a697f6903024b524bb54cd4680a769f177f6a31f5eb34fea7c5971df55cebd6284ca5b454565a4d6b195982f33faed33b2d8b9a15dc7d5e4d69b3e754a9b04ea3b19f8f784d32dfdff676b3623a54837e305aa11f7487b34b69d0d571031257b059a900570ebb950a301cf1aa8d1b6553c28690217777f7063b28a58c51ca1821943262104229b11865eca8cc499fd21e228411059a1863b4824666e66e5e2fc618638c181ccd31b5999b87d7ddddbc1e645f3f75b7db03c20a5f50061468562805b9037daae59091717f31959999998a54b5173046082184ce9037154a951f9e60b7402a84018c11a240032184a5df529742b3fc7930238411c2395b116211eb60905076bc5e5c4194efb26380b12b95761a117f1bc2eeee86eb456632664945c2431c628c58c45adbc77e4bbf92d73399669f4ca6aee55fe284743e3c9943d7e36f25e97cdb3a12cd52a9c4ed52d81e878a7abf4232da7aadea6f2d4da7b0829096995e3ffc5ea85c21431d36421851a08931c6f8fd332b54416305bec6cf3a763044864ae00a6a542156af31861ab9ae700302638c55f87c5586ad8b86e6c70a4540e0ee2e23e4e1b16b72bbace68e0af60e5f4e46b63133337bff4c68c67faa0b489276927eeab745493932429a96f9e6c7505068198e024208a960df9195c21085ffb55eafde12f891a86a5c016f2ac4da1b0bbd9e54416d15240b10bec30e06f84866f56f496d871d770c91db56cbf8fbf056cb7017d351c1de9b55c4397288074b0d0d85126540c1a4bb53aa1d28f8a061207429f28143bb2e50973064843d81145668f15ee9e2832eeae7dd08d5f8e00419527688a4d040c5141ca8a6b4000252acf8e098a90423c4268d115db4f051ea82c59c2655f7185dae00ea223424a58db28d99e98c47ed2eb283476de81cb3a3ff9bfbd444bfd048924053a9549a73ceb949467cb458c745de640b1bf111171d7901490fc5254a1fe75437994c2653aa65e0cf308fb376b4cc0de3b4cc93de69963f977ece1f6d327d6632994c26934dbca15fef7cd91efe9106fa398e476999cfbfe0b48c3f69991cff22447b3b3b260eb6b7a5c9794e7b3132cf39e79c1f7cac731c2ee85ca3fa79941d7fe2398e0391a01f4fc1a9de2c047c95aac8b69dae0b683fefe874e34077e630283f971199b51a3f08a1c7e8dd77445b450d462ee6e37f0d61e4764009a39cf3bf18e547d9a9222d0d41c352733ef69f7cf8998413ce4e4587405bc218bb4f840abb235af5cea6627148293f6bcdf93ff7da5f8cd8d66cfc1f2d2157aa192f2fc3538c692ff21c1e0afccfdddd6140022b95d78a08bbe2b32b76389a2b3e75d6feca9feb4a0554f547552a2a88dd648dbd2055f959f71465e113e42b72f7f009dc411d2ec188ade90efab03da476b40f73b6a68f600e3d47474747473d3d3ddf3f1afaf43b4ef778cfd6602fdf717c667bf97e83958140eb15f9ccd6c9ffa6d67d3c7068d67d73527a9adda752155559b10efe6c0ff912ca0775fad5afc6c9a2e8b4cc7cf9dd3bde3cd9e4387b380548c602f62558e50ba8e9e114284d9a6f15c0bed456da932b2150c759f28baafcad500cda3eddd31ec6434ce4332b22db9ffed40d6d692e495b5374946d9c12d42f99617b54b74229d91eb57552bacfbafb605262eec33b3c3d3e3f42482f24819cc33af2e7470a428ab4e0820908fa411d9f2a9faade3df92ddf1ae61352afbadf50fec6d9b8e0cf431d873c12ea40a46d0c1ad8d997ba52a9542a954a5996654c544a6059501237643e92f6985a1f99383101cb50f5b7e6bbd0c9899e93d2cc33e738ff493d34b8a04ff4a8fdf3f94dcfad9a7959966599a9d33a7844b9ce0eebbe96ec6207bd6b1d71649205b4943d3b8490abd3f67c4a4e859f1579911f399227c117c4f197f36c8d3f7c7f390d56c6bd580f7acf7faa8ffe3779f0a89fbfe69c18a552a5ea2014b489f884eebcbfd81aefdc88ed9c687b40289ff72425f5ab713aa7757a47486888a8e808897596797a7c7ef6c8851792ec0f0ee7d0d0fc484188cb04046d9e9e0a7f52d5c3f75a5bc3362ef83dd43cde3efba99a2707dbc95e75dfc8f56d14273840dd875acadb314ba83b53378dda33451050f7190624f44bed5fb225ecee90460e114e91223f4a83a6e5ccb5e71d95d510d4972f5fbeb8e27feb4589fc2533c497dd8a08261febaaaca6263bba0989712a595677f7d1ea25ab61e2507b87dabf6459ac316067d6f5802b4ab6c7c780168ab4d7fd9e85625b5a091a9f6957fc2c46114b19c05efe8f5e52a23eb304cb4a533e36bb95ada1f6624f38c19eb0aac07cecbb06a1f1a4925037e80ca49a416dfbbfacfacef8b2fa61f6a75f07cd7470ec3a712d67d178304f4fdf1b90d3e9746a2143712bec73bc8debc479394ea7d6a93b71eb42adcb7d280cedde59fc58275940e3c32f490cfbed4b22603a300c85698f658f991e4b3d96e331ec7fecccca609e7cf963d0ee14d7729644aaf235ce4b952f420ef93aa87c18291fc5e5a035aba813b79eb324ed667bf27d0cda3fe726c49353cad9498c4d75bfc5439b5fb34d39d0807a5da0337c62da3852d5053a438d36a6fc6c034ae567de2ebc35caa8ae05d2126ce4547f151b5a7e66041fd75c62e6a024060e25eeb144cf1d7a12d0069e6a42dd202648355b0bd00d62f253bdba414c746a1093a19a55f8d96726f8a6ffd82807ebe0149f9ee37f0e431ff5dc316a6321abb13b6d41b48f8b54fe2d62b46d4056cb32ed7784cf32eeb68ffc901fc67dc80fe3fff088a437cec8fc182a2f09ccbb2474464a3f59d83ecb878484e7df8d85adfbbace27a1fbba96d8a8ee08937999999961c7fb6df7415ad96d94c4c0f15b523f7f246d843f86badce72a782ded167feb96fbf8684de0f5e38d85af2b731b1224dd7d6c54b7f4b0fb8e3c2c7546f6f9618410c22e95baef088490fdb71a12fec302f09facabff62cd0e017c6fcd009e9fb78600ff16981d67e93e6ebb55f79f3dff769f0afccb02ff7e919629e213f6e3f63f7ce34c57e8c746740bb21f3b23f1b5476d2cc0ec555c00c8a72d086f1b0b5ae57f865b804ceb281ad771312cba3cb720dacf776e9fe34cff1ccc1380a33f000ef502e044f81ddce9575cea03c0e97812b81ccf9cd6155175230000000000c067ad018073decebf23da7764eb8c3c640bc487dde7333111000f806e557a7f67f591235add5efb0e6eef6f7a11b8dd1e294ec77e8e7d188e7228aeb7c7fe8983db63bb0f89cf2d087c235bf7d8c68256e1fff6bd691d8c9f994c5b4d2f3720a68fe95854fef731865b2c33748d6afc0e74dc8f5f84b3f0095c63d724c8906d5be9a94564db31f60f9f103b2e0ada1aef38cbf680af038d395e7579a8ff8e51f49c85ef3af07d071ecdee3b416d618bf8c759f04befee55fe812f61ec3e55bf9c051f4a85ceb98e15daef51da8352c638e79c13eb3c0708f4f31ccfe919e882109251e439738b2a8cdd4773620ea6c5d4ba77bd6137b5d07e9a8547d0fdcf47ed2e2a4163f8054ca0a05bd30e5743a41c825167f166302b0a2c1094292b2213fbf9eb5a11312d916ffa7521e9ee67ce88772b156a3f92aef1dd485723fefdce2d100bbcd4e64c80ad8868a6d77e5d935b115982bd2c923dd6ad8660a5c764fb143175ab2172bed4baeef937652acc05b5fca854fdd33ffdc35d143b3e117588f4559d7386b8041db6863bce627b342aea606bbcfba23214f657ecd91ef106f1074aed256a7f0e77aa9d44fde53330c96152c4d91e9d1375f804fffea883286567188c8d427c82774cc42653aba5000514a000ab958e216751a1fe1f4ceaa9df2f976f9192766b27c557c4e1136052ed17fca63d22ea38fe6aafbf88becfc41c67f5cbff54ededd58f8762cea431a7b6ec18c9598d04fd2216b55f3bacc4a15213d91e8072dd89e986104208ddbf23a9d87d7becfeef5bdd4f6b4428e8e7afade9cadfd25eeb9464dd6a88b61ab229691c287a5c9b8d0bf5362e7e1a9f590d5172fa8c1fc5b58fb3b8359d5505e5d140a0df57ce348e72aa2db4b9b41704a43621f5cc1ab990dacbfc52669a826e7505770bb2d5ded21e1bd52e6aa309a4b118d1af9fbfb0547e7ff19bbaa0273674a1ef33ad2e3b92a269afddcd5b333f557ac374859abeb401e93775d56584deef3d0365d6774c6deaa293d353f9a736a9925209c37e38c6fcdaa421a02f5880be6cf11892046e48f2a283ba1b10acfb5addbd88eae73a41af21170226d105fa32a57eaeb3d5757a765c889e591752f51c9c9d96f97cd138aafc3ea565d885a8fc8ed3336bdaa13020a1b5bb00614be07f521768083e37fba56690f9a55ada804819a45bc330acb7205c4b9fb93637d314b4f4dbde6c6f0bb2eb953e835b90dd1ef34bdd6e0fec4d3974765fbfe9b1ee877792f6b8b7205c5aa63b7eb5c79fd332ded18e23b6806adf70500cd361370a740938a91ae9979f3587611b0550b5b9e440bf4de252f9fbc767b6e7a1d85f124ac280bbb68e857c4d5ce4baaf85fc35ce0787a4bd9581a8eaf06b836418aafc4a5a865d279b1f27c110242b7114c86ac929d01f6d6ac7ae7b41abeb53dae3142c8b5f86ca9c033327d91eec3baed39e8d0e8ff63687aef75025980861227934f1da6bd5673736fcb0a10a97f2a50f981261040861103405d7523b62786447308f9c75c128ff638003766c0fffe7136427802dc1df2101aaffd755d7da05358803fdfee7a4b41b725e15de7feffdf74328236ebc0821a1ea8368c8819daa3d56a9da7be9032a77b6a7b5cc067168ff7215bba98041c89b92724b5d202f51aabfaa2e101c4635ebd99e4de5170296ba40713c0182c34bfd2f5fbe0cc1a515fd190b542aa221eea3a32317b85df0192e4a3a62a2864ee89c94aa54ffd47f201afa54ad3dc1ff63c03ee45a447c82770c60077cf179f5bb5dbf3d78207267c51e84a88268484a1142e28ffc6ca567b691b638aaa2288aba444e54ec497f7ff3f4c48e8a787a26111111d1a740e4339eb3fae954d18fdd43a142c497ffaf521dc9c83947bcc3d3533a7d3643de06b022851562b0424c83427b0d048dd0a4e98eee2e9d75bcf6bc4cd5de0eea537e7ad455d087089da1f30ba8f60d3b7eefb8fb5499f7b5b44ed52c7ed8ac4c16d9a1d8bbbb3b26242424b444af16a217e921d06f0aa9d8a334953b3601d2c85c403fcec1d232feee3ea7fbe731e7700ee7708ecf505f67e5389d1306b48ada2ef840a172f78f2ee787cfb08c10eb3807eac039ee42ecd8dddb1e45a72c66407a8c2bc1f91f84104efe164bfd8e6893fbe25cd3fe9c70fe8f36cdd2c7e5e29732ac5b2e617ee4b8a84618316e2b8c116323eeb3a98b612f39ae34bc7893117241d6973651a4fb8e684133140179b1c2469ca508673162a3296c147da041e1c7045245380b1b49194426fa879939c8d4bc16cdbbd632333b2ef85acb40adc3a0ebeefe4f9ca6e5fd4e6059fd2a8f220ae9460d465a6aecbe07810b472008de098f7472e58c314c5728fc865364b365be8710ee6ecf30dd7777f7477e9491c9bb526d027f77413fad7e0743ac4860ddef9ee370f70132f7c3b9ad605361a9c2ce8f6835c66653a11d72bedb17f61bece5f3634cde55653fb5fffd9f7729baa36598d9c59fa2bcddfcd89d069377c549b6b5c88ada84f62568d1d6b8184546f3a8f66ba92aa87f6f0703d78f8be6eef322e1222e7229e8b75c92781a9ef6022bb59faa5a559cc680b618b5dfe3d19ae2a5f6fb40a15f4543e2c36f2167754c7b5fcb9fd0f7f1315d14050efa4d26a2f0e99cd6b9a1dfacae04ed577b73e6e0e8f4939c294fa24c81026631bf4c4d0a96fd61e65c28837e734e7f7eada1d5af842fc60b92c253fba9caddab4fa67c9d83daffb595293e18edf0d0fea9dc38fde40d0a7fba68f99053fb7da0b0a2127f5df023b72dcad36a0d7993a01e5aaaf6e01a60d04f6392c97e9a4a0d817eda0cf47b1a1ad5fe7e35410bd5bda382f3ae77a165be8f09d2b152fb41b085ca8e9887ed6d510b2df3a940a0da218408541f2a2fb57f474c5cd57b4169ba567b5106faa96acfc4efcf98815049b5d72cee545fabbf56ede5ee9efa4841cff2f579f8a9fd313c98b9f7bad095ff56ef3f260cfadb590ffff3845d40c42f9f59001252941d907a78b0f0e121a2670727ac3821876a7ffb68b8f017b61076a01fe4e91b96d59f434f0f3eb581a8fd3cdb0303510c2591ddc4d7a2b40953da847e0903fa69fe05fd3a47274a949c1fa6e44489b2c34b67c78a9d2ed94d95f84cde251f32339bd0efcf79ed75bbb8fb8e709297853aaba94c67411efa6d51cfcc1f2d1481c0aba2f6f3f071435b706ed68cb578e381ed4103fdbc22315a1ed89aad409121bd4342867c4c7c830645d9019fc9bbe66319866118e6df11d9a95e8c7304fd68ed16d0f50e0eba1bff4e1119fc38e8476b370eed86b0210c6ac1938ee22e26729607d16f4e0de620a1412eb57fc69860427f7f41bbfa0c23bd5e2f16b8bc7b787daa1d3ae03ca11af4423f0d0afdf875548360558519517eaf721a384139dcf413caaff670da847eac094d41a1d80fb2a01fbffc454412e6dd5d5e8f48923c5c2e464a5248b6d4fe242ba594d29d932869af8d8c8e5a6324766dccd750e8c7385ebe8652bbbfbf715a86c7a81d9463a5a368f00adaaffa692bfefdcee91d284995064111a27686baa9e2cfe45df05ba93981f6da847e7885b6049c0cb5cc849180939f2ceba296d920a39cba55023718b5cc06919154b74ac049152de35db71f81c908bd992301642353b2640615aca00231d85014074a80252871eb0212a394524a8961300887a4fa80ba412cc8a9381c0929aafd43324ce30d8846051441bc5c5207fab18769fab871c0f42b1734836654c4f85097bf1b90dd1e58f7f9c3f723f50847a5d4098911d25e3f1af4877c686808690ab1030f39b0c1092b594029c2c1a70058248dd102a1285500e103a1fb4f777787a61f1c2ee10e8610a6bbbb778bc552f74d6c4695cff0fb10520c1e6eb0c18931c21802156c6040f02021b403207c622006182ad394222d5bc8303aa053c60bd8f0e205155ac02d5c84408310ae68e30d2d57a2962b64185a90983cc0d252b43ca105e5f8d054a5b04211d36f8576c8890ecd529c44a9ed648722ad6e9013263e7033112c44dde528ab0dd13c69d51bcfcb73d962b48550bffa7776e84ed320b58ebca227520db110ffd4f541aa31a73a113bdc13c3908a998818b6c8764a3434ad96e7ad5cc94fb2ee8b818b894b61bd9d7e155be11f958a5267f6f9979faa57aef48a547ffeaf90c89225b264698ca4427396d58fb44834b354ea6c5c5f9bd666ae6962aba865f4ee96b37a7d1be39e28836ea1bd3502920240fd9663a1708f9c887e3356ae36d5a6b6bb205bee83dc3eeded576ed5cc07b70f1a46a17277b387e05613b006436461c50ec410e38a2a4498e0c206910caa9c8103f6c1132a324fd11cfc507bb31c351187d0116d08a901818298a10829e0c8c1192e77953b63a9de43f59456f9a50f4d6eb414f452120218b5db90d205969b1dc278d5b0c48b20d040e88a269a58d13265eba1850699162b0c469338829a78a94deb063541a38991fcc25f541e71bcd182379240ea62092f2e50c58e175a6e20c60d4db86ca8f430d4022ac4d071011729e410851941ac5106100d2f507eba43a50f497525d5b53328d7efa1d8ff70fe5ae28cc07739e9fcf95acf643f2767e254ceaa61eebe87629db400ec60ce073b0dd65ec5e756f1b7ee58c52e55e1164abd887ef021f69333d20f048b304af9d8aa026da442ce5b89ccc677179edcbb631934148cd97aeda138ed4b9cd76c654c57a8f6a8df80b03635d650dcb6c75d32953adb1a5376daa8892b3d71dd329389437da9a6f4fda6ad317dff2c7d3637201a6a5bc1a6a27e3720a88e6bc6edf630b17cde28101ff38f4752d56195dc4638512c7f1044c3ce9cb4cab933f3b7fbe463f2e5c43ad94dac6fb26c3b0647488fda6e977208dda1c3f51823fcd9b94387beb026ca971d0c31c6de18239381c91aabe93dfe9e9ef7b9b726fb7d78ea16b2dc80c0089d67924dcb4ca589c597d463c051c6c83fdfe1ec30e6df8abddc8060cc18738719890f4d57687cac5b16a0c7970f5588ae444c8c1910c6d0d0f4d19c348d46972ea810b2d2b3831fce204a63881f1fb0f8e2e68a1453d61803081b9eb00192942e54e002e80c263b1059796204473688e30651141d71d180198e5842cb0d6104a186087a8400021930924108377ce1c4ce153d98f9410f8c4892610637a610010b5c90414e0e508248e2c91a3b6ca182186d58b9410b1b9e6062043521b8324507307a28620766681107186de0f8f07cf9a1c94e8124d4a50a972d6f0091c50ae5501404910fb608ddb8b08231acf0a1062cdcc0c1103c00c2440a355e60c495a4315cfb2b021ba00b0252f408867680840f3e48e1a40762d4c0f53d43a0f22fff642ebec09932c5103ae470e162a6a24236e28ab190556cb150cef245380b1b4529c2598a70111b45e12c4532184ec76f1bb7354371d2c4155504d40db2c1a7e2d8805433d76212e4e248bd85ab3caad817e12236dafe63a3de363692f34f8fc92f71a59244fdc370bbacacfb907845bd7cca6db3b22ecbbe23da7e487c7646bac3166e1b6741b1116731b177e4851dd594aadf114e55d819317d298b278e4a8e1c9f755faa624fb91c2fb9ed25fd1f1db70cc0bc8ef70dc8d6cdf6300cfb1f9e490dc5c93771a512951cffa3334cdb38f9260cc06450a35c8e4771db67260e7bde640783715faaf4a6dffe4767264e07b7cd32fdc6cdf64c9f83d39a657ade28507a1d37554e5cb1a7421fe380c0701ba7b5b7e36368479bc5469ce5b7866102a77edda09b2a6a48aaadba413550516f9ca80aa81b44434f51d5ea3e7f941aa199a8a4ad16553dec10d5880000001000b314002020100c878442a16034a2ebe31e14000e7ba2447a521789b324c87118858c31c618430800000010919901a2b101c93f5f0e74e696165bc29b28b96c06284b28f1233a1a08e6e5fe19e092589635011201270d12c17e3e85633fdfd31dca956f325540bd84231d677b9635114be05b46e807430e87ef0d062ed9528cb59a676c17d03d829f331fa416684001a99a23d702a78a38d304ab553de68bc788144c3dbf61e90b356f4f5182e47bf74256a7092084519290f00da09e18a968258f62482b3aa218bb44f4c29062b5a866a08e20727185598c540c52c3ff87f796ad427f930f89a57c3de193b40af7d80fcbec19b038cc8bc19faec6b88800b01ee83f88992e195e30c60c3d500dbebedaeacc0914c88bf97c6593a363cff0af52da563f8c1739f70e1fc557776596f57705d5881424540dd18662e013525a5d5401c689992da2b8d52bb45a31e74c2146c555c28ac17677de860b1a97834aa1f1325914b4b2cceafcb8d3ccfa5c113b892a61e9a76b591ba1b06513215433d25c830cfe1a424fd8e3c09a9b7897742b06074c3c510c4aa428d87325d217ae49904a9f0f92ad664f3366dd0a14a1ae17d96b951b947d3184f43047f7fa7de4c5ac6797206c0d7debdc0a0e3f583c220c01f64179f8da3ca3689b3702a16060f2156ea47547aaff5f580edfa008ee5ff1118f7a2b50bef4eeb37421a5bf38150d316a9ae623123967a0b836bf71a6c6ec58da1080af485c5a58eded1421a087063856eb5bc28a13663c6f22d426d6c867affd5c49a694c49de068b2facfa5211688548272dfdbff8c700f5384f15adb47eaf21c272f6a86f86d8b8ca18b710ffe185f580574123605da052b542db8d8a5ad5c946edf29c50d7651f8afb1b6eb39db276e8cbf1f991321c5501f305630f3aa1a4d9d54ff4ad660b5c192f12532bc57ab53dc86470e0ab19d09063e309dbccbcb48cdcb19d3efdd47186f8259757bc238a199ae91a0dcf37860388b180e4b2f0c15e497279f0cf0d772ba00542d8dd90933949d1a1346df9339f0da9028e443ead22ba28ccc0b5bd6009520bfda92bac43afd44472d53373a48e34c41137effb7d6b9d66b28c7110ca2b70e58e83afef9e9a2fae44f1423577c8ec73c8aa75f5a2b2df6f254fad7e2812f1d35d82fff17443e262e440023b8ca071e1b8eae85cb94914ca81844e579f1418e96c8d4a9e6ad855172dec35175becb78266e1b70bdbbbdbe335f9affd49d794470f88daf01bf7ab9d6d4b04442751b0b8055ca10de00fe5c34539be2aa194208fac6a4fb220843c1a0d9aa518836ce12cbc52bd54aa1a21bff43cbb5327e730c8dfbab368d8fe05c840325255188a18604f4f970d5270fa3c9838f4f6cdb0bb72fd20a43280f8cecce3fc2badf09539669b58bf1da689f9b0b46750aa035ab1b2070bbb40bfb232b0bc1d0496288b042882a87a5c84808be247f9ca48dc608c7489db74516e8b4c96a00a5239c6d44979fbcb79a2b668a58465ee7f70e87134df995dc0e3a6f295524116c86f50fe1dffbb9a43b9a7b2f838bb0cec2392b25858af158e67517791bd4a54237199bcbf7f46864e1c952798dfbcb8aa2d442c61a8064453f5a0e83957e824a7826936fda0b5853800bf02c83b31ec7a290c723821cb9a417394fe0101247f5d052e9f640796893dc5279d449c06fa2375d54e477ee6c32567da4a3afce6e2b57ed9a56798965e68e0f35874445ac23bfce44fcd43b56b2f8c12430971c08b15b85edbaa06f32d41448b5ab2d444c966387a7987e301b017316cc23972bbedd344ba153cc22e87c45d64628a082d0095a3b19ad3630ff69307a5420077076420b03d2f10d3600a07f543aaffa8fad02e280c7cdbd1930b7e16b59db4518d28db76e91ce68802ce67cec7128b37b345e50318e89e8e0892ea21fc0b2a3c71cf0a064d6d65234fcc617668d044533e4dc2f876cf6f13793b6de6f7c768d3a6453070bd9c67eb9d67ed91e2cd07c401597b64a0fb677bc9d6b48b9820d056f71f2296f2031802d80e559e8f15e178cd2feff60b54e174f3983b2ff316c679cc575f3640bd6d0d7095f92348e741a5b1da3c09740a5c3049c3b9fffe2fb602752d4db8936595684337411cec09b39e205d44b200b486d272d2fb76813cb203cc7a729dec441a16a0d978d560e9e602a19d017b11acd1463f8e871f24668833b3c2dee452b826d52792b8048148885ee6ddc02eaf298e8f38cd62f58cfe8f47183e57f938906899226073ae646491d58a1722074d0d04e6e6b226cc24d9536e26ef46ed3079629deed29ede0acdb79454d79967cb94c3aa1ba482cd35846016d4c00c21e47fd17d7a15d951a9f8ed5631537556a1b2bf4da1ea3f105f4e1e56e2879097202cef2be7eb89de0a9f628e4e1deed133f42ca74cb4ed812792de3d232123a8f8e6ce8c18a0c29d704f6d590f0f701ac6098ece6559d4c1a44c3428b0a5402f7247c139933b71d18e0c8e52dc41d73e7ec75f76d6248dbd6ba84921e4c0052770c1a4b13a44094336a3d73465e658886829123380aa43dbd47088aaaee732aeee877cbbeb9f19bbc295fbd78584dd0c6fa88ee172f4e61048a80eb1a1fd54036a3814efacefc1de76bbc1b8b0bc6c07d8d60063e028b869824ffa456a9442020d924dd7a2c0428a1ae4d18d4b417660c7e64a3e2672540fe1ebe2ccdaf844f4230118405c9b45f9853e7f9052224224041a4fd4d22b94b1d67f3b34810e144b8a76de19e240676b0a7318a2d75d9fd7c2e103bf19e189112c26c4f40695a404b6d4a51bb0266ada7f3ec452971b5d8b99fef1d4913442075f19bdb3f52016a85cd77ee0f44395195467577d338c264d70e2509f824e08d36000cef6e1247aee7ddbd1c02463c51ac0e94936862ede4e50290f24aa54af7b2c937eed4646553433d965871d4be720761058650cef9210a3694a18ee318df38c6cf471d4eebaf16c718cab1a9fbc79c9333d8a541964e3df541a3ee8310b4fdffed9adae7f1b1d9e49fdbbb0af6001eae596f977bf0e43624c34cd74d17330895c5cbb80e0a10395d03ba24fff77c1204c128e9e8ffa403dbeff9c612e4682784e359ab2306cdff7fd2b5eb1b2e514170550fdc93ee85295c8e515e83414069d3f14b5429f8352687d709f4b04e995a9d456af4194a029416dd5867d3d5819dd365452b1dde26a159aba059a21a4386bd2af8cd99520fd7ee3b1b884036f0b2d3e5d5630bffd2bdee7c18adf3d414785ee9f4ba2d463db7274e410715a0c6ab6e42ceeb50d603305d1e52e4c2f14baa7031fd53e607e0dcad03c97f2d52ae635acf63b2f35e95412e90d799744105fb84a7b3b6ac4cf959df7f5e739ac7224c697a159ea881b929399a6cb2b775ab211716b654996b5b4d505b053b130c7ae70a22e173143619816caf7b06d5c73709cebf66db7aa1db8402883ea745ccdc1bad188522b290072ba6a537ec7d50e2b285cae61499d48e74441bc5e4e383b603f284915742070e8cb87cd09d20193426fcfe856e75bbd61fc0473489a8602382cfc1bf41bae71b2104121bda64f58a0a7b1f17ea58b6e260d1b8da30248e47a5e06fa5b8a3595e25d3a3730824342948e4e2bbe31531c6e511f3185a49e6cd3c9454ba2edfac34518c9574032141bd5b821f487ef90f2282194d8ca1087d0c90f1ed230894d93a3d6afacbeeb0d94782b655efd2b61b68d230ced20cac54af6399871ece58b4a762434e155ccdc78e655bfa6a7e1a5f0995aef7c08fd231647a82d1973119287d7feb951248de864c4403ccef240fc79ce3beef14fb1cc69df6a9277d4c5553bc5411fa01e3d92922d1044a9d4091a64f39a214247a3a3a714bd29d02eaace831992bb81e925f7a80c14e43b2c739297efe24f8f9c47ca08b8b07d0ea6f9fe65a849f5cf0072c35c0d09a84942a917d72a13d10dd73fb3b71f6cd3890ed329a98d40abad01d92d3235608cde31fa2cf8f413acc4255d5725931cbd6b0ecf2c81c2cf80fd577586b370d32c8d9700b4589252b7206cac866db1abb637b846b290ecfbf4dbc0e2946923bcc4683a94d54f229c5904db2dfa8c6c800a92fe806d91005f2609120cb073df856b96e078ec068ad44188d7ca0d313a72487a1aa4d990159bcdd34b5a99ca17833c43be202e2e9def7455b67f81a0c830e0cb1a392f86246608f516ac7b3241b946e8498f636e2fd97565f014dad20e78daa350527b4b5d9785f870ba8e7b92eb44a15a03c4cd991442e92cf3692c6e38a6e80baf3d069dc3a7502be54a7d4b0881abc50632c7059aa7ea1064d6832c9f740634d4d096b46a776f127cb5baa61f87e2b8f46bcbe839f7f0d1ba7a840070cd3d47136f4232d0263e18dbfd865a205def7c51b2157edf357c990a056b2c2a8dfb9a241ac6fac35aaf7973e95e1374b82788259db9e211bd8d98df55dcfd626c0637b536e706bbb80c515226a544e0927bcd7b17fb21abac2fa561c00202f696f55c2654e30b8cd908c8b9f703b0b7aa308878acb98b082b742193f696c27196e8746a8dddc2b04eecda2624246df2ed0b15ab4c8d2f2462842261de221d1888508dc4522e18cc8bd9a5c4c8f50d128d1f73445fc4240d8c199947a540b618d72b0cbc1553d675e4cca9e8e0bf35b486d6456a3c61a09f63eb02f92c2fe2245ae2e750e454d0322ffa90cdf9b9ed908fc5631b07062af96b345eb2393c050ae36bdc3305e267a545b14807c913f83d59349fe919203d370746cce98ce7780652668fb2b4a5de0c1d9243c75242d490790a8764a2dcc6467ee98501114a9e38bfc766c19d16b89807ac6f5844084034da71e0327ad8dc9bc17126e8e9d1a0e25a3f52d87e3d195fb90b332689d8f89cd136104b6bda8ce00eedbbaf7c8ad9af1078c04df7b6ecdb445e2c258fb49bb5201c136f0d36057f780a131f50b01bcbc822f4822d3a9eb91be15b67ad56870331118b2fab8f4d86e25248cd5bb26c87c3ed01fcca96646da15e5f3c1182a0fa63bee0a8eca4833396321f8ed441fc015fc425bbf91e9c9235c62412c8128959296cb9ecca78b96052a66516afd638278b9230e2f3a6a9f5881198e07ab19efdc17238610d55527b5a2a00a00514018bd63cdb26b82d8d2e07b7ef4264969f633c1656138a556ddba9c4383e0fd3f5dff75924950e83167aecf696db13936b12cd945b930bde62fe890d51c80c24a1e6b612c2785e00108f151d8992660818c8f714919f1aa9245dfb55bcaad85b6dbb4d1b294cb0b0af3165b79f6561ea55d12700398887507e4a8577006a91b35b24a078072a7f11dba1ac8f33390416fb27b009612a7b40a1393b358bc7ff862b530a38b2e9ee7e88fa8bb92c2e4b0a38fe3c54c97f4080a7c5dd557c3b1094c6e1a33621406e10a3f68c928883fdd8c7a0344b9370ab8c428d0d61ced0d1090e77b58810f083386fb7a64269453dc79f7552992cbf1c402ad9f5b19995d3afac3595c9786e25ca588b3f013081d35f3578b96e213ac9a6e65a721c8b0a51d7a70c53652b93903d15b120339c001f70f8b8bb3f9956e9ff673840eb78e5bda990e0311638c87a08296ff7ccc93c03c97af3611f7c6fc8192532269a415ed8e4233c9d0f17e7c9fb4c00420a7e6196cd7bff58dacf2ec3f302b9350ca136b5764bcb03e7efdbf0182f5bff1d1017636a72e85fd104b6d63666275a1df3cad1e2d054b1c4a18c385d8e8083fc0d13f6c7a2a04b4dd91ae5ffa5ac4bd4271144f93ec242c021e69b1d25f002715600286dcb722c206c5fa03bdcd88118ebb2389ee775dbf7b84a788dd6c8a6c0c5c69989ded7afcd4a0ed97aadab80e3139438d7ffddce533eeee378ff8502a0c76480ce957bc07e83f0f3a13f13f3f685f5e3e32a70801c7852dee1ece20d2d82f9bc395ff90179cf4718bfcc718aa613e4223af51912f58dde39179e7df244eb236829a5d5343bf4f145ce0707ce2fc8f7b6fde11ff0a5958e94d289a8347f0aaabcf0aac06e784c4168ebbf99a4ea7008661988af306fa6074a0fd5839b3749e0539baa55fbec1e6ce77f840aab96cdd30466bd2ad14b38411280d38c6b4e64996becc59686d0394e6a156e761b14ebb7dd0106a45b92e21fb23514264900370a3f1c1cf63c4f4dc34905e477344c569f54484c94261c29f4b7fd1557178970a817e10496019177bcbeb5fcc66e458202812caae93e95b4a2ae200d2c60a18eb199dab74f66d1b7325d657f8e5a28481f04abd443611acec494fdd11f1a998fadbf3dbc2725cfef512fec3035d7a47432c805ce7b8da6a5e8cd9a8dd815f84e3a2d4547b52e0def8140e800169725cedeac3aa3faf0d0c80ecdc31fb18b8293f095143f8998b993fd976303a581fef16d9b6f00d3bbe339683e90aab862dbab30cf49aef9634241a8d5bbb9477260cfcf50c4a3d06f3870151d436b898fda7f0088ca379339c3009c66a6e454da9cc8d5e0d5104e681e61fdbf0d7bbdeb6b7d16d7b0878a82700778cff2d9a15f123fdf617db523af6c85ad5f2abf05981fc3b6861980599b896e5b7dcc4b9b997a00a96aaef210160d88a2ade1fd13f63826435eea0a3de011af6f8cf7a7935d6684ebd40529301fd843586295d66411ba58f7008a02b1187b833d382e37014c109b0df7317f546d5c8face86fefd48490675fd2cce85781e6003160584801ad3aa1eb5f4ba2cbeeec894523746536f2dd07a4fdaca5ac48a8ac81dfeaf899e0813a67e84de6ba0366d27e5e96054db1c8d3d85d7435c5dcf83575f48d0591b9f4b0d4405285e58d0bd552c6f9367fc5f2042dfd078562b208408f32f405da3f48f8a8a6e9c69407a63133c22e2fde988abdea4ccca67392c5e1d422f598ddda7de0e6a3c2d7ce18740d028fd30bf0dc913219e0315a04e46ab559a509d5fd4953395df5abcd8dcab77f41d2cdf9046a376473930f48896400bde7cfc530ca78c87e2c6407532a26258c48dec89c19f7fc4f6eecdab8608093072b4f27439c93fc396d34e31c23eae529195cf814153fdbe754add561d527e4be6bb50627217634947cf0104df331689d566c82435932e84ffe28b2ae802d0f43e588f936a6f7ba1c9de0e07c4929abdb28f5588d60072aba90068ba918b82d47d65a389f2c95bab6550216445414c3ff8692d71e370e92cdeda9b2af42bfb21b0d5bf7ea10086e25399efdca244fdcb685ed37ad17ce7e6a639cdbd4f30462ba8e58d6a05d082bbdc3fcfe98acbcbd744f8230a4b31d182c87ddb99a159b5fbbe43cd3d71404b3a1215f89da0532161117034f89dc27808bfa3ee3b60b6f4a246e637fc8e83514b7b88dfa1e3bd0772bd456a43552af67c2a8e0329472773a9d01a9daeca31e392a10cfff30f05cb1a6c3d767d37d6e3253732419161f85d933f0876ca8dce0502675b2ded74c4ed8bb302c718141d3aec66b5df89ca9fc4c566b1e000accf5c006c1281494a13ee4d9e518b8eba1006284f1e9df2de34cd8f00b7b6f91781d151adb15f6753748fc38d4e4c442634cd4437f4b54cdadb9d44b2353a075ea6fa62f782af9ed30a86b199e55b50fa1c6e74fa5e845a520f6650d4808270d3662aa8879b3b63b62b18a9221da4824a69d9174a98530820c2206c23d334cd97f624b49df69d918e53a6e981b4dd90d570f44515a1d04a7d3a4a071fcc9506e123ff349f5d0bf5cd025ea115079c7080e36668ba36957678b27becdcd4ef87efa5b50b5ce9eaff4439fb3fa5acd467933c08390a21d4ecab21a69b02a3e28479f480a2ee806b60cf3ade84a3edc9f6c0bae8eb38f496a71b0ef481e4e33db831f1aef5754d56e4b7e0ab778784cf45924ba47f28f94533a2c8c522528412c43a5454a49b1304b0e662607074d8208017a11d3a1845608b811bfecc827bffee641f0a97e7830f098a8dca649cd466f062722e2a934e364853f79c462da24d05fd7f432cde385f220d75a25c85972536bc59d8c1a4c7b78c0ce40d5ffc67392178f61e69273f604179fee258c3d12f9b46e1500046774e7286224434f4cf7751ccd4107ff05507d8b340b0257dd995f5f9fcae8702080f621b181d7bf248167cf39751261d4704ed46baf34d4e9c15a708725c72787bcc48cdf8f14c25aa72d480ed2fc71e844e837195609a92ae3cae4128cb4bae379d984a74c59cfc6c1f98e592bf0119a85f9a9ea23ca38f50879f6dba94dc74b266e1433adecd048c0ac762c91df750c36664a749b42fe9883f08fc308c8c6c841ee217d818f44fa1cf59545418acf6554778e3623501488aae6130ced9f6edd534953d692ed22d9109ca87503e4c07be6c3ba8c857289ebebb82c0d24cf4a3f4b03ada21532607f77ed9dacab1eec7c3dda6869972b74fa5a077ce4603513f293dffa260fb164858edde7a0e6231997e60ee1d719e21ce9f8db3cc1606c49cf2d74ceee82f13750a17e90d0e52aba728d21d830b4af47ab44c05b10830b025b45728f802984d21d8af5f6ac55762503439e70efeb8983abf029fc7d3a33fac624c0ef1679b61e50b98655841deaf32774850f2f40586627945a953ba8d80af12d9de4cc76ab8243448b82955dc262fd6ee39277699c24d172172e0a4ea5d03608e230906cb65c7e0c0eb185a53007b962e0d03add1cbc6e0b1fe745854f5b82dfedbf6ffe5323333defac3dacda8073e45ecf988eb029731595b43d39825dda6285f9292744bc9bd80e30ff4dda10f8b5fa563a9b55ed10f2009fd03233e53fce0db72fbaf4f946936b28bad488ff8450cf75dd765aa03eefd32d90c2e5abc95743cef69736b1ea07828dcb725327578225bc22ab678f975377f874a1f5e6d1e968a8c6d51e871b69ac2260b8db2008ec4705563e5594bb0948b62688e942fbcbd4126d16f84b50e81191a0abf1b1b634fe2610944712ada8d97208f7ed5d8b1245524f2f9335ef410847a7facfe91a2a1d4fb987e9f30e50703ade4eab3048f557b39a12ca7e07e06d46bd8601f022d05415570bda992ac559bb1733001726eefed52f9dead342966998aaa9ef949aa221a883ebda1de804655ca90f0ae440a8f54345888dcb4740d7a26bfe8a5281f0df13df89257d401b8260fd617db5b21abb708357e5a68877ad7a6b958b85724848aa35d4e3697472eaab52bc8e65e64118675afa4748e66979e4e7e427a275e62c0a3c062ab89b71ea6976b326fb2896d9e11431c2bca267f5ccb9702db433cc392fcf7dd166def7b0d83cae0dc3bde33ca5aff15692d5b2458a592afb00e93cf30392eaf734c8faa5cad7156ea65250048de6019cbc6cbc810729abb66bbdbd59fc6662d449d3c50ac3c7aafd62c6dac4f8cc7aa1f66028006f3219401a891819e7b4c8e82da4cc21a852da2b5e2503897ddffc5c0eb66450f5b1c5256433e71629f8e1c7955b7225e9642cc25fd12fae50fcd5489ba1ff9405369a684cc563ee7fa60a1c7939fa80e9a7a3949305a7e75eeb823be8aba142330d2bcadea4485553dac8533a5c75c07cc8731ca1be191274921d383b50057901b499fbe4ca1830f927b910045ca05a9720cfbc87484cfe7b8867f4014152e10498346ef02ff37c73c8817e837537ed0016e5ddb876086d8649408fdf566117099b7de3ca997cf15f0c25e3356436a412dafe4365b1784376701bf71d6d647270e0a986df446651f81bb18c09fe58153cb0a4017f799bea7e2edacd404fd68b381114892dc7d89c708d0cad8e78c306d12d2803476849095a15b9264b0e3b7e2f24d7e00819a6bdbb2fdfcee2e20fd2ab88f1ebea75f32d73816a37cd0c50a1335c3426dab583272d4b5a2ce8b70dba7a41c777408c5857b68d456a5286e0664fa429b4dd2f82aaba501042a285c1d985e1bef81ee16d3984f96b84ee682fb5933b66bf1c7b256432e907adf9156f57887e959eb6dd39543358165a180d3a661544a9b31cc0243ffb8b5d0edae5253a684799fff5ef875dcbacc43b1c52282f831be843281a81d56d6064072ce9f26791c0655a22cc7a7beca3447e099ce8d9d95f05fd1005a7084dce9237db70fce4c4bbbc25bd78c05c302c19ee4dc369c0bdcb8e5fe80410f32c484f82b7c6b37e01b9096e71e8e2bfe3c54e5e5369787327962ff01c4bf43699880ab8dca8fdd45dca170caed5034b543e9a33a83418c0e26afd663512ff9b7b881ddd9e53b79b66d519c3568f5cba16ad2fcdd575af3f659edeb85a4f4566b347b0b952187e9a3c1caa51b861d2553e46548fea793759048b92e272d0693977dcd91306a10f6d9424d2f9bb2ccfd9ee8f0c50d7554a917b7f5a2653b905e82bce0cfe58d87a30ead3123dbc10bc4e5332782e4074e077a25ce65509ae8872c0a471822c7d2419bff67809e895a008dbd1ab8c04559c264c8e9c2c91218f3b3f875c810df2134c1c7935b3bef81b1223d9ebc977b45853d2d2807890ae2e160bbb9093b2ff50df9721b1144b20ae3d24b7cd23cfd43ad6c538fee5dda41aa95083a6c1687ad1241e109323ba5030b9c565f5c7e8099ad547705d2becee9313a75621bf65539cfcdda275b19a549e2e49a486fb5ff03f8b168317a869ba51e30e202023b94c204a88827d4defad29b825baca91c4e5a6ab1ca4564f568f580d31327a57c588ac5536a160cebc4ab7c9679fa9d79458664a37fa5f875e4b59edcdf596d3d5ba337d395713a1c00a98c9a1b0007f1e7bbbc749ad460c74eb5ffb681e6bc93fc816695927e0c3d3e2770557e57e66b9bd21996c4c597a6f51f6d001965643258a9dc4c28393eae64b2ae803a32194de8859dba190c13c6ece6c3360dcde65b16f9a74a0127ae6ddbd9caaa0261c00af256420e16d36042d063649376324deaf50e894cfd3a9728036139d0e992989bf63e606afa51470278bf8f01f4d6e6a510934e43f8dcb141439d50527f27d4c09b2c4c089b101840ab10a06141a4fc05c6d189d869cfacb78b39aadcf4ac62857308d93ba5579ffb4243914a2872a6dc52fa875fec536f0f1a8fd4328754b2803511a32727a8453884e4909fa90e39847a746b197ec49a655b633973a382f84df1ca58841351844919889f075d645afaae3c81f56cc28cefe49370ea8a385a873ecc3eae40f66870d65ad3bc2063e0f761e5da60403ce2dbe00c4d0bd88be525d309cc037a527df11d8e16bb9e4283d8eb62db2cc2a120b608233bc58b0e350ab2e084b19bee65c3e2597798e9aa63e3704418f543b14fea9857bad4de94cabf07a9a6b638833309b710995e40c07654a72c85b8202e5414803d8177aa5d304e40e9484ac9fe6f17572539fc42815b702821bf387acee985de64ebd6e1e9398c54f6e541cd2ac05809fb93e345bb346f0d4a961027c43f7eeaf38c8f7113f6855c070396377efa366c80790d0e4de7287b024b3e41df7e736a0d3b0f743b5d46debc69e03abcb911ae6fb03d2dcef88bbf9eb4d92c2e9b70da039eb5c237dbca2c49d98c6ae89032a013cb968c65b95fac4b20160a735f2448bdd4b6ca49581f812b994ce33c356fdf7756f6c4ae3121d107d1c7063db1c0372e742bc42b1334e7fbe9e65ecab5dc85941a4685e6b9485e2c30878b1f91f9844901c170fd85e09ade13ddc8af5c431b97a5619079cfb9e9fcc9caefadb7b6fbdb97dca10cee20598b2ae8b554d3200ebddb134afb2843d4593677c2d8d9fe84d710bfc87e84f6bdf0ea5676daa10bb314239e57a58e14baba91e6322f9941c66d50f5d82fbaf0180938e386f0c9dd05d3c7cd3ebe603c962a0c3ce3f9da522f2a0e53d5d74f4477ed3f6f998e59126845b23334432b98a283d9c794b35c1f0cbbb9fbed6ee88fd0dde97541e0648b3b4884a90dc0cf07f844768d3ab26bc789c949daa3b90203bc6a404f041c127e6cfa379e162bea21e88b45f32e982a05bde5762b7ba890761e00da3bf6ab652d0ce0b04fbc69b390d6bf164ea6fa81db90655f498c1e4e284c6f86219d13dfa0ef910b6f74d1918813454364281146049e88cb74f0cdaafb58914c477cf0ab47692e8963853af97842588bc48602a36a44bdb0dc0998dc7f95a8601cfda79696e11674436db925c07b7ada12a9af5f8e2e00098697d59ddc170efbb27cecc3a0b40e93576edc3142d6564c0c6b306636c8aafb9fea602e590b64a2a16c92b63dbc6ca475b84fe3951cec187660ba677f5a8d6bd2bacc781d770a2514842ce38cc00350ac320bc2ac0a713fdd7af849378c881ecbdb28f336e9aa2489f02e2acaa5c230898211630694bca0ac4795cbe93e1a4effd127d983d34341d0bd7968ddcee1b148c069c9599d06f85528aa83ddfabafdfd0fa794e8a493360c22c2778354410feea63f821d258251af251283abd479d5704453800d750b614be86dc488f1fab0aa553a94151eb9db096975a282a255d10e9542ff22e98b20ded2c493c57d221b41ad93893f4562da0ce51aca9061fb5c9d33fdede7f96ce3ace0cca69be6003981426859e4f6a2df816e22b87774e9f389b648886f465cd534eb2d627b311a70fe4aa8692caa88acb943ae03dd55571693a17e58e2c7e0ac25fcf1c7e75bf0db6bf0c707a903a06a66fa2f813130e6a326828970d5b4d5b2ac0b71d17d06b2603270cf97c0358297a6fc050a771f6148aab8d980a7da8b840190442b8e5ac963733fcfb7d01ba1843d5c4edfbfee5d39dc0d712f419710fe499280203602836340c14361583690e8b2e6b81a10ceb1cec320634f201e85533244e67e848905b0a4b242b08515a4b394f55d724b97216cca4c741e65091d7411ab3797215a6a12332da43a316e23f74ec835230b4ba612087723fa10e4b5131bf4386e812dd2895919552ccce0fcf8986b8ddc3cdfa1f51c887f9a4d11249938a2f52c2c8fc9501065d374bbfe9d29449fc2c9602194d97ed907154e8bf19f51e7cb4f59809a957ece50c84f3257882100f390de42ff15f1453124513420b5064dc449e74c744f34751e15c1a4ae92abae5b94d353a2c1f2bae9152b6a7dbdd15f379cadcce30dfed744fb49509dfb709c8b079f977e9d78b984cac13dadda1066c393add1fec938605ff92b08ded9005295cf6e6ccf2ba0ddb7e566a8037d871a5b6247ff52187d5935226a5a8c03f59fc1205cab6b1958bdc7f736f64cd1de100389ba9cf91d02c6558ae0c2883d608862daa6486cf2441ee96d9c4cb22fa918dae641b4032642b0bf807390676005352e86b854c34e36ca47bc003207e3f7fcea88d095ff8fbb9fff1794fbf2b09091391c1aa590f866fc7e63f7cba218259628ff54f25e5bd5e038f2194217a11dd736b2f3e787c010eab0805a1100a7dded9c086837b9e7a57f07691cfa7c3a0791499be1e7cd65cc2882b4161c8f16d07158b2a9d33cae0fde615f9cda3e408f3d3740ab65023afc24664c0ee013e31c8b22a8f05f87376c0285ac2121dc04b0b1112fc923158afa4ccbc08ca07d2ca4242170bc789cb4e66c402253ec82ea47fe84d818ca0f3bd58e6e681daa98a76200d3274bba604ae936d2d3a15f48c7dc264d0683dae0683847c57bc69c233d2b78683c87b3c155c3200a718320bc150c670fb3b978cef8721e8f1b3a9100f158045bd7fc058b0ecbc1c2eef7b8fa724206e0719101c80600356ce95315fbf3c3787e427f8ee023aafe4c543553491a6fa89e217dc49ac593fc12bc649f4700bcd027d0fb1282bdb0528c36331cc2f3705f5b2411a83d1242f71f86c296a0445ec4c16b2abff96e024a3906e431eab0ec71fe17ae075a9214be9efe30645cfad741e2e06fa4e9179f4e845d0d1f45a264fb67ddcea8b7881aa90681bdd200bf793ae294a722cb0b38ea353328885e4a8635bd047334372eb3e6ae4396553cbb130e4b89f0ca245f6bdb671821036fc2a6bfeecfad649637c9703c791004477a4af04b9860052820512b9d7daaad59f138eae0fd18f27279ddbd5bec75779907da1010326413174c9dcfd3023013038e97e8e6daea1a1805b3169f7592a7fbec859ccf8aed0a4ae331d1224d6dfce5d0e4dbc714eb8d4730a7ec714ba8837eee412ed091fc0453948da54274e630e2951d064cfb98de8c9e1d736f06e7e73baff106c532c5c2a17dc1f7031c293c88c7705995eb9d817bc71c7b476ae8d16e50e618094f146c3758596c3e12a35f8e3d32ce93b093ab1f881e7824403b1ab9438e3ea7ff0ca7cc417508557bf666e18836356fc1e6ca88b825a07762383093af51525986f33224778cf4bff9fe2d8e52f9c8f2baf5bda153a0eb544debcc9e6d1297182939710af9e8c409937642307e251f492f68a6079cbcb517cd1b5337e112e74bb9f3b73961ed911fbab6a3ffe4ce71423fbdb60341bf299618b581d3cd0d23332edc7de8c014c479a06e23feb9d26b19aec7b8c334d413f7c20a6229916a73682c94f0f624055fc4b94341add10e4cddb68cdba105741cdfb8f9adff8ac134a0834e1ec7c1a1d1b4047a2fa5f930f92cb33cff350da2c7c36e668a9bff1c1c26edee819faa4d55f3ffd7753289fee7a8628648683fd6206318c0d981d0235f1063d56ce5383bbcfbdc51ecd903836becf314a00816f6955b5b20cfeb4b6023c1ea54f2a4a311d620f5e9274517bd2beccc62ade5e5fac668f6aeaf57d965ff3a4c7dad7212824223a2979f094d747382e92b182aa16b8d64b136398e2ed46c9effcf221b48bd2ac609e4589c8e40c908fd18b8ed043fe6fdb42cc7d343ee9f2d72df7492fb4fb2e08052e07946cebbddba67e2a5a57e2e88fa047383ed93b86efcff62ce8a30de15a12ae4c95f0355bbebb75e124ec5c46377ddf4ddeb0f8e1fb1fcb25004639e600305d41f6b03c9bd1c8805b52dba72c011f4ddeac91cd8e39dedb260b51490b5be7b3232e7d437b660d1afc5097959f44c7979d83c932f192a11ae82fac04ff036e95a3c19e1e9cfe072e7995d954dd9a5a6e2774e134f8c0bbaf5d68005fe27306ad1071ddd233c134aa6a8e2f16f3961c5865048c9dffc582ad74f4c0c38a47691c9400fdcefedcc054f224f8ab79eaf329a3f6b205d0009cc94a39d23350880da25035bb99807871808f3add3152dbf73ef1c0ef2b4599037d4d6b3ca6451c16554c78ec802fbc15901e17c9f6131961168d41e61f259388a10dd1b0a714c5c8d8c4c712417ba623d99a34217f240aef39dc1f59dbd4b3b80115c5e14f1ebd20703929517cf0a99cab5684d341cffd900285adca770bafe31487fe2846ad8711c86e148b80bebee086a937b87fed773a113be53a7695ada22983e748b5147509b961ddf6a359e90734189334b0b633f9a86137e2c5c836c6e6d54130d90998937eee51cbdd52382c427e84f0670779a85101f5d8ab2dd7e390b2fbde19e1ef2a2b4324e013eb2a5d5b53018e6e7804ce129806da9ecf498954fdf5649a4b85a64199cfc75f9285dcaba796bf78c7ea7a40291352019905d2480b6c756dc86244583faca0ff7f8f1bf1c474f5568542ef1df8b5583202aeb4c4321c6a3ce51ccf90137d4759117d4c4165f2dc10de0b43cad92a7bd1dd3fd1490efb0124ed69f302f426652619f0944f44891e3bd6671add2f57a5d7e0022f6764d3eb08d1c26f2515809e88ec260786f593368254beda0f28fb169056bab145a5d1181e7067e8d5f46bf5f0584a2a41d01b20cc327c7ae5c9a2ced1a9fc9b004b448c41f7202ab06a76ee4273a62f89f807352912c2a8b18df72f27198664f4c9fa178b654580b1d66eae35226d4f2a94ade06e9758c0cf80d20853331bca13271b7d7829b52bfde87d0a4f94b62b3a50960dad82ccfb8dd1ce76e9e7c195266a28d41ececedd9bd1db021d9157c7994a8788441e8c3e1b1eee74a7e4ed75db570abe2a80c9f989132ea9079290504203020e8f8727620d3e666e1c0fe4b8ddee79e62208e1a4303cc2ce6ac1f3dd6b29cf89c5f3870e12d20c258f6985dd52701cb096100093865e1633dc9eda3d3905341d9d3dc742d06eeeec9f65e3d1326b767bb3cf824b87405c76a7519ebbaadbb99ffc6192d4fe92a514340164977f5314df581df49fcb6d7895d144d78689868326c4e3f75ebc1e05dc385baa4ff2925ec479ec1a5648277ad189da82b41756717743a20102b70157e9ea6dcd9ba8985cba63111e901a250b2cfbc4de0aa79021fad979614d6749835a925041d6f634be44e7804798a17e1ef372aaa2671d5e0173a8f6f5b5be6983dd94810f923e0343527b2fa6f0284555ebe059641b5ed3171bd2589c778b38d0458002666d61fdc4b6b21e791914022e762670c3412c8de46e9e7d89a30d9185f5742b83a178d33e82927f3355287fa071925ba0c7b1464970440687c053221ab68995968bb0960f9332a6051038889b5494bb70ca79009a0d8c10cc029dbe1524659e110104c42b1ac6c733e5f6eb920328f084e37fd1f4243ca591212e93974e751067635946757686ed50d2561d4cfc5574eff9a28f0b0b103c47051870ea9ea16c8f83ecfa99562310ac4de2653c54fe681f03097320e58e7a86881053894306a707953e99afbb4d2eed0c9acb6062a58b506d263ba23d7b8601c295c70f1a8b74f41378a0bcc9dc928543510ee6b580b233fb0882a2bc2c9454e28bdc49d5d7892e439890b4279042174aa6b113e7d34a8ba96cadf120a457b00360dea2a60f7801876db6ee0379720c603e72a54d05a2f095a99849cff1f28a7b9076d9599091274f5381fc62f65f18282492ebe2719602b6acb2a433311176c626755f9027e028c5a4211cab8b352ee25ec43683e2029dd62f47fefd5ae4a60dde0c72250ae33021632a447c74aa2a470b43509fe06ebe2f1653a17fb77bf6e53a5c11681f89511535109f0a27e6c0644b42475912131479d85f619f730ed503e5c0776122bd13a077ec3531cc3048efb5301a791916f470fb54885d1d79759f4ae1d2ae259f02b3d490b7eadfeb754423e2da50d25b79df695d19ce39b33aa2f1f726918db087f803a954768b845513e40f481dfd2f998254d52d275be0d4c2e18dd2ed7a925fc155da0604b981814e769614fc3e5dde45fadb7c159c8b1224b7c1a8ce514f9b10f1b848221edaa11f85fb6f8a4c0f1b5a7d7667e414812490ea59fb8c5350d4f42646077f391fc4576079a7788d44f4c325a7789cdfa516326d323540b0ace8db4038901f1b60bf2dd3988b91e9ce3424e806ed9f6d6e5b9ce071d105532da0a91f5b022eeac0f9fa9a4ba33a5f9db2468c382ca8215443dd2555b08b64530a8a0f2787944c464ca13bc6aa1db5ff40d33ee6c41dc94f5d6b7b763c46680d3633a4d35937d00464fe6a386e3e6a9abf1af371267ea80ebdc12fd5d1857a552cd673a286c2dd43bf7b488da22476967052d37d1cd4ef9c77f639f9535632956d289079fb10e1d75eb4eff91a58063433375fca0d763ff29223df67550f4c2d1ff45a82e3ffaefa6dcad79d3dd0c28c7ce24406d30a77eedd8bec3bbb117311cbbdb4d200fa807b62ab4f07f64e60ff070a26226df2032baaa67ee7e64e200378cd3c9da63919bc40c4a8d1bce4cc13be13cbfbe5fb64890c85f40570c22b279cb6b7ee22bdfc0bc8330b63a407f04f446c7ddf39ee00de13db689f90ca0b8f67c413a88e3822aa2439dafd1a57f17068cf7870d5c45fbaf9840be3ba1d70428f7b38aeaa362d28f01e9a3f78bc851454c25efee22f8ca5fe40a45163962cff3d9ad727d6bb111d5244b6c783fb83ea2f5511559e8ed1f6e3ba5614d7206216124d500e20d08cb9336b5649f38a9b3332c438ddf061c7782ae4b6e3ca8590937ce698572c5b74c989d4093660064fc4017add6074d77df10ebc3580a35d6f094100082bcb8daee032362a0a68755b2b376067445e902bd5062696c8551dee386b7caf69a1b52d2a52d31d5c429824b52a81b037b886d6e9255a6d49fa2fa1f252debe7ef76b67a1a6c5272fc17919b734d043e910116798ff447831cdd1300edb821365cd6a2c3cbd6a219fd15a300362e7e728880511c1de0d33f317a9d4ce3052c3ac71e9fb1ba4ba287972760f3c6e2fc8fa46602a4aa63ca1aacf2ae4efd1d7582103c4816ec5e00f59d4e074025ed89cd2074f17600746d4660b59527d69c7fba506da946aaf7e7c9f973a55b635caa529b696459c7e55c30694380cb13ba6ea74a42889de70a1b9990f6773b1f511413146487a8d045281096fa0f9b8def63ef84cc9e5d139fd8e4a1a0c913743cf8f2869b4619038c8284b1d0291e45388dc7709d9d8b3da4d30278928504d142d3168d410c5f33a669fc02d0dce688b3ff85d13883f2b779cfd0bf2ba9476e7325c6ae32a4f033968bb7eb55ea8d9d295aed8de7ef355fb8cd1e2efc60415cd5bff343cc151474ba084bb60767170a2341c2f3c5fd90a63b43b5ba1fd49b377a1e578686924e1d47e05a5f9e45bf96fed881c9cec7ab3850ef233543a800649f364da1808a8461001e471bf101d34c98d123fc84d015265c1a2e90c27b589300055b6508fd7b8eb8975922d89f700f939506a0abb4c753ea5a03d04d265d4ae7acfa565de3f387a1b6e2f6053b4b1d7a1d4a5ac00ff1b8aa885547e090edc5ceb505533b11f5a861b3688764e6fbee3a1d0866ab7c746ceda83a575874564123f0d8ede8efb30a18816bc8eb17b76f794efb928d88d2f000e0175cc05d3dd8010a767b02a0b741a2b773e7cae0a918009cc83186d0eaae34b76750702ea8bf9042d67b2ef14249c3bba217bc442b3c776da41e6a840c1283a07d8ca3df737090bb805895542d110538c800ca4ce6d984d66d2fc25444a90f120470f852caaf0f86f0308342c3010e6a38e8af5463d0a2bff3f0c6114d14d97f5ec4152cddc033865009c7b413bf0b274e49fae47a46b408b18f06f3121c1297fff4227ecb4d425da945ab957ba39ea3a7faa156aec6376d394e25e825ed5eaf520e5be514a1645539efcd07fe9528780a6b8722a6bac8c4e87d6a71abfb98e2588a2cd687e89c7422fe687870873b4d36c4d21a52cce72e57b11901c3905b96b6fc44b07b1ce68f9754e595a10029e55fc70b884e205fd7276b5070447c0a4f8f4ab15ab27edd5e9d69c97c9f2abfa2fa75176fa2baeed7350125741aee4b90105e1daf3cf8b494e9b88659eb88069d7be2f5ed3602a8ea6fa79b3ba647735be8e756971b08152df6d15ee98ef6c92b11f672d7bf19218b27fa924f6d3b45a5373d15f05f5c3ddc0c68cfa25de3a17d6263abed93ce3d62f574fb80a7cb6fa0194bdd931d87cbe2f8b9d5eb5dfa295618bf67e82e92a6f4e48224f4a018378b351fb9af2fee2069ea8304c2ef05e39369e33feb9b131319f0a0db1b02fd534ce53fe7e313b144d8dadcdf6426350a8dcf91d939b7278f337429d7e617a8f5e16c7bcee4f8ca0604d4d6bef41eceb5c5768fec598528cc2bc09138d8878e646fdfa35b755af0a65fdc246972bc82c71597a6dab8ae9ae0b8cea852a2842dc32be01b6f261dd13cbf7a4856d5a32b02d15280a1ac8ed038327c67c86249bda2a9c5ea9ff5e3b8ac57a8e9fcded06e7ec67d05d18fd21274a8ef6fc579ab676f7f867b2054c9affeaf20dfb950f5ef832c4965389282d9807a46a2da619231e1b6ea6e2b59c03d7d3d3dada16c7e03b47ee683fa7562aba6086b6a66810db914123870ca823612ed9c57fd96133f3dfc784c2213edbce5ce2923b3bb9b9d1024b3baacc2a4f91ad7beb8d7d4cd6b349826533f0a22fb12f928a3cfcba4c3cb25d2b8c03fac878bc0ed026ef689df6f82868649666ebb33896aa550218669cf1c14cf25d14934f6becad2bc3d909cefc631cfe4544b3753835fb225dce9670fb4acd0c867000f4fb3baf140fe7e0d9b331959b5272503871740b545e31f3b22010c3992538b7df9626bfa50eac1fcb8a5c6e2be753d9f69b4a1381d3005325f36c86a678952d350ba738e2d990b0c66be8559615bcc2de39701389eb0baa7cea127b212e1e3812e329f5e5b9fec1e273503e49a15f752c3b85c36467024a1c323832f5eee1e029bbbe078ec77ab7bc4d32a1ec580820f3cf2eec7db34a58c38ec1076e8fcf531e71e31e0ebd3e69a8c2778f9cdb327afd9334422d31d0c78b7d35d92ea209866dd830c6636f0c6663b2c54d0b31daf2abc98e5ca5010e0d8e4c27d80062865e4e6d848024f0116b8ec64fe1d1db283ac4bfecdce7bbe371c40e142e48880fe2ce39f349827192e30d67205b6d332c9fdfdd6ba34d46b785907470f58900b4275ef4b00b4e047443b543520a2d0bb7698750db1830bccfb13463f2f9e400bf8743625eace58681c98d3ca8281f74f57a2784b05311d06434791de46dc79a37b2e7a1ff209e4dfc7ee09e4f89064a321316cc2e3af26cf4f3b7ef0be3b366c0f548024656d02664996bc4cd9d402d57f9c930dfc5e34ecb144ca7888c6e080a8c06b63709db8a1fde97b59981f001be595e4d2ef1141324eb8cf92c929bf4a88262a52f9cc1acec19fba803ee928f7a062a465bc3ca68e8964f589e5377889c320c0a94191de9d0bbe603c73740a1c7925241d8dcdbf33af74e20d2358df9f680310c3cd7211cc0729a24638402eec242ec116d5a0d4895ea7fb3a1a8f65d05c57c20479741ed1377442d18d7e38105278faad3d3dd56974907f3cd10d850857860d86150eed006e77191c1816c90ad3895d35b46616b6636ac73740fc6b8705bd02640d7e2f9d368e77ab4aec027f405099f56ab759292c7c2813a83698314461993424dbfbe9408e366a41c8f43b80409e02c3078e309a799fc114da2739b250aea41c2110a8a487067f72d1d9510bf49ed0c22fbccb4d22e0802192a591af660fc9ea0f52e656e8d9e6c04f8daf0faaaaf1eebf97b5ac641223f7ccca43f45581c5b528d90d00e4b4eccfb038630761e922fef5fcd3dbd02f88eb4da254f9e5e7430d73052842c696c42f904f30e46e8c77222843e853207fe902ea75147f903bee1f133e9857a6e4a2f6702fe6b698c528e64b11b2853e47e6d4a982706e51ccc9e7c0e7fc4112d4e546abf10eba4e3dce2a2356aa94c46cd8c1fd7a62f4a89af221c3a761dbc7da68b41d9cc18860674ddb20d207bb499b0601026b1e20e414f65786181ff1c50a73967ff18ba2160d15b0aae60e3792aab07c200cc548fc04cd118080f4e7b0f0a75a586d577b2ea1e1e2934750abd96b7c0419f7edca0f867253ab3bd67c76ffb986093dcd1c74aab6acf83fc19461beb292b4a54030b8c161838881fdcc3c9a079834b3e7a120bbf3fd9c74df5ed1c13a999cd7cb3f8827cd10243d789a5bce9b8eb76a849868ce67479e915f71e15cfaf43ac1f5e378ccd85f892ff589658784a117fa0cd05cec1cc71c6779f19d3e884d35934f44b66cb65c1c931d801c2d561bbc2df0ffcf8ae6c187ad295194fdac68dbec6aae85b92f37f07e1e7d2cb9fca548cff2594f9985cab24410636a023e51028c417e4a5796ed43d0926f1c18a3cb6ac008b5d18f415c20c65763f35828a5dbe0cfabbd2f280808e11514c9f7b844e78ac288f1d053ba0c558e7c2e301d2031efcb0a6aabc37e0f5f0154a9d26e2466ed8a0accb61b656cf52b2d480761c5e4331a8238a7b98a7ab898beb6649769e34cc7f42282dd321c97213a763429b237ce1c45f1b14ce92c8a53a3f48bd794cf44cfc7e13ee52e538fbbc4528ece08936b79871c3fcdc2bcdcb1f5407a2d821116ec824f7900177c88acaa4f0ee8caf4a867d108cfb2f28098db20737d4697ad2ffaafce1b3ddb3807e6443abbaf802bf87d29d10f47740cea9f73d2c3e1d27ae2e1b5b7e864f2bc9e81e13817fc1743c44c8f40a1e451235eee1678cd66b6d070e3540191e84373213bb9088b4cc32910412ac7bc1883343382d313bad1d46fb6f41fcd6d93d4435e198456bfd03b27f4ea1d2812ccf4300cffb10038ee2ed1b450ee13c96d004baf8162e8e958d16fe5f37c284fa31359b2625eeff784130e00d6ada370682319c7469e678b10c1bb3ce4cf97939d6189b53bcc2dab98ef824c286b672451d1fb0691586c219663b178ccf3eaffbed9eee75fa25f4c2148aaec211b56e9d9ef833c804812a4f4e9fce1c8133a99cfd786d87dbd689ff1820e17223873d97a60e44206b73281ade888f3f83aa4c0594d90eca5b5290ea538754c35b30da4fd673030006bf866b209626881f6f0553ef0937af4442422946992819fbcc9c3b10e676b704652be31fe321307c404cd83f1b137e0b6c552a0ed45087570455494455a62576988bec0acf771ee4c0024afc355d5603a3e7528fe592963acff6b7263ea58df0db28e4d1c217741a0cf79a0d1dc34b1332a5136ca0d5ae03c5c001971192cdd87989740443ebdca74dc1d510755e408d7361fba2c8217fa35e9f298d634f699a1f807a6106ae2db1723a196f556a40a0ec4d7a659eec38169598f7f5ee5c75022c7ad0433b780184284faf1a669bc4e28489926028cb33d313ccfaeb52bf9cdcb2ac181bb38dc107390da37a7779941f676b1debbf5c1dc226bd722c2709a1063b0f532ff89665e465bc3e7b3ca2b9754b655e3735ce511688b9e6e477572586aa4fe40a24b8cd06f1b5627ef48dc9122ccb0e5d497853be9f84617e7a372c6789bca55028fb347e8020fd8ae873bb6b072defa57d2c688e061e7155f09a622fbbba9c6b7a28c7bd58b44fb40de29844c6a702158d54dbd2110dccc53882e9b06eb6188f97d0b3aead242b92e938bca6310ce720ae0c8095e6c66aac9785e637bdc90624c20d30fbe05d82e3616853974da9588cf5f8f83b3927adbefb681b63a69b52629324dad129b91aa11350118cd38d0b66d6c5ba6b021fc152d96a158598a28d22150f9a2b628070889d6f30687039590d6bc3910ebe19e29fa7497808bb3e5725517c526e7a68b9a3cc2b51a1ede49cc23326228ff26a3c4c91d8163b8f363678c183a50a7b3378ce024448c63b65f82636e1f5a29fd7fc60d326e9cd02d2258d2115393918db1061c878a06657cd13d8df1161d24236aa4c4f5992fca006305d8227bb80a776a8bb293c7e82b10e329f128fcc6909230b052b1f82fabd2e82f9d28001605efa9d3bbac0d09bab1825f01eb817f4f84bae195c6a58fe015617b5207076b11b426c13190a9a009f7ce00a9cca305e26ba3d1565a650e2ee667dbcd1bed7c92b128cee65a466720d7fd139e2ae0febba62a9e7a3e66ef59fbc69f2a9ba212fa1f335a2c344e6873785af4f1e870bfc0358eb770d3a96d19044ddd3f1ba3cc46916e3b23eec41c5dee690767039ceff8cbf88cc17f42df8460222fd522df8455904bd746503d3c1d5743b87c38f34c8b4a4d9bf847bf67916e783a18a5f17417abe90e37726b08d1401dee4bb805ead04af134802416999ff8eaeb58b0330f0a85c1de4ade37e2f7cd4850448e44c84f7dd3dc7a243205ba9dcb4db6ec5696e4e60ca3bc9d9b4037a2c2da0293b9dfd9a0e93e3c69031fc0e459bc5d6477ea43728f8c24ba8895ed23dfad3b2a2951044d38af9a8843c00f256024978ccf89ac6689643c91449918914358e669303787c1a4b10dd866b75d15ccae4564779187c816a767e9e6610d2890a02a7240e4b38185b9a5ae296ba516278372edf65f7985c3b2b5c4d5f37d77a7c187a0354c265b5a630f8e8fe58426617d2adf84a636de526c94afa3a3d6ce26acd0e36c37db688b1f6c55987bdb96f5fe6a407fc47a3d3bd19a8319bb447ca14dd8b9809ce5a290f8367c075013eee5c008d1d300297455b07c86a7faa5263426344f529f8386d1bf60e1d5c91f01f00096879b57094a07b72a6b305c9f8523aad6c9de73e805326e09c54b3c0da928ee71ebabf441a70583941aabb669553b9f47efa786b576b8f9b92a993ffa2f27eccaaf2ab71e25146823d2f18a1e8806f6a53556c2f34f5347c56a85c7ef80ff2a63eda240322ec86e3008b84942e4c0701236692ad91c266a82d446008a6f4e44bb0caf2ca1a9615928f016a6b57eeb65c4b01e2c0152169b83348513cb381d18b7c9a64b133d0131d93d3060ac1130656f1eb7a7c4a50023166c9d3242ddff0c07cb2be81c92dfcff8809df6e4258949cc4258165f66611a1ee01b7c5935c9076e028da1196fe9e70cbc54db1faf4308024f47ceae522ca30947d576ab93530cb78f2c4840d38d6599f57990bcdff2e7e632c616376479ac13e2900d41dfc7f0d35f529a612150c6212dc95e5ae618fd3c1d32fcf4af21e6d1be77e566217d977feb8d02ed0a933c6fd0042485948513f87c9af4b7dfe0b31838ab97edaa8f321a0c6b4e0c5ff7b6e36f44e7bc8125760e0314afc279914f0e4b21d9e67dd3df91b61fe8134ae368b8608042c8c9676b030c71751565fe7c281afb138dbc054fa44060b0d115833ba63a111071651fe3d05f9975ef8506c065e744ccb5d4f834ba08325753ebedb56ed6c2972a9666055d200ab9db8580e3fe1dc28b4188bee16506fa4cf7a17c040754025a5a8a24121ac444cece591afaf8317bf3c71494d82c922a795df8ce73a5cb7e7c4277ca8cea2f231e5ce9ad01aa7aae37a22481e1073680f9eed76ca8d05b87e5cd8c73f4d0d651c3b5b6aa1d0a2ea28f6e23ecda8f969eee40d449cbeaa8dc53808d940ef75dae7f0e22ab6f70cfca28d6d735ca2d21696812a410bf7619b62b27704c833f1b22ce36d49249c490ea65ae828bb33cd83a10ed1f0a68cae1cb0723ccfc68fd333e5e09f5cf5dff9596be94437b1c3254a93c2390f0b6d27323f75995e2f073f0de5ab04431f7c5adf71f9295e6b9ba63448790fd86f85010ed2b209da8a2d64fb665bc361b442206f4e6074c5df578c140b3ea6d25af58dc5ba5a96d454749c2828883800fc19bc90d1312018837c5298183be743f42c1dd840dea70439158eb0e3e88fdf9c2202c233fe31213e821793da714e19a31a8976ac46aad4ee2afa162f7174616b05ea4abb5dfc396370902b5e20aa0d3a45120d0cdeb427c6f75ae361473ffb9d61d0139ad36e6e48a150c2f719a9a0a6ee87018422244c8f51fdf37e54d0513c6f9834e639da00aa0bc8a2c472137df60a2b39581057ebf25da810875913434b9f58571d140f6cab2a1cf4df09778cd6d1d301f18fc4ebc14c872088c2cf1ff2d4a2b3da91993762d7ada3d13fab61b78e5ebaf8bf21c480519a1f339ad791aab91b1c3da391b9f63e5e660d05dde398bab430c41ce99bf88e121c11c2b6bfcd7c4740f5ae9992d484ae6ac54d7f0b4126ae853d5d4494ee6d0530a9cb3c0f95b5c03186c52a1726f87b5370e1bc2403183aca35fe3cfc80e6b007177ea2bd30b1df758efef21d22af1ef083b471afcc6ef9ba4b16520056981262d0abda2bc24d00fc1a51f675adc123dc424645c4315a032deee7829f5eaec5bcd3fd88dfddf1a7ea37df57068c90c19c11d789f4cc5f7ff6b7201c00cacff06f1ffa6fa81e25d0073d2dce40911c53994ee0ecc77d400cc81b48329c677af20b2b0b79f47ae39149ac0cd3d4ebfe12586024581719b979f2cde8ee658beb53391ada394f3714ea1c04de38cedee9530d7b358b5d2c6ac2bb0d1729f18e940ad8ceecf0c328ed90edd5f68f2cb1657b531af2c1d713f1732540075a29ebadd60b7c4aa65c37c1efddb362be6fc2ca174ea50bc0d0b2a9ba527bc2fd846a69a111b911d49b1dc764168d23ce77f3e0948049fb407fe368c383cda7f2f0d4480a222456dff448e6a105a8c0cc113d3e54b6dda9f758da42a79ef66b392277f04c4cf232adc6ad64b2d05d9a1483f6aee3aed16bc273a533a8acd11be23c7efb24c65b6f30330e8e9a0b8ad3fe8f6122ef8bfdfab43c7c9543dc2045c5c819ff325ff574bf42afb0ff60b72b089860372de3367dd50ec279f6c5a1ba87bb999324e70bdec13b8f48e609fdfcfe0c7dcecc8be4209fbe5e804851e04d32a6e08c912ced776aaac40330011d2389e4d274b8b40561e8a20617ccd4aa0fabdea07c2f76db1428932068a094c8c1fb4885d29c73a06ae2d2c8354710da43413d8367a4e2615e6ff1bbf163ae47d0ad3a05fa37d457ae20a8c4f2a1f57384a4366570e95f241e6534ffc34bc52f0c40f86c8b1e481cc87dc54c403c1671a0a2f4c1c261f0d73e66e3125737e4a02f266afae9482d8c2c327b3c39e96d5727facf13aa9abf6ab868a8c1e1f597a27f89f446a3e72f7147bc7c080133509b2ff35dd3797691b42359ab3d1ee59b636b563697854497bbfddc7021b295d5c8507eda4f54d76e05c0aa6cfce8c7ba6852be8a4855ccd6c68e10e17380eb477400154b98ce0aab3ad921d442663cd4fac609672a0169420aab3338abbcf22c5095b2f65673281ae500a4369d1b6ff34d4037a0a57a6e22662b372bcf70b4606a37009493e0814783b377aa95ee32869c0c368683f3c82b84ded2c0a902966877094ebde7d241cca4a70a60b6d9a737df2549989afe3e06d583419cb04df4d04d0980c8eea9dc4b3507aae40949855463a99ebe317689fe31f08b4ccc03f01d76325f089223fb9940440df446981ad8776e37b1982c7f668d88d2744dccc25965a0c1dd7c1e185ae2d229f93a09f467cd10bbbadb63752057727c720369bd6a2a20982444f835db102d4a7db2940174fff039f42c4162caa534bbfdd3721be7df0b103a4b55aaed01aa59df16bc6887be858e92ec7b33e832e52c5955a4ea04f191246d0628be7a62e0e7f93e75651c317756af6eefc7958053d277218342ef35402b263c5b4fd78ab37c1d884eb84ad7f383ba3f2ebf54b38d16424490b402925e6a691d1299c5c073677d5d0466ce59c472a7043fff221c39f5e91865dc52bc91bc9f55a09c5eba1ac8daed1f2e70359f0302037d364efe3edca3528ceb997e97fb0dd2b3baefa17e89ecd7df40fc60e8ff05dbb2ea888c64e6f029271e3c119f54a894df5e40717bdad52dc00f67aaf1088dc7bdf22e98e2ede913287d402f2b7f9d81b5a3832f8475b9884182e465975a467cdd00d1b2c493158689c7e4add3c9c8accaeb89130d1eb7070b34064decebe7119598640c3a7941fab2268f28c70d58447c681961144bd685e504c0b757abc1ccd4e0eaa6a4d169cb2790956410237e74bf6bba9ca623dcaa21cf086b8af8039ec1ab2b11b389788b0556c238a2040c2b040006603f49d609de01c9a7e0aebe395da0f24e7359f7613447b46c1c4d0ccc1f36a29a878ef53c7b59ea53f2a177f59d3553ce4387553048653cdce9f0c0ff9f268b32753a2697f25397e8b2f6752705c7d738ba8a69ae8fa6df84a448d236b24ef0b316e70ced12925d285627fb04c7caac114c140af3ee68b019c2316219a38f155ab6d0c388b0cb7bb0f29e7c6813251a6e99625cbb08f9250542f7603b55018f4a79fc4e44000547d008b74cb8cdcce5bad882e150362af5ca216064fdf8c034fd064006d4da5db052417740fa20031b2edaa89099f223eb200f8806a9819eecec8cd774d0e55445e387da57e14c2bb50c59054b756ec389a2058211c37d690d6a51aa99ce001ee575583500cd8d719ac0a9df3b381ca88971cbce00bb79b2de10e47d5d687fb7fdf876e0631f4c1af86c607483d189b6f9321dbc8c0e0c149ab34b01152140641c207135d80ac60b2c6fa47e5e4f3ac74570f297bfcbdf2b84cea792040f47c4767d15cf9fba060912dff0096e665a4865ac83e6123f28b33cbc31e9282ae75293c362c899b9bd970650991dd5a1a4414a5d60572a3ab82d7504abefd300503223569d4fc02a51cf6be0b443e1a3a3ba51322fe70f18007d0dbbfa0c898f8476e22de490e014048aa9a29f98ed34e7c953b10a24840bf89cd3a54c0686f2b31eb342a74d2fb0a76de4af8ee479618f7665307ab429fbcdc7c823a5a4ad54deb8098d6dfe395845827aded1882a8ee3ba349b1513cc08e3b4479f250ed81f4c96d5eb246ec334ff996a15615636da75f91ceb36728be70545c953a39342c94d1ca49bdd1b6ce082151a0838458201f3a0f884ff58c1c13a34cda5574282f9c1e1ba403d835011ad4bb659b8d8b23f85a94cdca6e36bb2e031646f38a52708d8833e8d2dbb6274bde6ae53b4c63553a3e5990ec70ca6dcdccb2395662db4ea87d482e1444ace44a649b79255b8d65571de559c7b5363ba246a1e8140213801600047c44b7a790d967013e32194ff7fbed9349ed59e3c4c013dde7046aa4ca625af3c9b96d0b68b9693fe26ac96232147bc8506e035de89ff9968f50ea7a0181b8689b949fba6b64ac1eefda1739490f257c6072b414828ca3c0a871862f275777f7ba5781741ea5da2fbe02e05181a6e90d7f9ba0134148610580b51d7edc805c4503f2bb41cf6588108a39942d356f2f58313333fbcdb6257c93d0e7d8457910d91ba75e8ec1d6024ffe31909e91bcf2829f7e13eacb0e5569af789fd6cda0146e72ff21123ee8473c7589b0e0960aa96a78d3e88b2d09050552986ccd29ea338489165fe09ff2eef0514a7922fac6d4ea521cc2ba5961078db0e0e07a9254c2bd4ae1dab159d9863d5d030d26019f09f0e2bbba292ff031521efbc571543f9c67672e079601b691072838e3160aa822645206044f4001350bf48ea358269effbf507d9e00df202f47fb1556aace4291ceea2a4ce9713a01f80acf9957385f54de2266f086f907b0d81e9b70e7ec732fe05e5a8168505c8e08602b49b05f905902f4dc29bdf30b79dceffc39eb4afa263433d989eb5475c6c7ad855e19dc13e3010c2e91863983baa45aaec1b3194d00949a949bd97f4e9415f118aab0359bbddcfbb0fa74ac348f4a0e9ec58033819c513600630c3e43416f8b6081db06680a82e798011a23f4538211204f948194e2ecb96e5e94bb2df790e40cdd45b6fc836d44fb35d3c5924756bec4ab81b04789fe9e46ad08e772575328e78a80857fd54d16476f00830023db323c45454e3f8f93f1c27211fc874a9c5c489d9b97ed4ac62df3920ac0d71b527d55609e8433931e76d5df7942d08b78e88435db45ead447beca4598766723e59654702206f45a0ea0e92c95afe26be5aaa89f66279f8a6f44877cc1cadf32b68c93d90e8651f333af62142597f3f183cc54ed2d45deb596767cba661e885117fc0e66405340152d5335cbcb39b6c976dff1c2bc7ec3d6b2b1f95b384360f14dbac9ad6ec1586f357505fb40a6cc2e79bdc804769b3c00037609e9e16e938bba9cc803a0ce354eedee782b6a791cc687576f130fe79698657acea31534f898076521674ac90a7590db285c2270126f152d9198a89e86020fc8012d2c36675804a488cdfcf3beb40ad766a92a1ef3645cd13eacd5ee9a6c255853687cec4b93227f2005c45422cf77009f644d26e5eee5f1b87ce19a701164f123e51798179fff6063d8e06d68bc9ce2253c92a2a00f27c94149be924202a9507ed2016c79d0d13d822990c8acabee830c2b6e2c2634cd93f19838faf2140e2497036ad79a8f592094324a8b014702ea8367db1e099e53309fdc94be619be1b37580de778e8d586bfc666d2b302b5b821272c8a80e264f8031403c1556c1b6c714c9effa5f7e2c2f878a8259aa8f6ddbb86cb58ff68d646b442491c8eeeeee1d1f09c9084d0835320e674e6d736b1f0e1837f7a5744e3068a23042686fb80645aca104c7ed5a457cd950073cb76b157106d60186dbb58a280343551146970a457cb1211146b58a202aa2ca2ea2e2ee0d25c4451dc24a658e61842600180008519b4dcecd0a55b66c781bb35dab0a147b4315591db8204649cdc13e40274804aa2451bb7c8cba020dc47842d4860aa480828623862012838807667471842cb42384710211de6e55a9f2bc5dab8a0baae090c4b5d0877390be4a1c5771e570e6ab9e726a1824698010c220ba09a1c4d9467bb7e36d52ca984326269b360ba654a981094c30025b2540139c81027c19e1b181291728d81a412ad8160de10b8ad706a64dc800d3247ea8026f80ad149804ae37784bc0261720810738dcc00313bc24606cbb16116b207106104488d104d7ed5a447021c2c8593c656fa836b226a8e0ca22ca4d820e168b238c082ba84b2ea31ca8d111b689184ca3a36a6faaec20b544a12d88585c99f6e68715b8005a6c339c45515c396bdb78c1bbc9b9e9918385505c394b860aacd5c22222ca71662d46cded5a4408eded44a614402c1866bbd6931de010d86ed77a82825706c64a7847b864042938dbf2048e81820598b45dcb890f6e8ec033dbb59cd86005f8b45dcbc90a6e58548e7ae4fc7854a69c0a158be5762d2a52f686221ae2b6aa70d949e07631f79e624c1106e212246919bc18bc6cac31ea2071e534a453c69c08e11d54398743278410423ab38bd6a2504f61436d08218432a718130c2e91b4ec62322402b0719f730e2679d0767a52231e087bc09a135731469b3df8977da63c09e661e68dd42a2cdf75d5b0af46e79e0452d83e93c678ab8a2b47759872c6c80258735e1659407580970fd7d9c02867b5d7bd37bb9e346912b32cd36cd194b704ca13bab48c94b947867b67381cec987e53de1a53acc02412a944b17c5d31eceb2a65256dc7be2471f6646abf7de4bd419f9d53e0c624c61846164d81814b110c636d671e5753e4e951f4e34df1293aa00f3aefa6783ce0eba75ce1b91264d2a2298a8ae0b13ae50ad51b5c82a7dea0d0942b269329066a5c8e5201ceb9b989c962b41df99847796fe6b7ba5d519c6e8537e5f1c83642712ac0ef5fbc40157c477005df0aaf0cc7037e09143ac3ed80fbd258983bea4786db014f732063c3df53865d96898538b24cc16e76b3c49001f7f2d6d1ebba17bd464baa11ea06cbcf0942a717fc4206a00f7829ddb8179661c800ec31ded5bb696d9118e38c31fe852231461aefd5a8e7648aa74c0286f1c1d885834d5ceb0720f67b9049ce0e84f811031afbddf7de7b515af6fd5d81535cefb5a800b1df3b824ade1d91bbe28e84a61cb1dff332258a7d2fef316de75eda0e06847db9b1af5b6de7b2afda8e95750743581c097d2c60cfdb33f61c8288890fb02316d12862110110e38fbdfdd816eb40083b1e25e5063bfe5298b0e3554357ecf89bd81a5263c737768c5f70937ddfb586dcf8391bdbe0426f79eb460e5a5bcad725b47220036ad9c870004401b6c441d1966fe0cd6e9cf84e35363a9e0d7bebf1434a97654be9be3837b63c416e2983d852ca2259842d2f6f31eaaa9b31b67c8e4e109e1bacb1e55f280265cbc31003952d3f43103f10124289255e98dc208d264fc878228496285086a62cd9d2b5a258b17530c2b865031b6c786857f88166b17c58004030c1e28cc9ed7d3d110c68a8871e3b50fd3dcd299e5a9f2212bfb0e8efd3de83f20f52201e6a3cf64fbe7becb6e6548a02b5524a0f74bddeb11c4b5e521ae980755ea09340f0d863061aea81c73450bc8babb963114b29f61762a042580c2f1459026bd5a8b89234e7c01c04b5e1178c52624fafe47a952fd82abdc0471939168493e8527a43af8a38d7e94f2b66ef7df70993199c0a4e6699ce8131eb601986b8a2bf6c8565e0cd1dfd401ff4296c286c7a4929a64fc1a9304f8f8253a168cbb540104bde0c9cdfedca00fb396d15b0dfe119f8efaadfe8449cf9771ea3fb1e931da16bc2e4fdf1f01e133743168990e2c19e2212bfb0aee7886360f7701c97a21e3a11d862bfa32c3a725a4090b13767e54a91d10c60c4e7a8847e2a09d22a007fb2aada49e5e3ea09cdf02758508497168e01f16e257fc800f87a797cdd64a578e8631aac544f4c8375c143332e0a1fabc430ad823771257fe5202fc4957ccd120dd573da8372e8112d60c959f11bcc8f2537acf82d8632207ed3b683022f10d23ef2e0df7d4c307b9a8be42596157f652536e4b0a2965f625956f3c495846608c11083544928d79d4604b22efd9cb892b759155739c334b011e803069c637ec18fdedea5a84e5120fe3a11087f69a0a11e7b78a0ebf15a7a171ccb1ec9ce3c8f7dfcc27215862c5f237d0c1186b892b75915bfc0ef9248dac8f80de7084015bd8c375a77a548c4712e084fc4894735c14ca8fc4c02369de634d94d3a553ff320160a4ca7d1a9aa6766f4cf50adb3b2503ec03c71b539a3205095040c34340f941de640a69ffe60603e754f76f99e4ca7eab31ed3e34d7ae6d989cc3cd340433dd94d07a2f9cc8998e24f37cb291e1a9aa788c42facecf769475c70ac189e98db98691f4fcc67cc543273d36f94b963d1d03ce644b2cb682099678fd140433d32cf0e443ac1e454b53c31bfa619195246332393d9ca03939d0ad7dd0c0907f556f41b9ddb4473c7baba27fbcf0ccc1d0bee2bd7edb49d148f69e6fe473efbd53da6cfe89f7813965fd581a149d9f3b0b29cb29a477a811ff0e3c7a617664fc337eca7a5284022f5684f596d32fde019fd53bae94150db39d2c2dbf62e38d6cc6b86376cc733731d88cd548bf16477c1b1320d34640f249f9d484c8365d240f130d781a6f7c89b740abbe98ed593a200cd4d27427393061aea317de64031a7399199cb5c4603993e73c7aa19bb615f534e2139e28263c91cc90e761e99bbe058314f11895f58a69b7e0589abc7c3a6178f129aa7ea4f77ac981c237322a69f34d0e9a6cb68a0a19ed34d079279cc1d6b86e624638a39bad53df130afb9eeac8435120d721454d16fee4a8a02f2d97be4339db2772c177be253563b96ed824f51d4d22b76cbc7d32c88c2d317ee39fb4b035db7d7ad4e555b759c23b2b68b732ea6e0ba43f1032d4b58f76531ff5c43b8c18545837382882d7af8a95db06838e98015b58309d8b2fd9e9062c5116b08688c71c4ba328bd95571c5d011acc7430e5a708505f34d15d6a59352231398c00b0be61a1c5834c0f77470e74cc2872070294aa2d73420f13e50e3679146bdc9105467e865e84bf41abda53aa5b79b4d3a769fecfc72e42725bf295035bfc2349224199bbe6a404ecf4ecaf13a1147c6476598d3e4fa53767b26cbe4523ee5441c6731e91b6abbfdc6636f397bd2189a4d7f1a10bb8fbc376288ab79130f95ea506ff782a3e93139b57b3cd3b3dae7fafd33e3adb0bd1c4c84baa232a2f77af6f7ec6a9febf5d9efcb6a4c1228afe924fafa18e2e4c143a5fa51288ce73dedb149df8cf4d8f6a56f371b26ff91ee63b546fa8b326fb27833ef1771ec37f566a4c7be2fe9ed66d35bd2bd7633de0ad2cb7e519e9459b534e3f1a0afe67d892b4650f470e5ca95186c28740082d0949d6decf6588eb0106d2c4cae74c1f2a4cbb6b49a607eb3ec49bdbdabdf49da90bbada601c197b7f782f1ba401ff75987addee4b597f66f8abdbcd789d7473b0ddb3a6b9f0cf6fb7c48d76286607a835b7b8cdee026c968cd7eb3cf5aa97d48d76e9fcd1bdeb606fd5c7bb7ddde97bdd55fd26f3d768f6907556438e8e354b1d7df6f5917f91c181498a4a5de34bd653a09dcf7b24a49d23eeff6f2bec61ccbd74a407b249992f91562ff86d83ff97bb799d76fafcbf6f67d490382fd699f77ed246d48f6e4eb36a3b1b4184dc69a06c4de07d3dbdbda906c5bbdc970b59d4ccb2f4b525ee1f74d6e6aebb3af1a10fcfb9adf4f397b4c2e1d669ac78cbacdf53a1167b7df14a88281b929a7b0dfbbad3d98f7341830de0a15bbdcd87df7fe49fd604eba0ea353d8ebb17d7d8e47ba86358685f4faec287c9aece20aeb2d892ce5ed5501f2ee43d23e9fbdf6ec6f4a965d6a3b59972db3cd2b5c353695419fa04ec868449dc80181a440c05bb671f644172b6948295b4f1c6d29c7b052ad70b172c696eb012b5a7800dfed5a568ab0a448de9632a348e04e0237cc768c59a49fd9c6189f41ed744a299394a6dc82368650e5a410789fa9a5b651bfe784950daf63c31f5e66d950be2348f9f96d5a08e3e4098ed86eb23069163fe5a58fbc3c6d215e3e6a2d9460cf2de3a715a23db33ae59440cde3014f35ba0486bbe6ad706d284fdfa9941a5b218a849ba2092f444b68e9e004564e9dbdc7560b881d7160c5188f8a3f394d7b80ddde4eab566bc9b6dbb55a421b07236c7e10c612656c6969b5113af8e506e8acb4444ce2ca06b688ccb041da40958ef9cd66aba6d6c185ee80888b0d8b28461454ad886a40d4646fa822f7deed3b0a0854a874a194f20053ca62a2c9934d9918daf4d91383126143a560619dacf10872057ca24376092f6e88ee93af81aad6125136cc762d25a6ec2d6a8046d2a6b5c4106ab0a143c8259858e288bddd0c5d97058ec9e2734c19e0ad478f9ce8a48c1aac81f1aa9a2da1e007e46ea7b9106536f28e62802a28b3b7c2db118ef1be93020a27d4a472e040d1ccc89c624c30b844d2b28b5db6d22923743ba0c4eb4008a186b08bb88496123cb49208e370c3d61aa1f4ef24edac701ecb4e8340d09e3fbd70825e8ea810487469259165490b092568b2cfe0388e7bd463b4d249b7944dbf327e2721216593aef5d042428723a6c89c4ca4974abff276dad7759d340482b6a9747cfcd22f98cb94ee4da5bb954aa61bd925986f769736bc4b3a0581a00d737c3a3e4986a07dd2224861c3e8cdc8c6df8c6cd249f7a4bc916ed2464ef7dea47db4934e9b54d2464efbe2386d2d86a4e120e90d1513937d26fb4c3643fa2565333333a59360664a276533332598199a194d434343229148241215a2f4b74ba55612565a4934b9a5960fdcd8f6d7a4b7a06dfa296fa76d44e6186bd265b2832a92def026914824bdc51ce63232a7ebc4537e4ce9d94da5d29fd642e9566ff7a5939e0681a052496f38c33ce2c3e8edb431dcb814c46eeddbe9743272d298f0a10a2a3740010636c8018a09a898c11558d270820839c080490ba818218bec9491a808e1ba40024b1a2ba062891c741124441b3f9cf184134ad03244118ca2602b5a18a1e1c40c8c9841ab0c2e4808420fca18ea228c211c3d1864e9c1940dbf5dab074c7a60434674036821d4dc0eb743da8d6e0bc6bdf3211d91909050102c6763b3756076f03d25273c272ee52452e6e062af62e834fb291fadb5aaebbadeb67356bda136a534c6fb4bdecb0c2fd40242086184114618238410c218a11387f2eebdf750313aa8d28163c0002564c56903438c21ce109fd05bb2b9009cea33ed1c8faa91bc946d86e26a30a0fd6a1a52441eebfeb1ae5e92b1b42f912c25f73658d67306b89ee5c7825a8f6469da861a4aac7bc872d007ddb9da39035cbfac7e4decebad1fec2ac4b55e1341224e4ececd8d4af5a350d7e52c13bb0a714decfa2bed2f2aa18adad830b960ed023a0d233da5945638e5932f3e00aaa08c3af449222e57dc836f89171765bbc3f764bbc39b3730932b362cacbad90163d59f73731324ae7476c02fc4154f5cb1e20ef8bd2320ae178018dc17002c4cb0c0e0a15a469c618417604829a58491d8ed70cf3d23aebc4f8814121a0144c2233e096a5fb723c6379fc4eecbed88bf52881412ba9c2a1e520ac46d28ad0c6fbf9490b9e5a72bc13820055de6deec8eb72ad8c42c5842d57516472638cecf0dfb46bfc9ebba5418863daedcdb17a5ae561c5752dab89ad9ccb49b580dc7a5664e9c19263fa00f78440f1bcaa21e3051123a82077beb71849529de9431833eb6130f1b1e8504b8e381c01d85e4ad0f6b8a30971c32a1ed4e1fc6448eb02921f32e6847eb56f136ce68b1d3f186b84832a14d8936849bb200df79d9f3472f1ec52347041f6a443059144374df2c8edf50db55f10ad59b8eec566f36516f357bb3b8e6ca69435d93459bbdfd80f1c78639a43bedc80b2eae36da64c36faaa2172893b882ef92ead17ea251bc12579048f6a711b959b67195fd66da959e05b1e66dc4c99ee99fec256de36a1e6a3da55ffd73b768244fd29a46c595cbdb8ce2e5a8c9bebff3493c4af55c57f6cda91e4c125def4ac4914271058f63110a1f15afc42b11c7b18a8cb874d9307ad9301ec515a44f2c7d329fb4a044104fa784d877ab532e68c378e456f01675b4e125763adc2951c9862e04b05dcb88238cc0418ad32926c6f8628c5142e79c7328d48b31c6382993f9e43e1939c1180e034208636747c28e42c8b223dc31aa6c268419ea47a73ed122bca150358738585ac84408416cd70a8294f9036cd7a2a28d0d83116b04eca0ea9de6075fcd30549deee2bc0208d6275a05de501928f256787b1e6d7968e53a78a18fedeacd66dfdb1ae88364b5d2636e33bd9d4681371d7bfeba0ee8c37418d3e773b29b3ee7b32c3b4cce8e7356ca27e5cc669be9ed9efeb93d23113c83288c7a3d97b37f1c69c01b6f3461dfbb9cbd0531d9578320676f4176d43ed97daadc32bde5ececf5c11c970e93b59ce332ed82efb1df401fdaa1b324bdd9ada9b6d35b96e1b9e3a64383f28bba25f4f1e4b34a8551aa1de97e4e85e7763c9b6de768bd7f4e4e7a99b18f20ee6d869d241a416d7bcc622edb123220bbbb8336a25e865b421fb40b0c2f449cecf145b26cdfa652c40e401f9b119b2d5fc8401118a08f4a8f80bd50266aadd448ce7e8fd6fafede53e3dac38c8a81e1a1db822d0e8f111d03bb5f52c4bb9495b4d22b957eaffc76966917ecaee3c3bf27d9c25544bda7ed68f3a57c8fe59d4b22493d4512889313571006bb881f37cd12750d1478ab794d22b4b10a1857fd45baf6ebba8e6158e9b7a453290ae0c79c08cc4d77c1b194a0003f46bbb84201cc4d3a68c7bce14d6eeda4bcbd9b056d2dbf293b2691fbea07c6e3715d276297cea0ca4969a55ce75cad3bd65ed01e89303eaa2599306f8ee8361042299d73d79b4aa808a3347f6407bb3dc2018c67cfc75cf5ccee693b989631cb7c6d6622c70e72b2e3ad171bd39bbc0c59f67caa85f8f9a867958d3d6a97c93ed8656eca1b76131556f6bcad41fbe698cb7cefdc8e2ccb5b3ccc6f8641fb066da7c5d39db643536dde9ebd3657ec375fb7d964359e1a5853936b48dd86c7ba3420f6d6fedeecb6cd5b3caa749b71d8d3a95dda10ecf7b7fe3ea801317dc8fc16edad4eb5f0aa13733cf59bddbeb4ec2e751d683520f6521e957d64ee769691a03e73f3664f8f236fa4cba3f29079ab376cc8bcd4da75224d3ef2b610ec319f792acb641fed313fe52d466f419b529d53ca3e24a8c1d49f94d995d9afbc0ebcf7486e267fa594e1edf86bedbd64beea7ccc984f7dd5f24f04547cb99b8cbac6bb21526f3f29169cdc3a703aa7724ec78c979759461c30a342fa9032cc52146ce06e8a4503f75ea7dd39299d54e9b8d662aff5bd9b5df7dee5a0ea9a44b7b9eeb2db73c639e1b3b7f6663f4cdb791752ef1c7554be53eaa419547a91736628a5c36eb89f2f8818e77b319e86e79ccbf4f4523ae72eb3dbd7bd2eef569eb67324fe2ebf29f25da08a1ea95b6af4c8a33b4072ea69b7edcc81cd2ec4e6ddcfa69f2edb546fa7ed6a36fdf64c6f369bead874bbd98f527a03711c94f20ade2444c9dfcb4b9bc9f92ab34ca75a80cf0e043ea379ebe16076690edad4488f7dcdfa343a97a8324516299aec5bda5b1278b337233da41749869366482fd28b15b9afcb7db9e5ee51ba73279dee5e63a3d27183e54b467829374c56dd5bcab594e9d6e626e5f91cd8b5eb97b6a35d5a961bc3b416de94bb942329c3add5ac94df14362b39992d1558c2bc6153bd295bb8baae5d2762393b4c2277066b92c8161af0c61b6fec2c4fecca724b4cca4db18d24418a0409a3162b64cc825a912426895908d98c0641c78b140b1b55cc76d37c822a1904190428ecf6367a9d06048bb6d20d1ecb3e4768d8f96defc88bf4bdaa59908f186a71369a8ef7de7bcf260bcc03b5bfe79cade553de6e6ea28eab376b310a65f5f657bda9547bea39678e29082c2df80b46b8e69b8d114a0b6a76b952faa83a50559f3915e665785bfee6105264cfa9e59c15ceec4335169ed67900543d1da81242722abc7db4e5532dcccb98cbdf9ad9bc06faa8594d972d4f7fdd04b06b4561b4edabf67b67f6aec37c5a6d47fb95b75fa63bb7e38ac9dae9b5c77c480df4b1a30dc968be3683fa056d4c63da4ecd1a4f0d8fb50565d547bb7d4cdeb45f37e54d7b3c4cde8224a0dd6abf5a56b59d23ef8d4a3f6f837fdfcc5bf6491fad36449e6aaa0db1c7b421f598f6a00684fed7b31a73fb189d6a01bb76ec1ab6cd7b654e1322bf4d0df3e64d3ab06a43e4b7fbcd7ede06ca12e70c70c232e9a6bcc1e82d682779dbfa687fbb947d32168236493ba83a6539471b226d4d963915de7e6f49b164cfd74f19481a04829828654f0342d2766a3d65c159296917c37e5df649e8be905c4f428714c1e82fabc36a9f1a7f63363fdfd43b30cdb91d1b290a713bde69784126a8a540528ab17665d76227d1c752969fda0e49e24b8ce5d6b28b5d163e080f4b2fb6c05eca2d9df6771296a83fbd19b1d919c3823ff366f3b2cdacb59ae27c82d15bdebeb1b431323558308e9f8eba767164f9aaeda06c92d882b31b95e5a69991c9a81c934df9a5eb44984c3ace3b9a56ba0e2c914e4924b9b32cf7cd4e6a2cd0cf5fd066cb3db33312516f9e719d0d086cb60f86e9c0ebea332dc87e11d88f06c76567f5c8dbf719767d5e20b0d93ef3f54e66940c9c41158e36b89148c09b8d8dead5d4bf4f9d64b600f4c61b6f5c913b7e85a1d010689c4fb62479d9729a62b2d7ec723fc6182351eca1b7473a9d9a21bd64da0ebd97741c199f66d2b37c42a572d49c70e77ca070a8b17051a77ae371b32c4b72b30f743459f618e3efff321aed7371dcc398c2101c3a05bdc17d37e965bfa3a0371e5c4ed09b4a4b8dde5e450ebda1b0a47413284d698f6ca334d33ef719d5784752d00ffd8ba41da51b7b233d09f489a761d3779fbd67da459a37f9656fa44aca4efafd86bd56bd492f9b74f89b55c60173edfa575f6f357d7cfd866931b870d16254c5acb36e0ac831c0c6a137233dea9d46492809c0f7a869deae33bdc9fd742ac749af7f51b0d4ed09d750782985cbfc33f1546f42e2e923196f05faec3a71675bcd49dfa4975d7fcae8e9246dc8ccaf371e324f416faad251d027cc9486fa9d14e1033b7c705f90704204229cac90001f90f098f042842f2af8e0d878546450f4ac706b7871d2c47de1b4e0c2c90d6128c1090f1f986cf1bea8c209027ca812e58991856bbd26a0a18613289cbc2daf8701588145013e382b2e064e84e0c4003e1401006328c104216c1146113ab03f1c71c30ca4f8818d2aac2fa0d814fe0005084e9c119cd4e8f041cb0e589c48625f6b3c135c474e9c73ce39e79e73ce39e79c7bee90159db8ce06dad86c783a6d78246b8db1c618638cb14afac5097650f596c4551179f81722ce3dac8fdf9cb5f557de6cb531573d0354fd40951287552e708f83aaf808401f70c6e007bcfd2832fd8407e09bfcf100189bc79ac7bf2e11070011473faa5e51ea15e5785de468c78e91b0c7f3449c8c722ac4ac548f9f21e20c8049c411c075f81745e588e2f6a4ecf8ed35b95ef3cbf7c223a8db875623e08b823e703cfee2c8427b7b459508384804785e9431c3a1b7a993d45d35cdf243659aacf3420c33fc08c598f26bf2a6bc2b50f55eca8f0b46d25659956fe2ea7d005900b948006cf27b1257ef00c84fe7571457ef393f05144ea8c9efa96ce445478c91e6504514656cb79da4f4bdf7e67382afe778cdb757f4be3815b0c7131eefe05f9747c68e0f5235cdf4950bbce9d8f13a9e17fdc8c84f6806fcf394b81d4da0eabda3e70654bd9f90f35bb23327a514420821bcd975bff719a0ea39372a170c9f83a40dc9868f38880696a4f8e2c2f8c9000ca9215c1b71940c55faa21e88d30357ef4eb359cd73748a381522e9692852f652cd5048a724944e914c430cba10629101a87ac771d9b53ba2189c0a3f6ec7bbcb92232703d96bae96ed2ba5d4a79e64b4ebb720383570056f8a91b13477110785a34a28640757287d42767045a367b2832a19bda1b68dd13726bdd56cbbd96c8bb583aa6c93351b491bc9d9f659a679a0eabd26957f73641cf9da8873b88287d50b58adae99c2404403691652ba22e79c734e1a39e79c73ce392af596a4d21781e0425f699c73ce39e79d97376f33bba30a06c6b29d69373f4f4f9105d9310cfb743b8b2b787cbab2ba05de6e6e7ae4fcc050757f0fdd3dbccfe666239f98550cbc598905bba3bda1ea17f8ba4522f7e968062b40b040c8c2e3131c41dd53432655e4b8792f0872b6b539fed6d3bce56c8a0343e951b7516197a75a9651d906aaacfd75dad55b91edd8b3bc5d9d64ee7bb50aaa2ca60f55f6a56c2fabebac51675015bb70017dd09e96beceb94d1ffa38022881ecf18076da3c02b8df9bba6ec1726fd9b63b754b96595be9f5f680c81893b8efcea687ed5a5df0b0b7d276efb15d8b0b2fb6d384d014d681cec635e0e6c0411de0b2a4011bde1276355075a58d17526c208e63d988730375288175cce7a04d6ade11d5302535f591b7e391bc1dafa1bcc3f86e454c922468a3def5547843e27ef3556b818520c88294213e9e6a2d6c400bc911429226441e468d630e385018b623b67d6f18e674b81d3a7adce45c81371dd88ed771d323e7074d119785b76770bccc94ef3da765b092a1a96d382b8309a84a3827a9cb1b2ac39f709e307c8a6aab715cc5a362a582e766ffc5ad7fb53a19eaaba4b556fb1c243d077bb8ce61300ec821e3c268bf5da390efd9b0df93e1bd17df8bcfdd1201f0bb732d2e8af6d3e0651237c684dd1d85b1c10570aed473a15b414d2ac08d18aae2a1aa1681b79a1a1b958e8ce46d78a8a1d029350c4d70b38b6127ef85950cc178d4759001f038ef416d69784f01b76227afb391d46940e089ca2a78cb327ca219c9dbf2875243a96e3f18299e573214e58f825bb3e08959785bc2dc889df4e268bb96175d7601b66b7971c49e34d263a89a9f026fd99ef89366246fd307b1efcb1c510d53b6d376a054f9b26b7921653b0d560db192a1f8fa5bf3dbaee8c9d3cf7d37eec3a4ebb092a1071300ef03d629580bc6d0473c7c2c4c8ddf861042e820840f08dc41f4bd2e2e04ae7c966558461fa9c57ba72935548292a1073f211099c539e7d416be6a11638c47a0f4f2b084a10f09e9e39cd3e78921e0ad42b8ec26c62bf2d165718289224819830665e8d0230a329270c30a3768e003d61b3bc6b883b7a9b850820d2e96b8ddaec5451525b25a1a216a0fb1e71640c8de0a5035d10657eaa0b8a0c19e5c38915ed87adaaec5c50d2fd082cb1624e0dc600a1ca268c2ca9011b6e862d32dc008c0123431bc38dab2022b5220a5eec0c68a2d80108507b6a8b29f91d616416c77d276ad2d78d84ffb60d7da428969bb96165ef6bbc5810b220b8236361bfbddbd5bf7650826bc70b283277888c151d00e4e98d4e00b319478e245ad1588196801c59424ac94d1042a7ce80116454882872094a86b5c60bcc0d12d2b5db1ef953a839c3a831c1769ac7941165f00f103287a60a5054004210946f8e0092d46bca1c509355028d5162a5b98c0320001510c81ac35a83d8cf1e58ae282da829c5a6bad34a82ec8d9d2644b0b78902ab87a5b54b0371b2a49a84ad872c326b16165ab420a349eb06285118a30c6970bb811841fac20e20a1b6cb9be70e28220c75959b5046134d4d252e5a5a12b0db454a1450a2b9587ec074c6d16475908a166cbc8873d279e526737600b57463a182dd99bc4f087eb6ce0a385aa67c37b0ffe3d1893bc0d5b55091b35092726364d1429585bcc500307370c59f14510378a706205891728b1851826342e2751c83a291657867045500a8260831368b144173ba8e0891a433f2c318506397cc1c2a8e4a5a2a0e2d8ae35041b8620f4a6b04ed698a5ca154bbca1831dd278b2832ccc6802cd82c6a6a54dcf0882c116443b98a1440ad440a309b695258a2c565a4ca8a8fbee8e230e10f6d26f061aeac15e3a10d4feb0cbf76097f0d82fdd933dea9ff7ecda4950631c57f52ffd429ac3e0d3fc3f433d33877feff73deff7fefdd23da897f44fe928cda37f867a60fef4cf4d5cd5c39c46c3e81f9d87a1fe795cd5cfe81a737652d6f4cf508a02f2d87be4f51f7cf94bf7c467fae73189abfa34d63f31c4553d3cf69fa19e1eec50ff3ca1c8041eea9f9f21ed501789abfa1fd25d5cd99b6e62ee588e8bcc1dab1e6b02bfca8ad9b16cde6cbd4cfe19e239e99fc7c287794c06bac76eca40433d57bf2711086b024663fda6c455adc798c01ae867c805c79a98069a7755be94e3b12b965cf1645f071d244149f1d01379ac89d522a81af4688d346c6cd2c0e26aa3d65aaff0c1aeb5d64abfbc2231aa3041462499b4ac106a559102ba84a2255450c4925691141ca812281bda76ada22dbbb45dab488ae70f60d72aea616fd72ae2a1a886fd3c804bdbb584f0259ff7a8f4acf6b4410d1553230200004000a314003028100c87844291482c20d4d67d14000d8fa840664e9788c32887519032c61863082104100000012002333465061122dd34d1434e664711f5d12829cab5a3907b69b825f59363c47b9ab1658638d4ef907e6db7f24387bae528cb1dad981032e4a8b763ba0e7bc3710f38624f47913d68ba973fc4f1ed38e24d8742bca18d2d67e8d0fa1d86448756dcc9c80f9ab1850c1dea8703d27720ab176dba91913f68c4163274d48b63ba1df694e3de38ead5317a3a48f6a449f782bedfb46345c890a35e0ee93aecdd717a39cad28bd62de40f0e7ddba3d6e8c611f96356697164711a2a4d461897a3a3dc47e862326a4db0b2983488589590dc6674d04d13c32c19f20f4c6c5848e2a621f712227c6963939fc931821e9a25456e1d7b3becd5617a6a24eca6629c1f1f98c54269c0323f0a7dc307a07852677d88d905c4e84793d35a63457f38fde77ae36875bb71dd398f199ada08bd4ce1182907564b641881fcf32672a10573f188e08da4ab11eadc52273fc9ce03db25e929bdaa8096d9c33d851678aa958a45f7493ecc1a28420b38fc38ba9e2aa17fc8c40fe64c210896ee1e5fd996c2ec5e756d4fc691e1dd3e3b9c6c613406b020da83ed784726d2b7bc15816eec7e81a1712cd68bb72b461c9e7a46e876f85a51381ebcdd11681e11a5fd790d53826a8162f14c7d517ecaec632e1d5e37fecd33041a2b0e81c3b3fb360a6d5b46ccf58af6f8d0328de6e62db0fed11663638a4d29112b2834a81262bd48dcc7c663890dfc5d5d7224d241a85b89d83ca137942796778df57fa5040b0c93f502d4d609a483203e0e7d02f67f65c44cbcec93905138079f97d4cb230a52f907cd45ef5fa42124d0f87b71088a617d6e75d0cbccf72c0d082c95bf7c76fc5438ad23e6da3d08ce374a0723f34b4e67239be169c7c8600d2537b2a576019849beeda1056d5b7f6364955a3dfcc1bf79ee11f380723983852c883b29358030719188e0eab540d850c2eac94ebb073743cfaec26dae164d26394d11f3a56e1505745b1b3883178704fe1041ce40218fb89180315a65a026d87467a0643e4d2797d2cb657d81c276bc45b5b934f2d55f13591b95f0d651546495988363d73712cb29b7f89f2002895b05f0b6b11eecf1f6ad0b42b2c06f648252f04e393bafe9e9497166fe36f7ce4407ccad68acda85cb6d5a138a612daac9db1690f52197415f3ce78e258357102582cdb6c48268528b1334f9509267099efb8644f6f2cf75fb8044e218114cc16dffcdb7e7bf1ca3c5fb25c29b2a74d36be0483180b32d05a4501ba6c9b330cac90614b6210664b03b35d0c136eb22d2ab2e70e6ab1e286ddf0b600c5f26000ad1c77e4794f67044c0821a244657dd640671fa42379d5b475525708f5c138b2006cb30e46029768f8f92d2258dab9a330ca0d67bd1c72ff560d1dbfa7d9afc53b87f3ab46194736abac3d22fe00982ca151492db2ac7d68abcb9f6e3314bef7f37d84f939fbae4ad7be6c2eae87a6f0e74ffd626faaeebccca384af354f55c6782bc01761f6a698684c47542f24e672818aff91c77f7963c13b97489a86499b243d3323bb9976cba2f6293464dae2ad6f982c67b06c9817b4ba0848c3d47506cfb2b2d9af79d196e45e4dbd8d0a29004615cdd7158acb010ca9f00657ae729d38614d3bccb8475562d9ff8c1954a182690c2b3febe5f1504b8ee35d8ec1422cc8ae9bf725d56dcdaad9a77d39b73d9b6e82404a958a454e9306302005811735402b283e15c89e7752042ab10f49c4d7da205b60d869a4c0753809fcc03149c687aa1238315bce6828e11136803908f42ec54b4cd83f6c46c0fd8e7af50ebb98300a639bf5882ce7446adff8ee680baae50118acdedd8b54ba115043072c27ce6e54a8de40ebcdf81abac216a0dc77a841a2cb02ff304d8b245b4357803c94c252050b485aa5be9ba980f2bb44457bc8c6ff8ee48c5df2234776f6cd640afc53e2bf714c44a33c9a22e1edb0bbde6ab4b8eb4d88d7bd386e0052dcf0e5d296d74b41436546c3da29ac1704ed7fa39cf84626f273a852475f934d761af6c7a6c606158dc28809b2811b25b5baaad25dc63baf8fa71f6682c403980b16e1c88a4358b59bdc29aff4e8a58b179d3ed5daa2e15ecc3ab7632d5efdf8c593a8d9a35d0e37d0b44ac55634aa64895172020e8e425bf2494618949013c71c526ba901b13cb014103829353813063d0e58a2114e1b5f25819b3e0a925c06c5d35fe70f31fa833105015e39b87456416b673f08ba3f9b61e1036b97a85be9e31730c5cec2d84e5a97194f93ab23bd46c1b944b7cf079e7c9429e5a8d6884d7672306013d1baf3d78afd6dd0b3325f0d47ae3096af37ab8695475149db531cea858128e932e11f3e789f140e70c439764105b5e474023eb8d0bb35037037481dee7cb131ab9be0d457a67662836d84aa4a47e3ae6b495fac16458cc383e9fea76f91066d36c4177bbec4ec9d98f90445f1eb99130abd9f848376156d1ef982d955c47014b026a6f0ebbe3407965a8cd85a47103d856177abef0782a6ce4d38a76196d6c975b1d5edaa49e5a693190e892875dee1a3be54642232fc32e9f8cd192015d82ece2881c541c83c9db930f4d34d36776b374c22ecf5cb494b468b79f9c7830f6f32cf645456685004deb7a6fce3fb0d66b31565a9c8f0eb4d14624d37af08e93f1ba4ee4745186c32e732c143244b25b81f3dfe7a505dfd32bbbfc4d7105e682ee768890a04cae95430e4c0d7a5c1565755e2a07860d00639cbbbcd6e7b3a9b4e7defd1c6fa66739b579eb5219261c46eaddb77ea1054ec298fd058c7962d3d6892ae652391b96feca2a914e7d292080c035f621f339fe1eb8e3bae09dea04827fa196894d48a5a286b461d86cb19617e901195edc196be5007515c945f76d4fbc5d5097dde0a499b8880112c23fcf9344e3c4b9615075b023278a5686bc6f7b8ec8bfbb89fb255b456179de263ebd9accfb93fe291f4f838cf5f250c14d3f58dbc5ab61fce18d360b41662e8b4cc243f5be6d89bfcd6e7946b150f52551d1a9bb42754545a1d2d28114665229f94f23f8617c462ddbfdf904ebf1f14cfe97824210b6ba091bbf4015a1ea27ab29a259824c102ae2bb88e6bfb26b942020d434139981a5cbbba67a303ad17e86420df2745dcb9f956421a0e1c2059d278034047ebd6b9c70a954fb87e8e0026b0b0bfdfc888afba389c4f92c92fe43360daa92c054f46bad4b12e4c1bd1839a9d256b1aa585f685c4f239baf3074788598983be0423031f7323c811cc8d63096b22934a2f8cf953d16f5e02493702999574edaab18dbfd4dc0112018661a2cfb3080315d56de0a172c734c3179f776590d1508f3920bea3e7580ca51178b1ecc16f0b1879f2e916164afbb81eb745d097dca04f64ef2c501ea4ed002ed42d62b3a5cbb8f332fec12766ad01827e311b5d521f283d831a5987657e5afd5c4a26f2afb98f309088c940b82e9dcc34b595a9213ccd870f0b93a96c88dc8f9f4e97145e0700fb1820ece58caba6c5870eb42c24e85909e294e412c80de882a3fc2bc00df8774b21447029bda5d8b372e717ed53c378ad855b0e30dd0a65e634b5027b98d7239054c259dde7e9ec1c58a723f2d1ec4bac1b1508ee41415c23174759eaf2301fc848aeab5738928249bade66490847737399300cb34f612495998e69a1615f25bd2e444266c125acf1e2f56e4fe239829588680b1705d7253658613750cd422d7de721fe5fc3e01e4b747ad43e9c6137ff06322420f25b1d237e34a05ebe6b5d2eed81f8fecbf0ded36d66762ec15e2bf5aa98b351a81c61d9bb552eaa8a30c5e46b7a9d95821c4db1c2217b9b32538bf1133fb0327fc47f077c9ce803761466e67e9e64ff0f08805f5b3c1328a968f9a569e5da562617f0c3f1038cd55fd97a82ceaf55ce3fecdea536c7af5884cdd736dfe887a127349e6814a21cef05e22226528ccd619405e8fed0ac730026e55333ff8c93b2e2d564cd4c38960a38cd508f8d88065961af07b008c9c5ee4b513eb9f88657fd2717a0bc2b0696cdaa0251b6fc0a0a4bf1b5f2c144770c1258177dcfce21cdc74d9394637354946878d1c64281846709fd72050410531f4639b006aa37c7545f2782fc699d8f225172d4f49e5e48f56d85ebc7251f9506d2f41affc58ff4d67b5372bb8d6df9ffb634f6bf29d6cd35f4d6deef53191bce3110bc83f4c5a4211508d96c9d506a2107337193e69113503a894bca19dba7b1f918b5fdbd2bc06039417a1ec2d8cc6cddd466d11ea3e40b71a91e356a81b53cf9e71b5507ede112228ccd496e7951884ca74e06f2971e9ccfe6aa2c0ed2e4e54b9cb283d72b0caa927cb362f22033118917ba50f83e3bede99526f570707f52bb669a6cf730a046ea1101d6a8b283d10dbaa37033952c5dcb2448e7ec9d26108f2ece4b843a64dd0f8274de59a2ad0bd48574e0a35aac75a04fb03314860fe0e09597418ea3cf214e37b5ec35843f16378dc518d90b48b2eedb538e210410231ba0543952969d74304c22ed34204e47505fe3fc55324f5ddd5226285e57c1614f7ec538de189b64e16058973a7bd420663e0a0727b9c58eb4ac6de209944846b19ee3f3b383fd942eb8ec3329cb261ebb48ba2bf6f836e71e8cb8615c1e8a27c5f081fa76a2679167a35f51481e7aca6f0c712c97f198d80d9ff9a1b239af93eadce34ab46b70c675af7310c7bad5ea7ff49dc5f43576ece14fbb9aba19c678acbd0ae12222f6824a1b1fb6b44be2ad85d3c495a882cdd616eaae235df2625998af1f89b9e4354f9e8659176492bfa7f8d9c6c24b21113ae0d662f7fb4d30dc8c57deb7402850c1265411f2354f96a782da8379cf0c16b179ee2418785f837bd3b2ec054834381449c5f79a5b51c624f4e8bd35e63af28be7fecb8c9fcdc8bb4332cff717b4cebabfe884dfda7d856c66fc255e476af2a56bc5c4ba739abeab10762798edd3527fb0682964a901efe6d45db42175b21eee60cb52be4d482e4d08f77151bf7388a93bf19a055722fa892e7b5d64c0dda7caec5fadb9b0c3a026fa418b1471715c8f5fbeae879ea3fa1eb31bd8d8ab70851a9ce4c61bf42f68641fd15ed7ac90d9aee901eab4851d467f1838fabab0c95302f8779de7d5d2e54816a2ebffb365264676fb3acc69215ccaeea5703519862a9a0ba2aab3f4a1720b83cbfbb68a25f0947e2728f37910bf485054cf34758f273281010674908c6153f0da16fc62e7d39e15a8524764eebe0299eca90fe02d1f63c0419430c469aa718514bed8ec609576f248f037af2ca6bdc068700101baacf6c9a42fa2ae5d941f7860ef0e639c531dfa5f7e455d0c43aab7bca3f2dfda7a7b22c52772dd6e2186b41f975d62e92c5cd4e2ead67fe7cfcc7dd0877a268f628183bfeb1afc170e41b1b1fd210103f3ee06dbe4e7e66f908ad99420fe5aeb5862f2b7f1caf5586a059ee9181ba12634691603b7dcab8a800c78322f715b9f571d9b240087dbb8c42c22ce42c49b3936624cc4e8eb39da0a10b1ea4401a26b3f7920c8f0b0126f4ccbf40ba8b19fb78092c300ba54c357f00e0a15b7e0f3e35b4c20e21ddc14d3ddc4f3f2257e9167df096c627e944d477cf551d57f2fc41f27bbb6ea3585cdb48dd556ec92041c309c4fb8b00044bf05ccd4407a1f0e73372a74747a079cca987d1e49aa8caa85aea359b19c56a973ce603e846bbb74ade78944771ab3485c30283821b021e665b10dbee39edeae10c6b66d77898aa6375967ea4fcb2d172a5a6e4132957fb2ef74c8a790f46b93302cca014432185d19fd14b7957a7f85cb15f3d54f860e915f3d150ca9ad10f1bc15ff68d9aad2b3cbbe2b1853e3210e5fcb01b21e8d83a8654de789f46b13e8c38f0cebbba5c3a8995e849e2740cafbc1abf2578718b357eaf570c650044b5fc84f3d03ef6da04508280ee0a82c25ce236330ca254a96666e609c2d279b7692048e9db49c480cad0c1c1a9cf9afd3344f8fa79d10c208469fa0be0742472d82bc0eaf1cff5deb4ac608c4ee485f5edfbbce5d0a11004195d1abed484896b942b2625315bfdb971780c8ff02550deddedefd877b767ba22d2fd79af34fc374a9369d52387735234a83eb2aca90d9e0fb95b22fb1d5ee5aa9a997919e8d08e326fc6535a674ced1b4f9e540670341b0dea703b67b29a71f7c37c5414c0f848c01dd599f41a848acf082f069551821e764ca3e5cafba555478eff6b0ee8306382999668bdd89ae7b7347304a57d67bf1a4c0c47b3f6cbcb702ba04cbc0137c10be7e6fe5f8ce5806138c6ac185c6e87bb4d2288e9a07551243a0f8b5f12eecf3c1a0969bacf976bfea06f26504f722f72fbfcc137f086ea57c3bfe21047a08cdf5230fe8d902943da0d9d82ae45b2c3a11ccb245f4b65cd1337b73e59d4301a4fa0d0507084cd557dc6281855231210e24247b9b0d90d6f5b026e8174d6ed9bc66fffe09e4c1b3e5fbb5143317d0596380eaf01c1dcd9ac295f86ad85e18ee65dc70f17a3c170988d8a939782d43f545628cdf64ca46a1310047bc572dbe32f80aee1f4b94683c0e340b0add75818913a8754ecce3574a5550279c2a2d43a28724d217520d0eef90aad6866a3f885a2afd061ac164bc42a30c6c8caadc6fdf289ba538a5715f40c1bf88a22e73797555e79deabaf25b3c72697f11273db88e74f82770687d666561cce2c91077932f400bac74ff67d231f05cabdf4aa2faea7138d05e5dfffee29d2802f2fa5be86936b4f91ba1ab125e4b1f42f01c2f2368f27d790f10414b3480ff81c3376edaa57df0ba96aa52188f34091ae4068e487f6801c2e3e225f004708d9454ad42c5cac62d95b683a6242f9ace3ed0580c35e15669fb6629c39ceed17075700c12265f041acf634a24b0cdab8db536d5f98d3f471057b7cc3e2e290040fa3d1d7e9c858cd94533cdb31776b9614417bbf31f7fb0804df8d8b5dc38e4c5aa393c9f34fea6009725f5274a58c48064dd88c3aee6a5b3ee7e687da4a899536817a6d2396086de54d1ac71d2a50a9bb81f3276123f8db31fec5f7a0a99fdcc7e103cfe9c296ff8106e57107ccf1276d86d67ef67cad48660a538894803f8c0fa2f5b4bb2ceaa22ff5cfba911ec18465feb27eb1c4eb9297471f089903080373aab1434a161ea74fe656c9986d21f62243fbab2ca1da29bacffbc44586786e2563a06faaf9978ea14cd65dfaa256e38d1cce74ddd16e3a55dba71cb4cc4581a31cf7b05b01e10514628d88186ee264fe0428087e39791142b6a8b7e2d8449a07a287619ec952988b5cf68002af5d490f44f1becdd5ee7baaf2702ba0eae878cbb265466e04e831814075ee5b7b58f0f27b0fea11c91101f3df978d2729facb67a59e703ff2f545f994d7ad8ea97fc1dbd0956d7b36de072b95c1e6d61e559e3d39327520039061fd6500d79cb5703bf5050db22984eb99f6a422b7ea48511dcd509338a912d5b52f7262412dfd46fad05db76c50258014499f64c1708dd9fadc96d045f3e0dde1cd48a6b30db65f6b830f9b448a657101005438fa39f38b4e8751ca1ec3d1f083a4cafe2ab866f8f4de8b40dd16c9f07d89edf6d7424710563703d1b0a1618fc2d90bd927854f7a072383bc70ce69892672210230c1dbf43121f2fc32c2059d8b2483d0c091e2188fdbae064f2104d337d95b96e33a91991735a5afb47f2ae05886bfafc69c85eb38f56b625741f36302cb76d95c641c49cc4e5d9573c59e61d1f381d9918a67bd25b8c0e2fe0c94d5479c6fadc23631ec1ad1ca6c90d3938a9fa77af535ce3e5de4efce4baea2b183dae1481180b0215e08be85dd83546700289000c7f32025359617de42b18b894e4dcbaff5854ef7a55beabdcaad99d3e5fa4a19586a9b16d9a78ef0ec79bf03202728befd43d1ab512595f8b07f613135c917264293c216dd24dc984df8da4497d206e8dc0814f2fccf8912dfe0ae829cf1e1275a146d30901e6de9352428fa52d7082ca951709673396c5a6910ae018648906938e454e30bdae1635060747405b25d77bb61a14e0c757682143fa314d482ff20502bb17da27c0967a6474572e78962b6eec4ce7ecdfcf768afdb89092640e129c29f11128b248770daa6244d26abb695861631b005fe5723256f740ff000ea96616f5f5e8fe010905e34f49c002d67c11bccd0ba5a98556ac575b7883c584a09e977a1be16c448d45cc1e40225a5cfb35959e269f6e12a397d6c46384a79b75124da9a5f44a53e28c10139c0f876bfc911c808bd461a2f7b0fb69a5ade55b3a689dbcda83e9353ca0a0a06df2b043ac9d11f19b3450eed5dedfcb089c0512dc5c4a73f77d1d48d89af552698cff60b0777116ac93f537514928c1214bf2b8c7ecc7e4818c8d9d55f086f49a1baae0d2b4aa95d966c9395520df9c0dc640933a1f2391732aab6803c014de8e2423f5b50bdddf4866d7381b5d0156ae0ac0333da5b39a7817e1e2ba8d5041c1c6bb634b8d27ef5b75ee99fb00f953e99c586ffb1973a458508bb7799dfc030ae41452a0c75a0bd6391389387baedb2201d3e7e56c553e3ebe84571998784ba6eba2680310313751f7c5c77abd6a0cbc55d2bf3d472ef74c4d79806e95449ee9630291001414275bc0fae1d17dcd5a5a6f2d658c3433dba9cc858de0e83712303ecc8e5c110486c32a7746e1da277832818d57f7045898a4fec298bf9865a06ca325a60b5e9438b44e9417a75b0f8824e7a02c573efdeb9710a77d1c6aa29c99be0f281e8b04891d6acdcbfc4b6c3928005266ec6f25058b42ac283356aa7b0e7ba1323abd8759c3b4b91fcbd67bd02fcb0dfb8d7f936893a8f961ca7d747a8fa3e8c95629196b71abfc85b5b43e1c684355d44f1a0fd40e169bfa2266017d2a45c6787bea43bcf80bd9bce3745d46838fa443e6c4445885ccabc70b4f780c456244ba39ae542449d1ddac019886fec97f0337f72de47692d0547b34c1c5bd00117b668e3203da5a99207c816138e24671f6448c98f4f6aa8861620686a8d72d2e2d08d3d7aa6569245901ccb202ea55b58850b69b20e15248e461db60d72650b409ad08d48f8b1e5cf395d51d71e68f4e3e698b660b8ec6ad6d1ffd372e2b5ec1a7614f6c541bd583c939f5a22d12fb1133ada2154872f37364592f3f23c1208133dc108c86848a2854426dfc799f23607d9385139b3524f1005843e0b29d3a13d89b42480ce2771e691d11a1bc4e4f61afe26625c10c8f0df24c897df0997c916d5fb7a2cf2a1c36b0c6dc3a3996eb44c2bbc8a56fb354beceae21655f3db0a6ba15a7e7842e2201fadc084b3081d09ff1f4ea87356ee124fca19d999dfc906216cfc56ff8c3ff30e982e073c9115cefd7385c91dd4563e9ef07ec041c9ac49748a5ce2fb06f29c417240b7d6f4f87173c93826023aa966fa8b17a8f92591cce4be67c4c5b3ae10084d275b3da39d128341da0579d99b403c754ebc1b4a82d7951b1eda74d59aeda0ea8a01a908605a4bfbab195843c3810244f8e0767e6a2303946bf660ba1fb6d931619019fe64bb19ac0e3fa28d708b074b5ac668906541b2804a8e93a29a320afd55b7495fbc8a1ff51b0dcf23a5749945feb467370c0c621e29c88042f7f23e4184c3acdbc6719814e88b146586e5ca1047d038d3c3034e3261cfd987cfd84749b1dbd0f2f751b08ddbe1c79243447df96a3a39c513b4e1169879300edbc16417a55e61592725d6706e977fca43d0caeda7d7760d8b245aab4b6716ed44a1f95efafed6d989a516a308494201941fd74b344ac5849b2aa29631fa2a9be23c002a742849fb584fde9cd66746e65e43e4ddaad5ca8e56bce2b7a287a2022a0692b458fe9344c2ac3649ea6d8ae34b0e924c420ea894a1194608483a52468384c33e2d61e0ab8102ec0287f628bcd8531ad05b2ab9dcd0fc47eec43d4b1862aee5dd6a4ef6fb570d9d83c27901b7b6ad77abb526ec8abc4f322b65926e687afe44870955d241bd30ff2c3dc3ca4a26578b47fb2d65c3caa467a8505128a1570c1c69c75e8c6d28b2f172ef012dcedc6a79c02949f2429affea193bb8a02f081d429bf7fea73ec9af97982b606f92ea571b2ab8a13cc607dd640ba07b0c1f71a3b1138484326801dcae780e9cb8514c71289b14ff94b7dbeccb8c0f1cb0f1380370ade146e9b02367359381262fefa1a2b2ab9499ad7f148c3abbdb6852aebab0ea030f4519d3d821bf0ace4c1038851d8c0c3a74c85d2465fb5e14e9e6c5461efea084ccbd2ac9f28f3d793d68564e0e2342a8568c1d8c58b5abc27a2944d73a6db51615244fa3eda1593d164825eba3062622bdf6fc850a74158f38e591dce02d94d0d5f77c467a5ea14b37795dd139cfe8c50a98e003fe355530267e47335879926f615041a48b8b9f761579def3e8bb6817b228e400bdfff93f3e444d14b6fbb0f8b02794a3894233f166939745e1bf7a7ec712770009953e5054444c162303c5ab2cbd5afbdbb7f8c50e4aeab310be132c19b0c045ff33041b809c3be8f117c8e3a90ec0233b04909001d807e039424677e61bc987828219acc5369d135c7308969a12af1024deb36d53f7aaaa7e1d733da3f3def4a17c8c1f002ca8ba7b435195b9101a728342030708712be5bfd5aabb41515ebd89b72592054024cc739393b85f13feb19629ae7bc81a1a97ba5e9328a697d84e5fd05871200a7c44eb0886311c4b9e23fb584d9dd65a0e5fbc035d799d6e8ef15fff09a52210d91841dffb4ca027f7e9915006a3089cfe5666c82a61e657a2084267c610176b18a6b08c92d56c3befabc11e3e403de83c228c1fcee2e0adfd3852db8b1ce204adfaaa4cb341679e7d2916a48ebd5e4b8077c5c08d642205dbd69792f89ba4ee439e95b359737d69e56766de36e0d2a26ad3db7fcbea52be1bf5349ecb95e97e729450159f1c407c52415e5c7004c2b5f3233fdb93e156edf36330f20fef6b5434621ad47700b2b2b50cd462b33ee87f8281696a8f8e850a19b1b0db157a331956f5a191c3152018b0bd5bd3c71d835b6785ab96991d6b281d5c0f1353296ef3f4a8a20603a9fc1898f47b222f754dee5b8f4ca917f826498dc98e52310333ec9ba89948295b22c50000eb2e1bb0be4ad8a2ec0445f0654be13118833e8aedc5d16daecbdd38c25d377e403f1cd6d2315a3bef3e205544388d572ad846ae36b1021c26c1808e9fdbcabc7923672ab57e6a409ffb39afe2773d84553ebad357abc824eef948c635161978b7662589fcd1e2fc1b6afb112563695723d41f340529c981e240bd2921acf99d49742cd2b4b95c37e214a88a5259af20ae452c9606ac28e22eb1761e8e2a6d7b3f3d4a24e667a39e44e282e5b8fdae5d99d653229866393ed14ac77e7c84623ca440cc34f3c18782cfb4719e218ed42b8a4877dc88d9251b9a13ce44631e2ce4882dce5366e08164fbeda1293f2b817f271194f2162d8ec8df01984db4df7e6c9c2c35633b320a23a1db30a1a00505e2682cc6beb4014badd4835116c2af9080f7f301a4e82520a488bf5a27d34a784381d8f1d4faac4e76e33c8962a9013f9f5fc42c011211a9994de21185b122dd05ed40d2121d8448b6e26db641eabcf8fb750021f3da6f2584c8940805918e7c14ea0aebf816dc2416bc519b821ed460c4a9a3d9c5bc08c73e950897f4d16103a97647db4b1b9075f5c39617adddd9aeb5ac96872d69c4d3fe90993c268b5355bab2bdfad13d5b910c2e979c3784fc4d96ad9acd9a66e41b81db2c51ccab35ebcc70d3f45b906d3c243ef1fb4f22d2e671ee39de9dce97c9ca8ea98241a9356965c120400477a62cc2ca7546c182df200a7336d87d4af84fa64851a28063ed6fa5e838d0d234d999d8897f6d5b3d3ca9391ca55add8984359edbdedc7d58bf2d4e0d69dba98efa67d09640238b03a98c39b1197f18b0e87acc870950bc763e61dc4ceb9a5caed4b743959456a84fbedad275cb5de871faa48bd9d91438a4d0c053cea8c83b4ab97a383b9c6e9d86be819157be59ebc60f209043a7b2a0b2b8e00f16f157f319a0b91956387c8a63b317f2310f872c6090894d53bfd78a7a0e44fcdf796cd02b21be0dec7f9b7ccb3638fb9917835ca800591cd79c0191630e7b30399a26e0752af2606ea8578e73c45b5acc16690694c28c27cd2f69698a518a678e8bc453828da37b73de850e201c23fc164de1d06337f56720dbc2f6948b95482a5d42884089a8a402a59f81f840120f40170278c468ffa7261460b70e6c2eae430ed1b7ca6546a37a5307af2615f3dd329d48ef9269fb64541dec6955f8919198c27584092721f6476ea0564eab687b7cd1484373ab4889bcbfb55bf5b3ba55c5ae4495e6c55ec1aa041966aa704537f108330807e68e931f663028e145733084bc26978f0514ddfd0aed286a75a7a245d810829172192be446b4e111bac9ff5f55d359e9e8d24fc9e4968f308bc7637db3e776895239c5fb2e9ab9f4916016c4a485872a9d2994f7f19124ebd2cbd28066154ceea3ce6b335af82141edf4fd4003a369a902db4b3de17d2a57bc813498e32016a79fb5407830efd640a4a80b30f56c9c86c31776c5a9ae24df735054b28cd4e93f6ddec3c634035d00510c24292e4c2aa712533ba464df9d55f30017ec8a9294e695a2744697868aa7e2fd1b9f79b6121507cf436449ef1aded9715b0dc59100dd1ea261cc36cfa70397bd50f3729e7d3657f63bc98e8dd7499f86e7f3a3b7a5aef58401c30b5d9971842c9680f13179b9ada2a632da5e04044080baa739e18176bd838c29ff6e6ea8792b1f503a17e83553c300fe8cf99d592882d9a2978a3740176b1a9d49d1d8fc419ce6ea12912521c79335acb130bb7a55261dd28255821cb4e5a8560ebb86f57005f94bba8596b55e8ab6c1f993d9e69875360923c92541379a1c9664d0bebe4ca553a79f53533a34d0d612de03aa5a36b8c22a059d21d4af3d6a24407b37af728b01fc33839b03e4c011089650ab7f6f4b4916fa40fb9912da08066df74311f2b25b29be12a2c5925d2a517d140d203e622bb8fb1e6abc13e27d2df9a21a9c55c6ece271a959b6998a7a7a4e34838c3e4afd595638da6a33bfda52f1257850eb4143e835ba9ea4e649196c6e88160467e4f3cd998eda644dc54b6f7ef8ad7d9828c149a7bf88b3b6dc328e37c18b778ed28024b0ec4227215c8138239dac29b4c3919e1002f2f5e49500376928193a7191b02ab21900335802ff13e93813d1161510d68e3de579af551438f2ce44f44fbc5306306480228ff1d5444b0b5c4de322f49f67aaa9b13bc6026d50e4d6a22d526b2b115241c3e09b7d10e43408bcd42f0e77c1b704c1adcc0fb41778ef8bea1f5514804acc4eedff51c5e0f0e1895824002880cce6a22f5f2db3e959559afb9207d58460909101467ce6072ccd11742a7babc32fcad8afe4a139dacbfda9c7db9d9b27dc5b616e0e3e5110d314315d7a35d56af5fcb25a9d4f6d67417d7beee03c2bbbfe1771d35cf98b306e2f25399e0daebf474dbcfe32d0945d30016e6c8fdc2c0a7837da07975eee353207fd21084a426bb04c2c26a9116f3584ea75e844385c2a94b0bdefa03f2ea2389e08465325c40f426f8c6d0be9d7dc4c3ae3d6d6fb47505157e7858de0848feba09bc7579646c3487722ddc255688ea8f9a5063c779c3dc3a849505b8ee574777c2c7a8dd54b356b0123eb7acf20c8aee3ec38ad22c7b0786024e61247eb7c2d48636a72efb643188e12513dd9f817df6c5a745731f9530989320d45252480a7fe9f2538821d4f67c2b9954613f963e22e28aeb75a3ab7428269c7ba29542fbd2e50c90409457cd1eb5815625f844dc892d0150ca1f97234a76d4db7dd471787b6322c67e7cc60a5b5551ffdd8fda9656f02fc8d8aac5121d842b729723e4d067ba796c38de89de1dde5370bedd5c80543f6c0558c8782ca7d8545481187081bb16c16e32aa3c3d1bc3793322e511111220bcb9a738034354fe8cd259bb9ba6f04cf55816055499e8f7baa974d2b1164c8ece924aab09011eac96dba420e60a241b27a8313a90d46bfa499aa929cf568719510ebbc13c070cd114a81adf662e0db1020afd4648fc8b31d1b80c7a8507c6342c276c97cd6cd696f5efb76170ae3e6256eaa3bcfdcf65ab5bc8a851a97a39d00397ddd3efc5a7404b2a5dcfc80d3ea714e9dea5d6011dc36589ad0d2a92f716f2acb19b1e27f99f1c4c6ed3380d6e1902746d1ba1b945fe9e3e1267a958ca1c2e8b7c4e02b43e1d32de38b27643f7ecc02445cf6bc631e06a8a565dce29172597aed8240bd040b7e4313c854218ce9d966096db2b17a4c21562ccb00978917ce6a19208ca66b7ad006cb74c8c476dc169083ae1cda3ad85a48b66e324291bca6661190d190c9a27b4bbf1dbbf9a282ad820e5308f018035cf726742acce338e99b1a1573ad19e98fd3da309919d65969a3b3f194ed3b40ec0b778ae88b429f4f0a59397ef952bc6987bafadfaca13de739cb515685f793de7464332456daf407172ee9c6a9992ce4360b00461876c9b588febe5cecf6f14ceb598d55bec40fb86f523c754a049e9aae17d1a24e2f1713947602771e83775d5e7ca93dbd853a4af310f29fa83277b2a4abcfa4530b2efdf8327a669f78fba715d959ea6182c404eefd9c8c1524dccf014b4b3400f28621c70e58a936206145218171a31077c86e5f00d48466dd420a27085e8c1fdc05db7aea92265f7c102accbf34ca36b9b6648e4725c9d3f5a482899b3b12e1e80c521019b632c7ea2046524be1c2393ace9cc7dfa4963c3946972d729657d0163d31d084bb449a7d478350795254e96e55072afcc1b826cf3d488710037010038dc3a363192867d805af5f4c0b0f75b90cbef74dead127c3ae9c936effdfd5cc6571deb9cd685ad92e983b83f6381bffae961e4b41c9559b5b46b8ee6ab4586499ddf31800ad92366f492f949dce1800958f3cd3e8bdc8af7efe95011a2788bbc9aace37551fb37f4c4a12a8595e2fa35825281631e7543153c9c6ed656d300cd87501042d3c774db9c133326d979de6b09a9c77b8a9536b82b2a036e08d63301675b498902bf52a970141c5b9d675e92a41c4ba565915e007c1f2f49e765c074b36abb3caacb12c62008252ada5ab828fc7ef1a0e69bc94332de6ceacfa0ba1ea29e6f7e182301f656b35cb6872025882f7b06eb08c991b10d26a9acc24b43221a09501ecfa77d4b43c986b5de40c976be69fb6bf788cc66d5a384d73a67fb9b620f3027254049f7ab9a7c50b8568ed0d2f0cda19b0966bd733aa5a0d2535a2d5bdd21b5d39d7ec9d781e9bc615575dba705eae19aeda57974c0870ba2cca9f017a83545653a1dcc722be186e4f4e4fd89ebb7b280229e90f270bdad45109603b63f9ea099af24d4928175b7fce7c466ef5ac697f46800cbd166908067b4c5857480e7da9bbd0849642c60e2b4de64802aed4b7eab31dd9ae1287deb0146e880316e22df4073d62670779dde72082f67fd9cd0ccb8873e311bc43c609d9dcbcd048fe87355d7a177e3c746c36cb364780d243e87ac826afcc450ccad11ca345d20b1fcd26308332ebbcc10eda651169d62100cdf299ec4eaf6919e4591cb13991a5bf29332389d95e1dcdd6a56ba35e740e30b0a9ce95e73055675574ca890060175e12665e5ad875ea30d031b27ce0b45a8b63e4af0f79301e09444947f2b7c2c26b07d421607b15eed67e6538a0bbc951318dcfedd61698a89b46457aecd3e0fc0121dd5f147e3caa62bdc76c109074956fe6182da7e1e816f139b47dcbd087d5b366b70233d0b0f83429e51250f611fc267c8faf7441e469a3144f6660906c9d1407b348d553152036d0607c00f82e544ef52ef314fb6498848b289e2afc67c34a20534608c175c7fe64d136a9ac6ba4e3af42148dedce82f5e2e86b1472eeb1b56a3e63c810acb448fa6f2918ded720dfed2cd6fae812f43873a0d65c868f3cefe8fdf45a9390ad517bf12194e1fb0b5ab788e27e7b77cb8ccf4f388d401bc1e9f971fa83a20de9d6ed44e5f8973a9fb36ba2f5c11b21aa25e137aac0f56d319a0ae0d302e27d58e56416a09fad7980ac0a3f5be9fa016a4cdcb0876d1f10b2470de16ab8d9d601b57347bd0f216fa6d3b03952423fb4977e98e347eb897d32ef618fb250c9788c2176aca84cfa97cb8ee58698b6c25620631e4573216bbfc529c4a3d20421e1b380871ff5879a09bb04948acc0edc1245fd64077655237d74df205dbcff1046bc053150791828e4ac076a44679345c7688749e0726f8cc5fc803fec761614397a681ea7e2f2a797eafcebe23c91c47c5e5f8f8835109cbf6149130360316187ae4e0d408e98e2effa278e3d79cde38c307cc67c0aa47dc4ba155cb4d9a287b620d21f712e0bd85a19450b0cf4e7e0cfbf7be10dfd0ca56093f02a36cfc9254af99a4736c92febd98ace2db86b855471d04c88b127e5665de806a0c76a4ab2afb43332f7d63553d4508aaa7b25bae0b7e59c236e5251023e268cd6af97e5a797ece3ab660c0ab1f17f149740fb5a504e2ad478d38615dcc44735044c49030129fefebdf1fdd59d97cb812c4571bed68d325e631ebe5bcf01d86907468f5d6235b3a2280d61b388c1e2df24c86495a6cdff4794ce4659b3330fdfe317dedd0123e59161611887854ca44735749f7588ab1bc9ebbd018dfa189bc175b8778b93222c167a7fbf6d68948b0c0303dcf64ca41872f4e6ce8894b0359567625becc705269245dadcfb276fdb80ffce0998c732954907f3f92c4f54dfbdb9998777c6ae404056c0a15fe1eca8c345fbe71563ebd26c61ae666dbe35a5c892aad2af23d9dc3b90468d55e4b9e19c0d441871bd0b554771880cda8c35611ebd213a1f355168ac2ef12c8f378cc23b0f1655833fe2136db46dc24c15f526b9289f8920b3a83d223536432bd686772028a909a6d977f354411bf4caf8221d8df2975734e07f5c93fc315c6552094e26c36452568f24d8572abdca633064042dd412063c9acf4bf55918c5a6382951062617620a9a51eeaf0cdfcfd16e793f40113651a16bc934e685e206c0622bf41fd043e3923752b33b4845ba8d2a25f813bef45da70ae23fe8381e516f56ab52934a8292d067776b0e874daea6563bdda0b0f25deeb88492d8dda8bde3dbfda72fabba83eb81952ebde42697cb69dbe1514a16c81b1b4f1e18d09af3108e5ab4a9b1b4408975654c0a6eb22d6bf742227b4bda178ea49cb824eda2e567c194e3644d265762e37c007ec62ad61a0cd61c8c518da6d3386c9acf9c31f6643b0adf1c365498425da316ac5c9fccc9a5a6051f4fbb273ba3150d3abd6fc2bdc30a7d46f37814baef2c6a8749648d81d1efcca4b4cff8bad80889c1716456cd83f1869670b81cf90b842c21ed7dbd931001c1e1353cd2482591d64da03ae69c046ceaa7e0c715143618f41e467eb04fbd893df9f28c921d18d143acc0e5be9534f169ccbf4b698ca702f98f68936cf1ebcd28b46635bc752ecda39d6f6b6b9167dbb89c5268dcca76fa0040ca96f0815e4e523adbeed76d75e76cdbd0928d9b15934d8c15ee0e6d7488e1d0d10552de8014bcc6c1c231c707789ddc60137626a3b7e607bd531668122197c43ad946e9afcc8816ca2c6cc31dac475feae03a6b622d63f21df9b20e13131a0ca97d48763fe25a9b2ee263e013df2454af8c11a7f491264abd19b1ae358b682b4758b3ef6cf640eb74c5f566d0896097ea9fa7cc8e763af716778a44418f9f7b331972b25bdc698e0bedd91dc1ae0bc7320f825ff18257d61f6c0bac13729aab049261b4f9139ab39f9784656e8833167124049e7b6e290e2c05a7f07c11af3dd4205cec509305179c5a46516852d83dc469304492823f63ee478ab8a5db1dae470086aef78548da3c876ebc37a90629ecba0c7ea97603195dff7cdb65a754078c4ab4fb5f580ca5462e851dc50adb26c095bb4c5c5ccc896a6b395a841e76717f32968da0871d1bc8ed7ce961b7fd27ee04458e621f7d7705e2768b5977ebf6ff466891afdbcd17658addf7e91adaf48ab76fe2abd96db828d9f4ad4332edf93294e0ee1e6765e55095f0771e1a0b9c17127992ee212ad1f578bddad848f442366efeb4d8bf87c99e1a40b5698a9d337170070ecfceb371e52a1dcd857d14df7c0f6125761c765374d1c52e6c357c3c274cf40d862e762e4df27583c48ff4f868987120a8d0c169bfb1eb1f9d23da6b07650beca64790dd6db4cb355216bbf5be94a9fabee8925d271bb1b8c21f55b9a9e34e52541b64e322a4c8c4a9daa206a5e64cf7f082221072950d3c0371018c46570510cbe0ae2c23e49aa6339a08d110f74f481a9f21573aab07fd182c09e38ff9005ad9f4fca8b23856527ae0c11a98b64a86000fca0f66aa4aa2c23f7354ca74abc295f4924ab66470a95018eba0b9d21975751808a4ea886d668c66e69793c2e06d6afb7075b8db50f7976325328822986bebf1552153b01499e240e3c645a98eb83e3791b77a36ef7083230934155d0ba7b9fad73382f48b8af8f14abcd10130daa537d9ffae2bde168150f2257e90eea0c645993012cd99d671d0d94210e525184075384385bc089f42a939ba1d4fabc4cbfaa4a4e37ac5204a6352accb36b2aa6c53f433007aa7995e94ba2673e1668dd1006b6bad029289e6a884c6d273aacdc030391aa13dab0840ffe7cd0062dfa64293791c26b4ebb17f8367aa10d68f05779c7be490d661502647d2cf3d87c6aed5d3272bbd5e1547dd86ab4850df74dcf96c0d0048c88a35d97162063d04ff2d80c042021ef22d4be5189737e05126c52b935cbb4573a40d198ceb38023028d930af6c66b321809c53cb0e57d41d902fba9f83e50703a4c42a173620061191b1ab29332efa1084124605489b8f2d2cec708665de5f193b70fb3a02066107c720493de60a99c236e1ccd4a142d6cac3af0a596bdb48d8a53beca57155c36f3aabda90f44e088b5ed1fa3f30e6f4fd6b8ed94bf6630b8a2523debbda2cc7f0d83205ecd3d839df8ff040e23d7fc20dbf20b71cd14ef40058f15e279ef4c309ed8f58fe370b75c1c6d9993b3cc79428c67da547f053fd33c28b654eb6b4ec93870cd3cba34e27a05c7d636570ca023539a76d2600f1a93abc59de0a913d090755a046f37e658aac1f89de9dcea131af67969940211fb42a1107d7c896ea7afd3544fc489ab5a6e917d389b1d20d61157205b4293bb471ae2f0055315459449702e6adb05c8a110b76a3cfa6558713fd9e2789096b4019c2e42ea4153307123961e7552812e3052bb264184a7b0fd04c340dc6c1c60e3f20fa3b226a9ca5ae72e5598cd35ea00505b349e9acff6ddc5781f19243aed890579f17167a15be98fd2eb938763f7d311cee92221e9f10849b20e980579a82a0e84dae30a926051894369689cd92a5dc6d25051ea984e7dc429783413f702ee1229d5da03fcdb04273184262b775cf4fef2d594d6e2a55a9c567369ae604aabd4da137036f1249aa609db90d6899b94d2c95b96db0468b93ed7518a1c35dc5fe5d2c4a72276b6a21511db392cc4332a867b40da4e38c775edb403269cde07e817e0911c66240010bd8cd3020e00cc3ba3eb1f123ea260abc98f12ecd421282b54fd1ba067b8e844b02bf96187e954d961d52109c631248b92aa36e45decf8399379c6171aa92f34c18e05f2704abead67e176fda8897ff49ca0839c0a653102432302ba96401d31e634499bc6d3e0c7adfb3b9512df2a02124ab05b2096a347426516d5a0731619d7cb2b4810e679548ee5101c320e055b15be5652d3f68310fd25b0a25120956610122ebac867c1c363838ef0717a0f85cbaccde9c496f3264f2b472866332619f0c25d475ef51de3b7faca59fdd970949075b094215b141265be606d9f7244bb8572984e3a1d64ab802d1e64cd60157bf6a263bbc8bdf65b26acf9326c02580d22427391277fc420c710108598329d7001043851b912f76ad8ec5ea8c0e096edd361f8710eb03ac31c457dc91584c3d0922b56e82392b94e179b481b96ef094b600454e3a4fc2d6bfee73e072507e29b25d08ae20c530b2eccfc8f52e36effefab272c521c0f48f2931ceefa1cff01e09677168861d2e03fc5a1efd83682bafc55af90c2ab1192e4aa200caad440f059a6655380972c14c7566e66e06572e5dc285f3e6d54f4a3d7a24676ce4bf470d187386b01723ef92aebeaa88641e814aa472841459df5f1f7e22e91def7225b993cd0513a1d101cb3420a6213b2a7116024d413ec297835c8e0041c7585d2f3d60cbc0194d727140ee5a00677f0f4c20245075b31207ce695397a61c93e4bbd61e5340b4f832ad207bd7f35deb6509c6a70c2d61e4d2104dd6f7b796a5c942b49a6fcd34ff1e94ab412522838412e9e9b2243b38ca67a432b973e637b94db7d99722b3d63cf6505a7441fd8ecdc8c3295f93582c460664fa5b36826256735a9a0c16216283721d4799759ac199aac5a848b470a14a063443940789acbf453480f32040b7f98f9c65c4e0e60e01fc45d4b8172040d879e008a0fc07fb1d25d85195211a8d51c0c1c1b0fa5753c74848a8b61a1eee9bf53e05b01a8cf535d18da95c8c4d0e3d0382063bd8a5d64f6e3958d2c2b9bf00df61a03a309051f0be3d08b168592ff3f5230da0e59408686041d9c2c1ab040d987aedbf3ae583062e48a6883e29b89a32d19d4cbf9d3c7a7afb50dbd5852c71f54b8baebc5dbf088ae51f63eb1a6ab1be5bc70e57a927c7bbd216e6c91b36b869428f168a16cc41d745fbb39f233812af699162917f106e9de3449742d586b493c302061a9f12e87b8cff705102b2f5f26d7f50dceb23950cd1ae37cf8ef588b484ba6a47a6aa90225016204583acac722b2280c192e295d6409a40957a4846e4d30a39661f1bcdaf0b3ad1cd6cea499e37fdfd8cdff3c1ba844136aadb7359fbce47ce8b633d2dd9088953ff3714ef72df30229b590bb5697ce40f3b93ac41ffa42b7fd4bb67b5adb79c9e080a58807f5a6ad847e5df543bfbf9aa14d80a69922f440184e144296c7c68438ef42d7d01e4000fa40323949d529895f5fc79c06c809e2292e9d8ab4a0aa33fbfb8658fc0d1868e0cba250e86553cef88bc107524f6fe4b387e62ad6500e931b1b2f61b64620b5083cce01baaa1228fd08829f94fb4816ff3298429248d9463480c69e164fb3b9a9ded8fb2a882cbfae4ca4c532892389268dd33c7b3df46a1b306707ecc2eb0678d07762965ef143280951e87d1ece4be540f41c88b3468b73e4f69dffcdfcba46159c76f70c592ab112ba3429d4c4039ae3572a1d8246da898ef39c8fd726c24738caee654427eb4f1e2410342b5ba147bc419fea044916ea6d5e81988414fd6584d8f3328443dae46888e247117ab44a97f189bd63eba939db6676f291dc70097e5a8ee08b664959a0e0a50a8f331e735c3452036cb7fc9bcd50fa519c834ad813487b02cf8bb57797116fae91b9ef7a64ac09f76c88e5a340fc8b7a17b6aab9cfa6ed449d1ef6d4f5dd8c0979c37a7aa77b57a9c804dcd9b57936ebfebcb87e2e4fa60e9da13044a3904cb4649440a30f9e53d56590fb7c7f6f47742635afa928ccd884eb53e269d2fa486e377d6e39c1a1829ac1034e1df21d9e7dadc8ac19b6789a18ff0528cecb1f35b4252b8846096eb8f13a805b563e8e6ca221bf212bf4d5119331ea8a9187b7d3cec5f6176aa6ab8bbd3319879465bc1462675a17d98bd29abf59165fa63fd198e81e1cd7cf0cbc619c6f9ac86f47b19b649ea9348b74fc79fc45810c1aa9613920a3d875c500a85910012ad1231b65fc2824089d989c508a09b5d9ab4c93baa46aea67b405c9d4c28cca820f8b0ef06c21f7adc566648a887a6b6549a78f7bfd4043dbe4a64bf30d03acc592f5843bd6013273f379680055da6afc0335229eed27e9cb800582d11528dce9dd9e3d9498c21cdc36e40f4ac0a4b6439409d84bcfd7561b33dae399f305c7fab37006d8c58cbc5ff3250239609bbfd88b80908d300dd9ba30926437856a05b373f41b0e123af96a2aa2ec7c3f606d03caad1c67871d89fb54a921b06cc9be7ae4fe9c4ec2daabaae337665700885fc28de4a6da702550931eb5090308fcc5636b8403d0cb4ba66684111bd7a1cfafac09fab5c937a0962f9041e1cc57b905581a925d25d54975200f56232e61c4bb9f688da153f0462018017d085f30242591848ffa50a140c4867efd147d1971e33c31bcd7b98fbf1bde5047534dd8f811fbb7ef1217bad598e88da6cd1fd73b08e6432f3f3d8b21121153f71d864bdf6c3935e3825efa0e56e1693c16dbef30ea32e1a90e17287b36a457f823d4fd457ed666554ad589002be93d488acdfd579f992edccfaf82d1ca08e449addb483381dd3a19910af432924250b22dab5e5a612c9c5945b29d4c65c6ecf5846e21719e17383f1daf5363be5eab599852d2e71552f1fa637ae5a2ceec2c06eeb96e4c87b186ea0da48737c331750013ba5f4bfe0dd1758ca0be6cc9faeb5affd22699aa24732df9627f36506aaf2763d43a650f3a6f5ceb1b8e26571675c4fd34fdfb548c4144af3591846e477ee928a6a346b79014566a6f73baa74f68178d171c9e8d49dea409d7dc882b9e69a183f9d5f94f0696900b51fbc431e655887b1f9a305967119c6e2cf0b50e60cc776870b2a03328ed54f17a08cea8cb16e61653e9f174f5821733288f5f1ab177d642a931a1a2bb9e32cc8fedb67c18246e15e55982f19ad051ce81fec5349f2a6d45058960281e338635a44aabd1ba22d3ccad92aeaa08f041a4736638cb5d856a716e49d06f77b33c06502185b76e798dfc72e06923da1651654f14ed8181cf60b5c74e133a609f487357660a49506cb467433ac577bade319995fb06c40519a7eac0812bca8aed32761bbd7e45f8d1ef2e0c005bb6bb4b148c6d780dff27a0bbdb7662aa5d2df8484d732133006b94fdbb5100f9037a0a6a227c5e51fdadfafb4c95191b08b71c4f52d5b7c14316dd7a4c82fbe80fceff65f68380139a30ed7ff76c346ba7d75c4ffbe941b08d98355dc8852f399dc09e90b10a97490461ab62da6d9b1d726af50000cb00a2fc708221f69f5a733ffbbff1fba9fbf89c9f6e300b7eb4fde20e1059c4e51796bbcab97141dc4cdfcabd42134127d8e7802adbb9b30287e72b5ab799bbbf0e645f001724e12b29c2b94452ac6ece3f3a880d56690ef41eb6d285815b799f6cb871c80c4729463a20bf7b0eb4f7168ccb49af91e2a5bc0b19fe1ae31422686594a77d32c275525a98174e62e03b66e2e233476062f14c00fecb99b170d1fc2fca337d8c6862b3d171e67a5f8554b64493b549ae00046717f7bf5d439e7f99c223f92c624a5dfd5ec1b4fcde7ec668766d755ce2e9d9aed7b34cb26c4282d716aa8875cfeab22ad87ddbbfdb87bb21cf7ea71d4ec1ad50abd36456faa00b9eb9af0d1a037c08e417c019678e44439248d04e1f5c828a0cec31fe56ecda4db7b39fa72365b3dd4f88bceb0e08a5a2dbad9b5e88261eeb02e2a8eb661d3ff70d94d53224b00db48651a2dd5c7e880a40f588423e3852306fba89134925b03cc900336d685256639b137ab0d48ef7bb04188b776c407982b80582de20c5cffb5e02a6ea81f078dcba7379ecbb63f3a4e3e5abb760018a868ce0d5deafe2e962fdbd7380b3b5ee5d8c84a521070e7b908122213d8a65c4b2c182f8bfc4dfbfedc5af7b1afffe6db8ad09f161110ab8c1c5af41881710946abb41f53b431209b85fca1e4abe839eb48a9fc5f22fffb066824ac89c2882e9165b9d3b9933d8b04f6165a283f18e125fff7c2282dc007078e85d53784693a0dc917e2282595d071d4f921bdcfdf7aca40ebd6ede64b0d22316a52d3d41a2969aa17f27fb0f34c0515860e31d4f71c230ba22b68cb2ae392f7f7a6289ce1d0bab3e60c88285091e35248755484fc9123e8c62fc30de557b4669afa50621ae239521bc89c4e77eb7597b877b877d85e8d605148fd5eed5da4aa7c44ddafd91704500445c0ae77281cdbaaee888093291bf2337a5f22c3ed4657f0be0003c84df213c56557639c8e4b57a71b431e02c2918ca6f48b17bb7f979f15156e47d6a87c8b0c1d2f3409c5e952f802d81c33046480ddd1f1408800d4d1f8df0102fb8fa1a8076c0d7ae849ecf72076eadc88f661228abd09eea4ba3da4ed051bb896fe059085109544e50db3c7aed2215d3b3d474a8bbc83e80319b26d384b7d35e9b18c54ecf9cc60a5a9b43a67d8e3e81709cc3e11c02ef683d75960165b7c38ea2a22c5825582e9660904eeecae752af1a829302327c036bd161de86520c68c4137337c5af20e6fd72ddae82ec27c139f2737d0fc466fb819c635f7415f8aa943e3c105cf771b1506372b2acc628b6aae16c61d461496c8df67755b61b5f8a249a80962dedf9ce0009aaabc05315ea2e30cdda3f8b275ce9df8a4d9c05c86dcd52bb7fd2cbf2c342a29a5f3e891f9f470957e238bafeff2c801e87c83604ee0919ebcf16cb12f92e8036cda95b5b5688b6deb3f1f300e2216a3090b847a25cce46b9a6ff8eff30271ff452906452d9849d9376fc4ce76882b5233706c477fb0dbc62f522019b1fbc33e0e20e231588f107f07535285d421a2c35e5f1baffa8b48bac348c99e2e8d33d222528f4c7697bd4e6003dc865efd4b5fe6ad54eb366625bbaeff5be5b1f38eb7d8a77b91bdfd0594d77cfd1cddf3664f40207752024185030e04522da67e7e05572081a0a831f13871a2d8cd52615fbe5e52e020294e0f8e6655bbe63839bcc6c92201dc005e08384f096252b3c91ffdfc62b339836ea4e6e7b0c47ce20f34e3531ca844d44a666187856060d99a63ba4a306bb3e859f0f3e48b3e7153e2d15be3629562bbe59f1779ec155ce7c02b664e45413ea79b5ab9ed1d2557361dc59de3b2bf9f30aa4145ae1100dd04f31d4b8044071c9cad9b0c923d23839b746b864e1ea0c1e4adb258311d4dab614e6dad2a3d0f1620e76044da6f290edd2b84c7a62af0a813ac2b474d980afecba4acfaa03f2c809ae8c5ad01fb833621f0d2c3af45c722b3612f0a6bc423c3db081e83e2ca9d4daf820cea48faa29fedbe900638a5181ba7073d6223805a6b02c6e4c3a9f6d59e369564dfbc26d7cfc2ea8eaa69de9051516f5b03db53f9419a2624dab4f87f3d18b6c655f34099211bc66c5df7f39ea8473d3570f7101b34261ed3c66d6cc918f374c87003137dbde9226a8694a383a748d2527a0758eb53c4fbe133b0740307a4f0c009ce89a0e97a652e98f71d2acb753bb5b5d90ff8fc7e0edbc9e4d84e39bb230bae4e6890ad70c9a4ce8b882f0bf80c40ce6d3eac4804b591ce1b06b036178494b00150844e1f3ea032bd944f264f7496a8ce4dcac55ffbd4f4f761b6fe168e231ee742ac6756fe1b9f7ea94ae33efca6be330661a2571a6d57f1a7791f88d27b40ac9bc3d8b4a53976c55fe9c4679e7db7026537ec14bd1f61178421795fafb2098edf9f11d71b9bfab549069afdd880c08168fa5a7f44f1702d8ca4bbfa4a39d22b77c35b88e5ae399f321145146e295a8b5689b7c39abe3b1feecc7ef9651b3e030e71114ac487f552ec1cbe96a3c160a1ae8315f4c801f8e3f9972118921b71de15e50d378f182b091fcfd5553dbffc1ed2f580a6a001798cc06d6309dda7b6118040de7c2cc28bb27096cc5e8f448417909302a233cb97a258114b5314989f5d5293ba9f54203255f041f5e5e8411c5739f9e84a713e3e0de0f6c095e100e5f2d92d9ff7769e500809699eada9d4c51fdac3ffd1df85d8fd4d5096271ce120a4ed4324fce4a9ee7109a0ab51132d5c9353c70ed7e5c1c8b08987751cbf25c43f1abb0ba5c59c1679ec60c3f5e3af5b019bbf2d0c4519c59c455ed13310d4515a17e8cbf3951e5d79b4726748ad840d08972be375754cde93694b5c8fc018bc84918a22c2c12c37317af0791c27f5c5880ee8412ae90c0de7e4cfea67416711260e705bf90a046ef6b160f7acc7e5d3398ea37c15a329af8a777aea8f40b9a9c43a17cd14bb8ed2377e6ea194ec48e50c41d66b3f17bc164d651604349a2d9480d7a2f6d702da454200f7b4dee5beab669e5b5958e52da0e624d7d8e676563a6991f9431a46beb34d3a57f3213f34ae66e20a425050513840c05d814407f413e6fd2500ee8e60c789d877ae035c40c6b4a883e0d32038f63a4bfb0112efb0967ba14ebc4661b0adaf8f00a9b2232338d82fddecaac66ac95a19d6b102b16d668467fac22e8edb870548a53fe8aa13dd26da6f2e70c44670981868f7bcfb6c80564c53d881450feda38892ce6c6081dcba8410c7523dafc6ade6399ca64d1386113b55c4d456b477ffa4bbd6fa0ac25beb01d5fa96f7c7644d8051fa5a5f48d9b30ffa12d64f868759cb88ddbdb71d5efa3a0b54a4189cd1faa6779cf58524ea3693511d2a93ca0c908c66e8aff978837a2bd866b8f533944f9b418d82631885f6bdb43317821eed4786e7e3807d36fcd5cd97fe4ef8c09b2f2ee28b77299882f1221e9b86acdd1d8320279f03b54283e81a09e2246ffcea2dfc32749564e8a85aedfebc6346c311de94383983cc79e6e2020363af9c8e8ff791b89c2ff4513e858df45d232cc43b9b45023c50c5701ceae695efeac348c712e95804abe8158ab9f5421055e7b90565d9a9aea23fb2db370c46c2163da8b97fada2c4a6af2b9e1c9a138f0fc3968cfaed41e9c918917f17e3a29aa8412f5821f87017cf623ab2966d717cfed47ac7fcf363ab4011529bc550a1b29562bf0888a4780792134080dd2d7c067eed56788da7eb10bafe91b48298d4b47776555f92f41755f9d3e3c1926369755677f78225e988148b547dd1e31dde48636f3998ced9a607189492ddb3c267080c25279eefa22a8ae0d4507cb2680237bfecf7a9b5d7d91b115f799d24f0e700f6f9f4630fef1e9c7a6234c2370983383655de5fd83f42fa3ec2dfbf4cfbea92c4a0d4a47bfb6fb455803b520a40011c4f5c571fc6b7078fbdabd35d4765f61234e8fc5111a1eefd8487287843cba1d82b3a99354661bfc863f542d23065930c75a53a335e11efe6f034515161527037d4448173b52ada0df4e24621a24b9b915278b8152f5e730de9941d94437b7b8aa80ed3e5b458b49f357908c6c8c6552f8087321f41a79c914f209cae907c0542a9994bf2d7e629827be26312531a3e7a03473c1c9cc45f80ea2c727c666d8facf231c32be98d51b74f17cf5827ee41eaf21cab065e1a98dc598135f222061e615e9a874605ecc500ce41ba736e3ec8d555d28afb00fbb6f32376696d48db200e5caeda2363e9547a0bc9b01e4a1f9abf0b3f99e0b943cf43b192a0bae36cb1eaf18bf8aeb11245416e87c99412471711f3941f69c90230a1c93779eecd93024c1f807611b76d692ab59dc9ca09c25c6d9378de3f12b42605ef63af5d30023020f331fba68428bfab5a75196ac7502178949fcb1d06aed96d4ae9c9fac34b261e326b651feb7c9927d0dad0c7326a6f1eee2a5bdc7c789f9e79cc8b3fb9b39e5e344cf2b269b4999e37d9315e9993ceeb4031e6cac613e7258a52fd6a094b9a5472b4701f36cc8cbd1fb2ca085c2d39a3ed497279173763720bfd35389e9f099625c804d1d75f750a1bc905732eaf992a59076af165730b0df83118c5b24de4c2031a04196501a257838ca53900c4723a12c97fbca6e26781887ac62ccb81b19700fa64a37addb07d8c89e47d8ed7a8d8b449c7d1907597f7221440bcfd15e1d18ab2f55f2b2ac70b3727983faa304b6aef1fe04a8d894e19779329259ae1a70df923ff290fe3e5d18caef5c116e89ef371b42cc133bcff1532877e1eee7741fd210a51aa5f8fc8e86cae92204f10303787a4e5bb3e113b6e22f0a2135759eca166c9d60fc7a40b132c1246146c4c230b692193c0b9b28ecd7468ebf5546cd6d99780c3d1dfed48081d7a25b0b9b2ae4d07f2d39ca033d08c2ef6aa57a746ee650f3a8042cd79f93f508f50b31ce4d5c63c12147bf9c300bdaf0666a3292edbb5f878737fdc0e52f0f9ef4e539a9e7b02663ff3eefffe2909300924d73cde28e397fa7c2ada91f0be426fcca3f211566ee6902cccf3d8cce186c127298d29a02e6c20bb8112bf222f4d878f70a1a146b230f4314ceae5d48f868a7fb83284217cd05fba3c3e26252c7900d8cde653141685ad5311ef3f00389b940f144661597f4a786005ce8392a7c4d02d3c309fff8a6c73beef804f89073b967f42603565a8a70cfe161ec197d8409437eda31468a024134e364a65840becf7022a53dbb75010180e6d3af5945006116c2dad2d68d4ab1c1f05f1ee27a006935dbe6d95d55e7bfb326d50dc52c94d7687666489ac994619ed3dbd2327d6275baf200c2328cb58677f8fa6648ef568b45e6a64ef2d53140dff0b3f0aee3377175d67d28854228f888a72474646458eecd5151252c974945b22c226a9efb6194772dd12357b796b13ebe6228c952d8e2c426f2fd5596dab438b74be5a8322777ff7efcadd7d7caca3cee4dee564ee31cf38e7fba8fdf2a239dd376ff4eeeec9db99bf4d9bf763a1e6de769771ee2d0c5e6570f7067cf49bbbf7f8e829b8bb023e7a95f29ea6cdbdbebb77f59fc38f6273dbd799fc1670f7203eba8fbbf7f0d195dc7d0b9fb97cb5f0f7b689b33c8bd399c45d2dab2d9b8b70591715f5b2cd57e6e9ee30770f3fd04b123baea6abcbe620f8458d1da8fad3a54ba8a54b08b485b646892f1a9b2cd8d713f501fdf45c0003ea89725b0960c560c7a9807e8a5ab05cf9fe0bc31034c08e9750c24f567d1915d0360bc3308cbd6c16cade43f045f12b3805fc1d20b17e08829f9529f5675f432b5adf8b401b7cf1614053acd84450b4221381be982cb4629b0165c1c49ff27dcd8a0159b185dffb57189a1d9f223e2805e61d7e0c48ebfbd8c3c21f2a3eb6acd8bbad0251b142c5c71603da20936a136d33a029a10844c58a4d0694058b3d581ffc0981a8b8cda18cb6efc5faadd91141262b5648f81e7c12ea87b4b7a2a5cb43f550157bd893307b11c8ca968782015921610604fb181009b11781ba3c14f83020f0fd49885574470499be77a86f4ba8a54b0f542ab06581efb6fa5b42a01ea8546003dfd570b0e34268483cedf0fc7c210fcf6cf6e18f96f07966a1f3c480802c917d2c4b0654a6f77d0ca84c0ffc0a6ce18734daf7f1fc8423ec7c0d79a0be9d9f2d1540814ffbd1d2a54281bfa502a8f06b85fa3e9808d4057e7d9e1f879afd68997d9787a2bdf8a365e7b73c14edeb0e5017a825cb0824804f03ea029ff634202d5d1eaafed7e301cfcf0824803f03ea02ffcb00fcefc19e2af0779c87f6d3a542d17ef6d3a542cd2a80a27d970ab5f321f81568841d2de2cf76befe0834a89d9f1114dad203950a686a462a5e872d069455a6f77d995ef8e3d4f7b5074806e17f5f05861f13a3c607da0de2c7c49717146c319b7f79e95287c3baa8e1e2441a5893519312cd082325a321bc9cb18120c84333e20ba12a1734361e36ffe252044f1cb4224e323d3e7c5794b81a2e28247053638b149248a3872f6b449df065c40c641070854b161bec8b0b9725e2e04183c702265af4800312f9fc14b021665f5b9230fadae2836d87cdbfb6d4b08386e863c3460e01a081439d26a670d3a5c4175dd4b0e18c195f6ecca009d1f4b5458c092fd842312683c96221ecfba2154048187e5f650e00431672b020d382135f26b8e0020a5450b1040d0a48810ed407dafccb8416c0353434e197962bbe9d0cbeb4d4f932a10b3ad6ff827cbeb4c0096dfea5e58d06a167696a929d2127fca2698e14b32c7c34cd61d3346787203e354d738064ef62a460937d28860b3659023659d31c91c968f3af2c0a98a5c9f244972c6c4cf8ca8204171f9f0ffacad2832813c51a72982531ca6cfe95c56b1c7ddec7e65f59b8d8b2d871206390d1878f4c2613db800e6061842393c96021f88da3cf63c9c23625480a2fb422589861f1018c38c618b3f9171633585c50e10bcb1615e8e8f20013e46c4983cbd715385abeae346143c0e65f570e40c78e082452f9fe027721fe4284c8820811122488cd674a2cac7280b00f4c61c7b5a469c2bfb2bcf12f2d626c1fd0fea87cb23ae8e8b26530bccd149533290141a02943a073e16da602f00402354d5505008420dfcfd0b714daea0451e707db141f9b991c6ce2151a442a5a10409d2f3cd4c1f2001ce288579431eba1013316b010c34431c3d7acab082f8048c28c38c66b8b01cc98a013060e1d2d0ca023d6e086488619b337c040a3859629666dd8ec90464441081c76981941c6cb0b66c8914213726c31620e718e03c413d0983921866c8e05c8d268f385093748346180990b3cccacb84174220671000f506196e6015d6629d4215a0187f80035d6bca1818bd90f0a9839213b438d7804026630f8500002884fcc30f382059919734e8062ce9599993944b0217a912136c08bd9992b666a402183b34624001166a0694099591063666004206a1107982d7164998d91e386364418e088527c31ab220b2e5214a1841a23c4398298a1a103991a44135cc0020e14da80c384590c759e90c3c6194484219ed9620d2aae2c311be208190a20ab736676001b665960105f78438cc8c21b5c646fd03103e20d118d34e8b899c561c01955f4d084f8250122130750a207191a38a820c3d70a2d38c08b011cd0351b401c29ac21ba19434e17b325ac48f384284412e20f43ccbef8e18c1cc43a34cc5e682107395f1c2007cbaccc03628823a65186288006c8eac0c2015188397ccda62862160608b1cb8cd882970f0398ede0469819186e6851838eb8861b3c9831c30286b8002d44054c2163838dcc8d71966601e34c081acecccab8610519c404b010451b5f6668238b183a0a9023aa80c64c0b37330670b18415621628d67ccde01821b621c414676472dc207691c10516640e88f34514234e96d90a74849023568186186e1ec0c50c0156c8e88022ced74c8b11b2388490c17106cb0d69c830040b5cb0f145c4828d2cb322e8ccc4c8116d404394c18d6c0e175458010714617c91316216851022973365dc209323c31b2c8059e38b08c41a59cad091a921e70068884ab811c7e062968515323a508805f89a6d3162e68610621667bab8810032c4c1c28c8d1a5fc43ad4c822071dd91a72441dd0987db9999dc0851a2bc43850885c7c916184105dce886f6e981940062f16d0a4f1c54b1a59c420e8cc909033db6214d1086314dd20a00bd10d2c443aa69841c1c40d6a441f88e8220839676c53bccd4c073470b04d79f11f8d196ce087200882df940783a8093306c06566869730e203c4c8d688c1d90203bb0013b60103c251020c9c21e0981163060db629463c6588b0087c84f804799f202fc4022631a0d00327852f3c41e09870c24e195e68b3048c3d5d88488c537c66528ca0f8829898cfcb64b132c27c8159c0a48e0ae1c7e11344d6c6081423a30b2f64b4014384093e3e1fd403c636c5a8470d9c182a9c146cf5c231a18c3a69f474018b82a62656069a32ccd8eaf3f8cf2de3055b2d23ccac471d5a1ab6293cbe868c317678fce792d185adfe0e0f8fff5c32dad8eaeff490a1e6238308300c1935705943460b6084c4119251e6033f58d31a37676cb2086cb226994c1633c22693c96462138f8f20656233206390d1870f96990d6302be184264330610349baf19a3cc1830d8a604b501cb10dab923107f1e9bcc06c4d790d182cdd79051c3ce1dcdd8fccd686373a0fdd9dc89289832fa1a32b4d449c336457c63f335635c619bc2e36bc6a0620c25ae685992d499e38d2abe6ad08205b7e28824a88841cd0c42d08192bd9bb18561f0c0e333c06cce185b64d809797c6aadb5d65a6bf8167c0ee4a0cdc7b7047e21cc3f3084ed00df822f947d22ecc30bc01f59cf056038837db11d5a4f146d89117cf10b02653eebb980e78d1b36b06749f5a0fad583fc693de0efec80ef403fecb8105a98f15b0a79c4fa7d4b3c51ecb810265bf54f72262153f50b8dd8ead3b48c538c8c9a84c2e802e3049bf77c342c4a4d4f6f1600c3f70989430463845d81c218b69999f08609db14213336c62380d87ccd1b1bdebc609be263aba287e20703c31af2f8e0a9dfe7a3c27e4a7d9e2fc8878f0a24ca78d8f1ef6bc082714a10dbf7f454ffe3c1f67d90ef9f47899d6af310006bdc8061fb293cb68f06c458eb17c48cce6c0e21426675c2508817709c48c01371629073c51931bca8a2000dc8d2058a39741f0e342f58d845d30c8e93c7c797c50c0e2166bce1f5091993030bb11a6a1a4fa2eee0755422b0f012c34b813132333ec668e1f5c4d21857a3cb6b0825bcc00ac62cc0eb8dd7ce180678058d292387d715dec50f6478358d91e3557631051461b814600a1f72268839628d34a850e20a05d862df0e6594c6e0c045166b7869f182604c45a18131527889732ce1060c992de8300135c5270e2f58b0c032c31c2bc240e3d3e14ce581481937de5ce1c5191456b052c5020470449c1fc09ce1668acf4c199e314fd42ac43862431de34dc8e0d563cc121e0502ea00e040e16cd438e8781db18657122e471daf9f310ff01af361b102091bcc38038c365e2881002be4c0a68823e678710037328c5f191d74f00212d305081e822053464e0943b411d3c20a5bba14600061ccf1e560661c23448dc21b4003012a133e07165dea9c50e190c20b8cd7d398365e3077a31e600b2f06762430c607096030188c4784c16030182c0c313d3e023cb884b3a931b8195e5e72bc1e1873c68b0eaf16bc1ca85378e1f54c638cc6389d6a82e857fc18536f40230d9f238015c0f052c30be90c2f2104c66cf19ac28b36868c2df6e13065451a25ea483303016038428a3563c4e0450c54b8f1f2dd6006092f37bc80c62c30a6a6e170d8f03280570448c6cca1c2cb7028c250f399a973b815158d7fb1868d155f78a5e0e55bc4623131e2b0c5dad861c8982f5e5978d5367cc638185ea21920d83c91c60737679a10810e37d6c052049825bca062b130bab0c53e1bcc3491a5015e3d78a951e33523e265022c5e3de4181e57c6a8e075861719af3180d43a8202766ac789bb37f1518119dc88bb87e0a302437eb7bea855bedbb4dae19cb3c25d9e2ec25d2d0546192698e08dfec8cfefab73392ce40e63824d80def38f3c4d30c11f41f2257a37700f8df0b0070bdc432e1e2609a1429b874aeefec4c7045e70d799dc19eba231012b2e55afbbd1c39ef03f82e4d17b5aeddc3dadca13cb826c5dfe91232f1484de93c465fdd5e0ee1ff888c02e71075552496c53b624fff45ca5690305eece4491fbf7c3dd8ddcbf0e7a184067f26e8b656a59b4e8debcaf8a348acd8dbbe789714548b97baf924dba4bb88b6bba4d484c57b8a68b8474e494545e25e1704e9669c9e9361529c26d9de622dcb34d3c4ed7cd653b99871e1ea92eaba196b01e55e63c2a6c81baa38a482193832d840fc83e51848560adfee323fdf39a41584175991198f38855afb5c2604adfcee7b556f06352abac7eb582b12a5ffdaaec5b204aadb12af3aff690e0178b05d1be86df178aa961ad1fadbef1d599c36af881b7d6295fad9fa8c107e4ab5f2cfc2a1a5fadb1af66507fd40a7ee2170c94eda80bd45aebe7f42920829586fad5d857eb075ad52fa4cd943e9e8a44ac3021e0912afbbef008a47d5f15e2b15445088f769680539f87fe11a086605008fb2ae830015431aa7f3e8e63fdea1a55fc86d4fac1be0fac35a91655b1f27cdff7c592540abe2ffcaa1148ee30204e507b1068e073a1c23e066a58c1eadfd4f7b41afa67c6fc6f350ce83f5fd52d58e2036bac86b2da53c117be4fac81b509acdf17fec7330baab05a6546e1110446f5a3c5c4afd65a65b5d6eaf77101c6eaec0b41ad0af4a5b5824475b6f35551563f0bbe07be073e074007bdf2a8b1efab3de108861f03dff7d5580d737526a4eec0be0aab3b986aadb502f9a4643bb3af5e893cb2af6650c55ac1af86954975e073fa827c3b9fec8355b07ef5abb5eac0b7f3c9c20ac2c05a992a5883eaacf2d45a8dd4073e1a28ab6258bf5a6bb5c616f87cd4f0abb0b03a7d3b15fc1ea820f87de11756a7efab0d7cb43aab62f8d55a6bd5818f26036b2886b556a6af3e43c4279008ac827556439f3a9bd5763e00f2408d20acdf17fb64b78e0a18ed30a9f5ab5fad95c865ce730f4aa8713a58c3bf033270da74f0f3260d0eac183e681006185ef5c300a72253c5a5b254781432696888f283a16440664a9c29ab644113320fc8616283183991f12972b23bce3085d12384e9875697c2a8732cddea18b3f4743879a3f300d1cdcc3704460e78e88d8610a961880d086ecf03c1ff40c06b48408adf602af88759dc41bfea49c3dd454841d099bc3c8bd337774bdc95756a625a2aa294847464e40e82fbd4d8d382cea4ddb6b4eae101020191e80ac374854d6243becadeb832e6d00583f1c82660c09590cc51f883078733b113bac226b30568417cb274cd3a083d001fd8d9311e7189d814a381467c683028bac421ba7c807065c604d2e006cf175db03aba603c0d64d1c5b38190e89af9ecf864466045b016ba28b0c3800b5842305d3c7e78fc80443d8a449f1e75608111119b644f200ff049c4a10b74725414a3c578e80277620d84433b47600d79c221da1218115907b10662b4d8141e1f3c3e663eb305641d807360893500a2c1026ba24b8229e1eead247020acf1f088f5082b48042609a7787ec43e19073220b227300576d4d80e080b794010fc40192882335a90109469204380c714ad872c26aba02c540a8bc22a320002b932830076a66b070f577ac44220a2122ce1175880acdeeba0a38c056c51451b279a48b1a85410130555c111268cb2b1461105230f51f68107509ed431c5150a802005a3175cb020862fb4a082890420e0873245e4040348770a3abfd1469c2eb0b8828d014a202104103c08009427172c81e0811f0ba431a2841f7c2061042b07826014821d5f3480caaeab0e3ae28003840f7e2cd0430b26964822010838001029a0e0c52a840e3880f2448a8a299690e288179870c1002a986093002472c0e18b0959da88a305160940224d105aba6e2915d5a327ce186fbe70828d114514400715c2dcd22a04103ee0402aca484da8470f15533841830c2a68b9650800905a1265c4c77843c5144f2c614411050042871550d022050052478cd498948e8410e8117a1d63bc69c0134e2cc1c6882280d06105155008a3450c2b2920545044d6a1d304031e3bbc082206cc970070606443982f3dae1e667580747c73c0e87c728867c21d3e1dbe3215e93b028d2ab9430412017f0108be201588ac019081ea13fea80bcc12400001700c79f0ec187b1ae061602708adc74c26c6645f2c068381d5635a681240d1259bc966e10e714936031de0a9baf204480c8ad1c4a69087470d796256e116d803f608b7c81243576cc7279b85433d0e34f9d045db80a70c87765cf99480c034086bec694dd791264a7a64f9425ad844288e2e32b00c6973a5c26a3d20b0e0ca17360012f1ea0f1218112cba623108a6b428c003ca04f0822b5cba189871c0e383c74795250af0444d83a3eb69cf2eb8ad30ca66600f2c2bf402e68a18ee88395079245d29c386d9902cb488735cd8f1edc02ce821730a31b81fa0c192002c88b68436410c847088cc090b11642ec0b2430a0b8c465a7a704d4e50a26b27cdc990a5078947dd20086844c6c0d2159acc29461377804c5217800ed096c0d1459349f550894c80442da1cd98f050954f4474fd08879668b15a023d31da4e1450083974d144260f5c7de9828123acc63288d1604662439040eda4330a4426319a8c811e253321e193d90f1f41266860812122110ca24c70852692b2a49e2426a929194f286b00560397663c21056f816c26a38545300cc2260b2a0c08f8035bc06826e240a728233e226d8119d395244f7694c4a050482824b643d7901da1121811d803332161101e47a00358bac8a20ae640a21084890014020b4860f4071fdaa841f3c30e389c50c2085c3a2b7771b71040f020001b684035d504004c6a4d4941134810c1874bb0a9838d34caa8008904400d3020ab418a28cae490415405350714e0d9892991a6881ecc94c1e1063235d0a041100545a40c315451d551c701571eb0b14602ac708f15523073488cd064665410c3345bc0163a98a9392dfdf0b1431365418020e00020dc12ca1300482d89aa291d0921d063474f3806052f5c1000a3c8113ff8b043091c6cc0b4e4e323aca28d9c0d901c599ac962406c2922081b06c0c21711bcc68c4901ca13244628e0a9744039be39619c5fe3831396f1850103a332e0d3e2cb628605cf155f151f155f9a0f08f0872f2b9c52855408440760417a18f87e7c0a541f3d128021f0f5a863b8e3db81d1be99287e3219ec0b2b586bccdd9d88bbd3965c021f656dfc9e5776a366e615dd12e34c341d72afa00c07976d6d7ecc4759d4283be2ee13f828fb31ca78fcf639fc421ff47f4b53a3e66bf3b7f9467ad966abc3bdfd8dd1d7e6efde550c0d2ec6981663cc89dbedb15013bdbaad17fa234f1f74e4e95113eb5e492149f28312172b1204831a6355ae3389e6bbb7e515e5ad634beebe808fb1f712bddbbe8e7989de1136052ccdeb36167acfcfe1bf38f3d49f716e67bbf55f2cd4e6990f9f01f994707721ee1e81bb033d50cf703a7a249f738a1bf23527a7262726a725a7224e4a4e494e484e474e464e4e4d4d4d4c4d4b4d459a949a929a909a8e9a8c9a9c989a98989896988a302931253121311d311931392d352d312d2d2d1559525a4a5a425a3a5a325a722ad25484a9c852912245948a2415412a7254c4a8889352931293d29252112525a5242524a523252325a7a4a624a6a4a5a422494a4949494849474946494e484d484c484b4845909490929090908e908c909c8e9a8e988e968e8a1c291d251d211d1d1d191d3919351931192d19153152324a3242323a3232327237dd1d888fe1d599dca528979114da102d2868841f81364413e17fe845f8ff7f77ff7108dc3d7c20fcaf39e08dfbd746708dbbfff0113c338232f8d7685fdbb97bfed36e5b8765e6ff9dbbe72d5fadadbe3adcb6bb233f478e8ce039824ddc5f9b3bbdfad7e6a3f7fcabdb5fd3259ae2abcfe1df297e7777c069b5dff6cb9b853351cbab3e82e307b5f17bc1dd77ea24e39ca3b670ce18cadd3f1fbf2fdc9d2475264bbc2bdabbdccd18277451fce4f62836370f8a7677293e7e42ee3a9357e6b933beb2ee3edc3d017797720f7b20b987a0bb5bf9589bdc1d0177bfe969b5fe9673d4ed51fb28fe9b5010cfe62d34add5f699ea1be5f6e53d4f8b73f7d1dd79b8fb0ee771f71d77a779397463f473e60b05fdd5a75df2e40d2929bdbd36ff76c3facb3457bdb6e7ed76bb65bca99edc1a9f7faf76af53ddc5c232f3799a5b1ba38fb92e8a378a713913bdbafdb713fdbbf539f3efd5df8486826e7f79bdad6fbe7b6bf3d4e1f6cde5f04e9ba8d5e1eeeeb150330b67f3be66deafb16cbe5af7344f1cd1d66199e7eb2d7c9e554fe27f9cb9b5899abb7cf72d7126cff674f1c65dadb742dfbbbafa66decd41ff160b35793cebe4c9adcdf36f48aa9e6e286aeab6b9b52bedcd7f9ee6d67f517cb5c53d6ae630d14ef163acdf18e5c2504ff632dedd1d116afec5caf67c6bab98fa37c053db9e39d4fcabcdad7c751be37e4b3df928fed2e6ab75d1bf19e76ebeba5da2f6d1f4b5f9bbbbcd5a541594274f3e79751bebd3fed0933a6d993c79bb513d89c359689b8fb7a640f3ec2ee8f5935a7f160e9f3ceb64285fddbe5878ff4e79a71542cd20f2492552d99e29ceb4a8f969eeafaeeacbbbe43c6d129caf07287e9244098a71b84a0a57e9f2de27b8cba3ba3bfb04777954523002b8bbf5b1f6c4dd83aa9497ca1bd169abfbbbb35aa739c595f88919232b9890c508cf086e340282112a23488c3c1931e2cec32f2441d0d7bee88524f81f92e06b3cfc43127cd07f6d48bf940f4623b45a1c77ff9a50d06ffbdee3e1bcd16b65f346cd9a554d67f28aa80673c732778fd137610631ee9996d849152e532a7d016f67b7be3bb3ea87a89e325e725ed9f3b4496a35dac6a5796b14e3acf42dadd05b96a6cecae4592b9eaed572e7d53ae39cefb6276f77372e536da5cfd38a87e4a9080c45929037acdb322defd17baf5e5bddd0bdb9ff5dba335173f757b7cbd2f2cc7d7b1dced46d7d0effd02ddd387b7bdbbd39abd39a3b5bdebd39abadd329a5bd37776fce0abd27cfdc48903cddbb44eade5c7ae250f36eac7573ba2d8a6552d1866e9efaa152aa56b3bc12b5190bc9931f62f2544aed4bb5d1bbc34e6ab5aa2d8c2631e06a21aa1fda20a844539c99e8b4d5ed8b95ed4e42c7241f772958b7f5431f3ca9f3dd7767b3e56df46addcf38a7b7d5edefd99ceda316bd1bbd5a51ee8ec447a436eee4eeeab689c35adb1487cb3fd31cefbcbabf5a568744c65dcbdc3c33e3f42dff5ee9f46b249e5f9d5a1c1200b05053b7ef0e6b2b5c6a2bbcefcdb91dceb9a3381b3577474da0e978c473bfbae551933b797758ff68348714ba396784c6ddf10efa7234d29142199b5a5677afb4b933f2c977dbf35e3d6a71bfcda02fd1cbd3a92e2ac3dda1f858f482bb935ae3f3778acdc742cd212551bf85cf7bf53bbdd258b775735100bcbc4541574518e7ef5dfdbefab5ddb275611b4916dc9dca47d20277272fafb7bfd4775b9c59a2668a95ed93258a7157e3fd5b673397c35f5e2dbc239f2482631f6fd4fcf266bcf5cd18f84824e6ca2c6fc6bd7d2cd41cbaddbe77f5256a5e1c6a53adcd3fedc655ee7e818f44163829a4efcd3d8945de20a22f2f9193e5ddb2ba3d040659de2c1c3e5fdbadbbc343687458a6ee6a83a1aef334b3be3c53bcf51bbdbb9ee51555b97b928f43166853b7b5be5a6f1b8746a29b79bd6c4d9c99bbe8257d24b2c5977767d191081a77b244af26d2e54ede96dc2af7e61c9129bfe9f2c44cb8ac93db97f7e2b8eeebf2c4bacfe12722def24f6b6ef46e6ddeb4c4fbb7f0f918ef1f8744e14e9e76cbe652b7cd2d336f7df3f7b6599a2915f37c24179753ac4f8cafeecd39abad8b5a9527aed5aab6bee590009ca7b51a87046d8bbb99774bab212ed446b7ed2dadb646a11a5c5ba5425c4e4ab9094d91526e682af47e65b5afb60a6243cb3cad15efde2cab7c73a554148d626d6fde688a77365f33279585c34d4a13bd5570ce692c7b2eb1797345692c7be6ee8df231e8c97ba74eb1a975f3d532b1de161452a08614ba5ae659ee527d73cd470aacb89317c523053677b7f94881bb9342e8e57dafb4379ff633fef2065d2df3fc4d01aacddf57ffd5a9e5bd6d4ac9135b940bf0fecddbddbd6d66de364ec073726b7b7ebe3b671fc5583fd6e1fe4f8b6299fa3746519b64821f365bde6bfbe5ffa3b67cd12d28bd8b41ad568504c90f3de530ce53514f5c182a8771e621a97aca7849160e9f5056e5d6f74a82dbd656776394c847098284c4b1ad5579cfb4bc3a9c46f2e4099771ee49cf9eb744b2cd9dd9e4696bb349cf56de124d31d4e6baa84e5b26b55a954e5b1dcea15238879a565ac8e88e5e1ecfeafe51d3ea7044287e144a047178f6e6363e465043ef3cd39cd617874beff968045d252faddd220880fbb637e35edb2ddb0834e76a7b33ee965bf83cafae0ae80a7757e223909812b5776bdfabd7e1b6dd5d5c9a391377797a67d1bfbaaa1168cacfd3e2f2dda7997bd4c432337e281f7fe4fcc8197f8670777283cff86ff9eab619456e5df4af6e3fcee6cd751fef5fe2ee4e7cfcb939564e798f859af7ea7738e732ef2f0ebdf9e66e7e9c6f15fbdafc9bafaecadd2bf0f12781bfdbd498b7c3b8274231fadaeafeeaf6dfd2c4992995d2528aa477b390dcf4b41bf42e06bbbb4da4a454f76ed655aa6f8971bd8b8119df577f179799bb99f753a4949bb6da2966c0c70ff25b629cd5be1a82396ea5dbe696d508419bf334b32040e3a4945b56b6bb9b21d0e2ae2f96e559f1ecd559ed1bb5d1ab759154f1f0bedaea787aa3d7c499b95caaedb64aecb6a5ce77976a14e3369ae224b91b45e75b9a5a38f36c8eba38143fa9d5aa90d46a5556e589ad70993e30844b01217f00c29317674fde6761bc7199eab73d707337b9ee5f147fcefcf29a278f97ead7e6f76ed6972736d2dbe6466f697e7975b86d6ee9df3a9df25240c81797a9fe0084bfbaaa079cece332a5ba57bf75bafb7c4bf45261dd1692aaa71c145e9a85719372eba248ced326418265e6509ce4b5fdaaa7272e0c759e16d7869472d3d6ca0134ee40973b29e5565e34b5c265eaee3e3e3a7023a5dc7a37cb6a5f5dabed7b9e76eaf6c1df4b85de6c794ff2bddaa5a892ad2f9659ee94b75328b59a4e5b261be36cc524dfd25e1d9227dcdd404b3142e2ba255a4ae16c529092de4853fa0192a6f409773708928193bb37b93bd312166ae64d65c5d37767d18db3bc1d4e52abe16e897148492912ab7c795c76974fbbf1b6e2b23b244f5c7677adaeb657489092d2272ebbdbe12ab40124f29dd2b55a932c1c3ea1909497c733f3d6b59db65b4f150a036adcbdbc54dec8dfabc7fbb7de676a73b7fc7b5e991abd543a937a9b3bf32ca2e48e73a8d42d6dc6e26910656bdbc4dc262a55c53c2d6a2e89ea9d3c9e6d77b7ee69ab9bca77eaee30d545f193aaf26ae5ab6f947bf3129c3677b59a466f16deb59a4eb7dd541787dad342e94c9e76fcc186932449c1bee7d0b63763fdc64f9ed47f5a7ba6b8d3e25eb7cdadc742cd124dff66fb9783daaeb93b9121ae3359545484545ee59a949c8a8e90ac1153124ea94c4a526a32ba4c4477dbbcf555aa8bf44e7116eeea7045dbc4d269ab43d35aed62d98cb7aed57e24f0a3c7b8c01cb7afdd7edbbfdb6efde5ddbc34679c04e750a95ec6db96a87572da7c79504ebbcbf84959abed8c79bc545bdd9dcd39ddb353f889be1de89e9dba3767a57b96a7b53d93e870dbf2b4a9446b7be23848c2dd4b1f1798b997a7993a91484438879a44f7b438ad753b7767512eeb84dc995bdf2f7f2e8ab79953ac65736fb192af5dd43c7f87f7c650afcdcfe9be583dbbd329ee493d4985957cc653eceeedf3d2472f0fd7b2b4991fddc29f53dcfb6d1febc765be5a770b33b995f7e61477356adefee6508b1bc2f956f921bdf3b4370ff914f73e27f53f50a24479f04f6c4caa3e4a54952d2aca051f05f555541a387912bd3cfce4c9121dba5a53a1f87ba8ed496d6fb7a15bb679a3188785e2d3de6eaf87742e876f69f3d67707f5e4ed96e20e46f8b7db2af9a172ea879e76a68e8a679d5c2c7be46fc6fbff45f8ff7b9abc1dc661f476bb457d049fc376eb9de2cf61526f134d5f050e54e0717792020abe569a56433a77f3675d0fb54e30aeb2570915166af66c895e1e57142a1545cc03e7695188e35f4321cdd7b47c0d85265f43c187fbd7c2bcf1af8541e3feb531cc09001fc3f8b87f0d0c0f9ef311cc1398f06b5f9a70ffda979bbbbee6097394f8da095d4ea8fada0941bee6058dbb8f5eac7ccdcbd8658baf75d95d9ec62ea2fbd76a15171e3cf0918b9493bdcddbdd7c73b9f4ea3546ff6b28367569a170be55b4a9659a7677b3166f0b14ee7eb5d5a5a9a4773188a29242a5f08994a4c1167ea2d3964929b52f7a9b9ca7ed9e3c3357e1aa5283259beb3ea1daa094226f5628be3d6a5e7169b95a94f0dbc627d5cde6d4da9c5a2d41dc1df422ec229ca18619b09c7ef444b9f3ea3f72e4c98b55deca73f79b8f57b8c81bbd453cbba3620a77dc1577ff6825349d71e463d70cee6effc5e8d2911f5657902bc125a441ee4ae0c1aa84a6ab659250e79ffc30e0ee11b84f968f2458f56e96d56971d85190620577bf3e8e3083bb2b9147e411d189e26c6aa1370a28ca7bf5bdf3caee74e74f38e14d3c6162c5d322c421829b5bce515950a2742671dadc15e1b4b9e3f2b14a1a7d53adcd221deeee1dc69157a96e9b58454535cddb5bf7db9ebc3792d3ab656af4e66ef9d6ddbf2a66dcbfe653fe84a68a54efea6f696a99a5fdd8e8e9e0bd27f5d58fe2f32ac5e5dfab25e4dd99dbec9d277a35d6e13ea7b88327f52d4dad6db3e5f1eca725cebc1f3224679637dbad0bf5a4e655a06536d9e6ce6cf2c40ac5e8de55d56a1ac5a646efe6bab59a4e5b26176cc055b533767271172b5b5d92d4c8befacd18727cb97b5d43670b71f7de69c4b35befcc3d8aa1c347316ef828c68d8f62b6f0514c123e8a29808f626cf0514c0a3e8aa9e2a39893c70f0414189f9af0f189081f9f72f0f1c98b8f4fd8c7a79bbbf324e00d4431ea261777afa618f3163b77b9eb94cad5484a6ce63be5e4e9b7b6f7fc6dbf77c543031fb3bbbb07544ee0d9abab7d3d54788408c2fd563135957b731d794a765b253a0b879b94b8077787427551fc04978ec2e1eee76993d86d95d8d0b2b4b74485b867bdd34acbafe14c2cdca42aaacc1877710e2dd2670dee0e86e279da2419e73c6639c077cabb69e0ee517ccc8ae1a27863dc9777e32e8feba2e90f2db1ba2546b3926435e0a569738f6274e86fd1c6a5cdc2bc221ede59fa2ab139c5654a65c68cbb9771f71c0860cee05eddab898277c08b72060b1f75c871f7d08c0d3a4c256044134cee5e2b58e1032862bcd090c6ddc137d40821081ed8c0a086bbd72f68402094614f67dcbd5e7185c406843054bc70f7af495405637ca1e04b1cee0e2a90429b355c78218d02dc3d168300e6d42b6a7458e0eedf9b3754b052c705374cee1eca7093c1a08362ca174e744b8c3a216fb7ff52ca8deaf6c15fadc19343e5d5bae5a4fe669c84a4fa5ebe5af7b7d5ddc8fb641469f26ce76993903be5a1e6df1dbeddbb0457ddeecd91b7f3b4496ef7e6863e03f49e9b2b357936f2a6541e57599139fc64efcce570895a1d6a961963dc897178e3cc7b9d6af46a146f9cb9ed0eefd40ee9279fc3b6a6f7d57fde12eb94bc5713991b635dd4cc7667665e69eaab7db14a8bf5bd7d376a4a4dd9be34c9d27cd36ad9f2c48f859a59b7cbcb754b34a73b5df2a436b7fd8d9aba3f6ffed2dead5fffed9665f74b4dd9b052acbbdaea27adb9f13e2dcecc786b53979e69897717cbeaf4efc9db59aefd398cb569d5b3d2e4e63ad31c942785ca6c7541da2c5f9b4f6291f787f469dadccd5a282be3ad7dd1ad2daeb4386334e8b4387c9677f3eed5ed56de20fbe76971544f1e1169f373e7d5db7c2892247f088908d40f1d11810ad21bb5257a1fefbccd1f827af4ea38b0bc9e3defcd9677715c7763d4246f7a532a9f6f2ee31ca931ef7ba87d54efccfdbb8c73f9f2fe5e7dcfee48ab43314fdf6e5ba3a6c5b2aff54537eee68c71f96ae554ebd3b4fb968f667b4f8c799f85b54aacdb77b7c1736dd2e6d43ecfd4e98cb5beb88bbed494ed497d4db2bc3addf6b579d3d30ef5ce244fda9cda3ee3dcc627d9dbe669bf7c9367ff66a5b37057974493b897ad96ddb6d4a44e9ba8b9e4337e539bfaea7026c6ed143f14d2e4d9cfd2763f512e47f5a4c9b3544fe4b76c5642e2ccf32ae57d793faa892dc9dd168762dcdf9cee1be549fdb7a6dc4e6f7fafca7b5177d2a2f96eae6b4dad2fafc63caefbbd9ba5d3ef9da7c539fc177c79af2e4d3b75ef922a526b9e69f672e6c9dbd9bb75e3edd2abb7bf2fd60f61aa27b7a9b5fd7ccdabd3f8c9df6eb7372244e48de46b3ab977c90f79227f6fce2ae88f3ccfdc56fb9e468478e60ec29d166775e47fdf33e3255f54f4376314cb1cda3acdb7dbed49abdb9f6fefea878478e67e8c067d79ab989aa877667b9a3b53bf7d34cd441bc5f976da5dded6de9d4631d6cd8f629eb9df5a9d7dd4b4fb0a3fde7fa6bbd7e6adb7cd8ccdccbb7d3635c6403c73ff69d39d4d2da0bf3be5ed30ee76bbe6c9dbe699eefededcdb3ecac5a137978372f252253c53a7518ca930ae8a92daa92936ee4e4671592724ceb7ca95456f895a5d4eea49a11e6a3f670669f3edd6dbe2ab9b35cfeefe4685434daa27af99377ab9ac93abd347cdd7d77c2eebe4c913e77c75fab71b5100a07050f5e4b6392d5fdbadab656e9cddfa12b5bd9b75753b637bf1262f69fe902eafd9b35b6fbfbc17fdbb3544d4bb596f9fd419e77a27aacdf3e6bb7577afb7f943367a7137ffd67837448994ed496dea8b5e2c9df1b69fc30fb4af06faab13d2d7dce6695e991ac53c7df3e3cc1d4631ee3e166af6cedecddae5abdbf82ae87b67b6b79be67d7bf262a15b5b4f0a0d9d415f9b7a725ffd96ea6b5adf5c96b65a0d67e68b5e2c0d2e8a95681b2e53aa3249ef62509a658a4197ef52f4fead0a9729d5cd664ae546c1a089bbe332d51697a906c01564ef66ddca1bd1095e437077d4c70bae70f7233e4a89d138df2a8f859abdf37cbc5f6ff3ea73a64e3b2e53265fe84ce28a904b641211516f9bd9f2ea57635dee4e4209ee4e82bb8fe0ee56dc5d04900a77c7f97841cc7fde8a952fef1f41f256acbc5010ceb78a9536c97b73aebc51ee799a183cd1e0963809d592224b7a32ce392a898f5144b8d5fd6bf39e57f6f3e5fd46ad99add6db2455e769934c3515a1a232edef2cbb7bbc3fdf32e3474d7c657f0ba359dafc27ed89bbe5f776be3c9c790fb4a4a988d640387bf26ed6e63715a1a2faf2ee5b929a02d4dcf782e7e04a0979b3b0166a6abb6d99c33a6d996c9dcdf496270e7adebd59bb77f22497dd91faa6da5e7d4deb099e7c149b7f75375e4fb75fa3a6c501947da8142d5197919a059943cacc0c8d00200000a31400303028168dc703225197132aef14800465c64e663c12ca669220466110c3300cc2201402000008300000639061865b0f3f86d85335fa705425edf226ff057058f72a6521621b0461f8d861800d97036b07220dbbe999890f7a5437c52423591af2360d2db5d36c1512d453327447feecaacb1c41658ea9378a35ca860ffdba3bf58a6bb1096b2794e3f5d86bf38f50034b158147afb46e3c7083ff85205f57359c4ea773cf796528c1fc30baa25413817ca0d310187176862b693c18b16bf994326648ce7e0059e56f895cd004c4556714d64453502f8976522273a8df463b5604e28f7428377e77c96650a9d89dc8847080c5911bef2b20a8f837d8e85ba7dd7714df717ceb6e59f10d13208dcf919e5b756930cfcb3675a077b1509f29626ae2aaa32088de3e0e10e339220d391fc5c3e223b995439511252519736d6cba0454a5bdb00bfb267621150f1acf1d376021b8e551fb0d1f9eb49bead95c100d019ff48e0366d70599651f484609409f66acf90f997ce7bc3b7a16cb0c04a23fb1de5cd11273e29c171ba2bce9066a1313e00521af534c53af5eb7e893403a42a39e1ae2c3f19dcde2e0bdee2cf45af38c55be6032c22f60aa83ce4b8a3b42c20f531c7e9fb88d7d2154699fa03572dee418faee8f31eb755918937e2ced8e539f95a1f2375ebf0916361b933dbd70fd63114757c8943c2017ec438420917bdb81a74b859903a22e5284d7d0f1045211158574703bd1e0ca0b45f90dfd50cb2b534beedad0c0efd87440f08091ca0668ea0bf8bae2a616ee8394ccd86fd12c33a395a574658f828dd92fb8521c391380a42d19bfb4b7ac9515ffaf22ffbda8eb7ca46ff87ed162a439c95bf22d245c83971cc98e940a1bc9bf39712ea30de124a491cc538a1281bc1ac959948a2fe762ce772bcbab6a3ba59cdadff327572bb8e75f25bf4b79dde4c529fcff7cbe0340508675916dad15f5338667f6cf55fd18094e59efbbb17f5869eadca6c27e16f31179a912e5901122e3f3f7fb27f21fdfc33d05e7a83b75cdb64e868e83cf1e8128521a2c03245f5a9ce2853110a1ba812f76186e59c57860e8fb385e5e421c62bc169594ff8ac17b9cc73aa4f51f4ba79ec7d86fbf282d79c1b845bf18375f0d8e6f908040797a3fc71b1c88389870e1d5d9c63a19e2c070b66cbed6e5634fe8679de1cb3a48ff4b4bb25e4259a0778159937e429f1503bf027ded6ee809c6486e8f8a6cd87aff993e4ee779ff4bd3fec7c4df43dd380f18245144009bcd08c512b932bbcb000cb2614bbdff395d96a698f09370bdc3e9fec3b0071fc4d78c315376811a9296a95291240facfc342780616b012f722c3c66f74944bcc8e0100416838b7cb9fb99692aec1d1d2f70722744d76f45493028f32cda5fc234559cb8887317827f0ede80286bc13bbb931fae7909fe10308fd1c6205e619fe486346be83a8c607d020de90a218aeeea12a69f1cdd4a34d63031a5b80d6938f74f213767d7235994da1e85032847325d2831968f86b5238bb8de477c0a7bb9d76846a0f6c4de81bb0e05f998b9fa552be6dfef70294c1a90f33ee566ffed81ff5ab1900240f2a00bd67933db85582de2c5f6ba57906ca3df792cf2e7bd330798abf6e955ea9ddefbdf74bdd25d757f3cf62f80b1700fb005762cbf20fd78c0ee1f58a584e087b923ed9f5bb7172d28261d62f10956b42b010473aac001aa3b0ef283efe1927994ff6f6b535ce3b2a80c79de6b34a6660d438bd1abcc9ec214857e58c019cfecc1915042cff111aa21e205c9c1cd6786d2f64067c35918b82a34cef730bf46bcd5768874e0cbeb4de78fc565cee343ac63ced5bb43464544501ff3a03e761d747088d82210f2a5730b599854422f852fd769c12433fc31844d03bab7b4a82bbadbffee18007dc2caec01979237a47780b8abe2398970f320e2987a346ec4b325e4116fe50cd13989f9a9ec0bc8b2fbe924f69be352a6a828b4423fc40559549736ee3293a808fff058de6237e41bb87e1d30f5062e1027f169f03d117ce9dae20d3a857eb23c04382ef548f78639bfe39f8cf2a753fbaf22ebcadf7e5f1a479281adf3b110eb99327c2b217eff9e9fd2188153c5f61e8123f83862e95e8cbd136618096c1e5199d4ef52d51375454ecd16e165365b119f3aa6f6b63da78be61ec05f4ca2bfe8c624ba7bc5f48058075a02cf7f2f0e8444da80651bd7d806dcea44b78df79cb7ef0853ba467c4103ff022bc45d35594e9ad8d53a51a93001f8e3a5d1487d2665dd35413aeade9a406b1d1fbc918aa8b78afddec9ba5c626c18ef48f86ccb7f2f4dadc27cd8431a1fb2197569d96d8aab4e6d92645af2188dd81c0aa657dba08ad603ef4a0f9aadf038b8135dc426b7e7225432a1948b924e261109013733b18f113385456cc80b4abd0b644e31b1c989ba1f30b78fafcd476f59e80aa47d229ea99900bb63ddd35d32ed786baa473aeab59613637709e74da0faf0049432897c1ae58863f69adcf1af4fd2ce7e20ee37a6f525092b8876b8ab2469700e89b88184e2f1c8ec3cf178a8fb460e14dd636b4956f843c471bc2e7ffc437040e6e6e6271ffa91992cb9ec62d6b1d0952c94c70889bc7fab1fad3f49fa196f7490c7f647bff2fc77ea15b66a3c422937cea3431e8fdca5145d26ddaafe407e27e2f2e82de2c7e2b66b71c5ea75605153e6cbbee6f0884305ba9df59a3ea8882fc823b5fd406129fd74dd9bcb2c59c1d28692a33c2fbc43bbb2826c944f22607028ce8d2b90655ae0dded66ced3a7c4197249670a9816db2c8091edd7986e9d129a1c882bc08c605c5d9d7d502f02d5b229c0b8213343820e183234b357fdd18df42321ce073a98a8e3032999cd3599e7c0bc42366204949a420d8caef60bc1040358844169391f41dd70d5002bce78eb8316b49ac7b3765cd6c6a10e681d7c67c695075ac363db8237334dc2b273475670c1076388e16d8f82cdb9b4d7a4b3ed0236ab754a864a008d6c78f5e02c1bf0d042e4610d385f819fca8101122c42f9c30a2dad74091c8f3a453cbac594681a7fcffbdfc8d3b42e02fb22fdb77cc1249287527afb13d573e80158c73cc5678fd76bcdffdecb1592129753ce21d91a47929d4dc0131416f807ad3e2d83b22b2871a8e9fcd4e1a3a6c63d6b90f3eb7e34af94d930c5b8825eb59faa289faaacea0d74d9c8036f2b307093a21fc5162c81f9eb72bebb2eff58e067bb440491b0cab634c3c60d177814f6f92f529d0a1b6c28e9a69f725ee504548f73ce3b65732c70556b766d31598a0353b85670df17c7e11bf3234c2171daa97abcd731fcfd5b433dd57ef54d4b11dc7cb1381790de214203ecb43a8bf00cd82061916e4bea46711c097c75591cd4857bdc30cace8a0c777b0878248621237e8e6b035ec6d55b4d81b32443cb06e6c6db258e56b3568317e41d22662264e3026dbbfdcc5f18591099d9d1de5b5656a30cde9a56ad3d357160bedc1c108fa2e702900056d810476fdac83324a8390d884e8e7a410e88e5afa818e19e3bc012b3f1e043639459bec3694ae4dabec188851c53e4a3b222916d7ab792944cfecd15076ec33fb1dadc51357264d0b585d01dc0b240743c474a277e3855270438dafa0587d47d132dd31e073983faa69b3e3272d3d27de36a7da77c7fd39e605c7da98ec5b909c9ccdf06a937537ce9913a62f35b38e4882280477ed49bcedfd0d68cde70fc8aae7bc396a5643c4f928736471b6aba9dde7b6a92e8d8fe6332470f3cf30555a18f91fde68f4e4dfad07e8e61b2a243d166ca42d21606ca73290d9e4ed93b3e6d974830ddc79d9e2b14f1d275869aebec011c32dcf618e1bc77ff7644c214153de42642ed2f0842d2438badcc79eecf480dd930045626dfc7685da364c4524d7eb12d792720bc824ec34e96c909d1e66d5bbe3988d93a3ab07527826ba00184791e16a9d8d3c3f18dd2d1983be524c19e2bb3b0ed6ca038dac03687525f36522021a14101abb308a70af3a282da564e1bcfe0b55e4d0660008b9938f5ccb008a266b196fa46d95f5001458c00b4a88d69cd906d438a88786d675a7d95e19a351aaef68121d42caf822b624a784e4982830751561386144c94812a0e68d3707664e99af9c5119d9b41876f222464b93443c4c09551be474853f40c36f36e09639840da1bb0cac763fa5b8e821ad8c49be03418b9faa9b73d16eb737bba24b9c6ee9869cfca05019f0f6ea883e0c8ce4da2bb6f9f75efaed4cceb08b7a7524d3f1fc5bdfd94728e71ee45b05dfe86c652afb59da607dcd3f3a6a94567b74f31bdbe73cb2d25591386f7063525b9895b2e1074f85913ac3782f79010bcbcc5493a55baf50574ef5769d7df42b2b2742fe8e81d3ab31e6fc230513e264494183744b87c67bcb7db5047791ac36ef77e680e6278418113d3acef5d1d381f7a6299620ddc3bf5145730f4141cbed99ee0af66e62b86ea76e21d52efdd5b15fa3c86ab4f92d4d05a5d67fdae0359ba077ba53f1365d0e65773828c6ae321f9aaedca6c135ee7ce63ab4ff3889d01b9befe7f2210954baa5c5876d6c06fe316298ad1b8f0d1a7c8d43cc660a1d0adf26261a5128aa9da7d92a6492764c3a625788edbea0e6b80af9c78f9086d3fad903eb2e5eaf4ca5cc6562c0aa401f40802fff5ba7b787b453ca4ca310c6a4f51380c615281d4204321316ab612418ef199e78d9a42a16f7e3be52a8e19482fad33aabc55ba6d0737ee96d1c18f22bd0601c8daf80211ce271aea5bacfb8ff01eefea521392e471ec411934b5a1e375af1285c6f8894b7cf5228c94cd5a7e88db3dd456ffe378cfaad5de375b34aa8ad6bda6c0412d4649c33674ba5662ce1d1a4b690fff00c369a30a3f5238bd5dd66fa6e139f3a19dc19b428393325f2bb0a92fcfe07d9e8ec560192c07c02fd8585197a701e1ac60c3317083367d905c5e48c24e93d5e34c688436448aa52f3d126f4d366300b4256e04fb4a344b8f6d14a805df927100fbca130fd0d5874404777baf9c7d2eba6cac45f9f61ab77ede5536f1ac60412c0f3981af484c0260f745a8a17f73ab03b2395301173678d7556434793d7be6bc83c4cb308682faa03c3a1d423bd6f4a304d42d36b4314ba662436d5ad8443d1799d5cf05ed42b83b5e54239ad57d30033e9893c8e6e2cbd683900348b8317c862cd2cc4eec5431e142de80082a1375b94ef48cd20d81da02f04460d3e9441f7a5f434164163154dba793bec604a0a2acbfcb5f999a8a2b40c6f744ea8ac3cae1cde48caaaa1a0d861b8fa59bbacd289eb3ac6b0bfd6b5a5c9e228ff2aa4feba61afd80ac4497ac3eef0386fc9930526a821c5a128c37cdf0f81f7c8b78d166a4ab6fb1fb425a6154f9cd599bcdce16be0b346bf3e3710c8eb2553737ec61bffd54723a8ddbf779b4354924cde31e551a9ad727da58fe4d993680b4bc859bd62940c8610915f1a3acb33760e0aefd3215098f7c37e41aed1b6a373c93d6ececd2a10670fa606cb097c51d30e1d59deca9efb5b1b162e6488e56918272d048372a3e1676636ddabe34710c32adbef90692b4f51b6dfede01f04d92e722d53227ed521700065451bc1b6ef3da6956a575a1abda724eb159431887f04cea1431778a2500c375137b35359ed106acb5db201e11ac6d1c473a3244654142f51e9da866d35fce091de9b5167001d8f870f385d1d9dc3e38fbb47be78c5a9fba363ba6d387b73b9005c9665a10ccec499885edb6589695d7443d494d091a558574af50ba4081003e82a3590ccd20136ec4ded5c1c39d918462c12ef6861f565eb5d047f14a01cca95138fcf48e1e7b01820f9f15e747f239ad9ccd2b98888b829ac297b00cd5eeba96a972c97faa0f9acb5e773f8e9aa8c4d891e286fe0dc2dc2752e8d8b0e2266182d7657222e891a78c1578290b1509aab86792d6c1cedfe93052396140759ea1c5f4ea82bc0e163f8ba19f808f2feb5e8cd6a82783f7d23f08408849aec838866a711ce3d69bbe63c1b78b3450484db9894e43d5f75a42f28ec29043c1724d8f1ff25dedebc438d9e293012c888358a1efea9f9023929242da5240c1402dfa840af2f5ce8d1c7666fb7fa300b87994f88129531207d0e7cedbd452627df74c1f0fd40f089107d3d0697c46174aa849f94020fbb6f4ff90dc7f6fdcba57962a31e3e2de47454a5ec6f1fceac7f896b46ded23222427ac6efb21bb8d17da804c3866735314a203569fcfa8722b2c748d8fe2c6203615d8631c2699ead823ff6974b8511e17c83e600a7d05eb6dfcd35bba778152734279a9cdd104c6ef5d0e1a978b2e849206dd948ed5a134832f8422eb999be4eb4d23ddd0fbe90bf1f9b8374ab502848ee8732c189d5b67d70463e19bdc359f1205cb1a518d0138d91996f5eb7a58e77eaad4af74d7042d5766aa9b4701042a580b1b6099f8c81363007eb257c48131f1836756e40e922c0fd13e63a58ec0aa40098072b40b2278d9b1862230fb72433bdb95201276797e4dce09266943f289385bbb4e070bdd98a81954e201a5dc67bd16eef7e2539ba0404a7d375a1f14f0b1c0bc9bb46b80082a19b6dd8412ac9f9aa99798b2f39d82585bb3a322e3c7a6d7229d2049b913859057d2c3c9b6478cfbb345ea44dae12102e92f449f97ed5b7d3b5bc692104ccf4460e155e32c3dd0ad216f835ba33ae9bb6e4b31292e2d6022cf0b52c7c6fdfeb7f04b633467358379c8483ba34f639ddcf1e91bafb497c1bdc28786f2eee7767b99c0c9d9bfb5a02f33c5ec8cc22b91de4d7d839c2053c455f253961cce3037cfb9a457f10f384137dbedb321e0dfdf6159147dfaa11fb0284c5a273bfdf4616e91d75f6d3447cdd366783c5a0ac72f9c06407db84799349137816fb8d0c6d4825de3057fe32acff06aa0e89a2a369a92091d33e305c22af7bc56153084efdd4483faca9daa0befaa3a494212d712cd3f5038478365d33d27d447e05c5d2635521a937ef123838770a9e31a1bd0122656e2a3766ac1301af7bb7140f65db4e5063bd428e49d06e465d3066e48ca796a4819153276400826a00c80ab826de68a437751cdd0f481f279bd8e51c70da0c6f69b43be64f842718880251f62741707a340e1a8969e22e80e98d662a245749dba4063ab478d3cce15fc5dbbf4372b65340bab68dad1ba52c3056c5a3a062ba57bb9ec5088ce174708c2a6e61b8b1dfc7e5404369c4e3f12b225c02d9bff84ea07f52fce4e3f766a3da5c3fd008d52350423bafe43a2d806b030bddd71352cc4cd64ab472f4dd0fd157a1a73ef9d194f2dc3624d77acc77ebdcf8cb6da24f02c92f14ef2a8cd05412e7a6cdd1c0f277c04700ad968515683cbdb65e3523952fdbf39b169702569afcc04b95b417c5f39e745c4f8326e6fb8c7ce0515b70931472912e4a36307531968fd9b61df38976dfc3beaaf589dd61f4bedb52b3e0df2ca3b0195f623d9092caf6f2eac0c690be51ad69db60d1b499959b02015b07e79b32fde3dcbfdeb45dc65a07b77e53a7ef5419d959ffa5be48c74d294a57dd059b698ef51f4739677a0784b56f920709da4e416cc1681768cab418dc7d394fa92bdef983673149271ce6d0ea2a6c3433accda4f4b80d6c37cc5642716c70ea6e86f14f312e2427b589cfca7d337f88aeac268c1e3eacef282853f9cde1440232841263ca9d57a84957874de4353b4a884fd04506be6a031f0101e34004e9bca049df37c9b0d8fa1780bfe5f0f4c27c1cb549bae42b6a344760a498890121ce680984cfc34742314dfa1f5296d7ae4f0d78b62dd4ac71aeb7131b43a48510d1e29e7a93f1cfdb90f2219b2dc19b60054e598251a58458247d7f74457a525f5b7a652585372c9c2ed981e922cab212a818eb765ea7d29db816f53a9cdbee3e1f002d552cc7c793ceec6829995d2bd80008fc02b255f4af74f1306dceb274ee20afa89cb94ec243e44f9aec8c4606a75046cb19c64c33d31dd444ab5ee67a108b5ce27f7b7d7ad3d289db0dc823d8b79e7d9bc3e3904a8a358b43ddc643fb03e05cc810ae6598e675377e639b730357ffbee15b00303951bc473cfa120fee81b4bee004365571767c740a98472c32c4712a086972c930d10b83607db719a523e808fbe4ca5c086510ade24517881deb52ca7754fbf1bc0b6f2504eb0113a62d8a960fb4b5a3204a6e80aebdee34209fc633f23c5b6ef6682d2fdd372dc26055102a09269ff3601c6586c0f88c8e07235635c4bb12e5f475f5dd3003f1f3c4086427b11630c89266ef00bf6c64e4e06052d2ddda5300f8e43424e345591355864c5ce5f5f0dfec42d443a576cf8bcdbf2fee323676c18f271a2fd45d5c2cd44b70ab586649596a293541db0090be4d6f99fd5cec083b82c5c2d9a89b05a1a2dfda8335ce641864b2c7b58424cb08124861186fe3a2aadae44a82c64346644d286819fc3fb2a94a242fba0b9afb7d94e7a81e0b19ac282203edbf1648be4a7980181a26d442b38c6bdd2cead390ecbc48223df0a7500d317e6e329a9bd0a86b1def992a21fe99c30bb92e164c139016e96746fffb9b16acc46c03c94df4895097ceadcc9b92192ffc3a1c8a91e5afc002789a05a2aaa14a25f0032c0d28201f9ff3dcaa3f235ee3e88cc372a3cef6f1159ffc761fe635d74de28457cf78783af229626cc920a9135ce5205a8b1a41fe0f7e712c0c4af8362a1292b30273d60d4ba23e537035464a9d141382cd9cbe018e56d9f6c63ab22eb420a831be09eae2e9f2b71854f01431f2a6e471cca5b7918a10998a670c1df158ccbf34ab507a6b3c91697617707efae897ef7e98c00e6684521d812ea86d327ff175a0da410adc43b16fe75706cffa51bbee220612011e870409238f6a85bb3db36690ebda445c0e04f367169d625b4f11d17fe2577cc4b9ee0201bf13cef2f82c78ad62c47b7b1039b9fbf248faabcbf743d6f05b7c62f6ca0dbf1696c74b1de1ffe8e3165aafe157323a01a958befc907e155955fb4ee8bbeb2939c73022542c4d7d932967ee3ab7d2b49dfaf81bdc239222c2f73e43b0f9fafd2e2e70ab2268c8706bc3c6849eb8b03227f21ded84f22ae704079e35e7b437edb4f71393a20789658e0d0ab5a2ec8fe9d7971e4a1985b720f2ada9cfb26e205ee8681a407bf3d9dcfa10aa7d3eabeaed4d603aeb03e53da13598e53800d5d08ce7cc5764daf02c06e1b5d544bcce9d6c7ae6c75626728871e112fd8252a97948c2fbe31cad18689ce3194b8dfebf75e3b05e20837e3bbe599fa703b4448d8016d3521d1c479b9ceede786718728d46925bb7db64ecdcb884696d010d16774d2f27cc478a664bfbf058faf2fc07d70c469eba9170546cb7760fddedccfa67e98e8a50105844ff97465c42fd72e47f561411063207809c174b3c5a9e021a180812ca550609c3510f207e14d3c2044b8202a9a22f7b8f19265b87714206858910ebf40d144ef2cc48b4278a2aa683d267be8585953c34fbf9578e91f00628124ed9b183d8505914639faa1551de62f15c62a1851f496bc272e30beb6f17b5c300f2c4ddfee40012e4978df641a9c4f1f3a7609e2c596874706cdc853e470cf908f8ba8f1ce883022fd2dcb1c809ee893a780538ae872992bb6634a7ad1a155566713c4ca8c7672064f8953224f1a4e0790002484e28dc5ff099b460d7a124ee3654231c7a413aa7caea6f79e2da85e741184cfe52a5f92d56ff7e14dfce38ad6ea7babd6679b07065b5bf87266f10e7748e7ed3f11ebab0a9abf90cc31f61ccd7a3632c225e6b80f414dbb964db9a4f1595e1b2efe53ee27bb4a1b8bcd30b386b4716122ce5da0dededacbefc0f54d15f7c9860650a4f55b487b79ee3da1afaedfcf6c878ee84cfaed46fae281a55b7d5d0a42016e850ce5cfe0db588682a70df8419bbc357c7f9fb52789f80bb89e81a53f01cfc3979dc43f1a17f7a717745b9a827459336d7403288987e41c0ac5bb1561844428cd7fa2bc4bf240d691d2794dfc01f4820e771ce08f0053ef0138209ae13fac8efa6b45f4130ebdec8654fd258e3b08fd0e069efc3069908f8173887cf35863826eb3e3e4c14db33e9f3d730999c37115fcc63f1f03febff2d2f85caf2d7a47b9063cb49c1b36a00be671de6c9cc965caf9c148e192c2cc58ed61576fb39c7af25aa8d46c792ff46ee58ebd5eda37c1cfedb4a1285941a0f484e80db367901ae08c5a8f1ce0d8c1e0f2796db58909276aa6d946a4351af41e731fe98fa293771c175893729f03d2eb5b496f5968e2dde717bce67418b027a120df63cfb0f28604c6e5bfed0d37912efd44f526a55feacc8949bef8efe4dec65ecbf2a8e479cbd34ed9a09f6dd840900c174775dcc4e5295858291dcfd9e3f35e6183d661c6ba7df41e3802fde3801cd9cd93e0be1ae27133f0b70aea3e6562a2bf6483bf5c690e1f8ba5b97a9ff6fdce298f3252c67ee472fcef46a4f6de53e4d670513728d93e9c3be6b4a8d88db19c55e38fbf5a7afb70c812b598af38d39b080bd57c8226342838002b17d81366a6392f4fbc1d18e8a18b9cefe48e18ec1d436fe8a23fcd40bda9284204dd9492b162d5b28f3a08fb4d0e295c44364a68c0f492def8657708e36d6dd19c74c25a4e2638bb49baad6ab36aaaeffbf2bff5750170d0360142bfb4b991fb8a1885051fe4021864cc5117b31a41160e213f2583242d35ef93b265ac96aa6e2484c1c5dd0cf7939f106f389cb5d97eea7deabf320c62b87b146ab9c0f9fc19ba8929b48723cbe0085360191d7fd13ef9d1f0a295737a88c48870bc97c09170a0bc6f1d71da02d1f17ce8d280518cd3f971f639c9f7eb263bcd49edc9f913611a5ac814a397918634c0989936eecb0e20209c8f90f0e8084141f1db1be916fc1c84fec36c1e74364b1d72cfca24d6abcca16159d99e01c15a451a5b894501bcd98785a3e974e34b487ba0e3f12cca7660c28f9047c802765f2c04b1e4948cf388c6bd6f0f39255211f5584658f3d9d2e8e7d72775d06b21f9416c308bfe19f15de54cd9197f42b88aad882dc6d172c85d93ed001c6a2ac1e561de98e312421c81399050f63cb8c8e0e4baf4b41f6618396dd3937052b15c2bc4fa169d50f740c9eddaf8aff5c3be4bb3d1d9369a13c8c7e97f3292db792823e515ea388debb381a292190785ff0b7f22cb0c7c50a839d19868ccec1d25758815a04420980569de28993ad616f20011b9903a61dd2835e9a7579bd51472cbcdd1add0a26b03ceeb9e214b9cbfd4f6466eb423612b44a968850f99071ac52cb826c18b91a561bcb989f104bfbb3c186d4d25544b9834312bd77f033009422543e8e094033d81d5a4c4d44c11edefcc28134a3e7b2a0b677f68aaa27be98854df1ac741612c66bd7075186d0dacee8825c2b64edc8768098eec11d356385d73e891878621e74a5c9668f920e38c4c295b4309c9d6a0369b5c2b9d5ae95327cb439da3ea1ce90c817d42c9ef9dbc1c8f2421faaf91084f475442746c3f4b6b3280c8e8d89ee06a4b9053c59e4176142944b9c18580f3779a2ee00e1fe1cb3c7b83a5ff451d1fb8822f52c719ac2889bebcfe818ea2c7746f660cb6f1a51afbb008b394885b974a9380829c95dffea7b1ffd04818149b9c49cbe0995c2821eef3f473f34f3174bfabc771b58a4ccb85fbbda432f9033000d93c7eb9533be5eff59b2dae04f5d8322b6f1ef555ee4a83c3ff908aa816ec569df46ae4a378422a9a1ebcbef8c8ad78972c5fc2fb9ff2b0faeedf3d45f7c68288b06a8950505377e361a97ac93281588dd8551b96fc6195e9c392966b253b29f5fde531915d36eb4e6b692a81486e5979af2f01323cda7c14f495a307d7388b252fe10149eeda7f38714472af2ee8ae366f92b735486e01f23c647b0e2127643cc0580828c59eff3b8d14f823115ef0ead8c738ad2eee47c4bd24844171b5b9157272cd1f19c03298584548bc1b321f991adacf441b4baacfc045fffec3946f1a83a6798e66bd6cc79e7f073fa4fb971c4acbe3cb765659b23a426a1a08777e80ba9f3f0c7bdc284be2cbdeea98528e09de34b0ee506ecde82db4dc898d93c5b161d09e5a6e7910a69c1465cb3d3e8be18188fc3977e643a27a56f2f09ec0f7092cd7237140d0765516e7aba00d8b4eb42133ddae7d3b7800d5dea56f535f64d1bb56015ab24bf7b5b8bce816c19f5e95e757f36841954f7e51a7e6df1ed0649f2a374926fc399ef12ebbecab41d8156d10685c62d1e8c72bda71f848501b714467ce03cd027e706de80e72284cc33dedc3486ecd689b6775e017de599d9140ba474d3f3fc13133316fa41f0138ca5978c330b33259fbccb8ba485a82957b07552fb808dd8a480332c5a46c5dcd360b0e6f0f4354dbd39fdc174ce0a9d53087d968f197b33153c5a9cc7d7e6d4df1f43466f5502288f1569e17ca984a80209650735604ad0cfc7f8067c3549d3c74bbffd754eca5fbffdca80c31b9143f1040945523754b2eda19bcf3ba4cec1e5cf2afab69febae3b19648a376dd6f6537b815f4efca02ab67eb1212657bddd2b4374159fae53fd3ed9671961602f696de1b526d855445ab0daf942794712f57ae2234b01115e67d2be424c0a11c55fe805e021aa0789475b26822a6c254a772321738ed795db9f20abc012dd94d5b54602acb13358b9877fedd1edf0a4147bc26fd2538acc156fa59ae7a4c87e7037a060888ef261f175ea8c72cdafbb88f3c070107ea5b133c5233efd79c99e6b5f01e087cd00eb7e28360546f919dc9f37b5c0e2d85d37c83d2046235232f7843a7373e927e290403de5505159f2ddb9717822b8f3d66ee5d812c9fb5e9bc34b342383fcadefa6a493e436a4557917eaec4082c3507216bbf6b961a8e44a6cd07d9dd95ab5dcac21c806d6c315f5653794846fd30e840f13195ad7a12875c257aa8ade05080cf2920ae604ebc4ce691c84a08fd5cacb7637a05e8cc80c65c3b8b0198451918b6b0600164502666dd434139cc6ffdb3a4c422ba69e2f9d8131d63ee464cfb865ad33f066c6889890e192713e4cf269fd795dd252ae1d8052ced3963fa29a2df3bd6b31ba22599170140ec93d950abc9941e189438b087ad0c9c34d44fe1725d15a8be21384fd33f775d6d8191c7153e335b7cbc43bb2cfb1701c96d21d1eb78d6b8d2f71c3d37a4dd24081c59a928836b2cc49ce784e2b9eaeb5d79ca24925d42bd91373eb54a90d02f6b6fa346dca219dca09ec5fc6591193c1b1b9749771163605b1a22ccfa169271885c6419d1a19c8c0bc1f5885a33e1f403567d6bf09b3eb554b86fc87cfd912c79f6d1db9a71b4dae979bcf7a5c217e91782ee479b1d79c1b4db363b05b3dd1e912ad96aeeccdafb508990fb7c03c88e565d958ac50795777da34c17fc3cef2482ff4446b624a67f05cc75ad58d7d331e590de0ab78d129e955eb5dbf16f57d2c3a74dec3b63b727fbf525b1e6d5a35d49ee1ccbec1cd8722519f2ead45c2738c87ebfb765c1bec4ce4336b4db97feeb125d41a72381cb55b5c191f4a73795ffcac235af49b0aaea9ee3286caf3ec5eace55ef97fb7c935972ef529734edf692a69e558cdbf4fd857aef246827d8fc69e1a5dc8afd9cd68e51bb8e2fa1adc635fe78b4ee6b265d3676465d537f0141b27b73f565bdd51fb1dccd835d45ee34c9209b3f2b69e9c0a4daa6ef296cab7a84ab4269f2cf2e0849fea5a13a6fef94dff676612a4cbd99f8f6272ef36c53af14d5feacff91e80c1a9daabea7dd32661eaf159d67f94baa7a6b4852cc2b476dbaffc2a6da4798ebc93c4b02d45789b43824ac9524a7ab4e458565c7f5609e470159b7e740cffb3d3711a21c9c34775ca9c76dbafe2286aa67982e64b3f229421bbea8150c9f40bbce6f4e071de6c442b67d7478aaf0b2eec87dbf119f80ae41bb63c014e9d0a4ddd83c8a5e2d6e64c2fd6915f37c7c9d773dde695da77dae91aaead6542498a8a2aacc63c85d8db5edb67c142433844926877706982f8d81a066828645c04b7c1e54ef39f54b202f318c9cdcc888bb9617f18126630abaa53d5ea456ebb37a23033c92edde9dcdd5fdd5a5ca126c982a08ad6edf08d8a3bce8fa9a1568b392eb5015282fb6c0234248b67aa7e0b70698a8e34360341eac329fb2d8fb6e472e541cec058166bc741199b5bf933922599e0b984b56b6bc40e1767ae463796b8e3ee1fe8a838b0afbc626e66b9646977dc47d3323d75705adfe7d7a5566ea71877eb6d05d59152416b3ae080827941f3407da24590573f67964debef144410b89a9e9058b8924cc8bc5ac2a3fb4bb5d1cbd388f208ef0b21f9e4da4f9f852f0ab5556bfce54dc521d5060da46842279d75989ec80707deca04a7c3bfc8a886696b765ff6496503a3ab2187a1a325f4d755af3fde45ed47a43bad938aff9a70effe2406b0288693959327a0ea4416d4242ce5ca002e745fd40ba64defee80d0cf315bcecb2f6edf5d681d1f410e3a35c69852a63bfe6e7f154db803738f65bd611cea7c90fb5faa0462627206a70994268301c8f7b205c051aa146d17b25168e8d48ac362bb38c8a0d079217884e3cb4b1aac8580f4006fd0ce8f0a90156162e02887238da79586d604c00595d8df0b58956b601811b2de64e926c27c7d8eda7a3033086f24d77c4acb01d032d655f202e64cf6496e76cf97fa017da0a14ea6aa8a05bbc4a7ba566a09ea001a78f4c179b1803fd83884a1b7723a326766e910810c6db51b12769aec147327662b31beddb6177d2ef1303c7751d3de0ff7fc27dbdd4a932e69cf151ef691722d3d615da12b1605850d638959275916199e454cd5abce78dea562cc6ed565761ecfd3331330aa57c32573f9e1633231b804d4530a3f9d5b19e9e8d6cd032765ac2bb3fb6e7b1df37c48792d54803421c1a98cb706bab5f08cdc07b9d97a0093f6e236ea82b135a7464c47bf2f1958e328905dd69ab6463c0b131fc56bee388f55354d94a6374829290dfc0893a74cb541f14296b5f2872a374a06908e2d19a406affbf85a516d76972b99e4b8a13dddac18964ff2ba655b9ead24224d2372f5de5b0aace9860120503d6b39f15ff3df8e3c5fc0e01d5879120997252d62b58c54fac69f9923e918325989b2d39bbcca460b3fb61149a682a5623aef9c54b83c523689c7c403d58b5f6fea051a37033a163dd536a829984ea4173deb7b790d7f4a24a067342949283af2d34e9c4c59c0d8593b88b16cb142acacb3c0d25f1e70d1d7656cb3059016c77ab8e3d6e6f061c894dcc3411598d36ff3b0c99cc965242f50461d086bb17634d24f0e8b2e6f751907802a0e68a4cf692cef91fd8623ad9bfbdc74db7e25142c93cfaabbf60fd6c9daf92466884489bd2746e50fe95bc426615fedb246cb8b800ab61ea841d2fdf1f88fc099d129c2564fbe156e9ca9dfebf4a8f940941782fbcbad41214fdc508f5048990a054bef6e91eb3bdeeb7e26522202eac76879aa4699840400ae3bf565648d6d19c2be7f811e2bbeffd138972927f755d4cede3899a92c1a467f4f0a758b3d0775b90f5fba264b6c3ea0b983c2c9426433103f4fb0a5cf82c1be98ab932ceabc86d4f1b3bcb4708512251712142b378ce02c0e26dfa8e6bba16af2c78a675a079f617f8e40498734ae8888fa1c310bd052eb4fc686abd2e17f44ea10b662a570f5ccebd68395976df198927e6a3f43aceecef06cbbc453b3f2e25dd8e492fed55f20eddc225e5432558fecc0545919cd8b195ca2da8fcb7487a1e2daa378264f8a26d973df7260ba44fbb8f748d6979832d596aab5863e7be20b8a0fed768d8e3ed15bfd46ada7c45366d38585826a152f43af44cdea588830badefb18e4ac25a431fdc42346100da70c0c026ac05bba4c9ad24159ac0dddd8c437b541fc2c084b5ad2e489136e3b846bbefcfef081c8ff700c42e528eab043c56f23d58719c2004fb1d10f9162e55f125185623d8000f16cf4f8c6539c08f1aace41e8f703a33f44f629d73de770e65bcd20670fa970847cfc7b2ee77eba712e803e0ba6636bb30c1eaac39626c0578d1e3fb2e605d4261310b702a4b3383b5733d7551851a9b2aacaa59fd32110926af127abc0cab3e9ae8e286c54aed706042cf2a90a9ab612da183a2dd97e3a753453afe9d81a3f93c6ce561bbfd9ea8eb6a188465747894f2d86be41801cda6db670b35b2d52b68ec808dfab41b62721c2397d03816756de8628f6362bb9e5ca932681cd0e1e8c2310a0e57734c490749579a2916f8054d22fb6a34b9faa5b5146942868695440e206b6a90c535192190c6e46248013484d2011c44a2a5f54baad25164149adc62c11d288a46f323a0c231129536f98564306d120a11c1344a24230368432ca719a425898c1c4083542ab0e310e969fd8b2a8ed13a6cad234696d0e04846aad30c5220f41ecd328ca7a60fb02f99654ff0cb62f46378496ba69090ad8d20ab2c67cd18cd7fb9da117ac7ac3a482aa3d5a110b14a2b6842d63e6d06b28f43750e3e349f1b55a230d2a82285bb33d95cc3b09b1191bb70699afc8635af13bda007c266fa66586f4b36a27d0f03349a613a19598e86ad18c3b1b343748e573a2ac7f19ac3f53a4ea397e6673252951654a18f636cc7743974748cd2d16a8ea539fcda61367d5aed52b21d652fa17914eb1d5172e87a47d72aa1f9918c94ca91dc3fbb0a54ee6ddf2fc4595d4159dc9e1d8436413470d92c39a99791187de71aca08a53c42923331783f2f3392f7ddd0e05a458af008958c2047db5e1cc1912347f40e573a2cc3f15d8eba1df63abc77acd7517f8eb9d74852a138b9496385426403ad94c848465a29970630d3289336ba9eb50e02e65a1114123074b8065dda8620c771251c235f692897cc1ca6af41a237f2b92e8b0a946db4ac663f92ec94b1dacda563a6f690b8a5b24c5cb6cdcce0a6d847cab507c22c8af5a0d3b468e8f7f9a394cc2a87171ca3d341522fcd0e85ec354d0862dddac8cf965854f1d04ca914d14c1bc572104d1a281522186828918c3846bfa334fa688ea4ab1c23a0d192434c3b90162121504b4e0ee6900ec7b83888804e839314d491be43370e513a5eedc8d20e12ae34562a4436d02a923777904d4fab414a9663c4cbae886933f422c9b2b4ec8583433d809c5a122806d08648985ea0a7e1c2940b06fd6638b18748c457826618bc803c0cf51fd3cd1523036881e2d68d6facbca76f16c2c0da9aa7c7445421c1441b854256336d14c9c8661a2a48594db415241a71844e0709760621a4dfa6158990a7652331e618c1411bb2d8eb2836477a1ceeacd5688314016dab2bf2d568969e475a3612825f8e7571dc9fa37b47fd0e7b3bf4de41a28e66ad128932b4ac898ed6e0fea5aa033f19acb89faa95d054f86ea5e66bc9a8351911447bc4526430ed914bd981b449c8057310919ef61791ca194eee9b779096520746b8122a86742972fddc62502451d5389061a414653aa6a483a42bcd14caf91a69298b9a3a104b87568b24cb617907778ed1ed28963e9a23e90ac790d0b438a4c00ea3af1101be025964755a4294227769952dc7e2a3814229ab8956b16ce6503fc7bd870319d3024c6e033eba858b0f3410c89b0c07ffffffbfdfdd5de87efc6d13489618907693494ab236a81d15bbe8432868f382644a32c994d231b067ad6aea6e8d904311c80e3b0f281f720cf7e5399ce9440805257550cd983a4e68a536e55e989555a4330d771594bca1d86d6b87759f738e3bea521ea58ccba5051dd9288ea1840e0afd42d65eebf81aca74394d2899834acef7889125334e6dc941693b7de71dbd5b0b257a9021984d491c54aeb752b37ceceaa9e1a0529f263b2935abe37d6f506e2d3c07db21af6d666e50079535a7b5becf22a736286d94d8bd75964bc99dd4bc324e7c9cfc6083e27310430df539cd7d4f790d256b50da5cb3c398b55d8cdacc6a50ee9f534209b939a687d3a07cbdf5e4fd16f32e7b19ccef00a58599d1a09a73da781f5a7ef95ee27443c91994c3d71431e6d0bfd69acda078d7d35bce1d94b23d17c55052068578195bcb7ef0f8d36432a8778c5352777e1e32f6984e2819835aeab6737ff969727d98c5a01cfd3b8ceb3443bbbf994e8c66a382b29a8dca8fcbe572c121948441a53de8b07baa2ef7dcc9353c8f8f1230285ec72d96b4597bdeda3ac2b25151e70bcaedffc3f7bf991017729acce65b80b222063bc7a1c40bca214ae6b90d1b9fd7d6b1911321278c8d9c30ea82f2ef6deb1639b1d4981b95b56951d1f8b85c4eb271b9a04c4c9e6463df50c2058516f741c9a15ddc363d4ce3c4c709bae0040d2027a953568aa0a0922f946c41695bce2d45eb576a882c07294698ca0f9633de7a203e7c9cb85769e38ccb85e573c0b28abc4fe39d26c8a513d9a2440bcaadf4d8c34d6b97a59649082559504bd3bdf6aeb95de79f1f6aac18714fc6e5e27ec3a269c1ac1871ef360d255850e73de41a6fcbf36ddda191061a404e4e8400c92b787a8d73315db7d8c76188a8a01c71a8d9a8fc605d5945b6a5c40aeaf3a0c4cf6db755f46ee58810342e97844916cd8a77a1a40aca2da7e7567e3b7feb7c8dcb853131d947367a86122aa86cd94d7799594b7b1e1abf7244c8e5726473b96062f2c846315c28990223ef93c9abde9e106afb7b94a7fd792fab1ccd66b16836cbc9502205f59226b3e39c4e4ac7555d2e97cb1a273e4e58702204c8c9e5b2b28a5c2e974b630619822981424914d433773a2c1b4348bb8886e51df797cb8910202745342c655c2e1b96674345d3f2a41a4aa0a00e3fe4dc396d5dcf629f820cc19418a1e4092abdb7e3d64a692177f639416d3bbde8b25d76b6769aa098dfdd7a6b7bc8ece9391162c6c98a86858ccb6545c3e2b08409ea4f7aca89cf1e37ed5f827ae7d6521b51a3779e53823aeb193acc1deed3edcc74a6f7e3c4c78990221a9632daafa871b95c2eedd9704c94edd9d89236942441ed9f46efdce3de750f4b9080c9be29d3599339ed2e3b727f1475f5f25ecb829223a8c6dc7893739f88a1caa760342a184ccaf64ed31883f10c3204534689115477e267ce31f4e7a4c75011d46a0d795adbdc6a86ed71902198344a88a01a659ef31a42b7d6a32b1982c283ef0ff6e263db73924b84805cd749eecafedf7199ce837aa508ca960441754acdf543b8d22e73be0110d47384df2bbd76ba7db773831fa885dbfeed2ec4b4c93d1f285c0721fb717ee7d67107f5406d7e7ac969bd9fe318c303c5186279b8b3bdf1b4b4981d28640cdf59749431d6d4adacbcc00647145ae95d17fe390bfd338a1baf02966f4303c4066ea87e67cdd26973cc18339f36d45a2c0ffbc7cbadd38f3189d95089fb99dbf69c7fd2c4329d6dbccab27ca6b1ac578365a34666b36c5a361951aecc3da37fbbfa58534dc146314cecd3f3eb4a0721e754fe8cd1a256274c8cdd1e5d4509a3cc64b0a8e545fbb2593a992bf1cae840a5a6a85b5bdce80e215c5128a56cad53b3839e33663a5350d643c9b269d128e7784e72dd0f372d2a0a5d429a30217d86cc5fa673d3829282898aa85cfccfd2fa5ca7dbabb24a51e92735647c8ad2490f3f65c5c886550ed4fbea515c4eaee8706e1938508bd0eb772e6fc89a1d0cd2325014234d9b8d0eb2a5aebcb26224a39cebb30eeafad77c99cb74baf1190ccbb7a149e124a29eaafe3be91b37b698cf53acce09dd6b29dfad96ceab4de8ed5a7c90e383de994eb756f6e2143766e8e73d737afaa44ca796d1547bcd7e91fb87d86e69a6b305a371279965d382986afad421fc64dbda624bad27bff6c7e48fbf0d831ba844f89aff5afcfc39a42fc0a8d75dd9caddffc8766da09673c45c43dcc59b226f6ba018374dd87e9ef339a8339d2918b75634597e939c06bd3821565644470db14ca76b1ac16c8a3c9f813a88b4b9c39688bfa16b2e66c8da94d4bd767e298faf4ca766a3828239c808e65b58d6cac922465436880c943f648fced92962cfcd74a24d0b0a901403b5c71336d4ecf7448c6dde1d06facb255cb71e73dcbe99ce232c1b9567965751f9f182355472ea7c7973f6c8bfa54f593122045fa0ce790ed9bd956971a793e974298ff278d38cb06cd4c8f44d91b74294bae42c397cb7e9e43731dc42c351902118226a28775c26e747fd7ade3791a6a110e59f77bbcea544662d62240e3204130317a8b4beff1c5de366ccb59a81867ad45d6e3f4713575b129ca1b07bb9d5b4fc506396994e4c4b1085f9a8dddc5feae672a69343d002e5bc3ddb5cabad5d62ed5450da5031a251c178860144e5eab684d68fafe3dce1952228cb58a03ea17dd689102f72fa9aa7f2a3a1a82c342e970e3204f356a03631db496f9d4e0f394644052507097fa86652948a38b73315393e33eeb716b125fecf232b65a505e59c2043304d056ae143ad115fdb5fca2ed389d9446a864284942de6bd7cb611338d6941d14c252843a523df8570a1d7fa0f663a9153f9229f59592c4438357b054aadedf73a576fd2b52b653a376e3c868811f60e835646b5a55956a61d35c850dde9bcb3fc8e96ea2ef2a1fa1d33fcf5caead8fc724949f98628c8108c0cc650ee1f626cc4c718f26a994e8782f995239b3e1162c6c91115312e97232a4b08da2043304a0ce5d2d9b2c712cfc9e60da440a1f5faddf642edd023d235c2a27927a84652568aa01431a2b29b228f062850effdf61fe7e766e9ac2562843d196eb81f4454561a97cbe5d2b2a2c164071982712750fade8e43fb921f86cd0c1328f4fcd073d6f6685b57a6f344881927cef29b1f3e2e17f7282b9a76b9b4b0fc6665b975b9b0fc06a58c344e149365b352a28412a8fe95fc1731a79bdc2fd3f94d4593bea99ca15206f296154d182450eeb8a72d7df4eb39b499ce0d8b86ad0c84d112275af41e1d6474f247ca66d8682d4dad73d9c9742e0b3c69e2664a464c8e7d3639ca46ebcbef73314bcd15b45afc102f6279faa0b7c8394d4a478af5a045ce5f62ff4e9de9749a305825fe720c17beeef642ce69301d85891f4bb99ed1b24d866955cbc7d269debefff565a63365a5080ac63dcbcab478ab7aeb9d33fde949656d5512a44ad6d98831e4c9f8b9cfb43442a57c98ef49696d6bdd9ca688866525358c11a8d47ad1b66784d01f5da67345c3e2122fea1da4deadd14396de59a6b33d1b18cd6655042aa5e65a5b8acee95574329dafa249699886b2599b164d0e3204932150bfaf3de6fd54f6166a99be5c522e9765188040e5a6dba3dade69e91c653a595e450505a3893645dea20f28458bb1c694e1bbe673329d1b94949516cc771a95c3996278a088468349712c184c003aa010ae6e697db1a287ed339d2c9e020ea857f60dddebd76eee4fa613d3be01a5e8bdb7b40f57973a96e9f46c0da893e9da7232a70bd75ba6b30d0d0b11cc4b3d41f74fb1b5edd5daadcf74b26c5a341978acebf44acfc5aca8653a37455ed26040bd43c5e618a27767ed329d4e65619e0d964f6d195c40b1c6a7d35bf71a4b892dd3996931b28261d13c0c12e3c4c789901321404edaafd1c64a2365030183adc7ee3c3bb8ffae69a69365651a067f83c20283960583135423271b23454eca48e3e4440890130c729021181d58001d73f3235daf217697cba6c8bb5c9e45d37a5705d871951b3572f24d9a69f352848d94948b5ab4badf8d186be86c663a4f849871f23b406931722204c809460505b3a261714859362bfb2c9a76820cc1ac410196c760362d46583098084c400289d1a44020020a8107b40332d000062c400109a000022ad0e3000628000106c00101402000bad16800f0011eb99e25022610d8a123070e09944c8044008b00c027be50f245968a0e007c8212041800c9209880083148c0b04005283001094400020f70400318b000052400013d0e60800210600000e0b143470e1c243d26d001921e13484108701461002483500221c420f90d0a4b1b6e3dcb4146940d4c1861104243884508343c004618bf0394164c08c008e38ba06c30ef593a30084db4acb4b891f66bb4a0ac88d182b2b288a8a4ac1441596911841a484884b4a1f141d2230d2620e9910626e99186100080045f44a346c9186200020b243d00b106490f4030a00c121212127c80848464030e487ff005498f3fe081a4c71f7c40d2e30f3620e9f18743d2e30f0620e9e1875790f4f00326487af8410e243dfce006490f3fc4808444a5aca601a2f2e31b8b118d1a4736286bbc401384e55588a0a8e1d6182a1a14b7c6f0f169b464362c2863b835c6a7ac8d1a2929cbc7910d0ac6a9a0bc1430361a151f2a44505a342a24b880d1b29e2d318a68362d461a189fd9b0a0303016182a6e313016182d2be38196ff7764a9fcc8b42c152c965f2c8a999999cf39e79c73ced9dddddddd5555555555cdcccccccc444545454545454545454d29a594524ac9ddddddddbdbbbbbbbb1b21841042082166666666e673ce39e79c737677777777555555555533333333111111111133a594524a292577777777f7eeeeeeee6e8410420821849899999999cf39e79c73ced9dddddddd5555555555cdcccccc4ccce48df8ac660b8afc20910109098986a4c71bb8202121592c3f821134969637ae40d2e30d2590f478e308498f3754487abc9121e9f1060d487abc8106498f37c820e9f18693f478a3032424243c7a9810c0fda76882b8148d0a545eb0f99616317cb4a149f9318ea4a89cd1e2548c9421c6461364a3d1a4a1f202150dcacab8a148484a5090b24a4e4042526202121f9a206994e00cb7c6282101c991054413c47da6ad4f8384a4248c44f244564bcb17212129412424242424254d42425282568b6b4a0de5d4673667a4ac57e359d098430f129292434252b22424259a24242548425232021292928b086aa086fc5003438622e30c1f4114268d33d24843611490179071460b303110a3059b4564ad68585680b0f1445434292720b284a0a1d2864625072a2f50f91c6884b8911314f9cd0f229a14f7e3555088a8281f71900089073a5042d28167212949031c4e484818a6a565adb425821201906c54960a4a111496d682e28ab4ac36c0d0a8e00d9020212929215983052d98148d861d5939d0b49c008c10946065b5e09f45c8186bb3dc4a8b7b1212920ef8828484880a0a0909492f784142d2b2368b8c1f6ee8c18f5f3922e4c8b340d7ad16d73e8c301c8a668d67a9c1416184f12c356074da7082838cb46c34292d1b4d8a1a6c9002090989fb3590e28de860ad9cb1b2b25656561861a0a10647048084c408490f35f4204161ae896961f99594cf8ca0250d5c78817b3750cad8a8a0685630eedd40796184b1302b2d0d65f345321b141631342c3fe4c8182a1a9416143650c870052b48d420a282d2d282d2021223a0e18d33e08284081a4a90d9ac95111cd9b482848444072b5ad20083c8b78091d9ac15305252c408230c12920cb09cc199611024248d860b90eca083190040063e900104632802625501e6d940d9a01441615961d1b0b0a8771a1f256e2021214921e921064a380d88c18921480f31888084040c1394000c30c2b8011115941b80b169592b6cb8d5740d1531728d4f230c4d702d8fd2c60709c3820115241707063d5c36df8201c386e4d2c607f1856b1a692d282df82fa3e50b62a0d1053690b4b05cfc9217148108ba00002e908284e4d2f22c60fc8aa6b580a18282c9c1fa3672b01e066ab467238c30daaf21840b11202141d56d63a5e17eb8f14e659190902402482e9069a40b484812069aa7f2838cff3284a8fc0e342c65bcc0fd3b1594d6f269fc48438d315a90a2060cdc6f160acb66ad7c1a2fd8fca6450364d362840cf76d689c8ad2026b614716e6f0a3256519514139a21298e98bdabbcc747b902198233920a11e7223736dfdf66b7c5091e311b93a395ff269fccf329d18d7948dc8e108859ce3d63221945262eb653a4f1b2b0db5458e46b0e460c4ffcba7ee39722296e96731d2a24969974b110dcbbb5c7c74aa22c722d4971efdef94bc4f5c1b3929829269b9b071c2dac8099e961c8a503dddd99b32354246cdee10a3f5fa76f1f63152c437465aa052062742ade4503664cfe1f2e14784faee667f56728b5b6bf4851c8750ad97a33cce9d3cdd9c390ca1d832fd930c1fb3d4e9a416421dd464edd9b3f7531321d42a7ac4eba1f78792f62094ebf6185b999f1e6563a6332565615a4f849871b24129829282c96c56dea12043306ee4108442898e581126224c48d301912310eaa0b4ebd772eda4eb3f6fe4008462eeb585bcb126ae6fdc438e3fa84ef8daf07f55576b9c6fc8e107759c4b0bd9b6cfc57ab997a30faab99736dfeee69e67ae0639f8a05c5a8ee92bbf83885455a790630fea1df71ce16aa8a576eb41f9ae2b22e35ac989b54c27e7a1add3485b3bcb5b436d2c1636430e3ca8940cf139a5b69cff2bd38908e91d14367f6c315b683d94ab73d841bdb7a91daaeb3a689701391102041922471dd4e6a2ba84785fb6452dd389de50e9b31bdae67c4ff37b6619e4a083cafcdd867f3a25234e88fb90630e2a5db6c683daf2bab6da262de4908362f4ede960d24f71506f1f2abe4c6db9d69de0a09093be22b3b32995d31872bc419d3fa8a1b39e4e3acd313728c498b1713ed7bc790dc9d106d5169d87e85643c9b59f0b72b041a597291b7eafb7b61c6326e458834a8c3dc61af37faf2b7ac1e542871c6a50b9c89c27969aaf35726ec8910695287943ed52fdf8e114b658366ea8131f2742809cf8b85c2e978672d935e440833a6e3d6132b7c89abf96ba90e30c2ab5f3dc729f18b6e6c89941bdc5387b5d7fdf6bbc5cc85106460757a6e58e263cc70f1914bff1fb204bc477ec55c83186f4cd3ecc299d73503997d9d1ddb7ed620e13bb18d4c374d4ab656adb9a6b16728441e5718c1f5b9c586e7b07837a29a1c76ecf9edec4084121c71754266ae78e3d7fdb36bd63727841a1d47caf2e93e15bc99941866082e4e8827afe9a9a3264def6f10b22071794ba946f37b9e349b79710543de4d8825afe9aafb197e8b16e2d288716e3bb6b42ab25c4b2a090be7bfa985963ca1a0b6a355a4f29df5a8d51668e2ba873126ab98990bfd67c2b28b7cd36a1236ba9f7ad2aa83ce93197907f7e3a9841d8f60f725041657228197374b2ad75c638f17122c6091a404e0e3292630aea593a5cc98cb1d530293b218714943a77183e2fe3e5d66b5150c825fea3ffdfcff8bd1c5050282d325ca9eb57593345428e27a896da69ea1e693a77d29da0dc734beef575177a6e9ba0562e3b6a6d937be363827a6f8c8aff5e6b73f211722c412d87eed2653a4d6fadc76c9e48e7e6cdc8a104c59e3e76fe2db9865659342c2c9f23090be1f26bb6ed34d4521c0a4645d3413ec5fdd0204330381e910309aa1fa2b3865e95755534993b4069c467359517398ea0146d1ece44a4f9f6d50b398ca0ba114f2efc844ebe85994e94b690a308aaf5e742d95c5762bc1811146a9dacb56e7e8e2d7329e4188252c6cef3ce714f1d6a4b49593e3c0a3984a012b393cadb28bb1f2218720441add6cedff557cb74893d1b0a03061cbf5088137bccd25d62087b653a59902fd466af9798fbd7b89ddf968dcadab0c600472f14a6658c1d7a86ba9a52a65172a23370f042b1f4f275ddfeb6749c088e5da8c79810531fef32e63ed3d972dcc0a10bcc85f2c3ef561521ef7994948d4645950d1cb850ac289b2a73e8992a77a693e516ca79e97b6bf7ddf98551594d5370d842353b67515245abb31bcb7462e200472d1463f712fa6aca52931f2dd423e4f3af195abe27d72cd4fb47cfd6b856168ae55afeacc9dd8db263a1fa256264b49ce9bb45b050fedc1f96d6bafb5cb6af50d7c456e6458cf6ac224de69aa1d4b677d3bb6d5c2ae370857a2e4f226adafc91739ae9dcac8d912298232c9bceb55964f838713f2e2742cc38b95c1cc61dc511071cad508e99bfdfcf86abcb52a613a3a27195332e97961c683499f47182ea040d202757c0c10ad5127bd45e7793b9e655a8f47498b9d35dec749c2a54dbf5d85a74f6f6a5a742a585ee2c750d1b2a143a67eb132ec7c956af0c709c42b53ec75f1f4c9cd0e2670ac59e323a668e7bf9ea2f85eacf834e3bea162914f3e3c98f93b197098d42bdb2f7b435d57fc49944a15e739f7f5374d0a90b856a658e98dd36d4281b148a4f4bc9584a8ca7313c9f50895b7be9d841eab8543da116a1c4e7aea9a2b31c717442216f7ad241cba5b50e11072770136a66cfd3db07256aa2f4906b996efbe5328e4da8c689cd999e95506bfa34a1ba5b3bbe4fb335b6847064423166db45b79a3d4d08b369060e4ca84e2ef5ead63ad1a2e325d459bac9ed26b2ba7ccf12aab146b692bb17fb6b5f09d5be87977672cfac394aa8b78a889a2e5eaf98da24d46beb6cb1f72b39b39324a1187284baab7173237b2494afb7735af669d9ef1a128ab984ebc9eee93bffce2354f63afe963d7fec8fae23d4ea87c717bb4c4c176923546aafec5cbeb48be922a63d1b989465e06084da67e87635275cf6dc5b84dad64d46cde5d6f2f614a1d6a375d2492739e6bf5e2254d364b796a6a6bf861e2214f37c57dec74ecd7f08959e525a08d3b197ccbd21d4c13cdae7915f6bcabe10ea9f231f5e6c1d33d64f08f5e8386a0961da8456fe2094763aabf6a665abe10b42a96b45767e1cb1b91508e5ee7142a86d0ff35d8050079db32d43dc3435fd41e962668ddb974386d60f0ad77aadda5adbb15cd70795daa2a3bb8fb543948e0f0a1be2d397ac396f47b707d5e8b21b5a08f734844e0f8af94aced6de72ce21ba3ca845f6e73cc4f9eff21b1e942b3abd5c7b4d64b7da1d944b77d2eaf43f88d9cd0e8a35bbbbb6cef6ba845a1d94a797e93844e8d7b9b637d4b375ab9d37f7de6b4f07a58aeca8e7d179a59f837aac37f5b26fa2872f07959c5aeaf69ce3b4cdc54139759dd89fc76c8b350607a588dcbbecb7a9ec8cbd41b136c46e3efede5d333728c4d7ad19fbb6def2666d5098ddef1c94dbcf9f191b94ee3676e8e4c965fc35a8b63c4ff25facface5a6a50889db7f3c2b3dc19ad342845cb39d45c3ec68ef1428372c7e14289fa9b97cf3a83e29396ebb3efd962becb0c0a9d3f49df7dc344bf5219d4a222535d28d91d76228362da8cde1db3b15694c6a0524bf56d873dbe234e6250b8d0b5e3d872f630378541a1b68fcbe1d3f5b91c18d442fa8e21c738a9afe55f50faff9f7aa1be3663f7827adbe9c8b4214f98d6bba05a323ff4f4e13ed7e95c50dabfdcdcc283ff9cbe05e5f2f8663aba88ec7c6b417973e9d4dfdba3fbea2c287deff1254f899cbf37165426f6fa78d1f6151442caa93ff17bf83cdb0a0a1bfb277ff62e4e0e5541a164e81857675ba90d5141a19e95c8193ab7fa2484630aea111531c46e9f4be9088714142772bf1a7a9d90b24538a2a012a5b6a3e9b1625a897040412dce75705dfe3bad88703c4135d496bf6798cb963ee370827a9f585363cd13663bc6d104e5966bc8315e6ddf798c713041a5f6f3d041fdfa3f19e35882e2e5cf0e3d6acfd33ae35082dab53a17216fd7ea0ee348824a8d2d7e5da8eebc0fe34082faa6fb89093db6cf95711c41357bf9bedfaad8a88cc308aa2de41c1d266ee7fd83a3088ab565e9509d23f3fbc14104f58cc8feeee8da847d700c4175732ef13eb674da7c70084131d66f8b5e43efd57b7004413d977cd95b0cb3b1e3f985e2978ea7c49e7ca17ce57baee8ade5ee5ea8e354f7a495a92dd3e685624cd9a594c9cdcff22e9473ce0b211fc46c7d57170ab919d129d2e6d82e170a1f6acd761a6ef2e342a1334e4eedd3791f760bf57a51fb4b84b88e2db5854aaedbb73e426d71bf5aa8ced55a43d4d26e67a3856207ed430ca16ba76f7316ea7de3b7b848fdf92d59a8c46e992c59be4dcb63a1fead9fd59c9373b961a13679616a4a7976fd2b14e264ef7819b3d7d6ba42713befae29e2c6abad50baea1815971d47a8ac50eb5df273aef7f94bc455a8a7e8af8f6d6be5dc95f258152a3da48fbdd71e339d4434299b0ab5ff3c1b273f7ada5c6b801c54a0543d9b98d948d13d9337a1d3ac195fd375a6f38910d10059d104b95c8868527859362b25a750fad2773df49833853a2d29a3264de9a8dc4aa1fc91174aec9cf4566226856aafdf3bb3b564ae9b8e62db51d94f9eb4e9a911dd716b5f8b3aa5d7d74c146acf6e4bdee4a9bf9b8642fdfb237fe8282e3f9f992e838c1250a8d77bdab3e789ac651ffe84c27765ccda628fbdd3eb09a5bdceeea4f6d7c53c4da1a413aa4f3b8f9abb892dc61386124ea857d4e8189d6677982e779021984cc926d422be7b8cbe1172b7639e50a2098572110f7aca106a5a8a6284f1182913ea9d969ea6f63e21f438339d2daa985067dbb984ce3d840f5fca747a8b26d24b742ba3a7730ee3e6f6264d2c7bad3bfa7eb16728d3c9a261615197cb2531cb6665db28b18462d67edac1865811bb5409c53821d49ab7e5d222664a2896f460e3fa3c99edb57d09259350cb3d6b09d15a64a73d5d2e8d49cd204330474a24a1da8f7b8d354d28a1652f12aa71e571dd8fad7f9dd6e50209c5c9bf6d43fe5073a8283d42f14966d6e7982274d65f2e2a1a944d4bca4a1114768462a7a96b7adbd5f99c5d2e174c4cb616942207a146a86667be2e35315c6e57a61383808831c61940cc4018948c50ab093de69e63098f1f742ccb881929eb720942c922143753c5e3cbf81832cf749691c6499ba04411aabfd14374caafab6d13a13add65633b87aa7db204114add3fc78bada3638d61d160364fe4a4b719258750ebb5a4ebffbdd09ff36e851243a84594cde1f2c69ce8295da1a410ea307ebbb7d83aae317b2a2d47161a97cbe5e298f425844ad7b3127347ecceff41a8f5b572b9f3bd75dc598250cdc9fc53aa43b8eba540a86e5cb9ed2cb7deb1d5805087cf4bf70ba1f368f9fb8352960ee3e3e6e9ed363f6827774ec7d531937a429b9f729b676b6cbdf7794afa70ce714c083da54667f3e43968dfe1465ff69ced0143091f14ca95add962a909a5467b50be881d66ef1cc6bb9e1ed46be82cf3d66b93b976f2a0b6d5534aee396e0d91673a312a28ac25785078b0dfbf8589defb4458be08e68645d372b6e40e0a9fed2fd7562a76c395305985123ba8c41aad069320284deee96d9e5dab99ff17eafd1dd7cd5851196bfb4239b70c7119935b6f394dc38e5ea8c44eeba6f4cff725444c0c2fd4728a67bd7b77629e52f7edd8855aa779b33fb665eeac339d9b16230e434405c575a14e3ffd76da6374ebf5e542addfe74e3ef65f63072e1473ce0edb21450c39e629ac73f343adb0e316ca5d3e74cbb5c5e5f4296c7d0a5bba851db650caf8d3d749cf1bfd63a6d389b0a316aa35771693663ee4ed3fd3e9588cb4a83c67a28542b6eade3bcd9da38b2fd3494405e548bb5c524a61c72c94c3e7ad0ea5f67a7ecd746e5058dad83c1162c6e5c2b2528ce8268e2aec90855a4da7e5c176f4fbbc05a83f85a1105131f2fc053b62a1906396709d1f91b2777efc783650368bc807b95c5a2e97238d0a3b60a1d839ecda593f63b6fa2b5ca1792a289856b002b36315aa48052a38b0e314a680c08e52906214a20805283ee189964e7042023b3631811d9ac804262e61894a10600725d43a5d94aedbfbc6ae61911d9350f958bbc7dcdf3f5bd924a1d8e1c7e61c9e64b6c922a13a193dd7b376defb5f90506b7d516ae728115a2b3d422142077f255cfc102e472877ac19bd969ee59fb38d50edf425b796739fb9c8329d8b81d8c108c536793b754f1b179bdbb108858f3991beb7d0b2c64f11cabd838c1d3bd7cc9cf344a893522245acec9cbeb497d88108d55e635587b83ffd971d421d76568f376565fbbbb6b0c3108a7dd397f9b9e6b2c56a9cf83859a310eaf049cfa39e4cd329ef2084e23dff506b89ecfd736710ca7fff6073ea0fa1ce2508c58eeb8f6bad07a53767de48cae21d8150ca9ae3774ef29512535b2c4656901d8050fbeb949dc3b21d778ecb34851d7f508f1cbef41ce35bc7fa7e50cbde7a5ee920a40c1f5d501476f441f1f3757f6e7eead83a7c50e7d951f7bcd627363f3bf6a010dff572e89b3b8b5b0fcae5d197891ed3ee66da9107c5b81ae127e5f7cecf3bf0a050db3af7cc8acb3b2156d1a4f8b85c50902118b6e30e2a5f77733b4cfd9c6fcd063beca09cd3657345ea9233ab83e26f2c1d647e8a2777a51804198219b2e38d93adac8abe7a0e6e33623a28d6faab5f62ef69bf5d3be6a0f2adcc6eef2d5bc821f4851d7250cb9b3f4cadcc7fdae938a8f787197d375f2eec80835abdc88bf8deffa2d676bc413dea3f45e9a5276ccb76b841b51f761072cd96b927ba61471b94db4f6cfd6d4a849f1a1b144b8b61723a69a5a695d6a01c5a4ef993e65baaccd5a0fe31c5a47e32f569ec6950c7933fd6a8a5e5d650a341656a94bd0d1d9d4175c376106ae7dbbecb0c8aadfb6ae99ddc759c5c0695ce498fa8cf41acb54706e52d1bfd91a773873e06e50ee377c4b4eda0932b0685badf3391439aacbd30a8f7f6ed397ddcfb3e533028d4bbc9f5f5594a8ef80585b6adcfb6ff0c7fe5f28242cd876132738cb14ddf41d8d105b5b25df3ee3adad750777041bd4dafb9b4d6227567edd882c245dcf47daf6d54565b6bb8aeac228bd9a185c3ada70f22f2c5cdced407b53933facd5e477764419d47ab8c9a435ddabdb0b02b3baea0dcb294fcdfbb7558fa97e94455c30e2b28f4e6d05bdd9a97f376a6b30accef3059bf4693c1a438145542eca0c2499dbddd8cf834a376b43ba6a0d8fbd6ebdef9c5c665d82105a5a7b17547d949c9bd32d389ccb0230acaed5bea4f515b4f5966a6737d6436283068494911e3c4c7c9898f131f273e4e7c9c9c080172a20e26ef80826a8e1736e4fa107bfd1354f3d40ef127d4bd3abd1394326eccb950363686ad090a59ea72dc5262a7e5c504750e726ab8da73db27a525a8a6cb57baeab2e6df28d399d9a0b4718e3c0b3ad3ee5082f2c31adbf776e9b387e886d89104b5dee9c69e73889a3bcc33ffb003092a9da367a9b9efd7d947881f761c41ad7dee34db5a2fb3f583c20e23285484cfceeb663dc84d083b8aa0d05bef70b9874e6bef750711144bc7315cc7eaaeade799ce96239f034c4349614656306d2c16d418ec188242bb52ebb5deb079a606b160871014fbefcd4f4765cf51db1184757a1d94e875d12f146299ad697b67ade7ce7ca1566f6b5a7ef4cf69897aa1341fad956d314b75bfbc50a8fb24ec862877a19c3fc65ed6291fb961a61383517998222dab0d0c46b3d97d960e320433860e5da8d5de1c765b6698567b2e946bb6cb61e3b5187a5cb8509a9cafc47c9311ddfa2d9432b6e868bb648c7a9375d842a56e2b6d1f96509ee57a021db55069e52b42df455cc7fb43072ddc51b22b72dfe4bc6edf63b35c283d3d3e0b858eddb3879a96eb4a47166a2dfaf7e496eefac5d4c7890a341a16342e17541db150ee30a7cddfb2315dafc142f1e2853aa5c31e7a2ed72b143b771e1f444c6d4d9fbb422d62fa38e9cbd58d39b642b9e75e3fdbf7e58973b036a7043a58a1de79449829bdf7dcf62a94f387da8e9d104a0fa942255b4c4c889e7ed9be5428f6da4b55196bb6381f156a5b4289aa8b21ccc7dc2994a6a3c89931bb97f8cd14aa616eba774a8b1a7f29d4e367a6e73a3272cb49a10e32d7b590438c92a351a8672c91bfd730ed736c5128c4a5c9b55375eba4e750287777fb7c5dbb64ad8142b95cbba9dd797f73783ea1b811a38632a5c41e7be909c50b9b23f7cf656bc891043a3aa17013736bad9d9fc7b47470423dcde3d017fbb37be936a17e7b9ff141c467ad4e9a50ee3077456c79b9942e4f26d4a3f64be8dd63a6cd1b26d41fd65a2e6a48f5dbd725d42fbbc50dddb92b7eb284c2449bdd48b131a6ee4aa874166a4bcd1951421ded96df8d503b87db2414bbf48ebc6edde38556128a69365bc9ce49ade9a28e48a8e347d336976c39fd793a20a1166bd7b4f909fd343d994e32d426c548cba771b92841c72354e322ce7fe7bf35cf73846a78daea64cb59fab69a8e46b8e7926562ae975a6bc1d37430421dff5f9e6c537f32fd94071d8b502ca53fe99b9abaa6758a50ca7ef2d963fc5abb638950ed18d3630e152142e179f695961e64eb0ff37182689cf838c1334e7c9c6090131f27d882131f2708e4c4c709f641c721d4fe76a7d49ebfb3d863994e4328a6497b9fa645cbe93f07858e422894ed2c6f6fbcde49ff5457e820847a89aa8fb5b7c4afa1673ab351740c4225275f6f66cecd56da4ca720d4266af68ee6eab2e756a61393b25434281b14e756ab424720544b8ad8eb703e668c6e0a1d8050e7a03b49d3b2f5d6893dcb8a9642c71fd45a9e92f9ca96c815fda0d235e6eefe1d1d73731ae8e8835a9f98a5e316fb658f790619825143071f149ee7941dc4db1a3d944dd0b107a5e8706fbe7eef35b6f6c4c7891774e841317d7b5672d6ecbcc55aa65fa07286a68a118c8a66b3084aca83cafee6d8b7fbbbb6d6d28187e5d50ca55f2d9927ce74b6685656b93be8b883ea7fc9518feb410f133b7ab2053aec90d041e82094d07b1176ca45fea739d67adef1477d848e3aa83d88bdf6cd123bcb890da545050593fc061d6fa874307119237caeee74d041b1d4ebbb21c4673dd3e78ed0310785de271963cdedb4b51242840e3928fd75b4d3a6c4dadb3213930b081d7150ca4b8fffdaf37afdb04c4cb22174c0419dc5d0692fa5aeb68c8f89c96fa9071d6f504f5d5aca12b19d7f2fe7a0c30daad11f84eb73f33dcdd5c4642aa62574b44139a78f39b6ad195a87a9e0c4c78919273e4ecaf07142860f27e860836af4f412faf60eb921c7246a28dd061d6b508d1fe26cecaece7d2117d1a10685d9722d2f4c7eec70653a9fa5a0230deaa14ea8791b427b525fa6f37289820e343c43acd95df294ce4299cef66ba083031d6750eb3945a7a1f35d8c18d36106c5de226ddede729acf1fd541471914dba5e9b8f6cef3e3de23835a0b5db2fc83d839df1f834a7db8b85b7af6504b27069569ad6cddfa1deeb72d0ccabd7ee2736777db6e8141b1b6366f47770fd74b5f50b99d68bdb5e8a0a52d79412d5aecca32175b88a177412dbb5fcecf7b5c50875dea693ce9d69bdb8262474f428cdb2e67445a50ae11cbc7dfce7194b6b3a0d45d7b98d85c72a88b05f55873f4de9f67f612a22bb80e2b38cb6645471576a0830aea11e626f7e9686b84780abe881152f6e39d7495155b6a8d1a729e75cf78113aa4a09a2f66c878214741b9e3fece11af5ce7a1a090b9c7e4958eaab89ea038d7f5cb949a927d9da07ce5efc1f4d0132f3d4d509ff413ae5de4daa1954c50cbd737ffd49e73c850a6accd33742c413dec97095d36978a996cd0a104c590a76687109b1fdcd691048572113bbb5eae7cc4b8041d4850d990e6f3d2959c1f7c47509dc99e31fd3d3dc79a1114f25f69ffec433734635c2eeeddd0b0ee21e8288242dfb6117bf7f26da206051d4450699d6e0cd5611a82427d84da316308e1f1bc5c529021181fe81082dac3ba8cdd313b476d78d01104c5edb593b0b58370717bbf507e740f5a8d3db678bdf942b1f35a3be85a438d88bc174a11326aefd0fdd1c3102f14628abaf1fb96d0ebf32e54ba77feed7bf82c25a7ba50c9a1fa5bcf5c3a074f2e54f79e94ee1ab57f691e37560b4e7c9c1cd9ac14512a679cf838712a282c38f17172e2e3e4c8b3e0c4c709cb675a960a4e7c9c9c08017292aec8810b85fd6f3d13d2f3ce25bb855a07d7427f6fb68542ccad4b0b3d943a714363e4a8854ac8f924f6de16f59da5857aaac8d15a79187bccdd2c54fe4a774e632c9da75b2ce4908572cd3d271dc6bea5d6d01572c4426d62890ba57476988d17168afd69289dfa4277fd7f8572fd3a21ae7c8eefd3391102e424d50e395ca15a1d93e6b75d6eb1833e4eb60c395aa1fe35ef7ab4b45d7b8f59a156dae3e8ce639cbeab500edbf2b7edb854677eaa50cf1435b427fb7dcb4f854ae91811e949e6880aa5ad0fea5d89185733673ad1299463bd9e2f62e8ee793d9135855a3f6e6d62cefe3df6af4ba15ca27e42e698e3f7f6a4500d5122cac72b69b2b7994e3346c172b977d0b67fe8eb581448db2fdec787f7b06628585bd5b4dea9b374e473805959a92b0b7365155916cd662550a8478c8af4b8e3b6d862fe0985321fa76b6cfc969e1be34408905f39b261f6c439a7d9116e3a9bd978bc3bf12397bbf4779de6e3e49b8a26c8891020279aa7a275c8d109a5e98f3a96cd39b595d0c7893a1102e484130af9cbd3328f43b79c760d9495cb056545093936a1fc31df37d5d558dd41994ece6fdf54342a978d0f1f2727681c59a305970b62d5b421e473b052c6f071a28bd660d13c4c4a7b77b9b03c66a5050dc0083934a190366f84ec58b7d7799950de0e5767b22ec7998a09d54b755f93632d25bfcf74aeb6a074435d2e9750fda8ed2d3fa5324bce12aaf79db5452f175542e94a96cb116b8e910f4b4aa87d0bb92ee3f492a1f349a477ef9b437c3e1d45c164360d7248422dc3446d1d4ddcf6b496e93cc230aaee555e70b960187244423de475325c50bfdcdebe57b45b50dfce35ad5da405f510729ef5071fb177b2a0bc11fdd9a1f34958508eb53aa66f5bceae575098c8df9d67ca923dd70aaa132f72a7d4cec65e151473b8abe9b9572aa8f6b2d9e2b66d0aea3db6d06144ee3669938262ddeedb5286720fb22828cfb46ebda6fe2fa94341b993de627e4bf7cead4f50edcf4b8fd66b69ad1f7582c2f4b9102f3d6c6daa36411de7dc618d3eb1a4ec99a074d16333feb4102fb704f59fbc76f9b243da9812d45a45ec961f6c9cdc4a823a9d584bd98c04d5cef82c7b8818a55d4750eeddb999be85cc9e1154cbc69ea3b7048022a86dfca9612fea7929250088a03ca1467fcd7dbd61270086a0b4d7f9da3e08a13794001082d2f3dedce9cb5f6d94000882d2c3fa98d3b2ebf44efe42256757f5d3e961ba93be50ef2b79d37797bd50fbddddd9e831afa7c90bf5cb972642bcf41162ee42a14e0e9f3f8789317bba50dd8eaf9ecc575bcee5429db718fa75cae7b4e570a1702197be3213ad3eee162a2dab9e6dda583fb46ca1162b428c1afb6fbfa916eae9affb3fa785eafe577dae1f35a73e0bb5385f1feab5925942b250e855bba556f79e5d2c54dae5d6f12077ddb050aecbc87abdad56c6af50ee5eb6ff96ed5a992b142ef6de7b3d0d29cad30aa5091dfff7bfcb9594156a57e3b3d6cbde5c5b857209753e4fed8ef54955a876edbc65ee30d3e51079a442253fee0765327d86883c50a1ce6a9c896eb9f4fee4710ae5caf91cdf1d97ed61344f3735b56763d9148a1165a37e5db4fca4238f522874eb5ad34edcfa383d9acc83146aa1d474a5f36fd7bd74e651a86ebbd0e5f6439fd2e1393c44a11a5fb2e790e6ef639d69fc581614cc4acbc93bf008854a9ec9aff5f1fd4b2bf100856af7bcdd34b1e383da27547a325c7c3825b3c3cf13ea7d5a6fb1843ab19fe43aa19469f33e8b289d26220f4e286c44d952a3e39b50dad61913bd4c08e95a46e0a109b5584bac9eee321dfae391098589b9c71032464ee4c62a9230a156a62e221e66e9f4ec25bc9de3ba1635a5624bcac3126939694a9d7b90953139fab6926bb65cf3e5a85542bdc5503677abbce935cf132166ac14f971648c969685c6e572494a28c4d80ecf324ddb56729350e82823f75a6b4a42396fb4da525baf6b218f846a9928216727dd3a3eeb7840429d6c89d72e62e3a0c1e311ea642eb70e7161a613a52394af731c5acec85dd16da673f5515836a711cadd752f74563f217d4e494161c1e5c2080c02782cc24fc24e9ee9b0a64d6cd7d61e216ece25e4ce2bd33c14a11cee22d74dec3144455022d45be775fd2827e768ad4ce73fcb3b2c9acd4a8850ddf42d2e7652c397581f42adb287eb204e4c73b921946fae446b713d7e87580ba1303d7ebbace5c94eae31fa3958290c93880a4aa66565ba053c08a196f3f716b6efb3d2429a69ce41a896d8bd935c3bc7dfca97e9f4b73182b9021e82500b6d7a8d1ca36d49d307421d5eed74a8d14aeba7339d9d4278004231d4d42df1757328a5963fa8e590a77a7f4b8e9061a673a3d1f841f542c8dd4be68b7e92339da87d50e95ccae7edec37645f3ea8b3dc49ccd43b9db54bf1d883d2e7c991673e948bded18342e779ddf14a47cb29339d9e7950e8dcb6c46f98ec6122cd3378e0015f13cfe7dae74c27df41e5d95ce825d4d487b5b660362d9a0c06a90605b3d2c241866054c0c30e8a6d439f7c537bced6ea3aa8b4501169e3c3d2b3b585c71bea53b7eb77f86832261e7450a95fbe33c7e7f59ff11cd4410edf3bef7bad74984379efe48f32ca28d2b2dab85c1c0b3ce4a0106ae97df55d3ba69c78c441b57c0eb75923d683cae090c978909735e9c9f667cfa34647ddbd2113b7c7fcd03abf923e37a8c7afdada4bd689bb1b8f361c5ec7e5f4c4a7d1f1469beedf1b2af2b72bb1c5830deab47c0bd941658e93fa1778ac411d7fedb6f3ac96da722b093cd4a0341dff420bad7de54d4d83f2b352a67e2839c4030d8ad93159e3628dd26aec0c6a3737fde36f6fd1a6e66106c5101f4be4459ddc3a97e9743752461a277ed2e0510685eb8e365dfac7f5e925837a67d47271f28f419df45a9119b5a5e58b3cc480077511a63dca893375efe77ae8d89f22bb531406c538f13f5f2df9a4d7b085c0030c4a59973263eab2a13fe70b2a9d79d911ad4de99de405d5c9531d3d4ecca30baa17d1692ed91de78e1017743d9dd5ec94522ec37ede7dd25b0835df1614277fa88f237743987eb5b8d6986420f0d0825ae8d14aff58a687485f169463281751e2432db98405f5cc9cd6b3d3de738bda15d463b7f43c97f01db7ae3caca050af4f4b913331d4cb3caaa092d96a7f637bcd771e15d4bed552b7c7a69dd68f1b784c41b54ec73de5c63eed1a9282f294dfbea9dbd40c714541a99e5cbddc3796fc1d858242d94b5b3bbaf471731d8a660d5484c713d4c285f03c6fe89de32e9fa531d9060f27a86d8898e6223fca4eb71381471314f2e65aae65ecb94dd72e97676926a896df504afbd89f8f228f2528d7fa3f97adb7ab87256f020f25a8d6b4eda6f64edd1e744d8a1a970b265b369a9416cf22f04882e2e75efb6e98b89351e28104c59af0fc724a096df3e37104f589ccfb9e5b5e75d63c8c8099922e6ffa9e4d8d0711ae767221c70e738c31f22882422badd6b3eb61dac4f872c12417781041315fb69eba85e93422d757e03104959abec6ebfdfaec60aeacac9595b554e02104c5ec3c2697abe52efbc323086a2d7bdf9043ccdd8a1c8dcbe572c9ecc56264351c4c7ea13c3142e7a93ae3f74ef2c56e4a9c29f59e6c6e44cd6e136d677ba7cc1c732fd4cb742fa54fddf78b0d14b76424d74cc78417ea57ef2e626bdd78f6ed423123474db1f59b4bec75a1d4f5d76394da49cb2b73a1507b3f8f133ea78cdce342f95a8d35d628f52dd4e1b6ac7526f6d6fbc8164a1d3bd76af6f620ea5aa874de6f5b5c8bb439565a609e6c74963511a3656efdd2e3ec317ee32c143b9fd2722ed1db7fe85d2e974bca426d3af4bbbd8bd21defcbc531b9b150eba86f33d6106ace3e2d1358285455668d5a7bb37c6724e55956da4d5ea1dae969e71e72cf513aca6c161a27b3592be7c8468f892b50a3840e2647f6449c58b5fdf422f4d667369bb5a226ad50db8e2dd9d99e6ee73ccc11968d2bc184152a3d9d7b7d3e71156a11f6a2439bce72dbff9e8c2043306c98a842add3d9cedc4beb8b0ddf93b1049354a8f55efaf57e1c39f6db329d2cbfa8e06d4766f6f5cc644fc5775a3b7d72ad353a59844553461116cd6b96cdca2954baef261fe6771ce5663a515a503c5b525036464c60620ad57eb5c718b7edebe12d854af978f143ef25291442670f22849a26e4fdd28ac928d472e76abece5b724d2a0ab5acf17b739c8fb31943a13019b127a7ccce0e2b28147f6b9e1eb693ae17c33c3930f98462bcaeed32d70d1f5be9461607269e50cef9e3d1e630e9b38752341a9662d209c51c4bcdd759e9ba898c138ab1f586471f9f29e22504934da87c6db1b7f65872898bad61a209c5ca74f5b9871ec3a69a09d5f06daecbeefd46bd2e1726986042bd64a8ff3c5bfcd6915d422573fd1eb5a23ab7742ca1f87f296f7f7b4a8c5809e5ce25fcd72c9f122afd43a9fd39deaeb94493d87338254579d2d3f1b30839373def1cf67cbd2f09c59dd81e3765ef11fd8984d2e7c72972ebb70f2148283eeb917da1b48a9ea6c9233ccf3a2ae65945c70f6a4ee6abecb9297ac6d5070d9494153558362d53307184425dfc78f993a2d5de0895ac9ba1772c0fa26232618472971a636765ebd74a6b118ae5da5f4bd933646f3451847a867e8ff772d7907f13a1dcd9cfa75f67134be721423143b4781d35afe3aa2d2c46dab3609288531b232d5001a6e2e882c92154ea83ef2187071f728a8650cc71ea4ffe8c7962729342285cb6a7d359b4d6eab34c08a1a89ab8ea87d371c64447bb9e5b9410bae48d7510ead7ba75afc7fd1c4e6c2208b5984374692133dc74960a2e97c624867f601208a58beb8b4bddba65f8268050caab8d8d7db17656bbc91f145a09adb7f84eb57576739021181998f84121960e7bab1b5b6dcf9ee598f441e96ad7c6927e637e30ad4656547eb4b018f1d1f29b2363243ea4b6527d7d9e87b49dc5640fdd88345517f16aee49d8dfec7cddf233ea7bab079518cae710eae556638ad4240f4a9f21f7a4adf5a2843e0b267850bb8ef29ef6564a76767750a72dc2d6c698cbf70ed9413dbbdb772cd9b9e38e4d30a98352d498e3ce759a9ff696c91b0a3b35b2656da1877839133aa8d48761c394de32d6b44de6c0d9adcaabc88e123a9cb8351faafb490db5e5339183720799ae86ebbae142671207d52d31d2f7322d57746d020785dbdcd53f57624ee6dea0b8b9e77e216ec690a33671836ae9cdbe77a943a9cf529336284dce5ab79ed6d849679682091b5443df5cae75cea2ebd4fe049335a84ccfda3cfd7a29f757a63308266a50e71f26f7dcd808d153f7e372c12432498342aed9bb77587a45ef208c091a14d3839af6baf4edd8499333284eecd072bbe7d553e29a9841255edb9e7f9f7db19749191472bf2de526f716427ec8a0bef99331765e8eca1009c2640c0a39f48612da97c4a07c93e9f25e27b5a56fc3a09e9e95f23d97d0db36f5672333bd61020695dc1ff4d898ec0bea246bc6c90e42f9dc4b5e502dd343b6a8f9fb76521714eb845ebae3ebb8e6752ea83ecbdbca44dedcfdca2da8d55aaa27a6afe55386b4a05c5deb862f7fa9bb6568003909834916944b2b51225e742658500cd363db92ff5b26b6e2607205e5e91f3acc21e7b3d67b37985841a5fe3ec9d569425cad8272c66fdf3f22d60e779b5041b12f4d7dcc1162bfd8c2cc6c88a83c90643205b5fcbcd576190f2fc68e8914d4b24fa7fdd17297c8558dcbe562128573defbe5d6b6e5ea329d188d4b1e984041bd1bede29ec4a3cbac99e9ac7642cf725359a613a3719c4030798272d4cb13c3e58a78356b1f4c9ca09221329f7ced8fe3e726a84c76d7181e66bfd0ebd941983041759fde7488eaf41fd78d772a3f9c2e4131b4ea5a91738cb1ae3a1f4c94a03a7fe52e94f06dea5c273e9226c224092a4f4388a56fe4fd6fb679304182fade976b57cfd2f3b6e51d4c8ea07279b26e447ff05f36a486303182ca64c7bfa58390b73336298242adfd0ef5b075c7474450899d7d96b2d58897bec4059321a8e61ed961440ba5979edb8289109443c7652efae1976705922ba8f4ce29f468240a8402410c832010500dc30a00a3130020181c201207c321912cccd2701480033c545c8a3026202e1e8bc6227140200a06c3c0501cc43014c34010044020c8a6d4b826002a2678ddc2a2d69532cd28b65d66b1086d72ebff12669fb252e0c0d4de82b876c9c1063ff65d694e5b0697ce903e2eb89f425d775df60c6b3b9195d23e7bceb83aa9a492991d0d2593897e924e5f138784d84bd0ee96fb5b34034d4871c7d9fa1a79e178563ab630880a1f214348a6d843967947acd136d7c42ea97e2f65ca956467cabcd1042de52a89ae55b8168488d0b91f78f4dcf9daad4b4085c8dfafa48a8fce0dcfe7149aa1ef3da91c892d15b72046749f973db8ce438f43941ec270ebebad0c15c6abfcc53f5024fa4fc65fe60cc4a7a947201a485af2587c6cc7eb375f44eefddce18f71bbd333eb7d682c5d0b38982e101e699a029a018f0ca5182e14200ef76cd83d9b19f5049a52ee4cb723aae751608d215cca00967de121de920b6fb93864625072c31565bbee6b658a1a2d1de0491a4ffe629a47fca99879d98c9fc302383e2d5290973e0d81a1f128c58c3f1389ea5214017d0dbf83d814651538c64fbdea9ea700d1980b763d77b960d35d5cdb2bbc3a074776fd68b30860e8be0ff1f3d9cef9856b92234f9013d3cd51b39c95b7ebad3736e018522efdd09f84978b0996a076b6698fd32511ba5e7e979a76d86a9690ae83b53848ed34c0630932c52088eea4dbe3d152ebd78c219a82817b9fc9a091c1d7fa8e5c89e386e426e995e6aa45e24697a5ebb60d47275217f8a8cc5094c08062422151bda42e47a98e3314a0882e6b3069e03a0c4c72a59d532da02e8f0e7b8967b38d7d4ea86770d5c4689f4a500a021dcef17dbd69c874de9f2bcbd18f0e1b4287a196a97e9dbcf15ecff622c15fb62a3b252e0c0da4b74d1cf1c6e2eed9eed711a2d5dce53baa66baca3b63731e43f4b9a7b12eabfa0103e806515d13b8fa23d63332a5980b2e23a36545fb39c30f9fcf4c40a76d98d8e0744289c82a6f56cd69c4e749f7cac98cc929870ac1660d3adfa280032c8974a4a2bd4ed262d71dc1758e38a1c0724038290642c6a0429e56a2e6acb80a92627ecd9cc02426544ec28490e7c81645d33ff5ae896ce5bd1101f16aed971e33d016627df5343f82ae27d2e063eeadaed3e0a04441840a7c57afad517f1a03b8d345d858c940825678f64335b0fac010dd470340c07964ca5f844d9113834f8afd9fc0c191c4fd92703609d3c8bec7f0151f46123121016502d39671e8d682346f013fb9c2d8fe7a07ffc7143ba6a397223bb44dc0c5b092a2c05440f5618e74b7bc27a66fd0dbabd1bf0fc441f68916fb855404c07237eba96384417a483a2697fc43fc4ab4b56b7203d9c446af9b3888d70f9263d309dc85fb63af63b1417abaaffb8aa8621e2bb28d255d854df26a9bcbc6fb7d25351756c5f80a0144a35df37df746f550a8c13bf36f442f1574927a438121044a32d48472426f57bd07911c45b901aed3825fdec8fcd7b63946a0b98be608f53dab25d84a3f3e70411cda7b96e3317a41829ef4591bee2cf5607ff4921eeb20307adb18c05709cf2f59ebd57b49f99f388d1b039a5546c168090e8f82e76eca617f63c33b28b8c170b39c96cb24fd64e7449a1c1bbd18a209fa61ad5f21618862228befa41ea5068a19b488a099f5ebc5f87c6559e06641779d98cadcd786dad399be520ee1a505a0028dda1385ae9d5d8e2570c3df65cf7c599ac9bbffbb170c030f46afe9a114ba5d6429d18600fb75dcc911cedc464265f9eb3e7519a1431a95db2ff754b2b9f3693261833e9c3785b1480872427186d4d212e4f2ebcacdc50b6149b67a594e15008b339cbb834333f7719ec9fa76bbf79d54e9bd93da3fb39e2993fe2ad25c1db9d19d7ac003c53ab58d5b4bba6b4244007a8ed376d6345d7563f0ba9f76166749e4b8c1c1a87c43404836f4e8225c9921660ef27528ca98530541d11711952c4655a48941ef7b11e1d1c6e9a36062c0380e033e2e5065055343a70a69eda79bb3c4d055b75831de98112e8eabad95f822627ad06b7a177cf2a814d955ced54a833c5c0a08dee8ab743b5626d182af6736481ec365628a7f92aed8600454854ae32554ee40461ba8152662ca16897814b3b81b167646c9634ad62efbd10072a9829943d1d1e19a1522615e1ebda9cdeb59a472676de83cdb6f772d950514c6bdd2889736548ad9c957b87dd8e6b280666d167f1a47f7cb14b18c15161cb2269957f04ad2f4a6c7066eb9fef24710815909a342c1bf5c1d0444ee5f93abb9e8d12625259b950d6c49ee3f50e20fe7c11674d589f692708faed1495ef4d26b9953e37467a059c082afcac4fd96ab514c2a69a3475ffe3d094f1f071c29262a386a52872cdc27f57f4911afa8b3c94ef7171aad08c929a9a145d3c730b50ab898feb9ca78f39a8187f3a58f5e5d961ea5b3d3e2859aa3f69b4db0c2c106d758ee29c22b50f0fa76c7bf6133f3fb6b32b7ca2d0e3dde2b1646e458e66c21d7293da8870a3ca874d650d4903d15637601ca791aa05c467d72e1a6ad6b3188dc4d32d4d1755f121f239ed8069f4227a4386105725fc07ffdf1642710086625c2b62d807a272f99edd2e94acccdb66bca5c50fb7489b4dd0b0a3d2988da0c1a47e6e66b8fd2892a6a6280c2ab2e9c4e5864ebf3220d04de527de00b750652056bd88474900eb9a25297197367fc79115f5db0d246b2742b336f99baaeb3e9014e46d660ab0fb82a8d91fbc6e06608c4e1e3a0cdfe976698e38a50b52836550906b08a25f9386e8e0aafa7b7c8d8f0ff5f90661fa90cbcaf5bedf257ce82a130e416bb6be47c6b5142daa43267dafff89b73803dda896c945119c43ad127812330d33cb69ccbc5165bdeec4eb4ed91cb2c60ef04cc144d1d08eac1ff4bde1d7f511bcb815345924198897d46497f52f6cec704310812bd03df261c2bf8ae00c656fc3ab3754a9869ba286e838bd0fe4a732872ae0302a72d266a2a6873079373ca563a6a684a69dfa42e3965c240e4debea4cef7410883786149e5d324cba3201f5221747684ffb4a7182a92eabc2c274d2cf9ab1c66672cb270690e23614349e1b3a341212b60983bc2d6a7e56304378d76ede26a026b59c6b54a4e9d166e63fc6ca62a68870229485a4b8c1de2527ee487bb6dc55a095a8cd5b944aa704cf9b8a2f416f539947b450da3b40eb6166c44f18828680fc167ba0a0849ec01161d3201f291f696cf156e09557ed71877996f2115a9768c8f42f8068990a681a7a3b23b265178359aaa5f48dbe45d75327fdf035096ee88a4e2598bb8b9e7be318456df93efd2da1390c91e76a54475f8e73353d6b990d36f6c9c1a8c1a821cd930a446bed86850f9c6ba4d5a11353f0d05ee29206a4c72db140bd75b5174df81b29a7af29e7292b0c61bfb38c3ff9e1ed57657e19f1546e258e13ba7e14ef4e187051570ac6452be16374e26a8141e659e72a8e8ac0bf60280d32622dc3f19a0880eaa02c5054a9c608fc6d2b2a783190bd5c70240d241033ecde95f587e2748f8425df837b3baa79095677e82bf70e0954f73c8a569a7837046eba31f2bc30d2592971ba0130692813e99817df3c1c510010aed7b82fd657c101b13b3072b4bc797f0276270a05c5f7fbe934fb4b9b253a7bfba0433ef7424a2813da45a916be4dab1f3a00a67778d1991d01720c550f36614ce8007961c020478bfa107d51109bd5d45516cfb2156addd604fe58f953eb820a12ec5142b13a1475dda82999cae380ebb273110c82e975bead02d5a50d2b61e62f2aa4a29193b863e41e1aca00553cd8fb1782d4de966f7e6951f415934754f61fdb08f3971a89850370dda7a527afd9cd2af16e328b0f8080711bada4345323f2d3ae3555f5afcb85cdbec2e7c78c59d960ff9f3e75e3059b4c85853ac3a01d4cc89848de3eaca7359578539df39bf3b2bc25616eeb11b39e414fb9786ead0661d7218a04d2e43b7491a1a99b93a3fffa149c740e45a3233c50a21e7aabb53800c677d33bc16957b5b462449f6332d8e724020eac9afceca4b6904ab92d343d09c8a1da49b8e374e2fd967094cf67a2338b76ddc41d1ced9a813a880ca160c4901c8fc8ede8cafc9d825122e758238081e31e7ee8074d3cf0fa8f14e6684746f8942a4257b764f1ddd532e2501c623142cf374e010036ed82b2add806cff81cfce420721c38015e8c5ced250c695ae535092b61910fc380f9b125545589996457d5d18bf8946d51b8303b2ed1c8b07bb3dafbae14ff984567a9c77cef6acb1d1b206e0d6a968ed08d9762950c8b68e3d43b629f51261d6cdd9587b20f5886cbb192d61738fe87355649b0edc45b65da362645b874f23db741f3ab2ed02e0916d5ded85649bf2c831d0199b8725d9a6e70161461c6272829e50b2ad1fdc5d502954b2ad138225db748b2ed976e1c3645b372c936d9adf5e7bca1c9ef4e0d794f034b8c71677f4ef58796aaf83b4636fb313b6c0038194295d50f36a93ce8d8b78a9e9a7c527b5ec439756a0176c3407351503406f67764e864782787dd84837f4123446e88fd1dbb4035341adf741c4a4b680d3c6f404673abe27c837e18099aaaf19244b79d50480244258a2368ecad319ff18608cb06dd62e7ae1d5a60929c3abd6ebe7c7e9142337b5f81214d6b7b8d30af2126058e3037ff6c99b31fd683fd8d01d8f581388c71261f7c71033a4ed9b1f504ae3b2ed276c96951850f817b682947c9daf273f3bac0310e1abf10c5ef1f826938d071187217b07fa566224ff1cf271ddc5ac4ef9e0929786ea4b951d0455a90c1ace9af8d14621e9da45d87b78541bbb7838594f0ae7603e5e4db1773f3e99353f0b29ec10124cbb54f0149d341263ac253eb3ec196bc65e72bda70bce22e24db80f7a9954111e43b0e1052fd015a279c3964b4e976ef5b8a9262c3d087c0d42411ec4f4063d37135b79ae778d530f0e6fe27b9c7adac2fb6c63a197baa98f239096bfe70d053988259f92810714e70d72e07973e3ff490cb6776d7ddfc5c68c9745119a7fa551f6eb230fd3c3fa3de38c2541271c97f6b0e569a45845911b7d2491d498ea0a8d8b3e70c7d0b5fd666c208ab671f924fa6b0a472072e3b5ac640797e44e1a03be6d5ffd2452ac9f05d0cdb5f4f75385a18475f2c10444f7d64047222162c86f6a4c1e127a15d6c8f37e1e7dd8244fcfea6935d7d81f4284f729ce902146962cab1669a0faa6bba61942147b67ec22670b46e1315a71ed7f838f5a193bb2c641a03167c8c478fe9888a09d8b5b6fa78f32417453da7934d40e57b92c79de2c0f8af193e0f911dd7ecdff19db5a8d148006a743529cd501a8c312a6fa3d60eef83bee93f2947d3366eb1be3cedf550dd722aa1af74dba8288bac0a7ff414ee06142300c54a7bc4343e3403549f3f1f9bea5be1d994d14300a5ed5df73195db18a6367663ed6e9c1631c1d09ad4136dc04eb41be1d202db4bf8c1588e551314629aa77ade1ec32e7936a1d921901adaf1f6ceeb60289168cfcc01b2704e7886627a6e30062bd0195a541a30db01d0b96e071bf6d90336cfdbb575847c9cc42a9e650c0331698fa29317622ae12e91d29a42b6f9c176584df31581311565de44fadb29df2ed75dc279a80b54b4bf678a77e36270997c4581ee244362ab07cf209d50e4fb0dd39f55af3c13a2f7355574cfa0249d68fcb4be87e4bc9bc66615f54b3254731ad9d9dfafe6832e5a826b5b2d3cfc5cd2948ca16548f685a9d1c4db3c12080212a3a2ba865b1799a992f50fd8656824e79944e0bf5c442a39c922a5e9df328435acf48e266401ce30af359213ef9b85d663541415c9c2825bba8952e0807818f29107f0105efcc8caf7c4b4ca6e2c6721babcc5fea8d20348164d9452b505c7bd93b0b36a229e999e24e053657e386c95b540404384fc23f9a4fb3ce8acb04fac1d7b2afa254202bdb56e0c2d48bf820140b2e127744d3c9fe94290610cf5f5b617392609da23039ea813a13835dbf6d625764d897d19c8ceded64f4d2096887a99c6c317e64757f405212b6adaf17388490cd9441623a1cc9fe3acc693f979de487cbc0349f25a1b89cfa808407a89a7ba82d727761915793f3a6580eb34eb13027a7edc6d5b323ae819d0da83701833e58a32122be21ad4ec253934dc004199a12db4d04792aeac6043bf716ea69a63bbe93791533962ca00f63c457912a975243a3c0b231d6e0f4264348d01c804d9f1fcea1dd3aa4b71fd72c0537659fc8f97e821acfd971b61bf2ca24684f4ec51951c040c6381cc15993eca92d1878c65f36da9710aa2562798cd569c9f7f4fbb4d2530912a12a545ddc91dd52d37d3fcaa689dcba2db1f7e7bffe5b09b4afab5a806796a4db53e422c2acaab46a87dd1db973d4a00a428b1658e59935dae7ac045d4f21f7ad74f418e9dbb81dfef81acd71562fac3fdc78f44888a8bc95361358eae6b8e2e97120515a2f994949bf1d47ab0dce4af33c93c4829c5e228ee95dbf57c34f660f86dae5de204731ada42f460c9d9d8cbe19431adf059821fc04a45def412b45e8a1e4cda40d6985ca95d79e931cb9a02f293433fff4c92f157efaca1b7c921010a396015e30a6ed16a022149452f1980cdb48c9ea5064bff5e834d6bff7525e7ca88c2dc7bd51d9411c228cce1682e4881290ab89ce1fc4067f907561785dc66e72073b90a0a7c24b4cde1149d054d981090f979d8c2c1290d2a09cf0623f20e4b25edd2357bc2a9315ce31c8bc59698b03318b4578bfa511120746083c1c7987ac7880417c63ad9306861659d3a62d512957ee763bd756fe4f1a37576a10f022bfa41557b7d46250953e8cb87f5b8ea703bd5b6186d403e2ff4647faafa553ad814f15279d4ad0c5e2c97a598ba5e1a05c3115ce565f880e4ce50a843dabad49b7e6a1ef0eb1dd8d3600c35cd522e84bfca9d4eac0385705b9569e1ee6e02fea9adcc134a675bbcf54c2fdb38e51ed0202266e0f19f5316673a52fbe5e1c43f8cf29c564889516ff5b0283c9152e8f74eeb1f5fc1a86f7225ee0d0b5c28b2c7df9424e525b941cd750e0d3a63c508090bb223f444c68d5882d8e6f3b4d57c846d3c8f241c82c12a71ee69b52144d54fc25b0034be6f6c4f9004c1cda28fa9aa34d640d8e36c127bb35e8e3a3f07f700a30f5e0b1fa704bc08252171fa6b9803a82db51bb65de2dd359e24c4768affb4ddd5ce9d2a3ee7475b58a5deae0ad6b9433e164b5f40364bb60bc7d21b510841b8d535f667efc11df0fe98249395d887bb16c2019822e8614ff1e58205ebe70252a0e3d14b1a42b098cf3843e8cf85778950054a67b4c6c54aad4e5e4ebd3c518f234fa9b3ceace3f7f5b67ec6317b4c4259791ed6a8db651f1eaedb55a8a165f58ac7d4ad72fe65b195e7676802c56cdf95f78ef8b7e7c9a5e48eea3cb0d5cb9c5248f6ac900cab2d98bcb3aad205569e5cfd1f65792519002a370a0118955c544421c5f40c5e56120758b26be10941c060301e9950cd6671a4173d00371b5848d1b1ec8e1aedec0f5c6174a62a7c40cd635d86db91ec99fe19fd2528d21286ab1cc6c30966f280214d75a7a0a2db2a02f9d0dc5c4a9a7996b875ab5d3187e2a37bcdffa217bb67af71e2847ffc15c2b402ad2edbc338f80fdafc573174103cea5ae30fdce0d61df27ac4a6b4e4fe2887c04a15e7fc0fc94e910333ac51cfdf1ad8a615b01ff11b7ec73b25174b57b47458cc1f7ee9073ef0531464fac2e11d8547631a9cf8ad360f1b6ce2c28dcb7b877cc4d299875b65633edfa6425c0fb100ae7420d7e6bd4e1983ea3ba46703d771911529f9e610cfac959fd93f2112daf1f149059503a0384eb19dbf46eff25f1cca5553607d63fb90962fc5f2deca3729907f3ac0d88c9d0baf4bcf7345879528d84e9e8b94c44eb1616566a048d8e4eddcd6c731651076dc1f6670ea6da480f618075eaf6a191bed5868fa1f7670f4348cf85177e3cb0df8278f86ab93948bba9163611133638d70357b72e8efd0ca5d7a218bf241d5d057405cb441d11f18fa5743d5c85255acae46f9ce0550ce97e3c3ed4a16b50e005d5e45c6ac0866071eb922c80dd25d83e2260736692fd237bda8e4ed21c88000224f203fd5d30312942d14a2e7b462f7d89fe93e1649ff4d80d9217af3bca7d79529b62ed04265835456cb6a1fe2d14f6efa864e9c893f593fa48e69895388b1e1aad6135ece096e040a93143650369bdb83973708091c929d3ef14643cb2c6775a7ec35b89de2c330f7f63b14a214936aa1a0bca28ec60e6ccec5df55930afb003cf588661883fec313296a284072b3a0910991e7fdf25a49e44f61898e9a0f412932a3d5c5349d2e7c226f582294866b90666b1bd09a3a3840217432ac3a3920d38c2280ba7343bd5412c0e8261a94c96769623b09adce005054c064184ad3c852b67b4d123a59d053e92560a03a96f5daf9ffba69cf0bf95161d706b9393d4b546b8b5cb577a424c47a6bb5d539003b96dc0b057e04384a7196f35e49810bcd9e2751a3fa53a8cd5cb76b8673c01a0475d728019a05ab17e7e23bbe801fe37a2dd1c672ad43772387d6cc9174a806e8f25a922020c1f4f98bbc41a669f6cb04f325df685bf52d5a33f8baf1fd0c4d784a720845b877cd4dea18f25501aaa92cedaf68345ec8add0f12e21f0f711abc5136b1bfc6fe9d78f99c0b1fb2239b52a9c32e735c1b5f1263adb3043a0fc8c5d32dfcffac08a24b949687f490eac143be3b28bcc09606773e86aae1a3eb031da5967770371285586ca8cb7c0fa9460ce72178345e280545a16eef045521239572de610de51afea4e02150eb5b5181973ce07198a43eea87c10f0c2565c69a0f2936996dda3d8eafa49a9a7a3009ce081b113859248c02e8257c3497201962a94f7836d8038ec186f83bc0dcfbb289ffd551e77fcb47d7711d581a53e4075e71327ef6bf9aca0068eac5047bbc4473335b4945cb2405c958806d097d105b3654568c7081d5b059575b3bf19d753c8a83c080d4767213a48561c10742471c95399b8c7f461a91d081ae43cbb23cb30bd98cc32758dce5730ed6776b05a1e22ad9f8c604cdae795394ed63eab2310651529ec207d6830d4f02754043dc6b5acdb06248fb6c2e0c9f1c2ce413e6418225e6e36d3c565b5b83554b567734c09519be039f284f88610459d5389f9988da207a4275d2072036351ff5ff521f089ceddbb3c2c82e5a2653cd12637f6fbfe8ff2a8dfbec1618008356fd33ad768e584e8e842bee96764f37c9705851143ee78af05b4e9825dcab473aca09e9ef92a1a16df2a420417d07023d264e2a33908a7ded70ed8c172d0e8a197e5ef4a7732a073eea7afeb09a5c7376a921eacaa8a2eaa215b3124393e1ac481ce52a3654514c328ae15ef2ca3083956e06353c40ec3c91ca63d0ebfa7e4259967ab874a1bb4af15846bb1a3982cef01ace8a5f2f18b6cf804e00cb1e8c0635c3cdac4250942442f85316bd0879f989d371046ea4aa2c9d16d3d02be1c81125115b457a92a4ade588c573d332d5c52348f01db1114c2b0a001e9565c94996dfc6aee527381d72e29ae114ce9028b30eb17c8642eb4f209d153813e3c131d31576053182958185758e24643c83e488f1d604f603ef8a6e05c79c4fb677ce544b1f4a401e1ce57ac76e9191fda60cd6404b3e7161dd5e0d223042f0b09f3ed30c50392150ec8633ff0edba0630dda9b28ec9b899b5b8cc86a8d7e8771a9c04a16d1c0761bf2809952acf64120f9872734587b6a1a17595195ca0869ebbbc465254e8631151e7c1e528dd531b03f8f4710e57c065058daea95144bdcf977951442cf422a975ab3f1ed1df952dbad055427782683f4d30ee6da62b54927a9179b0de393e50f8ad3fb65252641492cf97f1ed04010c5ecfadd1f23a05a55022a08c38e554ca8aa90390b84e3d44725915b28e22638974ebe0127d384ee5b5f3e315acbe3dcd2ade8217d1b9c5641c6e718d8666432205c097397e4db976dd3ccff0274df6c7a43083a6fee38cbae4633c05038941653b2ce98a8c1dd8faafae94e39921cccc14492fca028794df472064baa78bcdd56f2d584be405530765db2dd3df30c2831dda47854a14e7ed931008d09e7d12a2ead8984355207718c717e0ef669a335e396897593c14b3d72dcbaf4877aa2777b31803788fb75e0e467f16cc4aa85f8c994ca12265d80a06f5959e8334f1b9e0f5edf116ee548a05bc435fffbfb18ff7c3e3e9763f5a6900ffba78ff02f1f37e8fffc50be1bcad0c6267c20f4e13864a5fe1381727063c706eec34f45d159f434fb460463e302c057b10e75ba743466824381d01ddb5aeb0b6ec91e7c76aa4fda03617395091d69ade9bf040d442b140f7858a1f42a01a02247f12544565f590779d597b864562bf9ec1a92325a7c102d64698edb9264f9b02a457ac1b338bcde6f192dfcfce16c15739fdf9dc7a4527c20ae4d894596ef80c52c9659d4aeba743998a0134724298dc3254cf4e5134188915f058ac6a16d7a7dbc94598c3a4eecb1789e4c762137a4bb7a868d4e30f472d41249a23618379644f9436639b751bf37c1b1551a3d8a96c2c0635439b5a492963606039d247d122c524e75d9abd739e3c0b22ba43d22495a521c2a9bfc2478b43ce9baa2c739fac2f2aa981b229bb624f188fce56f8b49c9c87b44931e92b0883a7247a5281b4b6e2349ff91f808217949b5a83912bc65c67d7f0fc66971ea9268d29311eea138eea6fcc97ae40d99f9fb883788c61b537b9a8d3843f9bc1ba5061ba3ec10529267ab5067d7cbd61c59365b2a9656c6ecc762504a3f2ed93d4b230f1ccf4ad6822c9f694d329729294b36f301de84548e1f6d152df12a33aa4a79aaf374a93922c40e102d6800b9836e156d3f2e5241cd5b5ba885563bd2d10a96f757d6ea8005849ca20bc7639c2538fb24bd6b1a857baad8e97c558994e426685f1e5940983d213323db76a9309bda5b722cd546ed2ab53287f574b3f25c613d3ad2d191051a1306fbfa9a819cca78233670e074eae6308891bf8443662abc492606d77127973e9785dc3d00cc3f002cda018c7e67c474ae608d2f2c797cee9fa53c5efc00e669537e6b376574f67b398351b4ccb2713dbf71240c3fc0ff541178549a3befcbf538219f97339bc0163c2805342403a522ee31a01b66f0ec902d18c192ea4c89084d65f05418d8c559fcaeeed291c6b1180a3cf7e7024064d8e87c8ac61468001d14ddbb801c139f84074ac141011548533809aeaae019dc6ce624a799d3292c3610037b6a406b0eb741545f967b44ac30ea2de2fc049f750b05fd5ca9111db9cbcbf8cb2d82048ee7f5d2c5d9baaddddc9c7b6e29b22a2384fa2ceb3d2e57d390dd39e7cebe096f2a9202b512c8e1a84a96b23fce0c5a0ccb25913d056e7596e8a715ae1b9b30d4f29b2dc400ca2642c1d6ed7ffa0fed54df211b68250fd3a6c37d5a352bea95f847a17e0387e5fb91f2c01c9b07a5bad7e6cc1c0030f5baf7b2d40ec503b71075356e21ed14bd4eba5e6135f413516a0d1dcc2a0fb86d2869046afc086792ae75739a24abbdb63e0145bc9debb93071df5f774c7fd35d9235a4de4558296494d0ea78c2c27dd8f200dc6e436d16869e2331e9d0e0d29993e271c33aa0e524d912d05061e6fbc9bae4634d14283d8e634478cc20ba055db1270296645d7c0171c7b87460fe08cf1c8c879c29c17e07f28324d25708fbceb577799d39532f5e573c1a262c8f355b3e80c9911517a8a880aaf5af060b3d6bc00c5378fe9fe6327d5dd413db82b15ca34af9d9384eb67c4ff6cd2a663aa173b6c4eaaafe4274a64c07bdd8dd2fceddd9d50e515bd0988d32007c4408a37e99d6819ef41598e3822b9fb5c521652d1e1f97c1ba4a2d213c90fb626ff5c66018ac0441f80455a9e71fea08a877c8b3bd1a498740fa6f8055a5b55d99b60c7da0b43e67946cb24de4943b382e1ba838f0e416f599a01c8a40bcedd6c4b80dcb585f81bd16b466c2a2fe1b7ab291ad6ce2ac4fcc61eb007e0478f92c18f343e1069edb0268e90e780ae27f52fb7366f491be3f08d9c799051d347b8c1ef3f52f039d969a8a12d3a39e03a2ccfa7e3e1087ea1f0a7e9c62a9f3b06d57cf415ba4e87befab2420d7dfadd70b0219abf1878d341412124314d444ea0492971158158ff2b5c5f1a2f93a5482a8ec2268cbed3c1b274d4ec998dd3e848ee1cbf25102e945b679bdb381cc49b0eb4df6c32d8515522095c0998717995ee5a283d17a06aa37d6bab17210d27690f24a0c7045384ce8d1d4f9a8d1aadbeba6b60e31ef1fb0a394699813702e3ab0e615a6a719b3b3ed167e7631e33885ccf4465a930a5a3bd07932939e5f2875a9fba8dc6adf905609a0c117b57e0a632a660b4149d52e5a498da3eaa1d224d2d386240761219ca1f68812e6e6954525faba12effd1af0a82a9299a50b9820c9404452600fef7125c0c84061b7e525f0d0092e8fccc2342b0bc5bd184a66737493546e8e5da5e515e1b09e277f6a3255e2fb21a483d4e1d190357df195fe88c0699afaf5798eae746628bd12db8b17263de2c00eb565e009f97337bac8192529840ada728e947b2b7938f1c01135e3c82db5c26f80b38954f93c55d9c09ebccedc933f1bd6e9668671d1f1d2ee726f00148ecbe87a1e2f187ace32959a2e3ac6029fef8d37c482d0e0f2b04e3e82b473dbe60aaec6110d6ae98f2b9d64282d4a7039b509386edbd70e10557ec57014f5de230f30ecb7e90991ea4d98c9c779cc00d7dd4160c93c550bfbaff994ee7618c481cab73394f38b4d369119b6cc5210ef5d884957aea80a0bd43a71acbcc5230e8aad2ae2caf507893444890d07ba06e8007e0f77975206faa919b5b3d87e875fe05e7c6d2fe27bc5edaa16268d4a99b5b5f1b8601fdfa8fc39f2df6eaffe2748f718440f5ed5a87ce25846e9a4ce38d7ce5c636dcd828ee82c50060edd8d86d3124742c59a9210d7aadaeaae35143ea96093988d360a4863166814b06f7fe9163cc55df224155201098ef3f15d89a8ac85ea19788901221a438d2fde14095f23410410e6237d3a1b95597f41b205307a30c7cc548a32c03221c5d89b1249034072ce76d316671226bed809119772a40bf194878eddaec19e808705b1059c01a2fc5ea9b966012fbf4e40d708c0f2d26ea60ecec1951b2ef14f6bfd8c719cb93971a3532db4c4b1122deb1ba8062b83f6dd94110f9ea0b2eecb1941f09360fe7d954fbe3207e83d03996dba144c9de912a7603fb49f4dbb4400661382b41ec637f734989be450fbf99ce7c18086400ea1974b4b6c95168007aa8cd4d60409700e57125fd236eb4afbc9f594d9407416fe1ca09f48c2ab1b50913a4366a5d26fb3fd76bf9aeea6edfdb765ca03c04fc31184b260a2a993020c968ed0f90b574571444561e26694eff8a0839b4947e68c5ac141b92e0052271ed45dbee0b36fce784a11f4ce44a97b0f55c3703771cc721ec345d3318d1150cf81c783113acba6d48aa75b9ca932f39dfbf0c3e3e2fc8ed44cc0fcff1b83ffaeac972354b654b38c44bd63f8738c66f0bc7a458115ad7d6c3fd06fe0134d05e8369b5b26970ffe8944189fff703d1ec2f775ab515f452db6019cc1bf8ce1454b256d70068f91c83513010f204dad7a2aa7870d95f11c1f7dffc6407c9104863e970e80e5415bc47f9f0ed281346020970e3128781eafc99d7a575db7b9174306f037a8bc32879093a37b6b13b6fd21c02c2644c1c4e6a4dd8d43ab3660dd128d6579d9387924828744a97011fd369ad83b49cecd0cc62d62e629cadd3e9539a25e7a4978dfb519a671a429699d665a696e534986d0eae5594ac5b2ec1a71022daf6659794026d367c740a65b6e6f2b12d0615c86b50253bacfaa88fadc2a10f74fe1986f9b13ea6f4600384ef70d60f0cb768441853375faf1e9ae83a7f7e9d83d7f6c69e9a68054e292a47464e48104c28fe3ea98a1325913416d2dec5157b1991a99392a570629f14e1bfeb04d3f184af355c98496782fb3c58a989bb65fd883af62bd25fbc613864ce5ed3f5698f4652cb0e0c5220ddc45e6432c0aac7bc955b1db4dacbd564480fce458d46722a0f48e45175135e2f2b14817435fd1858b4016754d1ab24847fd228bae0292457d990174a864d19551c6519345ba68e9a6532cea2ce1b148070d52165df84c6551b7b8b248572eb2e83432629a65519fae81022e8b0e11f2697569680bb34887c0bb439d50d1058d473a6616dde230e245b3481b0c8a8859b3e822c8368b3a1c9c453ac6d0edcb59d4e122cc22adc10305ee25aacc51ceab20b72f5165467b4225a94da9aa599a932ae4ad6272db76f2a527a97f7db3a03bc7709fbf15a5da61def765ed21d8ae425a1b2b440c1520725b94f8bd1949539a6895df5bbbe44b2f1416f0424333c5c1bee80563494367031d9e2a6f4e618ebcb4748228e5b4e20ca8ba1593e34503f53f29be153352d05f2b24febabbe006e8ff9321eb26f9a8c9b635537568a875fc69e33db3b75fa2f9788e4e3a950eb4d39f1b07c446343d638f8675455e3ca5658448adb5e8ce8645c81772ca3925263768269581c098c1a8ce3cca51fe58a5fc5f0bfb6788d41b953adb31aeae173f33197b4b0e3cf1adf364d29ead8a3db691bc3873cd03294291e86ac28e7856674555e8a101b0be0fad1ffd62808aebfcab40d9677fe4c856fb17850d24445ceafcf902aec12462f1e1804056134817bf0f890d241b3104e9b03e573425253d6ec7cfcec8edecc27547fa4528b069afb292a810115b7e761a00372ef468be127c6b58a61180942d77638ad21fe4949c11838ab797806cce7de925b27049ef2970dc0f587242776434dc6cfa240e6b4baca99ae54f95a1ead930c1978fe39e9ae3c4c5294e985d7998a2928c807041134e37235348b212245569cce863ed09916b42850a6c7bd9385a81d22ad9dca94d9c6ee66c53279b9d46924a4b4613634b885411585461dacac5d10c94abc04ed2597499197ae0631920436a9b266e470ec0301164427d9089d5c90a9a620615d09df272fa38238508b172b20bd6462e9e6029234258d480a5cbcd10e4e892709955cbb2b801b36d32da10c9b627b67f5c5bcbda47d5b6a2b62462967886a86c12ec13b2e1354465c962989409a3299a5506e34476286db1ec32589332c069476791c298950d522b268b04e3844c30ad1119a558a664c26a89cc90c734270b5e4b2ca304b6b9cc309a2259e5d8382593c2123d0632e339d23943731473d6725cc38b869278014cd3f410ec5aa1de67f6ddd37b796eb180e95184f9eae5bb1491e471eb33125e790dfc7b4867bf060ecffdbdda42ae9d4b56e7c8fadbc3120cf61597a0d64d1b8a2d1328b13050a5f56ce785813f0595d54264b341457596605bd4ee93503ec9cfcf65e61d85e75078de37dbe233caa75358b00d6216495244945b31f30e9224994364ad4b85b2710678fa9bd158b8604e793c6eaedde7894e2a9b8709210fbe99128bd76ac705116000cd45014f5c938ec8f917473f49c09920c4eff31c1ca46377d87446bc6b1601a97956182475238a87728b663a4899c4965d1ad654d786fee2df84251cf9a7f4e6a9ee6789892a134b06bd5628b531044fd8822936c4f542720b6a3d974c0b854455cdadbea31656cba5b8b9c24e88ded751032548c277c525ce9d1bcd1766f7fd2371110282f581f95d22157a86e3be2320a5a819e64f6ffe69eb3a6deddacbfeb3631399b0f0712d5eb89ce584b5e9177a2bc3da31fc2f2c885326e930095d0891971ae662f611155350e9c6419e65b0a53bcd355dc2ab50d4fef5788eff0736e1aaec5bacd3aab2067004cbb34463e02c0a927dd8648f80c618b6da09993f730ef03cebec1452ec0414631e5da2f95fdac1f5f48d4f5b7b6a4c964e3ae7e9ad9510ba44953935a9be5223dadac266d5e42baffe61be21782a5c804ffd38818ebdb4cb3639f91b5aaa6dfacd06f98281c20efaa566d6baf8955027fbf68d96b050b40e2c54be25a15e1d17e59263c08af70db7157dcc1a00a897a79c88e66bc857fbdc61e01a74ddb106750830101b1bebe953141f85a735a5b9175aa470ff6e5b6f17ad7cf8a61c59d8aadfd5dc4eb4fc673e3501336e41f325c01d9272cad09f1e1347846a0f777864ff19ae14c2a1fc97698b83b1cfc537c003851dfec1decd4f2b5083e4f53a410613220eecb3b48dd6d22622a5b73bcb700247b79f104b8625ada4f60f07f0a95c52c27c9c5c6176f7c7c813adbf286dc204e5ace19920dd31311d417959be09921501f36a487b62662fa0efa9baa773cfc60e06f479e1aff5a9fe58c9eef9316a9c16abdeb44c854179119dbaeb8180631207bd5ccfc4ce62b8464089dc4789772e11ddf4d830d820fb208294014db5692ef7ec16f7ac1ff302fa043491c81d01f99a46fe18d608c9a11283e2bc0dac47e97100b1dd82d154346102261003f63cbe938cf48a8ecef28ee823479b8bd067f09e6ca9071dfed251e597a845ea40c298df402642841d3acbfbeea3795187770aeb04edbaebc1e3323bbd54686cd67bd9dc7289bb2285f3d16f4944819385ec0c9447be931270fb4810cc7815e83a1f484271398eff81db468c8d98bf0fb1ab7dec24ff2feca8436a36a1aa8b840658248acd4e6b96c7cd11a8ab5abbb75190afbb9a2b944912d9dc515d9f07c6c51c81bfed286d758bc1b99bd5c002012f10d64b5a16c3e097a39820e0ce76816935c60bc0f1e77fe471e5ec096d1867edd567afa107d6f82670bbd4a4ccc2b8df8326fab4745c1b8111b31d9640cc622654c10e2422a65eb2f5359a5fa1e14a3ddab69ccc0e08777ee7da3d7d0aa7ca67fb56ee4d0113083e8d403dcbfd3ed0988513f75b05b0d409dc3045269a766154b3fb9ead202618c8ebaa9625a76fabd05d46738d01101a010a498a951464bd98e677341948481364ef4ba732bf090578539fd2a436f28cc8cdcb0273c5694dc4ea667711ef6142a07b22cb7859498f0ceeaf1d2e749153436c6fbeda564911b596003a58bd363870b0a490033ccff33ccff33ccff33ccff34b8dbf657df39d597f112993791ba58cee81f76a00cf947645ca9132dd9475a0548645705c109f30032f034303fc46b8094dfc3ef2e5703ef70435a1eb7c4d083fe93eca819950777294838924127a1f26b46b1dcf418e3323c777093dc895245bbb5b5ef82ca157f6c80a2955b2987395d0bf6336cf1323db9e47096523327c2ef1f8197393d045def54772eaac99938492d581be472612ca55f5d886e78fb77290503edc6dcb78a724b17b841a2763360749539b3a4768ddf1113b2edd8fa46b84f6957d11728aca193946a811e3c5e40f1d4ece718bd0627e9d8b29c9f41da7083556f8b8263aaa973f11ba54bc8766858cf488d0c334393a07ad50b71f427deb38ca18b2cf03dd10ba58e89cee75e5471742f1a071c2926796e61042abf032251dfc69ca19849a213da173a7098f2308edce37644e192a7f6c2094f4d1999703428b49e33d550c1ed57f50dee330893dfeb1947ed063f630398af072f6f541cfd9dd420addb1c4183ee81f877596915926637b503b0e7343da2cd29ed2836e16d3697ec9e4a11f97b79010193ce8c1e59079824bb29e983b28b1394e1e6d37b1dd0ebae5f358bd79d2a6b90ea5defe28c383e9a0c869909424ab37df39684942f95ebc450efa75fbe45cf3d9c62d7150a6fcc683096f93ce02073d388f45cc926fd02d53cc9c32c5e6886e503c4e21a52ce6fa41b00dba74ba8b137fd2e78f0d9ab5e58f038f6e89dd1af410a24cdbb3479e376a504b527eb7fe0b934d1ad4d81edc3dc7710cd1a0410927a3d331cb4659cea0e64906abf6d60b9719f48f4f793feb77632a65d0a6428e2ee6729c1b1532e829dfdd4e87943f0e52c6a0e55ee630846aa9fd2862d0a31c473f68e9878887419d8ecd14c3656b488341ab710f3dbd213f9cbfa0c54919b3a36aeb388e17b4184354e6e8e358ffeb821af67a3c988f0b7a0cfab14f7aefd8bb2d2895ff15192a5cf24e0b9a25c91672ba83764d16d418f30d6231c3821a43c55fce8be46dd915341bafb82925f30e5266056d3f7667cc7d694f5605edab4e6662f6fd4246053f8c6fa1752153d0476286b7bbef775250dcc3fa5c21e4c9d06151d0e23b3445f209a7414137cdd339775546c83f417f8f99ab31cd227127a891c62b45c82e12ef262839081dc72131738b4c50be82848fb2b7103b4b50bb42f817b9c917924ad046723c5eb4ff359c11cf6dd0ce3dbbfc7fd0e037b3414d96c3dbcdd329af790d9a6d8520d3e2152fcd6ad03a4ebbfa7ce24fe634283729c761ded1e70a331af4d41272ca97f86c493e83d67e1de6866806257f94c9269f6dd85c193449493a3ef39c736ec8a0c5ef683607d924b132062d2ed9bc65e7a0b989418f36e7e85f3448ca1687410fdff4a6225c6f8e6230681db7bb7e98724c47fc05cd259f26df20193184bda09f45d2dafdf1c91ddc05fd32d7ded6077931e782fa7a29e538c7f330e62d286617412e87bdf2b016d4b20e294af4f3857016d4998a2163c77d9b5f2ce89de1ef7b77e1d75e410f4cd346cd89b9c75a41ef3cef49f72a47215305bdc23d844e7a7539e55041cbabfefb3827f3ac9d29a89fa5e3ff8fdd2e4f8e14d4af4e1bd7339a313951d0e2ce475a9ec63cea3850d03244b3df557bcafd13f49e98ef61e7bf5a77826639a836c961fc8fe726e869663c72fc2adc87094aee9cc82984c9917c96a0cca5b89c1523973a4ad0a4a4c3f7b4fd39c424283132c60ffb2141e9168d1c3ee733774750f33ce50c6e11123a23e8b7d1799b2c4db84c1114ffed3074f2ce9014226876d6e1d1663b044dc34f3a97dc614ea91582de5de1a1cb3676983608fa250f99abc4433c6481a047271641f2848fe7d81fe856b9c9dd8320fd1deb032d57fa10d37f0f9454e126d9b3d965e6815ee37357af4173bd03a5e31c3ccef1ecf6ea40f71c218e569cdacbc981d6e6514efbf2f11e1c681f9ddde3a6dc9adc1be8de2995fd2429b7d206baa68cf4611a910f823550db247534b341cba7816edf93c923c33a3d032dfa2b8ee6e0711c4f066a696d9f57762edfc440dd48de71143fa8d80a0c944ec1c4524ebd7881f639a5501b473379d40b1728b92d87860f526d8c5aa18c64bdfe302a874e92154aeaaf9cff3bbce98e5c853665c9433cdf8ff657859ee3d94bfdb1e410a742dbfee810311db772542872e1398c919f420ba12656ce9c23f1d914ca4685103f7db014bae6603f974cfc8b0f92428fcc173d5a392a3e380ab53c0e43f2a41b36e7a028f4d3cccfd8618e83f06028d49cca66ef4b0485163fb69855ba9583123fa1668c914c913e75d8a127ba1673b7b90d7642ab891f47b111173c424ea89722cf5d5b0ab45b86d566e81b3ad0e4ae62ba8def914fc71b39d045c472a49b298b0d1ce861985031c4ae36b7eb06ea97476c59c7e6259f0e6cd840cb269113c9b2873d7a60a3064721d91da50a29245288afeff61d4b92656678165990400b33a30617a5820d1a68b5f9f72bb7e5ac33bb060d185cd0b01935b8d89881b6791a34270f948112b639c71fd4f4a4fb3662a05fd6ea1c3ab23fff305bd880816ee93eb5e5da0ec3e317689ebb66cc621b2e502a576ca9f47adf137ad10aad92270d572137a1c917acd062dee53098e7f07dfd2ab41c5c5d4768872ad4983ff6844c163f0a2d15da48f86415ea6208d5f18117a8503a62e728fd454690fc2994ecc9c392d4fb3d759a427fff7cebf81996c5d3c08b52585dd219a4831c57cc9132d27ee82cf19617a45037c79178f00f33ff3e0a45b6e3934b69b4771785561fa5cc2153e7a97828d4cc88987c5f24c80c0a3d3b464839559ae09f4fa81773caf012b7e2793ca19e7e88b2cbf881bc9d50e3f3c4650d5fda2d27f4744127e34cf743bb096d42ef57f9f89ad0a33748ce25dd59e36742b3895966620cbfec3d2694ec6c1f7c49a6499bbf8496c376c8d9a93bfecc5b4291ce5c1f37e62ba17fb8d39d792724c43c2594b928f7101fe704e927a17d98f51b42c735c9e325a1c69cb93ea4dc11168f84de1fc8fe851c99f6868456562fef5929a6147e845eef1e4ccc91c71fc48ed0aadf5396b8179a831ba17c900db1119324fb30422dcdb9f9fd926e768b50ce73b039ccce57768ad0df3744329b94bf6212a1a52fe938364d12b4820875525dca779df3ac7208dd23e9b718e43b7c1443e8f93e2ab2658550cb2fce878ecdeb2b42287ef1292ac7b293d120f4ef201a6f429c1c2d083d5e9cfb0adbf11612082d58476dfd11078416fe91594447637ff81f9498ba3af8ec7e503b4e3af5697ed3e47dd02494c54cfe31dbd57c506f3ae5d80dbe1fcb7b5052497f4899e2c7f7e84199d3d1a88f1742c7e641fffe0b12d2d9785092eb84dccaf9fec8be839a41da7e3fd8765082e57b08bffc9d9bae831ab74b72946eab92a6e9a06547fde9fccc83cbf41cf4c8c3efc0c27848582d073dac7476ef95c343aae3a0661ecf317ecc7936d270503a6c9394a52c7d07e93768933ff07a0916da39da0d7adc90bc2ec2dc2a013550e0576c91450c1a0890000d2df690408b2cae700548400034fcb7860226008008d471451e57141dd400083420055ad410411631b6b8e2c0c20e0bf200ae41a38b190508400ace150900400d1a5d70800001f02cb68b2cb6582d1020001a33fc450768c4e0621310801f98022a00001a340e160410c0d6d8c6a20001d81adb249881c50100300006bc98e13046c05b83060c180a0040001670808a5163860868680103c68b0d3ca4800bbe430da76187036cd4810b192cc3651860830edae7891f6cb5c51ccb850c9e83f6651734ff7794dd2739683f16739e74b9a5d264b88c331b71d02665fc788f22779c73111c4901172cc36518192ea36cc0a160c040c0c61b2a460d2d44406361c078b1e1868a51c30431ba0b18305e6cb4410b1d87c90f12f12ac588e09048174464f80c182688d130dad9b9a091a4c616318ac616316a6811a38b0363c61136e84166d278a1fedfba820516b9b106bd2bc779b8ad249dcc73011a2dd85083ded9c7dd6c443b324b1aaaca515748086111444307217e243fd5f5e7d91d0d4aa8f41de74c6592e4e61036cea026cf3eb2edc9f4bfc38519748f25f4de639bbce46d944133addce3f14b538ae4061934b78ada5c31633a8cc7a0e59a9c9936240f2ce40d31a091c314630c2183858cc94a3bceefbaa0e17ab38d30a85517c3f38d76021258000b2c30061b60c872ccff68a6e3ca8d2f14c9ab8308d3902a4885aac83c77296b1b5e50f6e32873b7ff5ef98c1b00018c2e36baa04bf071eb92299dc86d7041b7894cf1b3e6491d3b0a6c6c418db7ca29b6e596810d2d681d720ef2f6cb33c76716f4282ac6ec40f36abfc4827ede69ee25c455baed0aea6fa4ec22493675e5b0823e412b7f2e677c69bc0acac8d44408135e3bd2840a4a8838b126858a184d7161630a7a6a8fd41e2ac74d67e51836a4a05de69cbfdc2f4ddc4914148f13317210714f9ae9c20614d4b88ebe32f9840f375bc4383248c044cc07369ea0e6b399904133e59462a4860d27e81fd678db8fb4d1043547e27bd89237449e67281658ec0c8fb1c104ad2ba5b93439a127572d41f79c3a376597cc209e12b474fed9f1e6c8e6c04f8212d9a5cc528a9ff3cf0d24685e13935d47af396f672bd838827e19c4b5ec3a8c731a166c1841bd8df815da770d1a0ec0000768a3088a47ed95db1e36cf6434a30617b941042dff45c76f7933d6575a083686a086d64c39963a85a0e6798ff36bce1342cf41d0bf73749b973432fbdd0082963b46b01c26d559d00d11367ea04e9bc6646fa2b9c4eea204be5d94400f1f682d16a642a6984c331b3d504e37bc7918492cb87e6cf040cd3379639088f4f93e1cc81da811e60b8218a8123a86812086611084411004a1f32ca431820b1204a1380e6308114ab5071240f0200ac3208681100482180441100441100421400810020441081004816bda91796edefa0da320aebebc2fca5dd36cb83c7088fcf8a008e218b91613b1415d44b0d9453b7c813e5b2ba28b22ac4dc903d601fa133b1f56470ca5618d315dd1338a6c6f6b1d4f07a1bdd98a5c15be277b87349de081d1a6b7249003a73632157698fd8ce4b612948360deabae743a2f8ec0c5957f79172794c43214123227318b2bf18c66f4ed30e0b28d39a268a814387665d30d4a04d4015fa7c4db2722ae6de4754a0a19fc668fce53abaeca8a2f73315672d76b4cad6afb3d6a2cd1d1e4cdd6e8325d8c60f39ae342682087796b40b4cecc983bc867a1ad40a2b26064cf4d516befe1e1c5d127917e2f4328f270791574d4802822608f592f3c9b5a6de10f73afd9ad659a507dae1e907845b1728324172320f8927cd18ce274be14725f01213e3ac336ea730fb4cef4dc22b7e27b30241d516ad933408095a7174bc76a9c38ba82239b7a72d3ae4c21f5816b680d5e38816e38caa8fccceff6501c140196a7ac20c21d079e54429f04151774be781dcf92913cd487bff2313a6d42dbdab63939f33d10272ec1cada69470660232544086aa58824578213b944906b263eb52954131018089a64b695f8e532c43e1e30965edc1b81364e022f7424310e4f22a31438bf3a83d715d462631ea62a984acc982ad16a0d053aacf26288190cb383da3130237af9783889669a6bd655a81ee940af4c41cd9a76e8e30571eb72f93e4e37659c51b1c4f4a563f4733074f303eb7d33966f4c5f27a7bbfd0a48178c663cb233844cac92212de306f1c48556251b5e238b12025360c08bb3529c47f75e8fbcc984de482b59cfa9f2e59640d3d7be52aab2024a2c89181df68869baae8df72c7483c218c50d50be0406fdf683404440cab8506783c0f41592764426e24a19395e6e910c7d252c59fa96052c2f6a06ecb7ce6aff364a6f6f53ad881c8283946a68b4bfde25ef9ba6e9b80f9dda6f53553d857b1bda30019fe418387b46bdd63a770edf4061ea21c1e1ca93d826bc5f355470363ca8165db2ac13ed9f9a482be70a030a00079b6ed911f823c88eba1fff12d1d8ffdd0b84c1982582840fcb5c37e85ba31aa0be91eec430e0c7040caced753c80a6e120c4868444bbf238c3ca287b80c68c43b3e5cd5a5676e65b69b1bf436a692f2243dd010e3aa6f40e0cb5985fe07610f9452b3be6e83e778887090c32476e3749b443924a733df22ceb027fe21454c3387772fa95a3ab6b57b767468b049d409a382d9a25cd6184ec8c47404ab2f4e9db5777571dbdb97979f53a73664b0b5a4a17572db3521651dd15ce25caaa558aa30ee2d5b9436feed62c02ad2c3903318be6b0bdc905458e2435154dead4c9511227444a4c3ca90255e15e3608c5d30737eead5143444bb9fef22b4757879d3d30424a9208fd8aab570fafbebbc99a59b5f448bc1337ae6eaaadb529282f8136f954b4b41ea9bc5281adf9b035cccc56d22f1f6e8694ecec29c814d2e4d76a3444b4a2ac6193cbb688fe98c460878a99c992e89ba0272294e62516d2d2fc3ea34cb028b3c743227aa969a8a525a19d10295143bac0a94230b4a2953005355acac5ef5f5cbb7675eccd719ad157abd1b2e24d7d717df3adcf14e23386fb953e4ad6113652ad76cf163167b4b5d9b5376c83c89aba14090e2195512d06ebdda1470e0f8f9e7d74d59e8232b25557ef2f5cfbed63cbf95ff6d2dd4dedcc0acf050ca6a687887611443f6b24406c1050917175cd5ed22bb7b5fecc06" + }, + "aura": { + "authorities": [ + "5FoAPpasErRgatgonbNcYt4wzE8WW62E6y2gKqtyc2p5PhNF", + "5FhQRFPd1X4ZjzHuAG9Ztb6Rb6gsWVugVstvKKZ8McryKJHd" + ] + }, + "grandpa": { + "authorities": [ + [ + "5FoAPpasErRgatgonbNcYt4wzE8WW62E6y2gKqtyc2p5PhNF", + 1 + ], + [ + "5FtQxo6WoU4cjusgjkn5e5M3tjDc11LPovwSspgmmJvaha7b", + 1 + ] + ] + }, + "balances": { + "balances": [ + [ + "5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY", + 1152921504606846976 + ], + [ + "5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty", + 1152921504606846976 + ], + [ + "5FLSigC9HGRKVhB9FiEo4Y3koPsNmBmLJbpXg2mp1hXcS59Y", + 1152921504606846976 + ], + [ + "5DAAnrj7VHTznn2AWBemMuyBwZWs6FNFjdyVXUeYum3PTXFy", + 1152921504606846976 + ], + [ + "5HGjWAeFDfFCWPsjFQdVV2Msvz2XtMktvgocEZcCj68kUMaw", + 1152921504606846976 + ], + [ + "5CiPPseXPECbkjWCa6MnjNokrgYjMqmKndv2rSnekmSK2DjL", + 1152921504606846976 + ], + [ + "5GNJqTPyNqANBkUVMN1LPPrxXnFouWXoe2wNSmmEoLctxiZY", + 1152921504606846976 + ], + [ + "5HpG9w8EBLe5XCrbczpwq5TSXvedjrBGCwqxK1iQ7qUsSWFc", + 1152921504606846976 + ], + [ + "5Ck5SLSHYac6WFt5UZRSsdJjwmpSZq85fd5TRNAdZQVzEAPT", + 1152921504606846976 + ], + [ + "5HKPmK9GYtE1PSLsS1qiYU9xQ9Si1NcEhdeCq9sw5bqu4ns8", + 1152921504606846976 + ], + [ + "5FCfAonRZgTFrTd9HREEyeJjDpT397KMzizE6T3DvebLFE7n", + 1152921504606846976 + ], + [ + "5CRmqmsiNFExV6VbdmPJViVxrWmkaXXvBrSX8oqBT8R9vmWk", + 1152921504606846976 + ] + ] + }, + "transactionPayment": { + "multiplier": "1000000000000000000" + }, + "sudo": { + "key": "5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY" + } + } + } +} \ No newline at end of file diff --git a/customSpecRaw.json b/customSpecRaw.json new file mode 100644 index 0000000..0e5b4b6 --- /dev/null +++ b/customSpecRaw.json @@ -0,0 +1,52 @@ +{ + "name": "Helios Testnet", + "id": "local_testnet", + "chainType": "Local", + "bootNodes": [], + "telemetryEndpoints": null, + "protocolId": null, + "properties": null, + "codeSubstitutes": {}, + "genesis": { + "raw": { + "top": { + "0x177e6857fb1d0e409376122fee3ad4f84e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x26aa394eea5630e07c48ae0c9558cef74e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x26aa394eea5630e07c48ae0c9558cef75684a022a34dd8bfa2baaf44f172b710": "0x01", + "0x26aa394eea5630e07c48ae0c9558cef78a42f33323cb5ced3b44dd825fda9fcc": "0x4545454545454545454545454545454545454545454545454545454545454545", + "0x26aa394eea5630e07c48ae0c9558cef7a44704b568d21667356a5a050c118746b4def25cfda6ef3a00000000": "0x4545454545454545454545454545454545454545454545454545454545454545", + "0x26aa394eea5630e07c48ae0c9558cef7a7fd6c28836b9a28522dc924110cf439": "0x01", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9007cbc1270b5b091758f9c42f5915b3e8ac59e11963af19174d0b94d5d78041c233f55d2e19324665bafdfb62925af2d": "0x0000000000000000010000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da923a05cabf6d3bde7ca3ef0d11596b5611cbd2d43530a44705ad088af313e18f80b53ef16b36177cd4b77b846f2a5f07c": "0x0000000000000000010000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da932a5935f6edc617ae178fef9eb1e211fbe5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f": "0x0000000000000000010000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da94f9aea1afa791265fae359272badc1cf8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48": "0x0000000000000000010000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da96f2e33376834a63c86a195bcf685aebbfe65717dad0447d715f660a0a58411de509b42e6efb8375f562f58a554d5860e": "0x0000000000000000010000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da98578796c363c105114787203e4d93ca6101191192fc877c24d725b337120fa3edc63d227bbc92705db1e2cb65f56981a": "0x0000000000000000010000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9b0edae20838083f2cde1c4080db8cf8090b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22": "0x0000000000000000010000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9b321d16960ce1d9190b61e2421cc60131e07379407fecc4b89eb7dbd287c2c781cfb1907a96947a3eb18e4f8e7198625": "0x0000000000000000010000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9de1e86a9a8c739864cf3cc5ec2bea59fd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d": "0x0000000000000000010000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9e5e802737cce3a54b0bc9e3d3e6be26e306721211d5404bd9da88e0204360a1a9ab8b87c66c1bc2fcdd37f3c2222cc20": "0x0000000000000000010000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9edeaa42c2163f68084a988529a0e2ec5e659a7a1628cdd93febc04a4e0646ea20e9f5f0ce097d9a05290d4a9e054df4e": "0x0000000000000000010000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9f3f619a1c2956443880db9cc9a13d058e860f1b1c7227f7c22602f53f15af80747814dffd839719731ee3bba6edc126c": "0x0000000000000000010000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080", + "0x26aa394eea5630e07c48ae0c9558cef7f9cce9c888469bb1a0dceaa129672ef8": "0x9101346e6f64652d74656d706c617465", + "0x3a636f6465": "0x52bc537646db8e0528b52ffd00583c1d046e0c05fd0f501040ed281dbd6acf2a88f391b3a593c79cc53ad8872859fe4a9aad4c5e1414a7221e884ed856ab806ff7f3f3a5f49e52129ae13a53be28e5122f732e17b66a5bee1e4283f8dbdade7bef2da59432c9141910970e210f173e7bf7f2cdb5de2edbec5dd77adb6cf69e6951734e8173f6eef53358b1a10aeb95b6cd4b92b27acc6f08fea8c19c97c24d6082d8e1316ff32e6b6cf939abcdedb2adb9d4e876d976e6905cde9153c2797786d79c37efc2df9c7d7247b2670eba9b675e1437cb7f94393be48e64ce5e120d7fe367ce5c92eb35efe8f2f6a2ceecbdae2438e7312f8a458df15bbbd2a0bc42e3249df48bfad9790f4d27d2431dfc741493979fee3351423f513fbdeba1f6e9734ee79fe91d71cb8a56d4b1108de7c95158c2c4921ea0217d7a9dfe757a928e3aaaa887ee85420fddae490f5537a1873af8ea2c84f1d537d043f12bb3f98a22faeadc43a8bf1c06f737bda87db4b6350808c4d77e9496afae71438e3a4970ce73d743d1ab9f7a487af5ab87a057afce3fd53be23811cc75e5478f7efd2707d6f7474fb5ea6ecf52293af7d0457d64bf64dc1e498c91dba3fb7011fee800e0224734ee04b0b38e169d7f2eb7be5d93fd2db182430d6ee0d0a405072fdc78a3e20884c39731a60461c099810ccca83802b5b3e4d9fa93fd7dd0ef1553dc40b77be8b77b8e290fbd52e6e5c55c51375d7eed423dd44ed44341c4edaf095175376837a63cd4dbfa9bdef6dcbae2c44befd41fe4d6b3005613b61c8d2b18dd152cbcdd079600df85ceb9d33849d77ebb8f317aece0e315a68f7e8a7e69400b41d74f3cb7b6ccf18dc4736b882efe7b6e091103e81ab449966e88f3778505fd2bc30f5d3cfb4e08ba78e6b905049987689e5b5ae2fc90e796962d90439289e1e6939a3c3b922cce119f4445e7ef521c6ea090f8bb0406092d8ebf4b58e2987fa5a8214501ac68fa2ba54cd373928bc57af62492c57a9ef3bce3cf5d82307eae79e8da4e127ce99ab4d335e69048ef42c82989dede3502cc4b6f6fee8874e845b12dffb4d0f628996b5efa5cf357caeaa54f4fe23973e6f4aadb8b7a828940c7ad1360f1f6ed6bbd4d3bd77c5b101e7248fcdba59db201f4965a897f7bb4476d2ffce9cd2181733e09ce99d1eb49023d3a12e8d15bd2b8c5c5cb2ff54fefb64f811f7df5d17eb416da25edd95713b60cb42290957191ce9e9db904862348dfe1225c83148540d0a577afbfb4880b130749e7247309455caef008fcd2bbed5d2a3fa5ff0525f8d02ffde8d829ebb46de3d609da7cd2ce4fb9282c81f96fffa5df41d72067a46bd7e018dd6820672449b258ec4696996de81b862540386d9ebd618a55ec192c41d62d7247b84dbdaeeba27d5d115ed7fc74a053347464a03db770c0e34f3e1ac714a739e3469532de20a28b2954ec574c710b0a2152c0431f70c0008b8a9d3d0d3aff5c216844f607a53ba782744d630e09f5ae3ff58b278feccfbb4bf1a1637eea21cda3a37aa86a35cbbc9b39e659ad1ebdeba1cca36bd5c2d732cbfd717f9b430e09072ffbdbbcbb39e6d5f26f76297ee61a6c8651a75a7ecdf267f6eb21e6a0ebf3d0a3fbf410f42ef5e9d1b50821b5fc98bd1a00fdb24bf34f5a6fcc51efcef0d4d9deeb5e0f3d723c79a26b9263cab3f5f7d35ff4eadc5ff58aba28b2e5fedaa5bdf093e09c3973e6fc5d3d3bb54bf1d9a1859c11f6a6d76d27ef21f6e85f0ff1fbf4907ff4215c247ef49f8fce3f3183d30b2b75dcd281f5900559dfaea5d86ea03b8ace7f21ab9f5b4c723c7ce8cd2981ac67ef42d647d79833229ded14f9ecd226e99e3ddabbfae8cc45aef49e24d94b2f69e7d979cd0bfde5397fa337bfd61b5bc8eaa0c30fc30eb9244fea3e7a3e906585163dda0674d0655177af6fd4433ff50771d8f28dc39b6ff80de8a0c756d2785bc50f58e3143a6ee1c0f4f3b965c5cb330f945ed4d2bbbc18028d84aebf1d0d16e9987bc0eaa5f456103aa08a7802931be4c4c8dcde1b7b731058fd117b49549efdb643f6b83f865a58617a6edd00e7efce4b2fc073eb062c5e6a507210583df777e5af1e6a9133327ba3d3ad44029f7a515f3dd473043e75ea5d0f7d5af8fc23bda3aebd6824ec1c35b4991710f2118d8b6c2f5fdb692fba9cb4bd877a8eb4478fd4a1cb1ebad38fa24ba7d4af1e6aba7d5117f50a16e9b41d2b12022be85dfd4997aeed0825517999045f7a1ed0b8e34e6c9b7dd1456f973246d7e0262d7c238d7b885b376cf96bb31af7d0ddbe535b0371081d75f813e8b8650398e7960dacbf207c3b029e5b55c2f8e68ca0be1db5f5d0e5ed5d0f516f3f69cd19b928750d6ef035c851d7a85d824946647fd293744f1d7228f05367ce08f777b787d3bbab9fd7e545f1b257fe95be14bf3a7346a617b5a63117bd4bc347bfecf5bf9cdacbfdcdf0975feeefc6f0975feadcdf85e12f2f8ad1562f89868f4e2dff65afcf4bd7e0562d3fb5fccca9203f4e9b143fbab4dc1f74e68c40af309e40bb579cd1d26f0b1fda2b8287ae31ecd6b924f868a13397643e94df967fd59049152c20d071ab8a13cffff5d0ddbeeff7eded43aa70f9f6530ff5b773a7a0eafa9c80e50b0ee22feaad87d8db8520188d7d3a7698a4e316abe9eff5ecdd96e7162bcdb36f3d0453acbaa767e71ff68ebc011a8ba0710f4186cfaeed700ff1b3730fb5dfeb35f8c10958d27010bf0699e3396107a6fef8a3f4e8d02367047a0c794ed8414b7ffcedd1727fd1b5b8410bbfb976e6a4c7fd1535734624e420b0fa2e6ab887c6dfedb0dbe31584493476fe615bd441df20148ad12184b0a317358cd13bc6083d46670e76fbf5edf5286997de3009f4f66e7bf48e1cb640e39febdfaef1003a8d43e8b8bfe8cc19890eb92333b058ac2a1f7b283abbec2178f5d75ed4d16efdb5ff74f7f4edd0a5dfebdbb5530fb5a37a087ebb4f0f456fd7e0868a5ed4452ded14105ecaea7ae8d743af470974e9d0a5b7043f7acc1981de850ffda7bd237f16c02a429846e3e79fdb7dbb76f5d0fd20fba2837eb76fdb415701fa51f424b4fdad9f4239ad37e622d06ff4ab872efce8ec5ab4de4567670e89ec8f3d7a577fec45adf506adfc2dce27d59f1284db74a6d01d2d6ed0c6e7b88812647d52037e0a7de8ed1b1751826e7ecaf6d0db75b88812647d52031e7a3b732a4816eba11735e49274ac87bef5107f3b734920eba1177551177551b3e5fed8f9a7bda3ee5900ab86fd86c6ad716bfc75d0d919cb9e08c1093ab2ac8a6c4c464536452645c6441626636541644d6425c880c896c8c06426c8569009910d9155c9b26458b21db22b19539643a6438643e644d64366449682ac884a44a682ec0b36a76aa17c64445436754d35a396519b2a19758cdaaa5b542d6a16158b7a45b5a25651cb542aea14d58bda4565414553d5d434ea17354d8da27251cf5433558cda440d53bbd424aa13d54b65a2aaa0a6a0a2a00a5187a83f5413d42d9555b3542cd5073a078d43f3a06fe8195a052543c54c26661353099906f542b7984b4c2d261695892231b7a836cc2c621e110f7925ea41e74c23e609645345629631b7a84e9843cca649c63443c200da205f30c7a85f6418d20caa82294676841c23a19062e4137205940719463a91fd104d30a7904ac43668178a029a02ca441462a2803611dd8863c42f620b2218f38c98465413d1a04cf4ca4442a221d7d42a920fa9469e5175985e241b5912720dc9c44ca22e51c1c4256419138c5c4292a165e80b2210d20a79453c23db229ba06e4816d521b62618128c984364a26fc035322cb232f00d68063c631e4183907ec02a3d039944768279452c41d482de105f9079a152cc14d41b221f95075a85b621b58844644a5033b08bd807cd81da10abc420a617b38b7844dc42e18848c421a211b50769258aa172441b6697f9058a4177906a645c240ef186f8c4e4325520d9d038ea11d00e58078403e9806cc03460131c0396913d01c9806d5037300c9806b6007e415b100d6441968593264c3ac0010a98f00b4862800496a05082028852d04a0186124004010718c1004143e00d01f04010000094b4171a7c86920faca39114271e6012831323189830d16074018a1113265950d0d44368e68184e4a40524242727e001c3d20b508c90ee6023a30f3089b2c4640986179e18850068dac152909e38593272818991d10744987570940f4079c244044a463224317912c32f41310281089c2cf109878d5a8012050a13274c9ec4f0462d408912812528324469a18507c0a4833f10258a520c4c62780283142523282188c244044647224c17b00b46505e7822058a0c4c5a8832e5890c49464c9694a2c460a4c464e909083c208314a23907bbf084c992911425195af060be79210617a0385142128029870b515a3072018419074b1181d1111329524460a4044a942752a41851c04e38588ad193a5274a51605892c18990e986a14479b2e444490617982c454192c2e4490cef444986df60bec121601285c993185ec9e84829ca05a03c7102430b1ff8800a76bac1464b4e5c7882e4640a1323198c6490c00a2e18bdf08293150a30db6029472d18c1d0421b96b204c548c90806284f7cb201e5c9077ae61adcc21329509e282dcd60c444044831c4e0848992910b484f64501db5100549e533d560291f4c36ec8489cf5cc32060e264c9890b4e968c52e099698ce0099293274b4fa03cd960aae1a316a220798089d1920c2d18cd601464a2c14a514ed8181a2179c0c91214193ec064a90523a5272e4079c28489077e8551dd7081058de795c62d16ebe12a7a403b4da78131c02a4f7483d3061b30736c9e3c25cb49e76419a9bc329e40728b7183b565dd89b366324a39e59ccc1dfb8b32669cc91867cb8ed90732ca669e3352197bb26c66299b5bca668e30c638a58c51c6c90ca5ecc8dcda0750d33c6089cd2923cb29254729a58c93999be3388e8b5996f194cc324a399963e41da6dcb2dbe111616bc99279f294526a524a299ba384cc2ca7649e53422a638cacc901c418396b09995963282333d7296b8c1d3bc6c891a3ec183b36cbc9dd0c194e9627c952f29c9399638c51ca9650462999259452c61842f440ca286564c9cc52cad871ce397fa6902c8b314e9a5129a41380100827a5dd9c93cee9d9e99046dad16c4e10628c73ca19218c734a3a27f3acb17ba763374b2965954d67949359664f6450441e6e11284501811108e8856434c50889c90c4e40004200f8002f444162f20294272fbc1005c9031294a4848031094652a41829c50082282d3051329a12a5052325264ea4b8d0821193031c0d258084185a3092924289e0034f948ca608a08325274a46508c5e60a2800324200124b860c424ca520c22506a210400b860a464e482521426430920c1e889d212012008980f60a4f401264a51969cb4100509c9890f912100cc1025044b01184a0009ae43c20198906074e404c9034c5e80f20406294e607023103c59822283921784e8034b320020c80c4630305982f2442906262d4879020225274b5244e091e201c7244489a2f4c1510b4e3c8084144589003e4e8c943ee060c9e8050f74a42c49793283914fe5034089f264a9052752a038515a62b2f404042088f2f53009333cf98091520c5e10252746482df44c81621479f8004ca044792245c9680a1317a018c510831326462f38518ab22485c9d20c463e53a01845005c6e9aa9acba0953a1529b306dc2abd5eac29aace00aae7628152a54628ddd840a5c51a1129b508154a874135ed1d58a52a1b2ea265420152a54a8ac6a13a6029b30152add640579459bac2015d8840a5cc1262bc854a8ac5672359b5059416ec2dc640557b063135ead562bd9640557b009af6013023419c8cc1004529c70afed88f9bb14a7bd4b94d6bfec5d3d3542e5eb6d2d7f97faabf7d4a24b8fe108d4db46a7f67616c919895e33750f708476e9f3a10a7a5b2dfd7149aea7deb6b5f4d7d493ead34db6c7de9ee4823df843774fb0880efa257a29af1fba13cac77f7a287a48f863d9f3568ee9a0df537b171c1a0fb0a39c704b7799cd4337a13fd87a28e59cf3ea6fd229a187c6e7a19fb074ec5d304bc7de9574cad8b0eadc191e4ad1419f56681c42275d7e976fd72eeaa777ef952a8a40edd5bb4b1f2fd2637e63f8e8dde9976b97dd72e888fa6bef52dc9977afa726f4d714b3b2bf4a3df8d30e79692fea51b2eb500f51fe10f52f51979f7aa8fae557a75011a8fd9a7e5d9207d0c9879c941e124a0901d430a1e66374f9d1eb89be7aef0f15531c81a4b773b5144ef7d31ff419626ac775fc5e9cdf6e73e9c989def55f12533b6c3eba8e9b8b83d36d1e47a08bfacb4d1e47a0cb72fc2f374d8fe37c643f3e7a17e97bc8eaaf3d7246387a33f40785e8a05f96f3dde5590054e60a6b8c8d094486a069197c4324e673d24bdb347bf5473dea5da49f9f9e4dcb9f61716b4e7af5e9d5bbfdd52f6776fe91d36b1295e72428654b0979ea3007499ffea4ecfa93de4522dae01ca3691a73435e88d9bbfef3ccbc847aef4f7e2fe7744d5b113dbbc633f0764fcffdcd342f2fb788fa93de45e2a68fde3112a14d997f44bd3a75ce370f4369debd344dd3344db357e8affe300ff3eed2fccde73665fed174e929a9827e758a5b2c16cb8a0afa6b9777fd35aff6fa579f1e9a7e45a0de38efce2fea2b0699ba3be4dbb1cb75bc9d480f5dde4844bfe397b79bd04399b7efd8ae3fcd2f7bf5a7b98eddfad3bcb3a806d29cb3b23fcda73df5a739e48c68dee545f1fa7b7d5fd49b567a9b952d1966c2a60aa1e8dab5cb729ae5bc9cf6329acfbee818cd5fc8f45dbacb2f64fa663ffeca3792795149feedb43aafe921311a2a3ee47046ce4ff9d0f2734c692ebd7dd32c3710cb814d58f71acd25bbc93067bf9c06b924f4d2a110bde6d25ea29748a24bef12bdc41cdafbf35073ee1451046abfaeee2fd1c3087451a887fe97e8dbaf3f7498826ef3f64bf43bdedb75ea7c503f2ffdfa9097ae43e4a5730d247dee78dc9fcc5cc7deefa773f60afdf494e4b76bf6a2f0d3236724f334aceb0f6a1ed2cf536f4e090d65f89003cc4fea99958f59fe68ab9550887e7a47327a5b7fd0dd3c0b60a503259b2bd22712eaa1fc240450c3441a4828f9ed32b2d158e3e81a9c913312a38d5bb4b0615fd1d8bbddf336a9bdaee8a0536fea5dfdb54b38a66bdfa2cfbb241f3a4b08bb48c19cf9dce2c245870f20a5087f57f34aef5279e91763399cede5d35a60843566e6a8d8a59d118a38aacb63f1185aa45feca308eccc654084178266a45259a44b69d921a7a4873a5b61ba5417d3a5aacef65259a159aacb317b854855a7c89fde930476f939efea7ba8b7a43aff0a9deaa2d44bdaf9e97db9561fbd2842d65fd57204bad7c7d5ecee21c5455a26a9921eed0a9d4a3a738c5ed2ce7f91ddd00822624c215584c69c02647df42e643d732a742f3dda29f26574e6c8cc41ecf0049a26057e63de1174cc7d90f3b79520074d5fba3e89e7bce6cc1dd93ccb9c3914f8354f06d42fa11e7a5951ec4b7dce992345fae65a983e6e6d39736c6e8d2991be39e4946c8eb92637c821a9ae39b49a637673c929b91c3af49883e06d0f73cddec6a65c9f140361dd25b8a2b0ebd0384a271d7a74984227bd00ef43eba9c76b63a1090f78c89fb083252cf8902576d026f65017fae94b7ae8feb0d043f76b02430f5d14a781400f416ef510c6cf9ebfdb5f4ef3c15f6ef3a683bf8c476aaaee847042ea913a435fa2cff07f7a2809ce51625fa24a987c3b6d67d81ef31068e488d60d724762744882a74e430d3550b9a83463dee5dde8ec971ea11e9550af47c9ade1dba1b77b0fb58daec186d45302bd7dba4fb5dcc2614b776af180e6a99ddff510539f35082490676e0e0f61a716ce79e6583ca459551e7ac7381818cdaf09cf3bce39fba987326747f590e6ec3efef3f510f5d56796f36a57af695aa679516fb6a73ae61c99979eb9c611f0f2d231d758ca52c72d1eac3c4be9b895c58f97cef110c44bd75ccb366aa56bda0a6e8e61766a709b49f135d7e0b66359c59ce6473d4a2e9f7e5d978e33974276613a97565dc332e7c732ef4875ccb1cdab854fb923d974ccbbf0af2cbb3815a467ded1f42b5dcaeaa9574e8523ead22fef52df3c6c42d6b48db9cdbb34fce6d45ef9d4776cec2bcc075059d9f12bcc07a00e554571b3999744c34ba736fa8e6595a66d3b965559fcbbfa6a9560de11e7d2b92e3acea317b5e49448a71eb9249a53ef72ae793d9a5f3ebdb9249cd7a3794aaa53af4e3df3ab5e47358558af24d231ef52d75cd3ecddbc07737ecda9edc1bc23d335d7bccc6e7ee16f9a6347996bde857fa96fce9c0a9ac71c74358f8e791c74318f2a48d7bc9b39f5cd6a5e1429fc0cb3f021857f893c5f13ae0d96d0559e5d4788a887a27b515381abac37263459b46089233b115e36731075e9d056a7913b02bd7a175e3d4aa057875e3de8d9432fe3a0b84d8ddba195fd356da79c0ad9b3675ce442c9a9a079190775ad16b29eda7b7d3b735077959f5ed79f08dfb519cd850e7aa6f194762e0f5d5aef27d4607310d8bc2df4cd1e359276e8d0394ac72d2c4e7ce65cb27cf69b6b5adc2087e4ba981f699e65deaeb5ede15c7e7ce6bc6d3fe745dd9b640edaf1e96d757cc7de96dc91761defc26f8fdedc91f6ce8b62677b94b4eb78bb8e677b9464df9e7d7b1f7050ac5d4cb12a7adb537fd1775ca7722a64bff9075c24fae454e8e1a0e89bf7818eeb58c87ae69040d6171e2fea2ea6783cd940d1e38e77afa77ed49ef9f5a286c06a8b2c2b6a4d72281439e48e406f2e497b76a4c341d1773828b25e725074402759559e730dd3386fc79983b01dd7c1ec8dafb98ea68369ce59259d9dcd8b7a67731d8ddb1cd3368f7988e6619e7943e7b63c79aad7f5473defa777d2e94a84d6f6ca0f7f4a40ad956d056aad350f8d2d0e5c68906b377feaaf9d390e9a6daffea6c3e96c2bd0c99fd3392e62a4b9081d3b3b3b3acef9e69aafd0658ef9e5d57776767676da68700d66e34f491222e14f8273380eaa76e3a0ead0aed0519ff7fa5a7de322edd5392ec25fbd6d4da34d999fe453e42775efc341451d7421ec8196a47a6fd256af8e39e677f5d28b22664f9dd5aa9d025fda29f0abb4d5b56ee7aff6e84ae1c2bcbb7aecf2a228ad764108a55f1042e8976cbf20847f5d1ee8da61bbec8f5ddbb13db26d8f746951287ae62112caf65a9d3b9204e7282d6d9fd48087312469f2975f47a64b248c86c5bafc487a754d7ac43ca5248ec362fd5290bf3cc6a5ed2f1562c8ac525203be3948fa12fdccaf52e64bf42f674e0993c71c84c73cb3490d78c84152621ef310d9dc9169847a77f5d4a5bd2e0bfdc2679ff6b64b25e95db58f3821175d831c9c16a25169f1f2eeea2f78af586bf5eab1bd241ad8a3e58fd06d527c08ab27f954d7aefe2eccabbd55f687d5ea717f977797fa9320202f9d621eed8d3ea57b24c9aaf2f7f2a40a4895393fe5facba1bdf3487abbe6d5bbec56fd5e57f57b79d265c5862aaf34853ef429f5a5acbe7a51ac96fa65f9d9dea41ae7a7532fea6ba95f3a6693e24baf27096c1969a716deead4db4ee9eb48fff4cb993b921461b55ed9a13d6a67e85df9d0ab8d7de15f7e79173a7bf524f1af94d51fe1a49844bef48ea277c4deec17a479f42754038d025d7358acbc0769105a0a743a3b5ca463a0ed24a14e9d428c9d3167cc3367b6a7fed833db59ab513b05fe854f1dda2990bad60cb9a50ef49c83a83da2ae753d547dcbe06bcc19e1c9d3f597b9d0630e570f8fa86b997311f89b750e62ef7a48e8d9abedfae3ebab12ea9ab78339e45ab89c3d547fec9877b2f0993a967977f599437b2174cc8b22b4177ae69a9661d7f5d0315b290f699f9287b463cedc11f910b3b17948fb7dc06a8b873ca4fd01ab2d9e7948f36349118b8e590f7449ba8f5ed46d99da3b1dfa657ba09704bf7a3e6858ac2fc06b70bb6cd0b3d30a6915dad4f2d2a7dd4077345d84bf939fdf888b2809fd17f615bbc0a1337bd4b3722548459d49882a4b0f9d5efa07599aee22fd74a1bfa7bf3c87045865853accd29f740c74176679e997e778e934b0771108065ca840820a316e582c1575a98296259be8410536a4200b95952b412ae84c4254ec56aeb4aa3a130354d0a96562808a86302b40a7614904920e9b5e3a751ac2ac509d7a34144520e9d5a321cc0ad4a147834720e9d413badc6a41bfdcc431c8e18b2f79acc1041c66f84bcfcc74ac5a09114616471c6186cd983e54ac62bf422b388ba582597a4884970eb53c0b804aafbae5119a0622500462e70d76f0e37d9e5b3bb079a1d50e67d2a5a4f2d1e19b97debc547af5a050ef52478a50c4f9e941f12b1d3af568a533a7028fa1e5a9f7e59a7ea9fc9df64e475a71f90a85c7d0f2d3ef089e560f0abff949a12cc04aeba7d704468b11d69cf1ee0c1f1db24b1b9db90c7ca1819dcace9c3973b8a8b0a43867ce7f610180872482e8a214429727d2b09662e037ff8535c29a33ac290bb0d29a81c5636851b1df11fcb481dfa8308fc56f54ec97869fde851e7984cb2d1db4fc12fc2f2c0edc80e2863a582c157b34b0538172040ad4a802088ba5ba3cd69543d2bb313cb7020f1c6e28118815164bc55ed42908f9e831955ecda62bd0388e3ff5b78230011abb05baf64d8b52dae910d639a947af734e8d5a1f0ec22139233d5d1a4982735e3af57ca4b4f065f719ec171799ceaecd08e3e5917aa41e9de8a2d123f518a34f9ffe68bb21a7e5c9431d52ef910ebfbf47b6417d56cfa73feac9fe2e0e62f8d2b6191a4f975c843afbe422d012e96f3a9b17ea6f3a73d7e7a747e628b06d3e9dca7cba095cc439e8f2e9437aa8ebefc27c7a66b9812effe9d4d540d7edd93a756aa0cba73399bf447e7a0f17813f1db33efd5d1ed550eb9747eff2a8fe2e6f870eb9cb7baac7efefa95e129cf3d5b9c5d4f4dc623ae34ffd5d4e93e4639e4f7f57b59383d899931cc45ed4d4c2a70257b363180dbea641ce48e69b4baf9673e6229a4fd7347b64f5cc1da947d5d9377bab43d7e0738b298c971cc41db1ed9cad8e59f8ed976b71637b39672fc72c3f642feacb06adcb698460b102395a4d4c56e0a86ef71c44145352c500364c4086191fc0f8628d8a9d8da6f0224598d73884ceff7a6da7a9834e08a78ae2edf9ee729a36321daae96ed79d50483f6f824784088e4e3eb7c690298aa9ae7a52cc4b29a5ecde74fc5d37e493d2bb3e0fbb314f7cbb0fdda3a3cfad314bfc45fdedc48c4101d31823ac08e0b905050da0c88351cd730216d66f92e7841d5afdf10b79ad37d9de23653fc6827e72a2306413eaa14e4bcc0cfefe8841e3af50087f893c844fb491b1b5d8df8ea4bfb586dc3aed412f3a21cfad27da3c74e39685eecab71f5ca0e3d613613c083ae8cc3f7db5193a28820e7a950e86ee850e7a510b6991bfc873f5e7f747f274fdf580f9d8333d6e9569bd74a24ec5168bc5aaa26a2f82000b2e04f1fde121595858e1e284e1d60adafc0a9ce8bfece6fb39ce0958c2b027e8e0c69ea0c39ba1be3c07e8d356f0a39f80a5a93f7ef6be502f6a687dfa6b47c5d4d5404d3d9e137670d31f47d9910dae82886885841f7d9859b38508182ca184172bbec8b162e605475c4a481188b478a38235da80a38c3dd48861020cbc68a1061469d0808b2cf3076e00445a1811a20a106e7e60c28b1aa8ba985ae1c0f4c31814a0f1230934aaeaccfaeaf2baf2f5ab7b0f85f0d5bf9892aafa445a5cdb732b0c1f4ff3680201d5c3a9a20b1300ea07e5e3281fff41b90f1c1d1ae5289fa2d806962214b8e58014eaf2d65c41a1504484dc0715533f435040f9c73db7c2b4e0afd0c3aba70c52cc4057c843c8a98d773825c4e6d99710b15f1386b8bf0e18cd6f1049c72d27e23ccf73ab0939cfdcf4a286567457a83bfdfcad1ed2cf3bb544fa83616c484955759fea42fd1155bf424fa43f2814539b77a17f6d8561e2abcb1b54d537af8eea14abaa77917eb62d3aded8fb1a08fab43ff6d46d31856a20e810c22b3a21a24e41168bc5625241df3a75a9a09f582a48f5e83a786e8589e2e5732bcc130fbd236ec918fc80d1592c4d67b1584bf3c7a70c1f6f7e6016dd3d4d24a28fd7c74f12c4cb17254022f23468478d7a17cacba5ac3e66de51f48bb9c89d5e33e8738bb11ff3db4f9f621ef52e74cd8b22a4e1a96bf64eaf59ba0938ef4c38f1ed2826bc7cbb4fff7cbb163915e25fe8d43be28e40972e3923d2b5694f1b3cd361ce2a6033c99c0efd28fae59533522b67a4d24a934ca7de9d7e149ddae9908b3eed9174796dd3f26f9d82aa76c859210dd23ba6cca5d9baae29f3e7870b297fb88722d43ec8bc8836fab64979ab5fded4a55f24a2bf1cc3ac34d355e7bf725e2f3b75a9dab74b8529f0a1273d28444fbd23e9d3db8e74589860bd019e5b4b34bdb6031fa5790f5d3034f42a7d83188779d5674fe647985f9e617e39767dd5bb30fc74eaf192bfec48a86fefb28e5ddeecc8321d7c98027c88c6122d307e8001f39a06b7a9691b74e0dcd0e5c03d70d407473c1e44e3b13a8ed90e3a0f982dcfe31b18a62f72e2972d1fbf68f918e9c65c121defa680f09a774e391582380f8f63f6a21ec3b01def01abd7783ae7fe3aef9cc7311ed7b1f7e4ec0fe0c077bca835baf1581e672e02f039f0a2e6718c7229e87810e7b11786e771caa58079e7dca993dfebe4b7fb93d7f380d59fbcdbf1ce834859fd8e2703087ff27a343fdaf1936b3b7ef29d1d3f79df8e7761f84ede85e1837810e7f1a2c863efc9298f4f0e05f81c78107b83b88e977dd105f154e0c079bc230e7cc73bda9cc78bfa649150cfe39dbd413c24d473e061de45427d60af7c94474e09741e6f2ec9e6c9fe38cfa7f378d7038ffb43b9ec0fd5a5d079177e072ec4994ba10317d281bd545e48e73caef1d8f8425c9b1b668538e452b8419ca7c99f627cc8a5703b0fe23cf13bf06e0d2fc4a74f2e857e218ed97ee652e83c8877f2eef4a5f842fccafe30ef3cee0fdbc0bbab17e26de073032f6acc6ee05df8188fcb1ed29cc7b33cce63b32fbaa5c8e3995d82cfb3241f2bd3f528811fc4e107f1cee3bcbd9e24d03b87de7937ebec91e6976b904b927d10bf9610b38495d7209782e6d765b5205607faf505ce5fdadc98d3f1eeea51bfe3277b61f8d3e93b47f1f078e73d28ef76df3907de81e5fe38f06ef73c2ee4f43cce9dea710e38f0eef53cdeddc04f2ec47b2c379010ef5edf7977f31d2f8a3b96fd64a96f602f12ea83f8e63a760afc202eb924fd413c885fded53c4810ab03b907acb8a883d8fe20de851fc4757cc70af1ce9e9cc75ed4f378dcf1a3ce4fbed3f9c93b3f79dc1f8fefb8108fc78b6210dbcf63efe6f5753c88edef09e2473cde79102feba2eb49c2e39df3789c779c737f9cef70fd3ade91e69cbd9b87847acdbb9cbbbf442e0ccf2e392393f51209f55360920d1ea27ae704da85167ee9a05274f67a92307b4af2a1ed992f59287bac7e777b544739a9bdf227ec3dc0ec7891afd35cdca436338ad5cd633c75d7e7a2a077bafe46dffa3bf5d72fbfebaf4f3d24ff99875c90ecf524892e5d7a577ef4e0141df4d5676d68fca343e72839cd0166f6414d09a3b7cd2434e621296397d07eb99fb99f1dfe9112fc22ed97a15d6a1e6abfeccccdcc2e3d76e8cd2581ad8e30e680c79b0d2075c7a30aa3125a6cf3d30d373d841042a15fd2df9c944208218417ec6f3ac781a1bffad27b4afda376e85d5b172d34d8a4a917c361380ce7f417f5ece35f985cb581df4f88df213ca97b49762db35f36701e2196c2e9b0ac036f178a290ebcbd8ba9138f0bf1feaab707b15288f5c92c517fd53bb01f0742412c3fe6423175e2f1f62fa636c8782caabfea9d2deaaffa8e75407fd575ec0a2cf4577db31be8afba669b7050f50decd54095630a8506aa7ea43f8344417ab6f1afdb4b1d2bb7ebb5938f06397bbbd77cb317f59aa724370ef6104db5d65aab17b5d05767ee0814a23faa7ef925fa09e2b7f34f9d4ce8af4f964803b50bb11c81320f62b3a246fae169a9028d7f2e74f3ed504cd74e9db27e665f74dcf4176a791574550b04e42f8f48dc54a9b7795f3067c73c6ea07bb9a90df988d5bb44b0934fe17499639a63ded9abc20aabeb54589dabbe411d7b519bbd420f3d25f937b3d7ff5e77497ef4cbab1dec3de69cd3882acc1c299121fd418088e8ea410b1acfdd699820ea8f9dd1080df97e883c8b695aa24946a1f52459927f2fbfdefccca1e7d0eb49a23974e8dd9e24de950fbd3bfdb6af5ef37a926cf235df3c25f94844bff9eab58bbbb8a6c7367b6954d39c6a1ef777b975d97bba2eaf9787027c291dd01f53ea9376f37cd9b2e9cf67c5672e09b7befb571c9434b8283cc3233ae84844cfcc5cc441a739e7ec36f07302a49f9fd3fb63df2e2995e8a0cf3be4d987a0e81a1087ce5131caef678505a34982d1bc3c6d1a0a444110bd6403012e420307414ef39708b786746a030d0489e4e011c70f189cd04e9d1a02ebd0159de10abafb1387f410e6d1bb18dde7f2e9d13df33297cf1c967948db5fd8e5797f17ec24340ea1e35c3ebcdce6d957e8146c45200c73147a88f2f8e5309ed91dd0431a168130676758c4637e5325c02d3c02e63701cff7e775fc7e43bef32bb4f925826113c330a76430c769dc856110621836b1cb1b0262818129d3436de15f18866118d6d07215e2b1144e777f289cae3adca1bb30cbcf87de8e3517ea984f2b350c8526349ed69ce3bc25f9dd4dfa6be769ef38cd8e10eab3cd2271503b64c5146c3510e6f7c21c3a8161d031cc9b608e6118b6549ff3e99843343dc439e6b0d5439b63b0f5d806a187c44dcf39734638f99a959f6118c6681e730cc39c7fb015063337be8f455c24060e82ce777b8e42cfe3ecdea92e0245ce759cfd420dd1782cfcbeb84574a5e9b22e4c47c463f9b5d83f9f79734a7ccaf021079b25fd41ef2c1a0f773e8f4019e42c7c1d17f2980ae2d1bf18c45e110832c714117ca2bb8ce6a33ba087368f8e02047a48f3ebf288c4703e13328148f38844f499474e49102f5f00a1651e1e0fdd3cf4ebcd43af7036d01f944d3b5db1386c3df521f79482ac9f6754a7508840d499b6e93667a1bf0df447bda8291bdde5374f9d92d15db8056ee9a10acbb495f3d4a117323dd41ee577028af9c2cf424cfd3410f5ebeaa4b7791775b1a1703a14620a6669207a2feab089ee329b2d4f9d851eda9cfa069af41018ba854b0f654e1d76e9212f0db5f450961e82bec12c4fa1b724e533f7c341edd36296c2e91a92e9a05fc87a15f521449d6215f5ebe729aa876674ea5d4c49a7ce3fd43b82add90547ea37c61827e539a7c63ee4d9998366646f383d8744388829cbb974d0affeb8d1d89e913631d827cfc93ed98f2633f3d575137c31ec8e32463f9ad2631888c63fd44a67faefb995849bd68bf0dc5262cb2b81c77bf0dc52a2e9b5b84d2fb24be4d25bbed6a75e10efb596fe2abdf297faa153bfedd1fad9c9a9777582f8bd9c799cba10ee9410a77ef2ee92bc624a88c7a5f89873deb910cb0db4e3412c3750e7694e9d638ac7dbc17c569b7dd1e9784b4bf237b7d917dde52dc5af9b73d3d99b4372045d7ef58e36afca5ff20f322fbaa57897e2b7b377a198f99877d45e93b477047d7e9d9a77579153613e9cde6d2d4fb318e34f7f315ebf4dea52c2f012e965204f517f61a8f0a90705f5d23b822ebde83289a6f7e79617341ef388fa8bde143a6d8e53a1f5f235b971a79644a0e8b4ba846236bf90cc43efce9aa556ead52567a4b68aa2e48c404a650f4d6fa6ce024be0afce5a7aa8baf46e55cb2a683f9b49fbea15b535a1bfe84b32a7de1399a0bb441ffd8a9777bfbfd7471abebab4deec018e205dcea4f87352912b9deec0684c103a33af9aa5fc1904e492d4afccb2b6b34f87963b0b7bcdd43dc0112084edad85adf469dba585ce6d24f21c42e31eeacbd9b7ae539cb36b8dd9f66aa56746dab1b698eca1de9c3ba5e35af5e83ab6fa4f0f490fda7b7dc4bc6efd41ce9e1a083a379775d151c790506fce08e6dc43980763c5fcb219a7499b796377fbe9a1ccbb28b851db4660b4547aa5b5dc43e310bad6f23ef63484eaaf9d1d12d1b909450e4042c966ea217ee9dd032c815f6af969372abae84cc6b777d74377ddafcbddbf89061a43af15c36ac5aaa4720bf539c904c15be492c821e008d3a3b79d2ee1085706f1d3935afaeb1e028ed01e2d7f8c51462373b6955a66905b625bb9a5bfd5cf1893eac55784beabfe8d31c648bf8874c84153d230a68b525e43d2e3ff5194d18b73ebba819f1220fdbc740ab56b6be25154ce88f44bc618235f3ad2bb3100d1418f4bf2e5cff4e8ddeb63a57e6badf592343685da198d7f6e475d7a9727f3749e7ec4f22ec59f2e7d4efd4d9fb6c94f971646d141975e14a75d9a3fa777f5d7edc9fe78c26846d3e0988da1d42494d79dd35e57747e34bdabbda3bd7a072f5ed07c019e5b2ad8213d577fd0f93729c7453d66cf67b0a4f1bd59d9dfd6d9931d1df5a6773be9e9ece183927274fe176a815a62ca1908fa75dd4ecb992c35f8f620fdeb500c4d82f5d135cdb943bde61199d0a918fd329a9eee69af47029b736e01cd75bc1a00e09a735e0d615600806b9ad700826f5e8f74566dce2a9f0ea5ed249cce9f29a62018068a5ebd7b4def5eed14325dde457917f5173271cf6778d0e2db03d3f43d087e89fe8a2767f798ea7176a1980280b36b114e7721180826a6dc612ba63af0b88147876e3cded141403e3a27b37017caf9e84b62aa870101f0cb6edec7b500d830136015abccf480c7731bcf667858e29b9bc0667d5cb33d0e71f8c037c7c103d7dc2d546910e51d38733dd5a7c70350e4891781a90b81a297c070841b24084c3104bad9dfecb55847d7cedc454667e482618eaebd631d1d1117911e5d019c824b60d85fa2971e04c341d1e39bee42304a9723e1a4cb91f0d30fa21d9d74e9693d8d28f5549f0e000b826d3dbacb2eb162850347b9950dbc03872d313175b9772f08868b5c5dd35f7e219b4d7ae9e22bc9bf90e963162e827974c803a79e3050f4c87c0811fd422e47741ef360f0d2f55f86d323011f0780b3d0e30170c82d01c1311608360000906f74d04a7fd1318f86cb2f03b2c4ca07ee816b9133722dd1aab7c4c7ab214cf51a3ef0cdf957887ea87abc1a3c70ad47021ff8e62b7ce07104dabc7a2b78e071046a6a4f166575bc03cb3907b6f30dec8e0bb1990791c0b43d4b369f00ab36b740ec43a5f9c93ecab2aa03cb2a0e2cab36b0ac3a59a89a965f88151c769c39cead6cae05b1ac8259fa8b168a8940d1371b9db3d1756cf41d1bbdb3d133cb6359d55956ed5856e958567196559b6595665995d9154bc59c9125104c048a6f74500b6482603e7a84a3837e215377b0aa1da4a5f10fabb8d5289346d664468d3ccca8d162d2d911030410490c21024b763982731344ab88201e347521d371ce743143cc99239c38d3050b27ae2bce0f7eb49b2098ba6839f30320646a8d43a6c598a1c539c334c719262c7cf5f68a1d56536499b1438f9619385eccd8c1668bc71ebae693f240cb8fd0434781cbc35353b7fcb0e2efb769f1638cbf44fcf0f2975b1cfc6534cf680cdd21a51935691eba09d2e5f443d46ca4f17342001161d0714ae3f3200c1790f9d28072a496333a40396c180e86c797310c870d6a53c3849a2690369f1e5a92dc924bdd2c168bb5d4bda6d9e8ee09ce24ce62b1ce9873ce18a3f4961a0e195d1e49afeb2fc618e39472ca8e6de685d3b729a79c5ed79fbcdb4be99bf4d3943418ba107ac3e8c31a97647decfa8bab194527fd8dfc2438c7cdcbedd4db76a27e619c97ced52f8413a19b9790cd4b874d31d55a1ca689a9cca57791a09c97be9de2d8ba536b99de7528146d2d1f619abf5d4602519579d04d048a1ec7a0209cad3b413952cb19a60bca91ac69458c167ad20aed743aa1fa8b72ba76fba743873689ca4bea03dfc7073bf9bc7142f9f417c348e9974f59ed555d9b9b74fe282597447257dce1e28cb4474ec909e5336953e9bdf9440321a5de05bd4e5e970dd7d69de468e8b172f5aef424b51bf536bf4d9efaf4a79e5472b9a4f59294d2fee0bfa059a6a884990edbe307599aae9dbdbb23dc2274ddef67e4e831b53975a44f8ecd524aa9779b349920fce741182e88e2fa24ab46cd6ffdea977e9d5f5d7211ce6b7c2ed27975c84576bc7a73111dafde45dabed86f74d53f2a9fd2d059e6a0e93b1672d0741ddb1c349db39283a66f76ba367f7a467f3a567fbabc6678b9d597481bab61420d1312cad631d19d28e5d6dbd65f3cf5f6b2e5e6465e5b77379fe8e03dfd949ed41a4a87fd95a17e4f2fbbe577dfab216479914e3f678cd7552fbfd84be990535f04423a7ddd9b4efabda4d77d97772ffeeece4fafdeddf9fbfd7cea9d3828baac1295e0dfd3c72b52ea219d5e7a734a104044182ed8a6f47a9240393db7c0d4c8b1bdbbbabc88f9bd6ec73ca96b955ad9a6ab7ee5c7abbfd84d47a132ef760c84cd24feb2af8dd6ea2dcd0761ce9c393fe7f4f6e94d992f3d2914cf50335dccc851a799269a0603769043d4a08928b42ce1654d0a5ef458b303105e14f14715785c767cb9d22071c5225c660b52946903873cba04d244cf1169689146183b82f0018f220850c71799c31857beb8610833758c8112c78c2f7c0862057e94b9e30f3860a2195bca90b5c8157a6ca9628b229adc68e103cb0a8cb8034d1f70f27801087454c9618b346eb0418f1970c1639c21860d437441e6cd1e2e40a25b6ac86b43175576e032660b360d70c30467e670838226aadce182a7737c816c4800439a4963822886f862a5883d92e8c14c1ed3cc0b3837be98200e31d428630936de7c7144bc028e9978424364073b9040a20d2daeb043e98c0e800c9165873ae690a3bea1a5d65acb4420ae34933e4f506bad7788997794e9eca812ef68657580b175f4d90444a3a9049b1a24b23262378fe0220541e4804329a534884bbd2207206ad448234c16363e157879820b0af4f0a3f50227fa88a3033cba6023093e0219e305036e887881143298411e6fe0e0da6cd9e1b4c616d9841a5578f1264c107a9c4972a20830da3871071a7ac449238fa76e6a9739e79c656c6edccc39271a72b66b090558c4ac81021fac6c51f3255303858c02101a4c51250c1a2b027963ce131a5ac59a55183cd68083881b0289b3022dbcfcf1c49a28ea986303207ab8c174c4b9024e164d5cb922461671d02127d2f107c65cd8a1c41371c04933674d1b415421c30f34d058230b194fc83823892a479cc0071ab4d169430ea594169969c4b4a0cd193170438821e250a1baa84f63471a3d7e4e28aa3051b1c686323e84a19a6c94a1592e3698a0177002a0460d845063830e58c648530697c68d0d0a1f54ac608f3746f420c61a6960a0f3c50ddc99cab2210e2fdcd41188116ee4d400cb1521b018c20f2d78bca1c612d00d931b2d5d250283038c133245ac01a68a983750708123f25053449318707c612313a006972dbed870040cd62832c304192c695ca9e34d1910d6fca145d31531f810820dd3171e4e70860f62dcb822478f1fee48234ce439e6e8b1c3187f14e1c31a25519c71c11c5be06c394115645c6ac0f4b0071d7ff4500598377f04910105196ab8ac699a13a6090d0861ea52cd97700e2d52422cb2375b18ce1b2f5b8d810920bcbc71628b17636010441349c4200b34b0e0014e0dc638c38939e7a4230b4647105d9139e39639e79c5780d92e2c4a8005113fa77773ce098219973cb0196be0e0d1060c347a2441451278fcc0440e3998604c1e6bcc800c3082b7483347adb56e89407cea6aadb5569644d36aa4a8b59b48f4197276d4d431479a1ffa68a2a5c6ca0c52434e992c8ea872c31d65a86149b80598d511787451031d7cc8c254823358e6192d71489b228038a20939ea48a2892261041661c831c28d1839ac9c68230e374d30b187152cf040d343461629680a030ba63953e421c716355628d1071b265053859ba76350196499010e4d6da2c0c30c0e8c7982f5850d992af2e0838b3ac45862ce39e79c2de8b25d6a3c5184162f08e48833da8021e7e7cecf3072f8d9fd6449d1e58d29d694a00734aa30328085cc981df06819b166b6200646a8d1041a1aa481a39a6090f939c1e8e227093fc170d903076f5a3108c4893fc6c80102796821831cd4b051e3863c8a08400b5653d0e0893900a1a33505180600c38b1072f880c71156be40818c434c1aea011c68a650a2893344b480bd7803c61c575ec00216b0f008244d139d1cad12e66806f4170c6051830d385e646145113ab081451976acc1a2861773ce39e70483b55d6030f57460a8e0e774a9038f1a72f80d9c39b63c356347d09bb6420e124f298d5dc811d2a6ccdc228e05b0708186cc1d7cec118339676eb8de0461831064b04822871aa868175dadb5625ea77badb5d636c268202e6a038d069ab3fbcb3214d60e4c50a1851b70f8f066ccd7205fdfa0f93a821d64500148939538dea82a0b62adb566257428c9718ae95af9925d7dd3e5abcb5a6bad5dd7393da335a5a194ee3ca5945236dc5c92524a69097398c17a2871831870e6f0c10d1407c8c10a32306013c60b172c52f073a27199250b3740d411c61b239260a28b3059c0d1b2e843c7882a869022872bac0064055ccc98c60cfae28eed0b366090473590d518e2053d8429819a2bda80610544c0d9a28d1b57defc99236a97362803e6a0949f524ae915692eb9fa810c22fec022270a335ee815719e5ee107083b9881e38b269aba5cc186ca0c1dd18d2e5aa4006870851c2e59c280230812dae411e6873458dce185ea8e16f83c658252f994524ad3305d324d0b9ebaa4b4c89b18002c5ca0050e2b08332a505dd41375e4f1850b173ba2d0a2dac38ea7787c03c0c4961c2764dc11664b96297e2863460d59459aa74f598003973cfaf8a18b183a1840cf48c3268c2d5db0b8d1c40426aab982e72f90451f677c80838d2ec02c600e4a29a55988b9241b2d1dc62401a7071580a14595a7540b2c7f7aca458b0f35e0c2b485185ca84c6817681c4277bd7c9f73ce39e709d5d39d8bcc9f73f61cdd9c4570c48940fcd8f51bfff147930ad468c126873a5417f565a4a16a74c848c0650c209818c30717c4a12ae1eba8df0bc9d69ff4983a35907409431365e4ec50851064dc50c594760610399e08a48a953d54138b297ece345afcdc7e16f93927f54efd496f1774fc277972b983c6fd2c35ee38e288230e4a6908466814b2a4d451903aac9452f1e6697c4a299dde2647c72f97f041398f012707309cf0a30a145c61c738c3882b9c20e2092eace0c222800a28301a02155fb20d053305ec0cc5f424e9365d7bb04dc7befad5436ff55a8cb18b94720b843ca7f7f49ae90ba6579c3dad038a50e80f5281c445c5102fa594524ac902992098b288c1620a2c9ea063871380e1070db4a8e41f2fb9975430bdd47949c24b29a594730a9d2960404340a188085d3bcf2d298040d134da65bfd1aff4ab514a5b74cec9afc1cdc812a12fc618511188af9cb39b329bd2c62b022d89101e4d89ff4504d5b1676e05c962ad00592c55f55e815baaeaa11081d88b1abe6cd28cba9de71699371aff5ca1de9c6eb10252b851031ac489c1196bd8cd0bbca0c1125ed490028929c8885398b1c101be687fda3b3db7c804f2da738b4c1f428d86c63fb7c57c3b5cd3ddebcbc414852d98865236cde4865a56c13211a85d6be297e1fcf4cb719e05c5c89900ab9a44a02ba6aab7772895b44b2250f5ead540bf69dba5d76301e9d3a757c3e552c52a0d6ed5fbeb2557046a297dfa6565f54b4a97dd25a6a6b737989892de09886cdc7483e9af9d78e82c8e4016984e7d3aedb18074ead2a9d0128f40dd5d2250bb04f3edf76a31dd540f32683cb7a210f341cf2d325ebec570918e83a44b976e5efabd5e4aa055570452a3bb2de6a54b3631356920a70b4bba6cc514abd2bc6c7ae9b1155335b4c3a698eaeab3bd7a2c2ad41b3a98984a1353354c671353d3a3218c05a01e52b480a5babc3a0d54a84fbfaa47857a61a2d740657aacd8e68e2058aa76313125264dbb69395dcac41454498f4d514e4cb116303155c2124d6254d2a5185926a6a015488469b189acd870628a556e22d3cb8e23ddc08e71b48b8bc056b16b3b609e05e658802d58068a814d729a05d3b089e3060e472024b0f3954a731daf473a07c1486fc905bd7aac0e6e617aa8c50234689e398f5b80861ddf9cba52120b3c5e9d05ea9c1bf972b916ad52f4ce67e7d39592a4c04f4a9a00ab747c02ac0ae2492cf45800cb1c7356e9785d0482ce428f05745c880bf16a5005f190d8de1281a0f3d8cef6b4535fa9b46827c02a2b3a8eb906390b648e796461731d678e058d851daf992210741daf273ae7284420e85a6bb9dde5a167b6a9277a4b2e0f1581a057efa3b6a7bd25421168a5a2b2b38a5d67a071cf4144e482eb2262a10ed090514aa26889f4c75e2811051d52e4f1c5177bf01969d470b387166ec4c0893257b0323e782024d41f9194b0092ba25023cc1a57748942ae4ca0861b428c6101206948a19254d0f1727b49451f2f85bc1ce1a58c725cf1fbe1e0b915c5964d0c223d1dd0a94bc5ce9c9a4e7af43a54143bf4d01daa3b111913c8c72caa18638cd1899810fd122132c14da7f3dc1a13e76f979243431ae8bbb6e7d6983763def8fbc91404050505f5c1b2a211678cb30b0ce5f30aad088518bb3805998f535861808f314e39a647445aa12bba777f0cd0012062dad861c49a2566c07fe0d0f4450daa6c81c30d3f43c6a4f9eeb935a60c6d2a038d0d645d0e9df1a8240a95cb83899804ad538866682641400133150030381c128c06c4215557e51e14800b97c2524a9f89434190e428886118c6186288210000020c20c420a4dc60077193348c1eb87bc91d34d5a9cb113aae4208b792a7eb717b1dda19c3c2f7c0f7148c695948d44859b1c3da1b1579240a8efb6aff85d05cffeeef704ac890e82c73293e79bba1858db330e417bcba91b8d8cbaf5c0045e6714c4857e542d5e4e236fce83151c09970711fe5caafe5a387357938b22014ca33d077b8781e1910c81e765d6dd5957058c30c3cb297429b53c91b8d428f8c3c6d7e02ac060050cddbe8880b6d491aa70f09248cca36023c5c3ac46e6290d470001b37b77011108202f9ce84f775b0e064d7c02e5f7e0d2629d2224e3c9988abd50df06525339499340e0fcfc848ec96b0cff35f964afe36e03e91caa9077a8a0d09e391bc145e58fac60bf57104280b2fb4c79cdd86962ec05945238d358b0d948c6e698037efb21b54a4d08591617354a5fd3ca1be7c2d4f0b5796d2fd417380d1eef35e7fc202e2002c08048d1c54e749653865660c5d4c0cdfd78c35a0c4ac2036b3bf96ab932c9906a12b16c46ba00b9c3ee8452ae443194b7e7c8b20e9e1cf40cbfb468b683c7aeadb0d51edc187cd3e8f7aa948ab3066f7f25218a4d1ddca6f5700eb102ba65336a5bfa8d31f7d03903500ed58a5cf322c9cb9ab8b398c0102b920126d85497c5066cb71baaa7defc65598d0da630b4e688530c1d8feab8840b92b7834e80014b617d242abe62215e9cc91704832bb18a50ecd8e5d68b0164d4e7f86fb349573ec582f89b3710a939d75dab1564bed12d2828edae61f42490f1c122b5402f1d8b8420312b1477583f90070e1e346d2691172ac938b84778545ee6aaf961b35a9d92db5027855fd940ecf23e4679570f87689e10607f7285df5ec45e27d36f4c271b6889b87602ed3b6acd4c83b5bc5eafde8ab2f8631d0727718e6b90fbc90e12cb193364944fe3c0fb7198f06c41848cd983e76bf274d7509bd9cba0daf2b04ceb1c5652cb60bfef3c2e700d61698d4fed29c334ff723bb64dfdfb188ca24509eb6a6c688e42f05793dfdad9b14e0a32bd585d828d96d0a715251c5ce4e22106f0edd37891136d2344a37c0804e901c0c0367fa77eb010814abfa007a7678928e2158770e40bd3983ceec086ea464c9e5ba51b2fb6c4812898169da8382c6da8defc42edb1d83a5ecce485db41e078824e86b6f0124ffc215dc86bdb231fc5c658e1c8a3fc55bd4c760e2a58eea3531214f42ef190b3f8b397fb7ae78bc20f1b4211c91f0c27b784c08ef9bbc330ee16de488486055e1a54f306bf7c474c3934f1143544d47c33afa051011dc09f21c826b1271a84d44ac733dbe22d1451a32d98b3c70a82efd2fdf5c7a9142ed02bf86a136a2cb8f3cc05d4073a9def01f1cb6aea777502d621e135799e90759ca0fd8b5367337aa2d7a22ce251a79d8dbab3d54daa75b893548c2c885c603d490f2512e12ebc3ae7e69ba31d7100edced18d55b85b0c30baa3e5b3e03bd9a3a3f2c6b9f07ae6eb097ffca39b06c808dbeef3b8c6f8daeb692e266c35489c74f4f10e59cb418cfbcc7f61724deeae41f521d3a7120a2c07ee43a74337269c19b89c8b2674f1c13aaa8e1e49ac2cebbeba1ab0cc7edd5b4a17278bc31cd638e1120c3fa8bee42c3551756f4d360f760e9fc07971af87a52626cf2b8add6e63490e50f7b5bd5e75521f90a0ee2d25d33f7327e17c5b260d6ec0ebef1e9366bf2347103096cc288203ac041a330e74a2290aa65a8dfc34b86f356c1d2cb055a7d589c5a9c18a27513a3a4c67ee46239056509280ca9dd6295f2f818c8ceae60000db91cf5360b9490e728469c18dbd2b3705d22e9bcdc4d339e72b78e5b9e0b1cb5db60a8dc9517d16344bc3fa212a6a82d5fc0a0db98e078e55086bfb8ea40ec0686f1bc50dceb4b8b41a8445f44c86a8ee33c35ef880e2adae65269113926aeabadc2ab9775bec923814f15ef6dd12e52fb4e6ed809aabb845f705b8294cc7948fea04068c90e14a893037c18f77218012c7ebad0c7a753c12a6317c3cfb043e0f3c6a02cecec15ce2ad84c815d971a862c96f678e97d6da927bebc947f0bda8fbed7972baf02d9958f61d3b2684c0b3ebbf2cee6e0fd03cdf48501f9177073c7f3dd659af8dd4e73b8ec470e53f0e1b7e79bb9de928f2fd9690bfbae3a13b65c3f659118eb6a7ae162f12746b9f5dfbc96ebf7696a0910416f0f273c302703a17b80cbaf29b2e8925eb8ee10a2f8e8dbe7d0ebfb5a3eb17972316ab5474649a04487ae883e362f4a96312977fda15550858bdbb7bbaf0d791f25c540e0627948cc922e93292ddbe6c63815283943dc616c38d38007b31017a18a23607f13105f9bb2ae4383df557fb6cbb30f3e4d59681e6e30cb95ee2dfb94d78043acf41af513ac2e2db331f02d1e3096320456d54b1903628034ec8699b6117bccdb442feb0144e3bbf2786b87be1b1343c15ee01ccf47ac73d6456c80aa4411daae3899a438b5b0ac085716886b0dcd382b4d37876660ab3e0e4f07fcdae3c556a6520c75f5c0c53034fbd0ba1d7ee43bf64ca7b5625519b8df503fa315a6b04cb5bd03e4b62654a2c839527105293357c76567750f887a956af4af39e81b9d3e9d1f48faf81b1d0df639a9ed1000ff3e5ca5591f69ffbfe8b9c85500532274509038285f8416008b0356b8f42b8440970a728804f5d8e4746cc014329d65aebbe83e354c784e3fa70c1927c3075b3636ae53ac8bca1929a6ca8fbb1a610dea527be8f503c1d5819ee7c73cf8e80d36a01ad826f7e97036b0a197e62e20c877d2c5483afb2b246d67e641a67b79ef1cb87dc6a57342b1e21ea4f20598ac565cf1e021995a99129efdb20014035841d1701ffc5389adece78b11dfd06634f821ca186264c5efcb43388ebf314e145a1d4e16be4f5d840feb6ac39e9a090284b1de6d632f0a8919dfd2054b13f83b84221858cccb69d718ffbe0b27caa173a329ec0087e53e0b2d376cf71fe825ceebb692811cc141732a0079a1e5132798a8cbdd900b682aa5c2260ea83d329a51c92f3d3de28fad2d390a1c6b6b536374a652c6a964793e8e8e463cb25258c0aaa5b95916cb593e0bb8be9a76859f002415b4d1ce0cf2683c0eec7ce5d78aba165d10681863e46f21680ba603242f2de9c7351e9c73ae394dba008ac1ac9fbc1f8982dabe23e9cc80fb3e3ce53b9db51d5de69de47451b567278455b75440c499b482ad70d9ae6cb911c06a0cd2229b52f36621f819c15a4064606d678c175893a268c9c8849af859f43744b4ccec3896b2629fe46ee925fea75958f4658861d878c50fc45dafc0a416171706474ef4f38b780f5de7142ae62a0a1e07159caaf4d494220f8505c1f363e3574e90918f111945eed1c5a540747ff88a5c347fe89297dfe6c301f4c84a070cd3c4b17091ea2bfc411bf8f70f9f9a6256bbc0464b2c8994a9b5066ece52950a8d71bda3d008d7e2da2863309a595bea41286dcb7df15f46cb71202d6ef8ac2e03aa5eb70274fd32ba33a298e7ab99be6ef2f54e78ecfd61d1559a13691291c01cfe95b87157b49bd7270c8fb2516c153c12494bd86eb6adcbbedd888e94684ccf29d9e2bc16778ac07b29a4d692e3c12bb76212b698e363eee0200af95226803e9a8bf0379da581651045c5401695c7425f738368ab51045b31c32aa05f892f26b86ae8714078699145217e53cd02c21856304323fd305573c4bb4e17ccdcb9397f42473eb1c67df6c21640334b971fa8a30677b8e6b097ec8844a9640bd76ee18b0168c547419f114ccbc40559cd95a82b21a6435c62d296a32b66367e9d02cf1b4655bbb2e72e52b10c7a93fb4681a2e1189580bf6b10771163da3227344656662680241a21569f5a324f73859bc65be08a477375aa7f700b0de8e867cff8d43453d4afd65ae1072916c26952a05ca752e721db3fe86dea348c2d09454962313d2171e8deb4c0a24739053171d2c616e00796e881bcea65acf99115cf7c987279956b2590ca299e0656d3194b1f81e8d2e2152a4c7dfe309c195e19492e1dfe5b3a1f8386539439eea66a81ea89121b45e750a1aba7a7d35a8ef2892db442ea89c25f29027167368a8a452826c63793901255aaf3a72ec7c1b7839d968f55b6cf19aa3dc71d9b32ccca54d7d0640e95dc0632e392c1d15a76f55c623c2c25c84389ca11ba8d49b07a60ba9a6acada378ad8024f43f52268c3d6f0b3ee75515df62da3a99980cd711940fe1ce59a179fccc85399422fd2b148bf2129ca3b8e4b3fd38a5875d55bc791122c69c1905a9740b3265e823855aa1b44bbb05da1ab0918fd00c8ac03518f51cecb7ab8063f511c0fa00bc48d3d1e581daf4767314fb07085cc4895557869e04872b066e2880b9f5b2ac7d6a5e83ca55692e8c92c49962d47422707ca27076d6528d38134dd8764b643e7437236d1111bcc26b06a77bf63ce359712f09188162112a3352120cf12deba3c3032451e0f02ea2d5c1d520a8e94a3e8bf49a0e45b06c4ed804c5d6c8082f9cd78a54ed309ff8b4c6ff6cdf261a6465daeb199c5a60559c3559c395793c1c6d68bacc04d7f065a305e4837b58fd63af23894835730eb699edd014a24d0aef6298c40c77e0a923371611047c46a0d5cd161008fdfac45885e7b371e90117dfa1b170c4ed9332feeab774edac5251f070f49fee231597aac10bebd222f617681c51a5f82a35cb51f2358262a0e42a2b8666cda72b94071f6f8a0941cb36fecdeeb86de53c199645a33d98a6cebdb54762246fe57200a94a60d7bf024dbaf72363b41d742c2533d81dcc3d64e8757c6b874435a30ba42378a0e644d42d81a1dce0f0c9438b823745a381d6fc9e0dc5c35f5639f4a7bcbff5e3efbed500a249e908ab41d54aed40534cd11a43a5cc271d32fe7ff052a3685dfce4a58a0460c7a30e5934bc8dc46bca40002a83b03c201d6900a64d8f5892e605bcb3f109931864f6c6b8709f8297685640fd3fa155ae78a41c70da424e5aaf8e41a25d1ac80641fd0d0da4a63706306c63f7a46941222669ae5348270f693784ecf99135451032a73b4ba1054332a3cb93aef0d3c825f45814121644e4f07e1b74c9f6b34b75f908a0fdcb52a0061b465119fe22c889b92ee96d79711b4b128f96b9ddff1eac032a596bc1a67c69b901f544334e15ed622d70a0af929ddaf5fb5153223975334d659d1052b133beca8764e52a1c616412e8e8896acde902fd7b32f2c8bd965f6b9038bb404dcfbf5e985ffc48f9150239c920f4f5331aab206982c9944f345142d54dcb6d06cb7c8cc0a877ba549f41bdafd8a8a8c629a4fde0b3a08c3356d8b2f6646efa6429269e8c0a0dfd1c48c3432a709333c3b8e4ab8f4c5c3151fa8b0d7ec6be9fd7b15fd140f31933a8c4a9ad38130359afbb76f3314c9a7780af6e31fc861b8e17068d67ee4cd92a3bd1443acbdd4850a63089d6377198bf36a608201f68d0023d6d959550568a0c2bbafafddc27c44ebe32d58e1a314b7ee88a1be343f3ed9b900c5566e310136e4fdd1ca9e4c48d3188954789556d86ebb48230211e88c1128fae9c75069cd46dcbb6052ab1bda8d08af54344b4882f601631f7c63750ac835c6c59706d8aeea22f41c93bdf1d1ab3007e5b2e5c942157ca655a662d3ed337adfb182fe960e31eef72e4c9647d1c066a7a27b52e54fae9bc82b56c0a373e6167f140998deceb35f0e66eaaacc0530cef35935451b83b3716c22a58105c05d86bd9f928cc4650a25d4098603aa124cc3b63ee8b45a352e71b8078f68c4f70245c6c56a2e85417a7631972512b756f48d2fceb7faf21a2ce5d59742a7154e9b88011ef476274c7bc9709c2b78abe9642168397aed4f5e38ccf2417c35d5a9472480d55e159134256fad99981437d8f9339de12b7c66cea212d56b7cc686b6dd288474ac0f983ba3a1f7178355caf181887e59842630c2aa3e83a67f042a1f24a86546649d9e396d73783f79e1b4f59f65c70850a22b8e9160532b0f106d9a1193224607b212092c6d6259dc2888025d520c7c9698097d0da5d4570bbdf80436b64cb2960ee4d914ec6c3d08236239f30a2f052240a39f343f7acff12a8932ea8cd6b710222e2b98494bdc86b5c2bba345ee9d5a7f5132c4646df7d9e5edcf571529782cbb1ba868598667ac6ae4d307804f045cb85b71bc1366951a530f292c44a9f9d685a30ae0b828bc575404bd9b095eada1fa9149fb5b4394b2c62a7ab8b13426008553bf746d0f35d768bbe0410d040034d0e77178c8c7985213d4a4eeca84b316c27b3e95a13533a0a6b3d08601efb5827b00599b86a62f2be5873aa4fdcf5f9d4203b46973b4913aeb1ba47638fec206597f488914ca73f63ae86976e46eacd1e100fa7b136ff81416432efc420b3a3a5feab17f121650e8438ddf6af6e98009e77606c6154d2b454e414cf9490530649c296fefd39c30f833fb9391d97b7602754931e1e8da50fb0c7d6ccd9a4e839bf14aa64a8a7409501632d388e08eaa37202338f444c4a5358b713b8f28c17e09590af800d04c0294fb71d1390cc105f54c9eacfbe11a5725b6f51666b3d6833bc04904807f0085c6fe5f6bdec211e4ceaf0ecb4674c201079ac361e5d1a7c1e26e10428eda9506aa1b2a96414133900c6e0442f1f1660125b0606b31f187e22a356b42140c56fa6f8c618ca14e913d0a5a2d59885ec0c3ddf2f2dfb2322d974440b37c26346a9ebd3de93f0206dce8009c98034c682f98516d8edb71dcdde0e0bd55d75fc0aba79cc5e853191100d582269e5570fce3bb022ea2da52140788be45c81a9ccf52a76a6f0e064cf97c94eb1daf1eb7b1a97999dd457c5da63a14e1aa6b4f5111b2a6d2213a2ea8fb2e272845273b3d30592e4f43595f6d55842950d02baa08f708ee90244fdbf35671ad1e99edc3e8426a86bfd74599187be39cf7f67b71a1a8267d2a0c51d2837d917fd6c1c0d0bdda62e9ca42b7edd0a57aec8a8d4f4ee1743705b7adaac65bf2fbd88c3217487f6656c14004d456b10bb39a45261e81e39d12c45a9210f772879c13e584e0d882be81a802e0661e19b17141d8f5ac8d5b814f33a61e7ab813e4fc9bc6f45e5d37126b9c305818fa2af96f9c7bec0490d399f24fa0d7b68bccf219f452301beadc15b7b1f6d8c34d005ef107cab62703ce2b3a4384680b331889e886139044dc737cdf82625614eaefd35b47714dd5d83363c63518a1bfe452b45c07efaf6f2c1bbd7680b0f56b0e9dd4ba8a39126a6c3d152a9d9fb071836e9d9f512d4c434599d5316a4742ec80ee4ad879cf09a2e3ac166563603b5503397551931cf5f3995985e24381178a5e1bdb51ec900c14ba6232108c655c52d3e1cf6d81cad036877ff859466800677f9dcbcbeb70e0e1ac0f64bd360a563eef1620c74f316172ba0402ae5680c3948fda6e5d76880d91cbf825c8377604ff1441532e398e3a16977ee153f198f45aa0beb74cbb37bb67b6428904abbefd40d9c4f556110139e359b2d689337d075786473838d094fe40406c0542bae7f0b512376ed841e06e603ca1997e0734982899adc6a9cf2b58ccadfcba8df43f2f2e5627a5d6dccb1478267fa8a12b177c10cde7aac966c039d1b441f6b3ec49a857d011305e15f3868b003cb2e16c44faa20dc14fcf0dbd4b69215369740c13498af3a3b6e359c06bc5b1bf8796c274465070f51a91683df2ddebfb938d9b120dcde18e783c5fcad757a3e6500bd81c6c7f25773d8d12c02aa9b42e92d9b7ca981338477137e38e5bc18f84c04f783abe51d1c7a4dbf492ac9808bbe1532a1e43fd85296b788d084bf1e7a4267dba15d40f287b16bc458e7fcea0743c4796a6c4a37e0a6d21c74dc77ef994755ae11e942c84b9ec9f94a364b5697d7d51ff83d596e2b20d84449cf8ff544dbcc634648f1fa4b25a9a4ae09eb15ea08521c868c292b5ce3df5a42b7b3819c43e765ef2a9ba0d46477613cd44ab7646c7a9bd6424d5f2efa05351daba50d6093839a0ccf62144d72c5e88cc00e9988bb18cc2e57fcd5f6e0fb12036c01567220e2ffaac968728668c1e1e90c6f2c28a1817d280fe3591ba3ac1295d8e3efd00ca8800a5ff68648208927eef49bc2423826ed345ea4567f13dad9557a0a7594a593831af2442c6dd81626364b6d25cc2c6b8c2ffdba5f1ce8d3bf9675e7fded48813ff7e7dcae490aa5e9fa552f87275f63e72c75b90da35fc2771f01dc777ac169f57158ebd65ff5bac3ef6fe1705ba490fb39205070a04cd427978638bee5ffa73c1d84e44720845411ea8e4df93da68a61fdbc798acdb3b514705461feb232244ce5afbaa5dcf69407842a0c99175beb4e4bb473e8fe169e97ac9161b153b9d3fe2446fc06a011a7c6c8fa80c5296471684dc4b5fc76a994224823bc55b66cc758b430916ccfe3d476c605e1053f3a7b445f47a9b712eeecdfbd84ec611d93b1243f9014929b224f84cb327f7d0c9f04d549bbc15f9367f64f050cb33e535667f1073de4865fbdb0b2e1dcab9f1f8f7c54bbfe69c74fb08503d43e467f55eb7f362b91710b30a6fdf71b47fb0b5f936c102d7d5efe4c7aeb8e54a628a8fdfe14d1f67e4e8a6256efdec4196ecbb6eeec1127f6a05cd3ff3e83e8a1353eed5a65c041971e11c7f039ae96233a8b587a1a6f0750786139c43cbb46471c286ea5f23022864a5422120f8baa6fc81aff447b30cbf91f96c35589689a9a8527eba217142b74227d468f5084dd0ac242a2c8060c3cd8202924c91b305646250230a25457bb751b762073a289010adfc91e0ffc0d025ac9bee913452512fe56e2c49c6a135dc186b36b150a65a75e5646ab83f4567fcbb2cc750f4450bd2288383c95f32b5c4063151be8f80bcc3dde7ad55e4284cc283707d29bf481315c08d79bc94fdd25418025f25870ac9d62983c8913385f53a2220e6069f6a9164b2b501375f827469ab99cd429e1ea3ed7c62cb548c33a8b5a45d878acb8740e478456dec4539374f62933605a10d805f2db82030030ab184d33a24efd55d4bf1f99ada496c1e82805a7a025e02333fc0b674723b31515ef2d07b14dc34c679429d9d404a13139fcefa29a22538af86a0102c3fb823bf9beb7550622293636971919eb26b4cbadc0ab4c2703000864274f9b764f68f64744663b1e4571d492093806bf35522e855232b9de87804df38dfb76a786103cca3a231de97f091c21b88ce2febbd4db6cac5dabfbd5af2a0e354bb1e91ba0a62b88f9bd3757964764c84f367064139ac8df62739d655346a1ee1349f80d10a1a73290f1aae51dfd35a7c721aeecbb15fccc4c4948a9062a0d760d0432ca081dc51de9a8b137a67b274e520100b04e0762bd990bafd84bd0de3d9da98e85196a262434c1bf6ced9f9203e800bd878b45d964463e4a37992614776e65ca007d3276e2a340b4200b893d25d77496504ecb7440eaa097aa067f283660bfe3056f7344f35da2edeb0a51536098caacc6b3e800798a098b2e7ca122e965a7ba6032d30899d986e3e5193880d7519f76a9269cb602c86a1b640bd05d85093ba87ae83fc2a5e3747a17c818b9b57bd7c2554e39e4b682d0f130d99c3784441d70d476b2496125da5591b4fcb741cf0459755934d1bad0050036d1147d1f0aae596e4bdf09a6460cd81a8e09527e00e483e185e06a56214efcacee789a5cd8059e01d486bef28b08ddad7230f132a947fa0bd9ca62e6b4c04d2307729323324c153c1d349873913a1f785a4532405b9403290e5482c3f6806b9e3943961cadf8a194cf7d9cfd1038d099789a441b299f5fe35e0491f9d77fd0ead57329d578fc80f72a286a51d87b1a84fa899bb456710c83a2abeff25214dd7e1373ed00a8e49422d6fb8887f46de413ffacc6976b0b8218d07a50fe3b95975b50902727ea6ebb4aee1baac31117bc9f036ce9a9d56355c947142700ef55b12d0745f62638134ebd7d0f1758d56536516728b383589e89f69057d7c79c5ab46b0da0616d2419eecc251cc1f189953738dff07626c7adbb6de1c9c8428b78ba3e428570363a0c65ef092bbf982935a9e417485267f9403c65eaa28095a7ce13566a9625d685d01268ff51e78f272b4ff5bde4a32c34c021ab554f9b1142572f6b904bd44294840ae2902a57f9f5c49762404d38ee1ac1d3c0804a3cc549ae148231b4513863c2a9a5ae48875420b714ec027aa61f4e620c54e3aa30c3781eb7bc39d83411a57e64f6df05ea27a6e0ea1f4afb148514d8ad09b92a760fc72f0042059cf2b83a0cf3b72d9d33461446fee7658e262409f8b7d6dc8c18e9ea9e5981f4dd0c7884ab602432cdbed7e85753415f2841861d01964189a31502543a8ae1889b3306cbe84fc10e53f3e924d3d0331bb01bc2003c97807c4f55380a8cb06565e9858a1933b95fe08ed6426f485d88b55320130dfe44e195482296709fb6bbc097b427cb44fcb5934c029a94ed9bfab82d4b3782b22c9511bff44ea22707ceba5a2ea8c2255afe82b03c165111d9dee5e12058e4ba05783239209fa45e80cd57a8e5386d68a35d203dce2ba083e01140e7dfbba2ccc7f9d45347c0da9694368ea2b70d9b946191d622042b28840984034ad372aa2bf81d1e26bcd61cbcc08bf49857c3c59aefa10b4f1a0309e0800711403bdc8346bd9f1a19f2baf495ba71750934b661e54b24146d0b2e448a65f1f48aaa81465587bc1a3b77919b2023828f277e39c978af9e6c465a692cb34bbf855450e0a75991e6a1f314b41deddea588c64f97686286e5ce1c36c13ad1e45316b21775a60e3b629541907298eb32d22c70c207c89fe9634e9a1973f3d75df49bb0ce820a612ab584a90e502679376cb1fcb1f84ce315ec6f3be718c2cd29eeaadd5a56574f0e7f0f9f31332ce038f795aae2ec8f84ffb036ba44fe00fc9a083cb112051f92525511d3829b8be08343f320c6ff8d308298fdc0fbbf0a38bd417a560152e2b7f22e3e5645fe12b73e22bb1e04a06f5547cc48b5e9786dbed68dc7d57c3dd3bb4dcdfa92b7787c1427eabbde52575c4570659366d98e980089ec4bfb28e3b642c5a4041b5d0b35e511036ac518a0603bb1178ff48b3e8cea93da4b620154fd4b2471999ac22d993685430c5771821486144de7cba46f72a92016f5c446622b2c8db9b5db41193a434c82e01942c518744f8fbc3c4153233b20415a092005bb9a44e71a481b32ee1f3481eaeefcaec6f8981f7dd71782244928403a10c246e3ec4b8f7ffc93bd517bf5f19f286a997406c026dfe85f47b5e08ccafbe7687c4f0774e9bd93d114b2ec8d7e9f7a509c9ab1a4781304d0577e6173d04c0f968dd0830d7abad2e128e0de61273e02021ed22117024b8975a7b633dd448f40c30d954611b1c9002b6e3281e2dc7b7f9f18b4ac89449044bdcf3896b4578df6a2e82aca6b1ccfa846c5ee1bf7309d2ce6721b8b88176413a9251c8e9e4e177d9009741c4fc6d9076659c88126cb2f064304f12f1b5f1e6827ae6dae56c5247522af8d710cc714af394c98575c1a47a4e8f6ff0ebcc6121193b64c4c24d108d2fba168096d214cb340e0872f513d109ea33226fc353f0fc954d4e7c16a53f01e28553b12486806091c4ad81414d7a6cea9be40e187a95fc39aff3b3cf7674634db77676896b9bb7adb468b0868328c2a701f54ee559cc17b03f1bf81830942bc3a8bd3bf8ff6dc9e550be2021ee63f677ae29a37ed1cb4f3aaaa959217063683d151b772ca66dc17ccc70087c094d6f003bbbfa06e04b434bfe60d65b13cce62c4a878441843f4cd3597d95a377311148435e386ae490aab7b10abd0fd5fade40ebfe7c0d8647ab52cd89c58e821144f4b0e411d4df12fbf5e849c0cc4649aa04b1520b64b79b622eda14f7bebee8681e60b4745455159ff157ba63267852f0b6100aeb3fa34959a3a2b6d1bc41bc921330c3c281a0cd6e2465b226796942482dad6a7b7e32bc18ce22708110eaf5dad5c52ee18a7e689f881df07e23657ba8179684847a4d55c98b17c367d692743d2c59afb21d04e18b20e2325b8bdb51626bed4408f0f3d864bce109469d9aff7b81550c9135a442d2a517bb460b645bc6095bdf6fce8fd8985acf52ed6062aba208561bb6021f0b6ba3dba2d25a1094b8623b9f091c8b91b50c8943451f62b1554d014c482370cb49762ddf9ca66a9c3a67394b8548a68b5424b5578157bfe42853603dc400bf64449e5498cee1327cf028819eda5f5823535ddd19e4a3fcbf7c3c2dca7c11af3efd9e624cc46937aeb6b1a0ab510032d0c0c774f0967a0117d34f8a1bd5371cef1d4f0c7e8cfd45020e26b19bad737815ba44fd1a9b98c9970553a880dc17c63f3f75831208bd963fd648c7f6639ffe6d51448f06847f1599318142d920807f275a42c9ae38af45f05b6728f9e4f8314863ac27a694cc620f5fcb30fd3602fe90cbeee85370a7ea1c9e75504da284fc6bc8318202bda47aec23f9757ffc9f510f517a2128c32094a7c669a3cc9e28031523e22233acb5b50e2d49c3c0e809b08570e6ece4c45bfda0507d2a1c7960b480f649c440c8a88cf2e220e2339661fb6a04735b9021bf7fc26e38adc1029cc9f46638d28d345cfee949e9929dc68c754ca57006fa96f85555d6dd88aba6047cfd1a55402fc3645194cce48e0c9ae0de38d8dbe4f3af6e46b0bbc206af414bd9dab4d2e4320db538f33a0d7adfb29cef300b9c92e6aaa61223b8e95d7da4a85ee853f298dff2046f8cad449874a8692497eac8209b028a5bde094cc0b09611a11de27099769176b5639ab9dd0dfa480a684d4c6c80bc30cc2fdd2de263df49a9faec0552cb84d7906b77b9bd6556f59e0a79dd6c8b2146bd893c45825e6359a383a6877801407194cb4d09a02e0a5890826353ecbe2d96e0831eb1e10445db7423d4ea10ea68d199c0fd4b083dc44cfcdc5a17ba621a92330952091265b13dfffc17d6b7cdbec0183b4d540092f8521568f0b5866b87104782d5081da0f1707e521f6370d12e82e35e1e0a24e6d1fa81df560e553eb0b6c7f6cb1818290388bd9b7653c2512250f558e0021c1210d1c04140380b024847f958348162c4e9a2a00a35696e27f7a1d2186078c7668147ab432c1eeec1cf9bbd5827400ec39bc29f3240d5ba4edc9c125ccbe04e49f79c13a404af42720202e3861f7fb933894852ef9dedaa7f835c9d136ace07ea6dfa46c0989766ef290343c85b885b3eab350c47324ed0b5fcecc959fb845d6177156252301e54b35c965fe473ffa8fa6c112cb9549a1beebd6a2ab217a23c9e2f43504369dd381818a191df8860568551ffff585f68ef0a4b127453728a65c29aa46ce66daaa6c6ab642bb6284ce415b7a576b701f08c28bb84a990dace9179af4cc81dd2fb30e34fe2327d8b043868479d9116837370f1d1e70a83b54b355e875f07074a6cb25015adb05876a3203f68cfa9621ec260a3da2709bc46f8f506ee8ebcb5b93655d43ac0461f96ebe06bd3dbc10a2d7b1d118778b657ff19ecccf3b000ade1b9e9073a20722d387aaad5b2b705ef921c0f64b796b88bd09093ff067735cf791d82a2a2aeea6c0cb47627963c31b1e794cd3c296e73c468d025b8cdde2e9800820f460935d3a69a35bd4180cca54114e857751ca142cabfdce66cdac2bed8b2e2b8b24b36a5b9452cc75b16d8b409188705ce21ff29d735b11cb20365487fc9867e744111af59433c9ca9c579f581dc3600cb8069065faa9c4d16143caf678442e5e6e93bca7cf5bde229374747dfe442f6a007339a34f189218f3977fe425175187b8e60ba0ec0d7b13af0b8f751b100a7e92ae3a2adcdd55de8bec745e075e834d82c698c0d4f28d220fcae8f10e7cc2e360026ddae4b02ef2c081b199312fda65191a9cceb3296c763c92004aaf66947d36c44f097e14af83105210452d1090dd139deb214e3c1aea54d543a52c48c76a1014e3fc9eb8aa080d674cd4ce9405b1c4633b4797d894b4990118f29fa5e500ee11419559ecba2abaf41541454abd403720adfc11d901f039536af0e0dc4eadb9e63ced725a5fac02c6f8c0134684dc9a905b5822b4a6fa4907ede87ef937804003005f6d8736671b5c1adefe693fb4bd66f4e5d7eb6fb86f82ddcdb0241b8cb38f20b6459573a8742d7871b2d92b94c4bc33f8d7e1336e601784eac5da15e3328cca583057027da549b41a791a87ef586674533c54c70ac36859ce889c71baabc5974127b0c52891f36482621c704a05da59fc910e2a1c1239f9126004bb2fca437149b4d2dc1bc6541349632875e3429292609a95e3a639f5006071ab8689f5e2cc334e71063c58dea211bd3b70061161c11122b6f10abf403a3ec09c9689281c793d605c4f471397c3b4d5275179479461f541f68309774f73182987fa19e34d452fe69b55c02cab57e2e3e2e8d1cec654ba001d5e3e038119e98dd3ed3b771db8c10f8a07561f85700a8b430ba7fa82e12543e0d64d64233cfa878edfb63138958360f376a002338db49041df09b20328d60c85c8136be3aca1a7979d719deb0e42eb14b2cedb5c03ba0333e792ea7a1a4787e504a461878a9caf6e41f01432e9830d99b6a36410da971796dd8a88b1c59c2ebfd23af5c893db48ce4e680cbefe3eb1037c0932ad3fd1e99223f29117d40925820826413f25b88b4cdacf4aeb7303aeaf1cd223e95e96558f10a60b601e5915cd1bd62091f32ba2db91587f7a7b23ec2e4fa6d86a627dbfe03c0bc49d13c1f3bef04f196aedce9c0aee3d638117e9811093593d54e699ceb511aa185f842ab642dea416b46949be123870e99944bc158471c8c4801371d14a42dd248c5aea556cfff3ae5aaf7b898bbd56dbaa3de70710dbd61bdd7800ea22294404469106d1d2f3a346bdb745f3050dde0b9e6f2fe9c3a5feb6d22c398f77057bfd5dae74e88309499308e83c79c1e93d4d43137e1ba9dddc349e5b0d09a58be0a9d9f140075f1254359535b697bb73933ebb62a0bcb7ee6a95c48c1f6bc7797a3b455f82427f7570d30464b4cd11b435bc07ceba2cb548cd1f433c0273ccbd3198fa95c8f261d2986555c04b512eb6580ac2da0c8c106e88501c228a21df0b18e83a4190be7afc7ddfb106018ec940716272877bb675ac32c9fe7f5624009c3e026949a8047ba91860785d78f5d2584d2633df9f0d1ed1371e513ad4b494d49e06b60605ce71247c6c623b1856d5763756d1a6d802906f7954cb6ec3fb4ec1f6a4c51a01e542108c2525e7db7cdc7642984ad63c0cbed750dc2bfa5f1a39066d1df6ff0cc50c0cc80b312e8a1566ccce8befd5905820e5ea6e654cc25fd9836aae5663d5bb61074198e12d4db1aaef3c821abb54df0d0258a3b4b57e20cf9bdd7f0579dd52837b2ccbc042e2a82fff1763a25518015ce5191356e0811277237433f8a7e1987db3a7a44280c5cf2ad31954d40b564f875d53f67739cdad1d816fabd6158defbb920b2be7a633e41e8ac9063285d11d363aaf6240368b38b73312620e73f6f0edc6749ee4791df2fd73a1d541d786ae76b60a3461467e73a931686e833f60c7b6ece7803b90d1970254df40c0ee2dc82abcd7d910333dc7626b028d1eb96a5dd058c1c1a45cf0cbc6d602eda27c6e7137f75ac3bb51deb68c91fc555aa53c528d491494809366ab524aee885880aa20d68d6e331def26312db8a5271fa62ee80520ed58973a2bd11afbcad414d787e5364969dfb36fe8b5105650d3043c5fb10aa1f2e015a6af8e609ce99fed2bfc99f0376783f62466bda25ca5d24d9d0a21cd5c27673e452fc2321d2414fb2300af21e9385db3743c6e9f31982b1e49987bd3272cbb9da7ed475422861dc6d6e55f768aa9442257698f63db82cf4adebc5199b846c902ccd39cd1eca04fbf51a21ce4841b1116542ba8fdd519d6af3eb2c1508c5afbc49a63b05de5d0ba210ee4428c4ddf43f887ff811515742a8dd8701587ca7b168cad60b92180a1b37ee0ac2ca7dc7d73bcc4884d844c73b24b591fa0f09195488b0476f91c82c117f6f18eaa3838587b2762acde7730de5da4896e72c40d6e58e2bd9c2937071bb5700e127ae42fee31d8b09926aecafb306e2648f6d283071ff0bf1b08a9824a650a54d37a79cc71cc046cb16cfe31f65e5f5574ae559dae1dc0b16d388490df0bb6fb19565768d8bf291ab2dc35a86ea0bb8193df244d7f90f3aa4e011503bcd81c78046ade90cf9b7b6aa2801f02912e2315a791c1989f0b55e572e13ed092de9c46d95b04faff88af49cd70f9bdc300f889db869d637b01944b7ac695934af357232406e9d5524b1c0599c9e00cae79131a54471fddac235d4664618323feacdcca561b7d6aab1202401ea8a2f3d70a1e3089940f20aca7a9e588cf9d7812fee641bd9118d68c75e520bdca06871de3930e494c0d49f5e9eed57dfcf39700684154d44a50d21c3f91fde98c10d62ce31e2510a9b6abbb9c870ae3ee7a4e8ea2a6b1560d93e4a461fc34dd2bb7078f252267eee81131295be34e4c1b7a57e1494acb0f96e7060226f1049d30d6e0c68064e26bbedd5daa469f7067c31882f72aa0e82dba43fee486f1989aed4a18621000166c0ce976d76cdf93779ebdabf5220ccd7fc68151f928ae99507dcdcf1ae75d0f2e083ffd7bf850074de2fb0054ee048e001c214626e5b1ddf39caeb01c2f82f53fd9a97702609312c0116fcff2c514c19eb300f8ca1e72c8537cbb2b526b850f4edf0cbfc51f43e1a28d5ea8299d04786e62e390577c269be2a8826f8dc73a5453cf14a98c4e66c320f0a84f95e82e4400be0fb57983267433177a0eba62cfbadac5fb790f5f813cabffdb19cc0b3121302390ffa49d22acf2e024b72ea0629a8cbd651d643480051732833811d696f604522a47961a2eb570444b52723155883b14d9dcadeec5f8b0c0890c6c64764c761fa47e73fb6e2a72318ccc38a39177bad2f052576399fe01495e56d2475dd6933467a61db44c9e753f563ac4c26910c6dcbbfc55f0b011e1757ac21fcf79889e85aacf4302184cc7f34e6c5831fd6c9c3f4ab844a4e664a2dfe68d3d0970aa73f122b02bc8049ebf5bb7a9ab4e01a34e61d52923461b9f0c595832348b9fb4506b0f15740951bcb75d74cd6a7e213becb36050adb445117cd795208e5ad856990b4a3a6b0bbc9c9703a64dd0197039d4d8308d15f943d102a4e930617eb2bb0fc56add88ab3d5f66a2075281e551093bf487ca2fcd00d8263807461541cf07ec98c82ff5d0e1206d84c1e725e47a7f8f316a6e2972a835728effe476303d77d7465be40b7e8638491db5957729a51f151d10a2c130b8623f57cb8254435aff88a6529eee78cb818b18b1f4441901f9976d19a523587f158e7e5b9737084845c3934c0449cf8e34de414b7a8b4fc2eafc019b126cc970e28fedfa7e33492159e148fa12c9cc92b0fc9c3712751dc891b2e534cf54e985e3d8a3609356cf9763d60f7f832715003264ab1291111b28c7fa3c119858ae41da4b63e49a6096cb28ed7103f28f54562eae9f77858bc760bf94a1ed42e103be28f6b114f3780f4c10bc83a0dc573000b27e5e913600bf39104a9465a8075fa284e0fd1f73566c8239746f8764570f0a84e4e43b85a1b06f74d90004a7f3881705de56d5a229f4a2f8b5e5464870b40ded56e45af0c4aef13e46aabafee5e7aa5b4b3f3d5769e4850ef97df4fc37faa9a9b260190a3591283cc9b1315a732b2c2727c57b82fcb34306b415f04306bfa1c6cfc18898893823abac8498c46254c917f8755730bc3b734bca02fc1801e3b358713121c93548b068e45a37e545cecb1bc2b67d6dd3675e6d332701326c002f16ef333c60ae761db13cb89a58701aeb705659ef0f9cebabf59a07bab80d757d8ddb43195d98255c7c962f4b089c50fe6cc0886424744fec7e79783aaeccdacf67bc6523895ba37eb31139c0ab2d9a01ece4dd94dad6bbd998d191ff0818e73364de180bcb3b22e27211c3c0c271b545a232745014bd7d9304aeab7d3293264f7b41ab049a112d3eb0235c8a4bd82e2c541f47d268943b0985086d2ab631758ad8056cc3bc565b7822d768924155111a3e4f81e66a72bf682f3179251f30751c15ff9049e8be2d96d038bf9dbc4a0e86a383a6bc985bdb080a12210ff343d161c2fffb26c55056a7bd20511eaa453186e2be16ee30f6880d4c4f32bbbcf37497bc406ed2e12d542aa3533cb6c61d1501ce8e518b4112d35ee289e41ffe9d94ed49b43caea74ce962a8ac1d0dcaf0404b2229c443e3d44d0db91509f4c1ce1ce30aeb9654383bd60141cfc1f99afea52432d014ed1f4a794523dfa9e05b35285f96a06de7a275ba09fba5e8e576ad0b53ea873ce3db9a92dea5994d279da87a1536a22d5a43a8bb36a2c69d6e907304a9d9377fadf90000f0117726afcc6a30374076ed78f96f4b9bce10e5afe2d200ca0d693306860801d2900c7511f0f81cfbe5140b8a9fc031a27e667dc798f3aee9f07c23e3cd9b6fbb9287af829866a4b18d61fdb680bd60bbdf15da2e068dbb980bea2df31be652d3dfddd7902b72988197e5b0a424a2cc0de5f0082a686c6f56c1930461b1abc3903b37856aa1d1e8533a4eb4870df17db622df3dc63f3f777a5e660d290e15509fc1ff854f494219a373b00ed3c30ba2b22483fd69edb12f8374f83725a7a775f903a01c0c9bd48593b5598c11b5631d45a5368066b9ddb8e8a042f796ea666369c16c96532b7610a60da0878b40d88ec7a47a308926822aae445066628efd6d7e613cff47906c7bec4ff85f197763ca9c5c48e8ecf57bac1c0b2616e7a21a01e2c49b96006fa90f7574a462a7e3a18a6156b03512001c404807d3094511f660af18cf42f628f2c3017fa7b2860325122b2a189162b23a55a00bedcbaaa9a09264565144a36ee177b4fbaa145c3cb7d0ae015b7f1f4319c2961f16c2f44ead8b6d4d18f5879b18491a1b237e354655f725befc9e7be0ea9adccc03304790067de80eef33a954ea87b8772ebfc1e3cf12535c7ab9ad314238f1d02e032b62ce465ccc4610d94732e9c69c0d7599f013b3d3deb69d7720e68a46ad711ba85279a9f25b23fa08b3b4de4fadd01fe1dfd20d1132819a313bdc16f6cb67b01a69e13b9c861447a5048081c2f677aa7dc4240457e1f227a17af0a7a4f3f55ff50be33711e92335e488813fc348c58e0cebffd6246c634283dcb52e068c76f802add6dae5c222a53b4200505b819d50f91cc2ee275de157ed9259dcca19de175919f73415ce1fb53f65af152f4978b98162d4e993b372e34ed29a83c336334c8c0844c900988097d1daf718071e631ff582393eef4475ef180d807c6ec1fa24d3a8593d3bff101e33f203f415bfea321a0b41c2f3651dad6d09e8f935b16439b48066732d20e0e53393c956c51919de323532162a087d65f2853a98bbc0282faa989242dad70f382ac9aa6fbc9ef48439829d396c7af94cb28d88def34e42d566114378ac708ee184cce1a70e72ecd3ab4d7b2c615f891b08e6e3ea6f08c6b037e0fd122c628ca9cb6bb933fe8a2451fdbc17d54ac41d7f1121ceb3d2eea6590b96139230655f269d80bdac65603de01860f62106b44975c6ac3f3a33f7c66b4a027f3e0661259a85e57b83fca7a01774e3b2a7e64934ffe47233441020bfe6f72cadcca16ba2b64e45b7f6bc808fcad699b566cc19dc3bb5374b6b5825f80eb34bc18742d6b2c98c37b6235a60ddac7107d1fc0b4a6ef505accf8a945f5aef70d8b4c9627da789efb0f1828c0000f8ab881ab4227ef296cc04df1da1f123f6bf4549b8e47f3c6c40d7024bdc0ac221016561bb03c9024c1e3d91a5e209bafd125e4d991f3be9971754fa9eb99c93a08e4cad1d47044d65c7a5a80a59b4a9e92764d8d316cd161f67e5d47ff2bff5ec7542ae0800e019a5597effd138e79a3856cf9c0cc78526c5d3d6aeabc2ae1ebc3dfd41137c124e48096ff925be1238bcc1a6127f10cf2e9d06654a65674f6e1cca45fc56f545e1ea2c630dd683aa1c3584d26750053efa4b4f16e802e82403424d68f9d4efc8d82ca8a246c7b21b54524365bd29aee3feb3a91cef000acfe315c0ede095818bbbd264031e0d4ccec36cb2a1ecae955c91994513a5b1277874b4856b56ea4a6fddec0ca779988c12ef1887ba649526602ae89a8de5ce3ba489ef23fc3d1aa42287454a27759cd3a677774ca5c4354242bc2b2e072f5de2874a2c7e6d6d1038d70c3d13e4f2a0295cb9a96e1784d584c256f188a9f2aa25fe65a24c97aa632f4a998a7f16295f5ccc98fd9e8a77034563281e0553d809ec613a4318b53926ecf7165fc4f59bd4bee4146e24fde3224506e07f63ffc52a2dc8706c67530000859ee5b08ab10a02b9a2b4b19574d776e35b79cf1b49da0d6fc5468646c91a71f974d09f3067b6d7f92905791c9d8f1cf6951046c20ab03288a637ff75a5c3f41e3442ac42abcb75c787e9cbe9571d1f09cf0fa2584acc4124e0eb95292064181fef2cf5159a9f62c0b41b683b48750e49a84ba1f74e9066b1293253930c9ac59b82b84c6e4d2d9e896922ef18daa7a08e404ec9c03006f8a70c5f784bde18ce89dcdc317a16b64c4cbd14384c8f5ae258390ffdc65ca65fec76af59d1188bd910aa2825f082cbc7f00f6a5310a4d733c21023c055a9743e0074133201f4063c843fde202e3387dfbd099436b8c2498b2180b4234d796a0fec91ab44f2c0b2144374845c5419bb3ca4e3d93b3d25bc7c252a1a6a399bbc7b18609e699c389e2cc72b403f4cb320a47b5ff641a0b9a06e34e5bf3701343a9e545055993de040db264d0bc207c01af2fbba592e7b4e0c84a8f71269c197d1148262b2b8a721948d956fe81ff93ac3388401173d0fe00a211157d5579c758afe996ae1fa0a77d7164ac42ae58da6f7f8a6319482c363a8508d72927075e6e83684f6c2e9b861c516859cf1d36da355ed946a73cf1eefb683d25350176ad7daf672512b5e668f6476bdec7e5294c74e6361aec68e89c1b2957da4075f3d9f063509e6dfa0948d75a915fc215f032dbd4a88ed94ecb4be03df1f0ea2780ee72010c372feff4a00b6e715bd72b9fb35e377e3bbf41387bc4aafe032caebcc5763828ce6cbc5fea359a163672f5ebc8b50e87725086b039e884fb1a261c41381829b4bcd0280f70a283ef82bb901ae67700820cf18fb2645f3a13d0b92e8528f8ee5773447be2823a74d10647f59a692c93c3b9b1214e3d00d7ceeaf5984f2b06a3af2ccc7515e4f8867d7519ea78abd3fab8e768fb9e3b44d64a2fb7c19ca91157da9348c9ead52ff9d5101856be743878e0a4c4fe2310a7e212715fa4a1effc28f31386da275278b531f0a5e920ac4abaa7d2b65dfe4e7c5727d52ebe646fc5fe4be57d463c36b662a6accf600f7aa8b116a3ac8b255771c44dbc435bd21103c9dbdb594215590c1aa3bbc12229ec4af3fc6adf5fa4b9a8225412abcb844e2664098cbd3dd6c711800962bee682784c3682b838e24304a61bba3e52e3c25057eb0d40eaac537eb802261b4982a2256af47129b0904533cb1aaeebe89810958486f60c1aeeab8ac7cafabe9d791b1c00d2e377bfb3258e2becd3f669c171a776e97f08bc16b89e9a6de2ed04e4a90f0bf542bfc51796a02be2b1eea5d8c68162c5a291d15c2997875c86a18f5e31d30d2bcfdbf27a83d6ae1d416e1a1df209040ddc792203818d079e1c188086d5df3fb8d1a629ab7522277bb7e2127cc15aaeda3557e996f1b214397e90e3f582765b888dd79eee83ebfa5f8ec6d27bd85ee6acbf35a41574cb7579dfc9b0ce4efdecec228a2667158c4bc074b3b64401e4cfe193b521cb600e2ca88268144845b44b7f92bc89cba51cd9048198e96c1eaec50e7367b08f9833aac80dafe63efee8ad796ccd2336beeb71055c2d12a6b260455227f1d6158347637d7209adb6766935686a00e839e8dee26210786f90dfd6fc7b8daa89490774f64ee7f9ac6bc3337cbf9876e045133d3464fd814d73d929446465df37c872bb223366719a04f935928f1c13c4fcfbb9842cca95144dc28038150b219447281584f6b107a733c7e01e78de909bf9f6479a99bef05a2b212a305b9018bbbccd8d62ab476b7bc009281652a495c8d6516c0778e090da687205127d7da0250c322969e3d668441adeb818eba5920a7b5233bd31998f698ca178a81eaad70878c2e9120d39a36e0073498f972935632adde6e9186860defcf408a0c6d870d0848df5a6749cd86d480d0803b642c125f8bee57bab7b0725c0236c3d5577bfbbaa0b4bccb95e9499cfb03a03da6773df9e4043eb3ae3bac407b3bd787e5080732c425898e98095f4b4ba35f552388d7793ff7e6f9ade8925d298f5cb842533a80f66a484b58d05795325b83c92f24d612c2df43fcc8e1280779f9438f0f8f79e1c023cda354ec41061257894bd9c1268433e2d47ce10f0c0e74e4db5388cf1ba111116ca2f3da7b4a88bfb5614d1a5fb03dcebe4d6d10d9d4a2ed26f7d95a2f9a013a8c38bd0a798711caa5c8de01f44a2c114b805b376522293d45b5a472667b62d5406acd6c72d34f76ec5eea4afb59a06d445838eb3d6d1cb497c66aeb468098459bb4c0f6a8e097aaa45b71be197c69c3b451b8906bef311fc129249331848778394ace29b8c625588c42b08a5aad80a3a562b1a9761dd7863ab4fe9c7c5cd4870ed9ab1ed88ee724a7209cdf92046fc4413d6938a0930e00ec35d01c33482e5642c507224a854b224fe3008c45f94ca04e3b8d2a4b9a2b984afd6e417405e5a3787f2d6f70b21ee3fa99438a84b04e9f0fe6d29d266256f408bf8458958ac9a04331e1a5119bde467299212c3e3d18cc29e7d04fc24fd58360ef9e00eb18cddd96934b21a94acf866c449e06090ea23d1ca8d751d3e6c5d34ad26498a881a53227ff53f65092453d126bc84e8c7e671ab885d5b6d204aef05b29f3c09c0d55e0cf9f3ecfa46f4ef406a19ec9f3b06f8b2501401d8e34b3d30b1fab898b08755bec72e92a60ff400a57b2fb56deb35c2216a9fc2d9760f948b2980502915a9b66614ba0b51519d309487deef8267bef0c0d4106374a569e858ca15833b823434a19c047b05be7718623b84689199e7ef04d51b8be2c88b78898c56628bce1e55ec08f4e7a0417b7a58280b82b4b397c866dec7019db74f81b4806c7748cf2b9c801be60bbb6ce253a61acc78645d1b1021378a32eefd8892f47d33bef0339ed32ab4e0e85974fd72111e28fecfda5c75d9423344ff67a63f3f6c180e53ff9c6394916f297af13bc3681c22f54364793dd1aa9998e1cd7fe8c408fa0594fc620b3a7a733bd602dc5aee66955acecbd13c9f9a136d990ffc5b9ed3674791dc4c72afed669c5306dfc88001bf87022fa91160bb07e0da05fa5c103005a163363787c60e593e1fe8049db5385c0ba40f7a0fa130900f621f7bc6e90b277796f7979aff137435ba85f113a89ad38b2eb8d83fb784a0a495f2e865d6a42f4687bec6cd2358d195f5375462d5825899c09a4d4de92a846b7dceec55850566891a8df1276b96e34c2ef5b621de735b97eb7c5deafe15b5ba05a11f7c96d3305662a006aec2bee5f6dc882eecff1f2e46fcd071440fe96a02836ed1b7f3231f6b1a62253162c02b19977db9055bd06c277ce06b434d10ba4386f13d0203bdb1f0ed7fb155ca8d610a58b7439134eda739845d0ce1179e4a65d3c274b80c681d1e2ec00ddf40e443909621e634a650cd67c7d319eea0100f66f36c56e7379cabe422e9b000e0fe09e939f0e49cc47476e2567dfaf900d9545f311b80215fde7e68851bf9fc6f5a1d74e15e3fa3a1841ce8f4834a2d3a8d390396f452f3b4c7dbc2d594c128d4e27f1596d3974ddd5f1fa0a2a0483344875ef4ff01248739988545e4fe8aee3a95b9e0528d6f2c0218f99214bac4ea922c61c17955d17b44a2f684c0f0f64fcbd029a6cf7583b07989d1205babb4e667899c70267f0e873a8aded4dc9e7ffadf6fcdd3e96283b6146bc97c636a0dc9775ebd40ffbabecde015536e0dea03586f3df79addf14942c199609f4c74c6fed20e941af5d3966528ee5b3da638e8739e59d0006ca6cf9e9ab3d0aa58d686b8139434685cbd0c22c4f518c71cf5e24931c1b3d7176e6b07f267c0afc5d4fa7ba78d7b46a2980bcc476258b0714fd62860246499e635c8dfa0ec2bce1d138b03898056e2bc3c19b7dbba8818233e8161a80673f103f87a2cf529a9e7f88f31ef106e234a2ed38cd110c093183a3f116cd9407d81d66f25f1d63b31d4daf7432a13d80637986dfe07647d048e0f84f20c572050334a070ac50125c9b3c09a4feba6b4b6346b144bfea48bcae512133f9b9e2a910f3ae1a448ff737c73e7842a506a58e627b821df1e99a0163e09572ece919c1750feb9af6bb58106674d5adb7b6f22f79632259902e20c730c380dcce1eeeeca1764acc168a8cccc8cd1645f7c6b133fde65305a51c39aef28479bd940404a83d233bd873af3928b4871e58e7893d6a319fe693d99210cd21217350401868c050e97d10b70e09185892ff8c8e572390143367a766e8283d899887938afe33f642bcfce425288f090a77c8f1abf9551e20166c517873be6842a9e3f5c32cf312856895686b0e4403f8c59e8f8d08879c0308b5d2e972b08642e9e7dc388f4ec31298ae71c7c18cb3c0789ce5cb83972a850c2c9193970e2c61860b82fa525b098b243d097166860dfe802c10b2b70e83066083b80c0306e79761c7ab0030625901053048691a803476e04e146962fce1802c3a8f47cc614740ce1040f42518401c3b8e4c20d674861451670240101f2181b8490e30522314b9a6f7802f36190201feabce65bc56bae695ec9bc5614a5cb6bee526078cdb5aea5a58a14e03937752d8e83e840f1e13797cce3fde6b46b6d21e8700af5e5b91862d56261d5fe9614d1ead563c4aa7d2e8e58b51fae1110d29bdce459d732b1a8efb2b639965e2075ac6bd19acdf199cfae95519e9ba4c75c762d4c16e0e7eb275d1e7eb95c2997cbd5c292cb05b29790fb9016bde01a42aba821cacbc778f4ccc56ecb51cf4b293fd2977197c59961871439d80284174fd8f041c68f142c3824ed40e60d9acdf99e8cf1ed3854ca102a02b979d94fc0ccf1eda84ac694247cc40eb62872e2c3b7ff58238c0b0663ce30536481195c57c668410a0e6000e598f2c28d8f2e7eaef8f6531f1dcd400631b80205153c80e1ea9b2706247000628b17928e003b891266c52197cb1505eceeeeee38bebbbbbbbb47d76ae93702582e3e0c12ea30e0432143bc08d7cb0b3dbbe4225719cf5e514f9e5b00e3d953453cfb6a8b6030c6051a3cff5079769baec57b44a578a1459e2acfa8f1ed35b38a5d72b95c2f80910b4f433e0cf2ccbea1907fc087439e9d483d3bad78a0f1eca82ccfee4bffca23e9f975a68867a7e95adc33bfe0d14208cfde752d9e4666d008f2ecdc143cb0c8b3c92e667ef8768d6b6a5207142509d18d80ea18c4f8e81e609e68ea5a2ca5d3ae252317df2edbb3327718318067c7ba164b29aa738fc6f8a61fdc51040e35c0a38a104fc0b0fa54c1e2092f6da491d4421790e3b38fd0ac115a151d0e4c878a42a1563d1f5f7634f1dfb73777a1e202cdb38f40421225ccaa4b968809ab943a9551d943ae7e274ec56dc92899e70076c0d078d4908b757041e43d873247bfaf32af0fb7233eba90df57992adb968fd3c335c2b2d5b234a356495ff9ec289da33d51a49ab42e845b161f35925dcd28d29e9a91ff7c714ada40204a99d904a7a2cfd737893815bdcda8a1097878e912b831e32514254eed335173a66fdd4a8f62a15786d630d1ec6b8ffac647cda23dac2afa101489cac447e7233ee2233ea243bb63868607e5ce9844346f684a9a12b362166d4933b301314f153ab27c8c439ad2e6faa8f3a1a6f4710bfad87db8097de4c0701bfad8433f5880b64c2192e13583110d4755909827e42c92982794669498279c4b2c314f988d89659827a43c501e96087b5c378622972674c00cf9300e8931868da50f23998f6f7c18cd7cad5edda4645aa243461f7d0cf3644a9952a69429654a9952a64483e2501c8a4371280ecd2556aae8e1eab59c0a312c8f6d9944db1533cc335dae9eaee9a215e51f4ed7c492c512616fc7bc1034be5d2b07c97e127681341f925645d7a0a80bd2f892568d0117e43cdca40cd038f7e520e99cf305b74342f3e5b012b8ad3afac8479cb75f15e60959e8859a45b1b42afad010aa3a6ac88f3e7a98fa90853e0a356bc1212c1f79cb4726faf8fa48875a95061d62a66189749b724e48a1bd1df3bb44336cca199608a5de09f8c52f97ebf9cb51a1c996916189983cfa66f24e60c28e796dc9e57aedcb89ae1f4ec51df3d4db31ef9a02340568bb48297a060aaac23fcc931385ac449f44cda2437468124d223a3489e8d047deda67e301286dabd3bddb75f40f6b0efb7e749a6153d2b8f0bded94cd052f98406a76d0b347f7e87179a6c737c271657f399453ecf1cfa86ed425e2e3d939895f487cc6b78801fb851501cf5f4855cfaf56b12f8b9156c51e7acfbebdc1612ccb57b57ee6e9784e9df1bc5ac36b204eb177a398158d843c7b04829ef9f51c5f3938e243ae7330f46108cfbf4647eb4100ca18e6097bca1b314fd8403d857972ea9fd80bb7c1af67672446ad8a9dae8795919ef70beb1be106621e32681acffcc60518c496c8917d26a8dd916eb33bd1236d564e92cca9d3afc9b62a731f3027096d3242abdaa9fb8061347a6e9aba3bd1235265348e8e70bd0f4824872ab0bc5c6088f2d6cb49d2aae8f4a35e4e124a657b4e7f166010fbb683246b43444a6b8deb9a0d04a218c5f70f6b111969b473accd5aad6a7d69edd55221faf8ed6a8fe4d85667db95502afb42a9fdebd3086f341258341ee34e9ba276bf455bc0f0399b6bbe397747baf85cdb339f5e0f3783dabecf3d3b75f95112f1e36f35be5d991130f9f45d9e9e116f044eb51955d25a77251e4da6fa87ce5a689f539fb2bdc7ef6b0e311ec3a1f2ec6b0e2fdf1e81fafb9a83cb1bd15c73d7de9b656455eda6c65e28f985f5f79544ad9838ee830f3ef0e04790203900d86e381c1c1cc7d92277f38107710070de07be79413c8873fe4110078017415e21c781388db7829624390ec457f0c07132cf400fc7f10c9c1c8811e63e90524a29b120dedc07d264fa3ef82088a7c0e71b052439992be9e138aee4e4407c0be2e54c0fe23ee0075ecefc7c4edf1c00ee036ea6693251d4929452da71e5a5afdc31319ae85c0d619e5d63ce996301ce3ff0249c7ff035d1421d005f130fbe9ce93d1cc739a75f92cd837c4d72be9cf9e5649f057a388e273939103ff9f603c7a371205ee7fd03c75b1088b76004fb870fc675695b1d8a42f9930a6edc03e7c7c9a6031f61349a12832210a7922487898093983bdd2207c4350fb53910941166c00844768aef2e989432027129d344048a4331cb16a2c83ce126a9d0a4cc92669190d41e92b060b0d9d3934928bbd3ce5e14f26294a86adfe20cf48b40bb437d3b1430a7df91fd499d661f122029f0c1bc59118855ed116889d000f13647799acb2bb5731cc795e47cdb2a9c2f07731c5f50c9b62afb72301ccfc0e638df0a5a92a05cf3158078063407e240be1550d882b3c78d67721bd96346507afb370b8aa08425493d7c30ae89439afce709055d8867402dd19f54f0b4024ffea4823d628f1e5c3d9d3609c4a52fe95c76e0f2874b1b492351d287945266895dfb76486adc087b4e2278e34aa46f361ee79ab739f7f093c78e09e6353527aff11e352707e245d0c6ebe19a7772f698609e437b9c80780b9a50da8f9b97de39dd524a29a59452b694524a29830459ba3b524ecfa1de0676473a7b25704afac9e3405449efe1fd3c7170a302429adfb88070cd78a9647764ec3a63e7ed72e887a4c7c98df046e32d8875de82db8d17c1ded887a7f90fcfc6515ef50ebc1a6f2f625e7c1f276f5bd537de4eb949e73ae93435d2abd4a4943ea5ac3e187736d4acce76ea7163133b70cddbe350b3389aea1d462c351e46229387d1480c1feec38b400bfe40da22f7c3d372f21bef60f34eae7937be6d37bef969bbf10e7c9c6efc87b6456d8b39d139f70173e2976381cd354fb2b9e6d1b5af8996f825d19cfb9ad8b8a679931eec03662e59db56a9846645a055b5d36c95e2fc42d42a45a09e25c2114a8c128122900834cf5f04e22e07d37c8b5080801608a887794ce054b336d7362d7b26f28fc467227d7ae6a71bdf2e07fbdca8487c7c71086889646fe3144bddf2612492defca9f1ce7f684c884518e8db029b9f3cc9e6a7af8996e94d7a7c9bcf2f89e6375f139b4f7324db5d6073cd4d88414311cb16a29711d009250029c5a41a1f8c69a668df68b37eb43091ce2405fa29d49ffec441ce7f801ce4fc89839d873544350b0890cdc39e1b5f144a5b2425cdc2f1f6252734eb87f7c9bb87d3b8875bc6877b1885a2079670aa3d7e4a388594e5dbb1158729c12ce003727e011f90fb9af8804db4244139e7403c49132a20f73569320544f916391a6ff3ced39c8138ca71bc0537e6683c20de79281c2f82ecedd30b2cf8d381494371272c07c3a22b61d637d4bec4041598e78779b6688e2cdf6b34a5b744f121f7dd500ec6f8263e5c33ff1f46202c22619ece01976f27a17d43ae7d8b71d5ac20ab20ab20bb136466945294631bd89df6e9712082d01ebd1238d5aa5e40b863942cd274395d7e47f633a71f12207e810581a0be6d550a7c1e43f2f373f21fd84b2f7b271db8931f598dd3f80d77f268dcc633790faffa76cee520d936cd6fbc5fb0c7fe8d177f9c98bcfacf4f8dff74bef90f8dff7036de10cd5bd2aaf6cddb2517906941939256b51be19e15a77ac5c28d0fc65d0e68ed76daac08f618ad7a522b4f71ec5a548c6f9fd2b7433269ab7ab69b2002ba63be9bfb8b2d1f7d25a77e74a9a17f04a34720a397aeda227141588f2e8479388fbe629ecda30f611ecd734468fee83aa925d2795c0f0df0d19dc6b96b69ce1de7dc1df9f11e3f0b526f7a7541a35645dfa40bb5a3f7f67e6f3b6dafb1087f374f292c003de631fa4449f638ae80fc4ac0272ecce1e9c35a672cf3cc3c836d75421af4ed9bfce2c7dd3de01cb98c36295cfd6eaa59d4815ab51455d129ad31aa9638a855ed4bdc51a8f871d00f35642336c5359924bfa86b8a1a8bb41207358b7aabb13beda1d66be8f0edad148b4ca25663894c1aecce151f62bdc67cbd9a35ad5895f6e174a308427b6362ce40cd30beb117f6faf61043e37b6652f40f3ed4eea19a389a4c2bbd5f4ea25864ceb120b4b74f1a2c9149c7eeb493d99da21ace49e6dbe7ab5994d68a4265f3f5edf18e6599b0aaa55824040b821c1be9589ee975a0c88471e97bcf88e3dbb76cca2ceb06e3ef163772d374f930fe18b16477a2639e0870b42f95411ae4645b01c4321fbf4a14f384d1ab874aa3b67f25881feac429e6186a58a38cb139a3ca5448a0ca1ec69f8f8e4da9ecf187f6b64a7e6134629e66c5325de6db065bcdd63ed41e3a32efd409e5eb3962ce0c76bec956a22e114109cc8335abf3f871454225b9d2d2ef6a6138e3d743b045e2949c09c812bc1166a325923933898d25525a6b9c128b7015f6adf36878e382d8b94a2cc25e2208ec9c719588318d1035be5d062258f3356101a4f964100b354b0ab58a9de8d9b92ff42dcfbe7d210acbb31c7a66313e6c2ecf1eb2516fe1143bf53a4b7b8d6577d8d94b2cd24314b13bec98508d1e369668d4ac06dbbb23f251d83358f7761ba5ca5746c68f7027427f618a7e966599cfec8b94f63a26777d7668424aeec6ae82d61aba693de88972d54429574fb45a6103160688aea8126094e84a0721492be56a196c45abbcd0570ccd221f5ea0c25ccd82a8554bef987294e5884b0f4b52b060030b323d2879e528a515d5ad0183cafd16c9b085ceab06f92d92618928325cf9f15b5405a879a69c52fafcbe18665b9dd0f5f4376ed9527acf2e33bf9572487635bb241832ca253ee3638cee3a42563d4784f051890736eedc50e7a7901de0f8e9723a9d3c40f17348cacfa12e7ef6e0c34fdac10e60befd99655cfa19a512714f9d470d399d54e4be4f41be75be857cfb8643dec787217cf7b6531d88f8f68ad2c1cbb7bb951abe3d6545e9db573160e2db7ba07cbb91de61876fa75dab93b8eeeeee8c22e043ee8b1c7e00f3c21a4746100951c30dd4e8401c5338a1c40cc4c83003f8c214a56ceae080e5d965d7e2ee6e1bbebbbb1b04a13a9e9d7d74a8e188385a98038e175e3e3e6c81c71618c40835f1649f5091a1db74da602304bc14219c38b1a3872c66806135a18a25e028e2072b58e8685474f21d661ad550e757e88a4e5704361b058399a0a9c38d5a228b4d2f2709d6e42686249440eca3d3cb49329b6c6d80f3f30137e9420de53711f38dda1e52da2c04c090c50b64afb4590b268a2d9240ee02644741a921fd584a19bde80c1344e0f4b636c0e669145d21b7999fa6969e9eea806766be8129f3743875628ffc85281965fcf9b0c7f4e17a71e1c31d0303ae2b0f90d103132fd061a4440da000ba1cd5518697289482007dae50f921020c186a1c51051804143880b4c843092c6eb823f31ab21082c17391909467a7cc9d422ef55b74c316371471af2eb62db5447c7d6311f9d508c2f4e9bc44e277b33bd3a76f915297264d7a8c31c6a8b98c713d2e11f91de17e3db544788897e2d474cd734e4d37793a9c9aa9e999b7e2d4ec915daadca33945f419c5b63a612715894e69ad28d4ee275f358c46d2c80146b18c6962464b84e6d935794b2cd3aaa31a46a3cea28635469ff4e11e6df9129ad5ad9a15cbd4657550d72c11eaf28b6556ffadbe0f95921d247ff0a1867bf4dd43eddf2f5cc123d99d58647f2983db89c0fdeece2cb202fa94fad24f7a99cd6a709dc6224d3dd47e3d1ac522fdf1168f552c11fa7112bb233ba8592ab44a3aeda0d941acb4f4d2639966f19656c994a32a2d53532b0d0ad5b947a3ede3a4564151dbd9a3504b57a15329772a1456fac5e8adeaa48c37a46de3e9fa95476898b97b8c2d8cdf54541d1fbfc5f9d1f37edb49d33e7ee3703e7bde6fb339ce9d34328c3ebf4929638cb45511c5a96d2aaa94fded1d8d4da9913ba80651546ca31abdbb5fd8b68d5b4a14b79c1ce7949cdaf56d72c4b07efec2157c3a9cdaa6097d3e47021dc6f0051f3f37b62d46ee6e29bb23ebcd8975add4eeacef66594629e5d63399ba230bc7b6d1aeb5dd5bc8cf3e39fa6c14e27777d7dddd9c9cb46b996296f4f47590b80174119d0802fb6658d79a8e7547f8db334caa9002a79ab08a9d5d2716416141609f127f52b03bec217fa8d3df0998942cc6e02820bb64f36b3a6153b02ceaf4d36115470f230dcf518a0b9a877bc76b3a6ffa2a350add68be0e26a5623fd4f6a1f65043cab17b274d8e04b047219ef9e8fdf10b57f04b69b3a8af579347d9a9b79d10b555536adc4c76679279a224e399c40f77893b6177a4a871762d993401fa727d9347186b548296d061e3062d74d4f95b7403961b86ee2082f6e06a4c1d7028ae9e9ae3ea09158b6c5892e23a5c6c02a9554b9f3bd9a094d239558e3b05b1818af9023bf13a53b3df221b98a8a1faf82db2e14a94a3cadf221b866c10aa618b1ebf4533cc504316f2896ac36ff4a5d297c8cb2c2f3d02ccd32f7d0412a49491ca8f8b5e0d465059bf6c94793832c7ed1835363565ce643b7f93316c6692b689b5b871ad99e8461377675d32fbc8487bc0a2b72dbdd4ee48c7be96524acf3edaaa18240d73b4fe4291f5273b4ef6cbbe40bd3fb6f0a7bfc2881d64e8d2850c5f8401ae155a640003032a6ddc000c2b0cb1d79120fdcc5297d6a5eca8d5d3df8e571fcb58d151e64394d2871415c4757290d06669ce9a0744c1273d2075200a9a4c266f73ea799a7742ce05163479937d812da0de02932be0a5cbe5fb4962ce7e484cdf0a63c9c61289459863e4f670777799f0a7c02f04f56d650eea16d180f445343c3d7a76ae88869f673f75c7be6d87993c204a4408ea617be6ed9ab6552abcf410f32cc43c7a0952e0971ff51ef4db56f5622c73d032b7d99c96cc67e67353f30533e3a6c7046b8f1230fde4362f729f0d0abe6dbe7dc3b8e9e558a073ce95741fe74a36d7aaa8286c1993afd2fb803e203b0af1cc639f477df37e36afad62e7bc1fceb7559af6aa286c994fa11ff30577119039f5e8f3ed463a443d63d20be59b7c761350c053df36ee6e7734a66f05fc94db22c530ac374f0b530c63c96d740773239c6153769b7886a161db666991dcc69cc9d382b9f49824895f5c958905cfa66725405a50e8f912a4d04f3df53ea0c9b7ed24d0fe85999bbc1f933fd18242cfa7d008c030117c9ee34f90bd9085504ea0c767be6ddc5d9e34f45b017fd6d1bba38094194f4e6a59017f96c9166a62fbe2a6e60b9e1d853e63e6e399f831c17c875978f6d849403eb6028f89f498607141989e02eaa747f62801f9dc49df26d7debef456c08ff9b6cd71254d2899477e5db46db3a4ef7a5d22eceb364b647fc14d7a4dda0d1c944016b623f8278b2d200b21f8a0c30c4da20b6461a700e5a72527bacf472861844016403853c717f9932404b2b08ab22404c6498fa988610d3888c06d72d26b125b20020964a19f80cb0b08b94897d2843ebf6d189db104b6b75d01b2179f05f689ccae6d79db5abb252d5ed0a0064123f8caa4cfe6b78b14366e7e8bbac8a18bea86fb2263e6631119321f237f28c4332f6f503d468eb10b95239ea3e9b7a80b283edc570c19cf4a4e757737c5b86f897928a5942670bfdebe3df70b4bf8f5f62612357aa37ebdbbd6fab6943d77599987dd25e8eeceb8dddded187a3721b66dbd84d0d3c33cbba9e82b3f36f9e82da793e023708a87ac38c5be9213e3a20a49a52636b1a83aee582683a0b25f3f557e1a4ddc72cc13812e6aec28356a9c89ca6f7d38ab92619aa925c69499721095fe1651e9212ed5eeb7884a953caaf65b4425ca376bd9f4154d3923859959a8557ba5d6fc164d599241adbf4553929082a0a8dca575cb87a8790745d5d02dc3b41e213dcdae85f934a28694ab27f68670ca68ca940228a32b266290b452ae46b105a3750441437741ea49e9aa0e283158b95c2e179856ca552f44acda17f5622451aba66fe4c0beea416335a4670aa3298e7ad52c6a5a95497a8e0164f613ca4ddfbe144a548a25eaecf569c592659aa7e39caa1ca515357f8ba6003db705134444af6c1b09f3605c7c9ca6eda3cf2c955b398da89413f2e9645e8a4cb5f97dc941e6d90a1c98a99c1828eaa64574a37650832e952ac130c801c4f30c72f0f0d17f8aab555d0b33794150334b0d571f3dfa6a484f0828294454fe1649e1f221ea05832d8cef1fb287edd151ec855b1483954f815feece866c62c951fa86498f9e94fd5b33737316bbbb2a46c0af33c07314aaca6eee2951a8e8f10b99d99f3d9680033b46ab228fd7b42a56348f586e88598a681eb8e6118c860120944862cb1b528829ba01104261a8c1849936ec0035df6669e08a29567049a3ca90143dc27cf9e2820b4e8610c2a545a2d77cc3b8e5350fac90e13df0c0a9071e7891aee581001ec7294e15651ec789742d9c9b9b9b9b9b9b9b9b9b1b6740d7bae90d53bfaddac1f8cd69155ffce63dacaea5f907a902cb07719eae15242727c77584e4f82a27c773aad0e173beacf1dbea375f40d7da34edcb98d77c48d7d214d0b57256524431e46d6cd6cb6b8a31a880818a2d8c6c781b5f1999f136de63e48b0e6fe33bc50e6fe309e85a3635d0e1a5cb1d5ebaa784308f8d4b5f49305e86f032064a98e7c6a57b40fa4a29b07819445a91382e3d5691d1ca1697cb25454e11f432cb1105a5c723e6d99739120453d0a164c4921d724c0165d1133ac06471c5eb0b2430ac4e643803c51a66707124879cc10d568e98a30b1dac68436af1061636281124461e20cbcb0d77b87104c58d2e524aa1c6e7e43802ba560e7d801644f3a2852045b86000f0e172f1c2e135979ad35718af79cde135471585f19afb0eaf79aa8b19aff92a88d7a240e3352f585ef3d2c66b8e448a2daff9aa6b6948dc873a8fa3c3873d8f43801978c841155e406102080c538fe3dbac13c688e20a2cf08822cc1560b87a1c1c47e1b853791ca738af171ec741e85a380ef890fbed14e437df50e7371732e4b7107e73b93541c36f454d84f9cd89a0df9c08f3db1336fc56f404d26f50e0f05b16bff901bad6a6f337be61cfdfd4bff10d537fb3fa9b9b1cfec6fdf5374e6f6a60c4dff84ed7baa1c2c626c8dbe8bc8d90b771ca04d0db78b561228bb7a18195b7a1c11a6f43c4c4dbb890ae65b33240d79240b4003d102f40d702528499aff1f1353535ae53e3ab9a2c737c4d8f1a1c6a5c09f3d8788d7ba0a6a6a6c66bc26091658b2d66c0c28a1935687c71e20934b0b0824c0debc35316a1016479e23557752d0d6563e328e671c0db38b5c922c3db78aa6bd978971a213b444aa7447c79e955ca4b47796a65f492889f974e80ae257b2a0c647085901258e4d08314e221d3421e61bcb8a18839c08d08d76f3e80aeb5b900ba560d4a09291ee53a5d0b556ff8ea9eaabeaa4ad0e0eb566da8b56ab5fa3c210308179488e2ba230db03671d9a0091876d02148892a81971a64bac8e28d9f9f1ac6952e787002c4135ac0708d9e7ca58100af7900ba9676d27122091c5efad7b524caeb5ab50332df817bd7ea80fe70d48f1f3f7ef8eac70f34fe8716255e4bc06bfe41d7d200d0b5a4075deb478f8fa3f7e141ba960f7afa530d7f72671ecd4fae733af98a5931c8e57241014f6acc40891ebef8c26506578027df662931d2a18a14299ee8a20c18d63ff936f12729c3c82de4075286a0fa70bd709982c32588978ee272e6a5bb0c8e5e7aea8797beea994197974bd060c41a0c9aa685f1e122bd0625a98a9818be989962870d53afb9e6abb956e535772eaed7b8c0e035a7cd5ac10d1e82b4206206399c804ad8f19ae3742d0d48d73af5400289efe1a8aed5e3881fbe9b866f771d21abf61e3021ccf04a9a456bbab720f1dda3a30c5dbd3d56b1e946c287a00fa3510473d37d54068616a01c01dde00ab0d70063881ba000e20c2ec02e801b3798f9e165441424fa0a510db8986307349e300186d1d5c10d64bac4f183959f24401c0c71c60c3056e00813048691e8aff81bbff10ebad68dfc0d7b5efaae5e4ae9fee5a594fea36bc97dd91c61c6dbb88fae6543b39041c4861564b690e20e30ac5f6b0c5f9d36eb1b8ac30d1eeed081cc18603d028caf7eea5a15e76b8e48e26bbc47d7aa09f29a66449723825e13e235bfe95a5a0c6fd0e083501470a431050ceb6f1b0cbf5951c6193190b1c14b0e498046ecf09bdb78ed5a9d44e33bc5d3784dd7a2a1763cc795f19c7b4a0817e6cb733db84885d39ce39af3e5b490c173365c9cc2819c4721c9f9724eb9fa9c0b910339aa9811e58b19703e4c5c61c365869727ccd8c0b9600836acfc303425cb0f9c01c4cc4174464b1c5a8cc17918315e4ae9550b272f9da66b49d487415ef5edb4082bdf5e8bf876141b7f04836fef344dd35c73ae6b6901f82d8b2f7ef3ad6b6d5ad7e2ba2ca47ce7a6aed56171e54d264799dc3b25c48485973775a62f2657c23ced26f7c06632f90977bc89cc1793c720e6916ef258c5c4994c4e4df5b5262cc23cc739ed5a1c1e4dbcf1451933a890120486f5a594f2812bc828ea52c6c91c6880528b1620bf15f19b635d6be340165a0c618334aab0234a94f7c9a18d332e35ce98238d2e606ff1f2edb36bb563e17acd65d7d2be6b99b86bcda41fc3a9f66d84b0a7bd707e26f47c548a4952f04f1666673e33f35c265bfaacccb3672e333ecc6cf06116665996859952c6c6b36f98013d676136f49c8519d173f612b3208839f38c256149589967c76cc07e9eb12c3ec4420cc3b010037ac6426ce8190b31a267ec25832983194ea2493489e69c134c38b978f6e9629f3fe1dc32c339f4cc541684e8a1c4e3239533cfd2ccb3efd273909462c831cf2ec1302b5e092517cf6de6d9a5ab8b2c3294329440cf52b66ae959a9bb1b0cb39a84cdc5339b79f67675c1a57f3aec2dcf1d36d073d843cf1b36d173bf9e7d979ebdcc4733cfce2ee61fa12d203b233527a5a2d25218c55823ac6ab2445cccc326f60da35009cdda6627c1032c02662f283bf7f08f9c7312fdf4088c40421225cc5a70f20fff7cf46efee129566a189da8a1ec26eaaca38632fa2c533b4b0de57711f555a51335944d54c6a386f2d94c8dae0ffa0d80cf174740c4516088492b14aac7080a0b01d195142fb45614ca63504897250f6121ac232915ce1289621394d25a51a879439d536a1450bcfc66f9f6a63444796ad53dcf599867080bed5931d3aef2e32d5b1d612a3b981aa5dcfd24948a7de83f6d4e9cda1df630d6031fddafcf65ed12695f9f1f36679452cad8acb8aae8266af340f867a835fe51da4cca217d778d5c2cc9c834d83630b57d6bef0873efb5e9eeac3377cf39310ccbb2ac4d2693a67995397ac72fe48f3e63b347e68e99999b9b189665d46b552d6634a1cfc78f26b12dc75fd96f647d8562138f1a5d1a21bb83623bf9299bfb5b0eb1e588105fce6f206a487fe651dbb5eff9dd1ebdfeee8fb66a935cf442e9e54820943ebfb109dc89897c135072462f94bff4b795cd332e66fa2f30cc57673772774b9ba2067931e857d5fe65294c99efb581cbfb705f467647ca90ff10a716db8279cbd940408a10a7d6d7434ad9f5f31b613d235e046e589754d4705f6d547932c73c4ecc2b8166f216686e4325e6f16bdf9b3e477de1ea778ba988186b5e324f4667f4f6cce3c7e22e0b84df386e43a1dce90ff5ee4c3392fbed80f65896c9f49d907302a7b46c4f5f7b54addbc1b23467ed3ba155ec04f8a0fb849f0c9b99ec4cee2be38c0e29a594529a78e8659925125d9a5c7aac63875a251d25438512720b2f919224bf5e4a36327d53a955ed3cd4acb9d4aaf6a5d0954254d2d0b763433b7924966f39347f26d0744da5f9494ec94f56c184e45016ca2adf1e6242df1fbfdde8ec52569142d28a15ccf5d1a71be1ed5a732249200924813625854209f42cc441bb4386535d8653cd4bbbd38df45d01f9f2e31f4e49a0f9cd23fef9f650027d0331cf14e6c15cd2898d5bba118e46cd921e1b092929a941f9f52b891a36996f0f6319e629d36622b3d2167d63194d388153d1bbcf8d6a98ea8eac6f1b52aee98fce396fe79e099c8a5ee39dc0a9d87d25a0515d693eaf38e63aefd88dfae353508179368f7126514fbf4542411fae52094b241e590f434845ceb7dec8449ac051ee5ad433c2a9d8f9d6794ce4775ca69945355c2319c797292d7cb4e2976a09269cc03c9a2f998fb17ea1cfd7ce6bbc30f5354e69ad21eab91ad7dcc6f356751e3b116a9cc68d74f536aff1f6693cfadb695ce735b7796f1f7d93678453311502a75294a23e4c7d2ca38ed0ac128c64cba094fd1675c1e5c3557a55ee418328eb6a6b3b5d16566bbc55eb98b7dd5f2859ca65817d24731a4cd49bdfa221dcd0f97e8baaec0084a5477af1a88f7ce472b96a0063dc8234608bada91d801663c7786904f49ae9f60d63956fdf305af98e577c28e387257ee872e58a16dfbe02e2db7b683002c41cdf3e421048aa7cbb92254b7c7b09ccb3454180f956418822170d3f4042481184c3b74721e6d9222c4bdf1e878630c2123bce2bb5e670c34920371802898720243872408d104304133678428b2b40285476a0e1ee7e8ea371e30ca123d0d8728688ade20a284952789181146280d8b0694fc2ed87929d2e6bc1da483b58a0892a0ac874da3d44d08aa215e5764cf701e7d74473cc9b98325fa79ae7512f87dd94c35f8e05a8639e8436d1c25f12cc4d18a5927a8651cc87595ed956279c414f5f5e04d951cdd2127d395f1ea155d8d2530fa3d053cecbc1dc07e4bcf372b00fc90f7be73ee0469df3b88cb7799899ba20e7a85651d792646ba225093bf735a1ada2cedbc74abe60489f6e5f4e92cdd937675f3047fb529ca2be6a157599f462b1d2aaa853baa8104531569aae5651577a0aae0efd4a3083e41adbea849b14631401a7625cb23b26cf3293c9913693977939d235f701d728477e3916c8dce4493237b974d3d7448bfc92985c337ddeaaf626db2a1fd007d544757e7577da6d76a731c79c3d211f11236a43d01c004441ad014029500b01a807d4be6d55f8c1af9bbcc84e97c82caaec3cc711bf1d0a91d29490d56e9941ecbbbf12a2e3a89309dc4b09f463be6d9c9a28f4cfcf43a1e58c181625a53db4c784e653a0ffdbe4e6a454049a47219e495a017dfa25e11412936fce15592980b58a826329e7e44947dd377d29c40f6bedba34c7e6e3d4e3c6a6d6f838f5b8b1a935dccd73d3326a92317e24702afa6e96619e65988f538f1b9b5ae3e3447bdc6436b58672164310330f812c99f885aa3386b091f22931cf6836ae8b54cb68bae85cf4ed88fcedd34c34cbb22fdca429a3a68c66599665599665bb4342c73732c82a92065983ac41569134c81acaa81285a210f30c310ff52c0a611f46a139b4548342b1ac4156a1a1d630a7ac5243fa4d436ddf645c297b7aa814dd66f5d5efcd47dbe6abdff42e955a85ab679065b422b444803c7b1c5a22d1d9630fcb437c74ed4e6c6155ec31e8856728ae25ad629aef30b5afa84b561f3dec69b3d6534ba48bca78e3f9d9872c91cd99f5ccf3bc80e728332cc6e8a6ee887cfa85fdd4334f04bb33e5266d12fd4a88df922522884b9a1571e8e1d9e510cf1e2312cf3e8576879794a192252929726c94c47c668661d333acbd54148a423c94f9685ca18c41ca69dfa23170fc168d51faed4f849a377d36c5b66cb4c48dd0279a3fed0ebb94616e7f4b84e6593647cfa06b74246e53cab93b232cc9b02d1974939252e7ee087fe6dc11fd2260048ebacfd8945d6bfa862d169b26f3ff68a294524a7d77a8104e91e09e64624c89dbb81adf3c498d6f1e7ddb9cfb9aac40e39d6f7505ce37afa931d51a9a996866dab8ce697c85cdb9ce6968bce37cf30c701b4d6707b7711f46339a99342db53b42562498789b41500ccfbeec464d828065d15d2d119c67023c7be8fbe5798b9e57cc5f387d85516c45f3d25be698dbe38f9d083193325bad82be885944671e2628b0e0fa969d87425e87591c7311c8f200d914fbf687409ed98d7ac212e9678f40cdf2a86237e23d43af9cc8ae4275ce9354e73c3ac779f73559a1c6699cb3f1262b6859a173ceeb97d3be60751f70ab2795ea09f2895d8a3ee776ef52cd9b7f9b1ce745170a2cb85273a9aad0ac15b424a1f11a5f81f3ced94f68d60a345ee339ed493ae73c498dd3787739fd65a0fb3250f3a9d02a769acf48abd8b73b8153775437d28d9039b720bbc722bb20b4b31b2000cb637276022c0f75ee3e05f417aa3efaec5ad4b76cb3d834da6f526ea9dd5991e021e194dc9da51334dea0d8321b084459e2d47ecb6ed9edb188e951ec13682d348439f34264be1d07eae7d2d2aec5cb99646a7bf41ccc7d1efb620ab13b125f625262915669c50d9a40e328f6eeb7b188e9b70b143264ba4061235a51c37de3d937b339fad85dc075802550f31c0a561c50f171c62512a97f98ea9234e9800834b9f66dab661a3f48d040ba81996727c1dbb8bbc082524cf50f53fddb65ca111f2110056904a31015bfb0461165e9a3c7df32f6ee449fde08797cef52c6263a8acc58fa2d2ac3cc5bf15b54c6953f314f4ba7ce1936651345695cf9fe52e05701ea43155c2e57cd2fcd57eeb763e24c3c05fa4ca667bbd3ae797177da4d1ef7cb2fec97dceeb06713c3421a6e91fd2afdd860b6a2efa25f0fbb8bf6f52568d9524a1937955aad7a7ae2eb0173876d9748c76dbbdaae89323373dc9d75e6dd9d92d99b9963c76d3434261fb626a3b79070d4f5cdb675400dae78810a30a3c60b5ca722c4df30e082bbbeab0d8242617caa15cb5a3351adbb98ded269e671cbee2ea2bcb0adce16b9e50641a1303ed59a61cc51cc933ee54bf982996255fc74c254a9b352aa69ae6cdedd68a2d9dd89338dd710f4854aedfaea05b4bc473b3a7093bbd4e031c5c9123544311a02c3d54b46a24aa6b95c2ed711c8c408303210d3831c3288825694a77c5c6b64590b32371031cc15131c0431c519656079038e2d2fd0234918b99cc07185144f74e694410d759e755274a5834f0f569268210630a818630c3d22c995c1c089962b6450060c1562c0a512b3a286b4801d61c290438c3cc220b344a211774c27e268630a2f599c2455e162587eb62257ca24ebd2574ae93d524aafd2539229d534dfd5bef044b12facf3034f414c51c6b0e4c43cfca150ec272f8589e2ea2985b984cf8ffaee3a5dafee5737531ef5891a9e9e4e39a7cbf9b5c12d952a9f25878a7c0a834c9a66e67232e1a37bcf514d387d94529a70fa28e1e8acc606329052641c91818587d854ce3971f839b139e7bc41104746d0cf49d130c2a6d3e74e930c20eaa574c620838a4d66cb1a22636743a44f236a5d7d292139d4edb7680c2ede3586d187527263bc5a9579ce2ad41ccfec46ede0651cf2d533d8a48cedd33ff03db3d15dd9d147c67834864d1936318b171dd4136ad533845346ab1e0e23067fd1d9ac486a8572948b01835541f5ec9e3fd48144156ea4e1431e2f1f20c820828c2ac0800149082cb22e322d46d8a2f1c4971bbe8001858a28347003a12b6290d8828e2cc21071181ad064115384c7b63a5bd7a2af4f724afe04a8b769667b649fc6cccb18f01c7a1f93f58c069b6338ad2eb8de7eb6b2065bdc94cd1af164bebb9cef56dff55d538ec94473487221110823cbc718a3896eb6bb9bed189f34355eb5d93c1fd782319a7882598ab9a4e134138d47515eaa55d16bbccedba2896a9e34868deddd054437793d18b714eb31db9d1b7b7eddbbbdbbdb3bbd6c2e232b8f1e813a7eb4d29ab4a4528e52aed21aa7c41fb64297348bd2a4246c8968b4f1158962a4f92dba5123d112f1f1edf115bf6c0cf36d83ef30167d7b16b38ca7bcc458c962c718630c531f53a1cf2f0f35d2aa5eb5aabd55ed188ef6a57247bdbb1613cca96f5ae639da2702bfe6ac08e505660cf36c911862c417185734171446141fc6233194c2e0f26164239ab29865991f899fe1c42f741194c0a906e777eae6a03132ec8b1ef64a442c75f5683ecae5c999eef3b3a6f33015e9725b97553dba2f8bc6a3af96c5797423cbd278682b7aee25b1d778345ec79a67f266887a6f3eaa552cbfd3d765509f8cbb0832e298a915abd8bb7d25bdbb87797a7731ef590d59495f0de918573dfef2d3e1147b6ca222611e2914ae9ea55cad8a9daeb22aab551d71e3218cf910cc0b213ae6e1102c04e6c118c396457b7a21708afd77c963edfbecedf39010e297e2147b6ca2a67eb9e8e109794b12e6893e6455ec940ee92fac435e3a4182249a7042a9288824ee40800b7978b1e3862cc0d0210eec893258114fe401850bd107a536c884b102838c0f73e0207bc2c80811784386187080050f57b850c97206124a108d1106d20f6174986186342292c0b22244d0ac08b70c53252b52c5d0e059cc9531a80f530b16528bede3104f88e98f88274c4f28419ff0329ff83277b621b87401051b62c880811534c0255baac04195379266d802862b306cf0ec128c319e9d0a2902e30a30baa08eb4169cfd4d1eeb4bf985266a327d14d5bede121b6cdddd91474ad9f24b739c622fcb4ccdcdbd5f98792742e6981b69ea4dcf4c487d4b7673cff9db351503498b0f2563b1313333cf3d8153516e73ce3999e7d29fca8e0d51a34f479e62eba52c08893514749ea9d16523c1cccc357c869999af10c06f31e6acf37f5f84a4f429b00834bff4e363ae1c26f34d487d6c570da9ecc9cf5f5882221c6c484331c62fd8b009f7889777d78fc45faeb79bbf242fc61c157de1c4f42aeaa2c80b3236dcbc57ba23f1ccaf1f91bfd159847eee8845e1a54a9536f000859fd440869c1fa850516f72e0292acd5254332e110eee0821b6cd3814574f5a4e3aa7caa1bc873b0541c2f2a18e1ddb5165d3f661ad41a61134a33463252acd6f5117402ca54a1b8ea8344b7ca3665c98886a7adea15621294ea1988d8c5051fe8513242a3e4c1d51a497afd72a09d5835a327ad9b32f8f494f1d4b1275057df4e8648bc4a40521ba192ffc7a04029aa2ca0d2dc00007b8498c89f2861a5c6a88a10b188722962dcc185c5031e222c3146018893a1025c90b3cca2c71e5070ce3eb04378881162de411839921c03016dd9084195db8a2d8020b1846a41f3e8c493eecf6f0615cdf45ed8eb04bd6e3cf1291bf27e8f91260de448513d695304f74e1d78dd45d8f4a649867ae6fc1755b3ca1a99f427e0ee9f9e946a8fce4a6d182f9b95c2cf9e1e7989387abc4860f0f974c741941e567fcf9e161049af2338c55847e7a1c92e36736c38825cb4fd49c1e5f5a7cf819bd4cdf3082f909644e8f4960fcd4a65264e36724f3d3378c657e3abb8c7e4e069af23388875ce5270bfd741e22e2275ff989250b97267e3abfd200322783612e7e8a01a6869aa11bdf5c4708f300c0375f8109f3db8f4d09f3e0f8e61ed83ed8b66ddb3cf06df36ddbb6cdf36dfbb66ddbb66ddbb62b84f8cf3f8f40d7fa3ccff33c8740d7f23c8d7707bb96530f3cf0c0030ffcbb96073bff01982bff811be95a1fe0e0e0e0e0e0e0e0e0e0f803ba160e00ac88e201e00ee85a00a0f2e7c60a28fec61bd0b56e42e85a5b15625ed38636d75c4708b324a8bd56451aafd9683c685aa757a814cc16a5a19e65cccd8804000000f314002030140c090563d1784c93c53d14800d7aaa4864549c09c45992c330659031c810430800008088cc90a60d50f86eb7319e2c827107971fb0085b65f2821f0d531e6549a19e53cd21c3ee99f936e94156175d153e7c1670e6a97ce85b74ae9c2a2f0ee11104876936f460b6c860bcb2e586f8340c8ac554962816eddc43161691415fd22d7d7e50fb71094a7ec24d89e5f0e52357bba73ecca2615bd59268b50d8e99a015c5c660b96cb92901a0c40d082720eba133386e0beab4f5d704fcf9596ffd9e7ef17967d8b6742ac58f019f754974a9d5fb6705f37157a9cb7054fb14e6986accae5defcd855960e0ff87b3cc0dd46b52f185e0c14e0e324371cd5f03a5ea066b5c8453e344acb5da00e20b94aadb4e44fbf9090753552edb6beec7198e85448696aa1feecc3750be83b3ade1b2dd72e121a18e774a2c7dd5de3ff4ca0e8cc5edb61dc0e16b139aaa0aaa2d10f7f50dab135a8dcf8dd75a13ca182718b683160ed2c7730ef59b01a61bba45b47ab9040188c1d1213fd34b1c6f96b3f4c2debd3e55459ebf4508abc3d1476f4a4e3782110ef0c3e89353497db579b75060e12c7d27ebef1cab8e58dad109a63af0b77cee71b5244d58448cdcd6904d565d46f5dfa4efe49991ff1ab99b19b0e93f79f2872ee43e497c47b5cf7c045655ba9bd59196043425d921067159bff3f2aafa387c2ac25957e660de395eaff67fec8f956b05babecf57e2c009bb52e274c5c2f04c9ec4c595cc8c9bd5293fc119dc238c5d9133f23d3e9531e3e3611d597ab5591a116faacc45ce30f5bc6058035a08ec457344927c2dcd95c381d331edeb1a9603efa03133eb98a3e0d98c3063bc6ca8ae030d47bb0bdad7e52066b4de6c6a71735d48a7bf9b52423de6137860b5710833465fdd0681b4adcabd571f4ea9beedefe9df32c49911a49be9924342c832579e968edbcff1a04d4375f3fa69cc5d15adad62d99885e4ba10ccd0d03a76396aa0027a7a44997ace604a7246c59e835f8faa6f467771a0ca8099fb8b7a0d4678b22c89c42299706993382691a049c2fc101b0de4a0d7b9a742c7e3b36264f21b1b8d5ed313affb5a65e3c83767cc2d12876aebad8014ede3445c08891cea3c994d00457f144a47fd34d96bffa07c6c1ba60929e78c95699520463d40927e35a4ec8a626842888ea6f8b441b4993bc99660d36ecb6366b534e0bb5c1a404c2d1e8bb87bc3adee6fd1583f704fe317a5ae6d9b16a622f09b1f2f4c8b990b17ef650826fd8861fad377619ed50e838b805eebdb93f02da32eccebb02b205a3991c1fee192588238775da98ca8ef6bbd9133b5470f4566d07a235a0553beb3a6befcad271c644a2091222c3cea57ddb8de8b99cff5b73aad01dca53afbcd0231c76997af965767ee26bc7a5e762d2442efe388315e3d71a39b17bab01efd4778e5240c6142002454f58ff825e9cfe22300cd294c59dbf788578f8c135fa1accb429b14577e8c5a17f7640c79d572bea4885cc433cbe003a24b685223fcf04cb6cfa9a5de37dbb5f02e805d9ad577e2bbc9eb561062a8d0beaee428515d1aea096edb264234d11a18495a671b443ab153b3d40e8cc1813251eb106ced8f2129c231b86c935dc89fc94309af10138ba16560a153cbf035b02c584995f712ef4973f109583aded24458d2b3862e82796b090f23af801799c4cf6afe7b47b840cd3cbcfaac1a88defc658a37c8ec4072de620fe5f1d84e8faa716363f8c44014882c310bdeea861dd5dcf86b6e1dc2d9b9e0f8d28e6f2e78f4f1d57d621f3cd3d137502c9f6eafd4faeb44cc6ed7d8c445ed0bf5d9402dd25cad2912df83c300512db22b3cb93e5c9a9e22351ddb76665e3d0062ecb45b3beeaabc5e78b239f158b170c3797c6a026e153d9e17e96d7999b067ce949550d57f2ed911286770a35868f82747e1c9625c415b48dcf8dc769f217d30930595840645fe252fffbd1dc5c4e7b647ff487ca82f1d0029e6217bd8abadd1afce68243c02c6b0b7f353f805161f7610a0820fa6f992312fb31667237ca869160ddd1059417a3eae162a68a3c9ef8219018cfaf549c395cd7ab2fc94b33fa515103b2369b57857225c0214fa3ee613a9166cb19a378e3edc26708ac4523b0cc49300c96e79d3cb8eeb5f9e7ed2846ad6eba1f766fdc8a16b1aea3accdc6c8ad51124e53cc7bbd348ad80b6272de5739e20c763ac29321b8621a4ee87d9314306cf709c12b29707044b60dca9438887ae51f9c01d11b7c56309faee97630a9fbab19d90753f6e32e8ed2fd5c468631b8e997d524d659d331ad1ec4d4eb0f259e26ab2ae9ae6b66e27dbee8d185c9dbd90ff1dacbd486b8070b74e1e9631025b9e499840e127ac35fddf0184d32adb294ca6e8cd102741661ae5564947f30b886c550ed3ca555e2cc01aea424d0e70cbcb59d26d6c56e1d25e20905b9f9bcc67f8a3ab5fc222a114b8bb35f424bc4d50b81e51ad74fc2ca160721ee9752cdf3c903953b4a7505e1e5af8d19e29ec647535937fb8f07e1ec2cfa41550eccd9c19b6d6fcd5606c33d88e51cad475290b42545bd7861df5041119e50b6310d3fb59405fe1634ffb9e1df01f3e4ac1599e8fa63c51f2cabedc78f66aa4694715a4d8ea54d783e660a8c3885c5c7d02c98cb30dc9a50af2deb28c0cb3a9a789aa756cf2ed4ec69c132ad78cb3cc9264969d93fb1399bdd6520c7db3d32a61b4d58a193948f0f32f8822d4faacded30934134132b1cd9937562a8b89d7b22e43716b1c9684661974aba01505a51027f8f9b91c8aa6e1dd0568e261f1574155ef42e0a6ed9327091bae2921f5939f6aeb05a1156532a64718d5cb390628434df83898572a544ac3a8c089cd8c948d7e394209278df4ac45c114ab57d67fe0ca80402c08ab6e4fc5d9ce9301cc022282c30da10605f045c782c6978ed20d0a707232bd5eb2a4c35f1aed30b6edb37d3aa31e35ec3872de47c66fd6ed5964fb5137c8b72bf16d27416da4af3e38117e2fa32ad2d99c28d7a86daf826037e285311fb469b7b4e49455449bf811115c2c220e7de712988fca3801524e18a436904f6f07753714bd54030c8855cdf3822502b636fa33940f3d5b3d68a693ac76709ab21bbb37c6a59b239173df06cdaba5da5500c67f1c398a9fbbaab4a1661103fe3586ea71fc503f0db2b88ab99fbd8b25d100c691e373c109537e2efa3833a931e6eda83148e9dfaa8d8a903ef6e0066000b43446e9616d5f52cb328943016ed1e0eb266f778a958ef4ed8fa3965ea88cda19e60145aac4d1e0c57440e50310337814bc040635ea126e43158088a18ec12a5aff2c443b0330cf8c3e5753419d16462c6184c31d5b8f1455b09afcc57cde7a69d7f6f1ff14aa70c6c72e064ab8db22b63d3badb040374c479f2d7534b6e1c03e1c76a8f5cba854e97ed0dd705d1ae299f6ce4310771b2b0588b8659a7f566637188339ae91b3076f0c5fae9528216d502b91d25be7045faec51b728c51adac64cb23bef1a8c840e6d8e48991e4ba2de580f0bb8c205515def322442aed6654e2228270ad951bf2d5a12f625c4fdaca8b5807dfeb0667d6939eaf5045636d806dc7c76788a31b8d89757dd3b8dd2616c0481874df4183651f67130ba95fd12e7666cd146eda3835de08c7977a93c1f20c570aec5240663dbf6bdebc2c823dffc2f33152a0b591ecc0d33eddbbdd74e173210c1d2b1b776c9b4ca8cd42259da634a41e00381be53afbf91900c5ac0c14cb56981599b4981975ac13279c627c9145dcc8b0ec8755e5af3eb3cac9cea7820ed1e7e750061902a8b24a46955397799e9d676758f0e3d01b021ecde301c04442b63ecbb8d118db859cb9d3c0429aadf21548afa3c93eaa7406113ddb19ab69311651f491f3a3aecd5d52648813f3ed875733800ebf4deb962319b1d185be3b9472fc18c59b6ed25c8a5709852e7d192cf2eeb1d4c361f1103a2889069110b6ddeff6bc7d6186bb8d2d40e21a6c185f78740b58967bdd210debf978fa58e32caf69245504734aa1059cfcf00cd7c48766b0dd73955775fa9f6ac5fe8ae1cb650b82fb6c9dbca2500c914a4da7325fa23a5a12b55553141e6da635ea0c2bedfdfea8b9abb92ff37c69cb3dea7aafe356ab0eb1b0b8e9ab4013d40aa5eaba8a0931352b0ea707c5b734b1152509aac211d9e6edfa21bacb6da241bc048ee5a2159f369c62a706897aa68ffea509f62a1f13086511db829c29d3fa55bb0bdd2973ff6ae78ec78a5d1dfe42a3ebb619988d7b74b8142d47141c521c437708d4759c4b152d0b313223b1eec6c7b3637ba2ffa1b6ab3076194a6cc6a0779482f55d8a26312a50571573498a0511166701a3152ba83b3aab7b7974a77f55aa16661063cc1a8fbafc178c96e296a6992d907a2e43d2a6441e9bef3b4a2211d4dac114803efe3d138ddd7fa38fcce2fc87211038e014df6169f097b6f59aee8c71749748080e78a46bd6be408435c95b374787a54890a418bdea0823e79c103b036e845b0d97baf80f051ba4f3cc1a3c5326425285ea4bae76023b7057c32febc86f9c28a6d271174b1f0141a6a029ba5c5812621908c9a3e20b010a29d7eeacc92494d660b77a8d73c235361d4abea3ca80176be5268a85b03263398ed863b287a9ab2a2ec218aa5694be961d616ee308c0acafe7c458dc5ecee0130d869c151353024fa229378cc126a01bd3a840eee6762499c286dc10ddd55b2203916fd73a6ee215193c74cb9a70c37be4cb86b13b9a36a80aebe0cb5591abd88b59c1ca02899fc9a256f7cf5f7958a7af4335b49fa99451d091e189ed67455ad65dc23c1034289fa67a4af48333c8f4fc1c9cd7860a9259e58ad55f4c23eebda05cc153a4019868a5893ca490a8b04bc2ea445e138b99c9469ecc723fb9cc02b8d7150403edaad4f25ec9f2da313959b92ac65d70d1bdf2fbc82d802cc4216577371285dfb0be4bb48a0eb5adbfad835718c170560087b4b4753102e19e6a9f4f5829085c9638788465c04204ab63f5f893a1cb224bf781b828683c320050928f7bdd85a83e4ed1eeb66dfc4073b6236561df1a901f03ca3bd79e5570e2dcc103f5a3d57300efea8f3f3e8925dd425fb4bfa3c0ae9a5e8240ac771b453dbc944503a28260923809e12def9b5b29cf317ef343510a77fc5bfaa2b62167deceed754d20f311c5ac8e64fbdef3ff0224cdb88bb200f5871f773314e03c0e85ec8cf2b1ed8899287c20e83b826038f67458b9982fce5bd03fa5bad8b54587ee08fb26635040292a367b1d4748349cfd790560a4788272bc17f2aff9b2d96e871b925adc83fddec8e7a94a94347563a611b1da3549aad02050fd711c57f75df5362f28c335afeacabc900893c2cfcf8558c68e653f7f2d7d760e0de014655cd8cde6515dc5c353c0d553d16fcba730f05c6b2cf1d4a190c0a84462b7b1be3839185c945235019921cda0ed350f4a1d95c7a8d6cd429b8c79c29e8052630c0eb97e99e24e0fb2c1080fd54b39c7f99859a638682dcdae4307d36b37ce51d5ad6393a1b23ec514a4bb0efa1a2e4ffb435c86ad36ee4ab46f7fc0a64ec9345638accb69496c14bb308dcdcc2cf184688d59f14e71bb45a7efc62a6a225e0ec46bf35602cde897946923f558be2a565223f08a794a52fda24f3212f6f0cccb76c01b239764a51325bd79c94c9e15dad68b9ba0cdee4e28a22c15eeb0b260eed3450f4c3dfc72e112356151ced4b1f72c8fc730b1b0100040c1e5d3fc6e74bbd544a6c2144b2316b96e7edccd16ce1ec64f3ecc826951a1dc8c236ec612d12eab147001edeafe1cef637d87569f982853c47445ed5389a06593d63ca4cf757c1940f0cf18e5de634344282e3484740ab76cd7d9e94af7d8ea9160f812b3f81ea7abd26f80ef52e076780b3042c9500d407ab5c7ab8a4a257cc6d92c22b83dbc66b4d9fa32697e0742660bd25b5c3f82736ee91ee4ef58e220424e1b1cd9a5e220dd3b402adc17ca85c96fed11967f44ead7fa2d277407d360c4a5c844c61d96b949626bc6dc6f4979fc81ced755f905094fa46486afe935a7436e4a4194e0c1804fca483f36a2cf9322e64ffcb3626acfa0efdf626da2d91b33510c55ee94b58124c854ce22c52bc1b90bca91c2486e6d20193db9d6068942113690bed65c62d9dfb7b805dda9856e830d31a82306df493628c4b86c6c4602cb48475b393a80b5f7b3c987ee9773bcae86e0386c3a90bd05b3d6215c20c03694e6ab396adc2d62a4d1efa46db9fc0406380c75813a54b2a2d190a9f723fd6d386dd441b4510c2310eb76f45e24667857080af6a467f022066c3bba35958b94f7b608da85a4c1aab943518907b270858418a327424008c34bd2a8cbffdb81ac806628fa2d72a24125f2da7d3be73a84f5352caee2662d12ab224391954f74c78a3f1fda5d98453128f391510e8606c316967457024ef162d56015362fd7abad37345381a9514b08e896c5780b5c90b206ffe8473bf42894f652d1d37af2c63de70ec1b9a9ce1898422c8e61f428016d16fe5601754ce9dd2ccceb3f5fd640948535dbc2a7ce717c249c5d9ff5bb3e92903baf0ea6cf4b47ccf0e459c4222a9304c3499c4ac5b9032f67d2a662bdda046d32b695e100e2319907daae30667c10fcefef6f153e2ed03980e32587aab1c628354d8e5091b3fe8b5cbde657bcc23a69d6023f7a9409d183e9c4f33c99b84bc7322f776f017c72db8d30b211413e0d4044bf364524cb765529af1fd542982e7623e1866ccf985f75b7b0c620bdba9d40bebe4a66c32ed88c0d3143fa72234436f1d7ebc752e0b6ffa24bb85762a85d8ad798e63ebe0e86dae79ebefe570d031ab26ee03fe81c96c12aec0c1a84a82d2a70e7c5f7ae2148b796b72f75df16b3625f17aa56a415d5e83b23e56eab34001816bfae118db8c54955614b71111cb6074c61686154b5a9efebca0386cdae0308e44f79a42ebcd1168008a33ea01c59ddf3e856d9f3adb7cfd8e17cc428131fb689cfaabaf78207ee83a65bba4fd8329b56730b47d340899ddd48a4bb62c5c6680bf66eca9adc5884f4c08cdc8050cffaad48f8a5e79548d58f5406406a270766b6206def7d97066d9e0544aee1d807ce012e3423f49229906acfa092615f43584692dd29c4068d5c2e097127d83d7335cd6d96da0d97487e80c8a43aa40729ec2635a57622291dce9a131912f2bf4e820e6b44bc325dae58410a15d84afad69a9326047b6f68bc75d6d98e4242df34d83a058a2eac643f8f3d187609ab5dd7298ab3bf9bc221b0e1b0d31087d589c3888070953f7570b745caee6e27ce29dc0f80a5854917cba30d93126bbcd8682be4867a7e0423687446457a0daa80bf21c0ddead5a8e47e14714aae79e82997dd8298abc4f64218cfaf5000ad3147a342a82198f88ab2442ad01c634b141ad66db56b1ac6d2099392dfb44e84e12c4060e9721089e870c3ae4d708343ba6f752004d4109d6c68b78eca7353ba3b82bf927c615e0c634778b668b94a6114c2744f8a434e071be9d40ac841bb2a7176bbad84fc3bcce914ffb30b3ba7d3d8eb2cc47b3a610ae22c67791afe1a16786e1e68ffa48aae2a2032adc277c10e85823c392b9a645531e9a80f692ff864aa63636261844996c029a2350f171baaab07bd7a844ac91bfe006c6b6c20f8e25bc334e39267ad6453c2963bd24aba106bf5b35ae510c174454e348c56524b0658790d579c5525151474ae0c0777157b55d84395f816ead5800edd4def1d2f578b532b25fda4a45660aedb4f740bf830c5278a9cdaac4652024ad0b70be34e08913d0b6c808dd904696a57be50a47718a44a31e448fd754f9fa14a8ef3496054a8eaef08386db40273c0595811fdf69760d3dfc56b5f735cd31b63f5a2cc4743fe3e4eab1037a7894c3b693ab03856c83951d869dcf8b2e2c4a4662e163415ad61aa74c88604000003da3c2925465c433c2ae954fed39fecba8614270a85650dcca8024517f7e503f09fb24aa0952afe80c5344d680ccad5a996701601069a177a109ea25459e19a081a193aed6fd26230409c82fea15bab741fcb7709af4daae8104903afc8b6e71d0667e3a1d28fd717cbd655b37ed210f2832e001a881091cb25b702487d8f50aa7383226658c501cb2e016a9e7a8662bca0210950063161aa27af54ca7e1504ab923e3f356771d117bfb45122cd0d42fc99132bd32b71eb09b274dd6a48abcbde0c81492bd9c172848638efbc5e951920749978659554f0eb5905c419c5da83dc30981f0ba9afdc2aa2d74eec64af37776cf37f1b21e6b7f22e44e602979f939ba437fba1581b262825f7b7db9f9951314d1283103d1f0705416b076ada66343340c68e848d9104b20b631b7d0e7edab9914cf40939a43e7f3b9812172aecc9f3a4ea6fc339ee3c4e9908f0f1940b1b5242621a03a10d8a412d56df5a68090f3904488425f2d4d82d677a532ca62cd98cddd3b5ce8b1d67a0a19159d2e6afc2070e4420f4e3cb3fc2b70a5049887df2f5048c1b442f0ab48be1d21cd6c6cacc3726f72199c834656c97b19e304f3a98be0e037ce85d0ba1786653a59b18a3a4a732266e10354a0a413af6053471132d8c8a4443f3106365c216b27146aa2614250cf00fc568721760f261a0f2c1069561816dd3338142bf0bba8a1e0b52bf46a843583a4e292d33c8598eec2bf2ab87ce4d0ca634cbd03a4ca3f19d331122aed2247f41e47b4d0d53563eba791910cf25e7b6581241bf54c6048ab6c6671ea2b9258396ec818d1bfe1ed5ceecc3d1e3b46b5c449ded3982110b86afc745b30ce972afd2ae6c40861872267268c2c1b7ac4c34f6619b4ca41a72adde6e32acf30bf864e4cbb42fa39e6b2351b47fb53ea5a86cbc232b3c0659c7aeb9249e59ac61b5ac2fda0916b0a0ec2ed3c6adb3badc8207fcab9a834609d34075a13fbb9cc2c685b33ec9238133255b4cd9002fbcfe0e2626484897e51a8274ec6b2a3e82b7c26eb7851681929a81d25c32742b37ee6789f142422ea995e8bd636367c856db06e74e32fb44793ba618c6fed7238b5639e46c1795e6f2d3dbd7db6a16abd607a538f412338e96790b2b9aafb467c500fa020f526a7c87538aefc8db0bbf3a8d3254126a6c3b4f720b2866aac6ef678a7a866b6ea73c55755f5d16d318013ff708ad9aca53c7204348c65567a7e4bff04c65645cbb98ef443772357616c16bbb2e7559f2248f7f82b28039c657575e86e83b6617282315a9614bd48d3f3b91c24154bd035fc956a8ff9caba3f495ec3fb0b6c179795b5bceaddcd210b414ec3a98c6fa0621092fe57b4848db58f8b3f4d98964caa33467871a10994b012d765ec5d965bdce1092ac225e6e11a7e9eac8c5a197cf72fc5d45bc94c88aa91c45b19bff8f5f6eb8897a09eab1f0ed003ea5afe378cd9cba338b6f7617733b0869994c24b1c748cdbe2f8442128588eaced4615418472ea65478e9e878803302746e41e2ab83edcb1314084f258b99dfc08d776fcca19717f806b2c38d825ea5f40fbcbf5958c34203badf64e2c5510b3bffa5cd162710c1ac91b2aa1c10c18c4f01b2bd0646d1b777d721bcf60b6eb36d30a1253732ed26268546ce827e8a30d6c3634763dff8a3dd883cfc10ac5fcc48db737d7a6845f96411228434020455e12c48df705adf5622a1083fdc175f29b76855f56651c66da8b969d09b943f8d70eec1d363fca512bd60ccea8c8b2e43a0fb0749ccd26e4d00a35e5e5af1a01c556b7f7647a51ff6bbfca3fed86a17c2fe5086ad824328fcc2325a59bf2c2a9335f1283118ffe2c1924e71880bfccb845ee685139223c63c736892d1378b12320ffdc6f2d486a9b8d72d3cef95bf4d09b571a46f8f1a31da7504f19c335d9106eb3f4d0e362506e24b4177d05538f42da61b729530f72421e06258c917c3bb8fe902f5c101857aa31c37b80c70ed7ab0118ef8d786f93439bfabf9919dffa7f14a757cf1d4e2b06ccc8547f88d1d588680c8482c6a0b559a41815a1215a17894033c67e16448f09bbc751e7cc34296f26fb270837896aa1ecaf868b201037b1571a8556298113c12c27989ad8d1d289e3db95a3e5d599805106e140b22e9b8375851dbaa925993390a631f1010b64d51dcf3cd75207a04d26b58af196e84b753f3e1d62a195643cac5690616debc2490b317fdbbc89647df43ca632b0f4ba6a2ce22a51f3c4139ebdb8123e5a5a4858846d99149ca415500356b8d02948c2b71af2836a9c91f3ff364f6b461af7a8e9faf96b6a8ab6c28f81055ed49f885dfd3c5c52f87809cafe4f2c5298befdf5b034b829f06746b4a6a98b40042a5725736ac1eb4acba7b625e5b3cf2e9f1e479d2ba2bdec5591a92993190b4d5e24f24ec71dad3d38d7996613ed06f88775232a040dd3fee70e68e3748629eca8ab1b0f87c93bf6cbc16736fb9a5a3af6939ae80a31eca8e77ed2dc3271c1bdcfa34b1b36770897844754ac73e19febbbf503cd67cf50693a33a7eeb834c591dd1d994f83b47e4d835f5d4fe351b536bfb54b18c8253e0953b159cd06f51a1d73b1e0180a9676b3b226ca77ee90350163e061f551cd119b8a907b2afe2c2ca42d2ac8218b62d13995542a24030cc0b68d1387c0ed08ffcb3890c035a3947bf5b2cd01cdc0c1791c786b5efc2e5b4212e75b1fc36388bb323703bc603f4545696786a50a0e6866b86a0c5054087807e05c8963d60e2bc87ad71c9089bff3516d595f5fe9b04357bab415ff50463a693ffac16e0b35709a4f31f019c21cd66886cf06f7d8c0070f80cee59f72ae67b05eaa3d8854dbf56370489489248d133aa5f6531f2d0d478792b2818d2a5dc5888ec8321331c14e17f711d18996ab2ab8fd9a966ace8a6df0995a4850a06a0ad4558fe3ac0643e771d022197f6b248f1c00548d14196b8aec798f7a52e098e970e44c4767c0d1c25175a45b84153dd047e7df8f24259f3a24bfe272a7322db94ebbd01f9e8008f1d6f836e53a3b877039dabd9f8197a756a046d77f2d513f6a541e643326bb79381514c8768ab6ac6c93cd63a86b9b137c0982ab1404de88092901b7ed66dd975e322c54b160aa74bb59b3c4ea804c81c24ed4b8934daa635841969b306f2efd1c436df26eac7dda51ef004ec9cf24623c28aa98b549483cc96b0a19c486aab0e36bc9e8f2ef228bf3c1895f3a0d365eb1666270a5c0034488713fe07517d3caeb913db38eb035775b0d68fe74db2481e0f36c4b79a3303023b7a4a95d44e33ed543f525f25a8bdd2849e480befcbe33aa048188b438e056629ce1665c7ab1ba95a1737e4c00b7a559c7652d35960b49426d6e7ca8e7de1ba2a501b73d526b95a0d71c5e8dc6f7ad8171e9c78499fc5f14e52b5dd93d504b05279d67a179738b1495f6165c5ca1c900794852983ca87dd82d8e8687682dc3ec3f2da7a9d0e223f1f6ef75e914c569668a726679418db2b10e412654da775124c36462a296e81d2c57fc4135c85335ddf47be40f33163bcb92cf6b9d89b6b848b98e11ac6f26cdf61d6e2cb0c28cd0784545877035b441d910d8d568123a2ce96802a15009f6ee0f233dde96fbfb7ca4b2de2ae0112a7a81013a5072a5d50b015771003a83eaacc146e8e2a5d7c239163b4d0e22362445426a4cd25141f29a679501f0648af63f5856f7db74cc7d3e7673e510159b09bbaf495981af096d80ba07eb8f0a263591501f70bd6822062b638c28e3ebd6e89a275d4bf82c6efdfdb9cb4c3c79c36795cd1ea03adc99207aa707116afb93296414f11248fdd0d84a266365a01c72ee7aa1ef5a480b9b0d58cbb0198ce36f22ea3005555c1222620046b620b64e284c06e0acebef097a9aa40e89afc53e18c739b122d3e6902ae369283fab32e5a727636013d0a2b29f037fdc9777d275e88f101c787b9db98cb86e87da92ae7e2e85c5173a826e21112be21a71cf663805b22c981096c8cbcc89da141f83878c53bdd9937efae718768d69188642032467de88bee7978fc8120e405a51397a1914fc6a4befe9e057b2ed639fd37b303a9db939273baf4dbd2fbd85b5c878000a68442113fa52a223b525ad0f45ea3350bf91d474cedb4b43ac4ecba5ccb371190354004b38578f5e48d259eda0e38975d14073a57b555e63401a3ea9d32e508c46b2af425886a5474b383ca1edde5696adf293600d28c2ee1e2c90f31663585c55e7e0331847029ad806c4c4f04232b454d8ef6a42f26658d604c7011b5e0f0c2f52e6ce9dff262c236f3c94eee28ef72d68be96aca74aaaee6802101b38e70650a2b44689379cfead0edbf99a20d18a8fbc1083092c5896729a329d30d7f1b35042ec3924bad0e2c61d8195959f1df385b8de9d7b084ced52c44c60abeb85ddacd02c651e97f2bda10111cdc6f5809a80964d5fe5f769bc35bd004e68ba1cfc2730bf373b4170dcb2bf4c262f524ba303209f0f239e71facbd6031f44e624ccec9e2042aaa8595109ea59e57f4808e58514acaccd0e65dfb84bae3eaf2d99f45578c11dcc770670bab0c6d18519631ce21876ae4d64a4c429053661283989cbc9e33acb8172849560ae7d7b497bac82ab31b90bc964664b4e14537c4e98601e72487500dc240a3cf41da5ee2dd9b1e2693cb9330ce5c98cdf493b0e95e86c85b3c218cc5fdbeb43550ca660ec7be6923fda6cd294f8943f2c79fe41e13acb9c2d6ccd9a09f1ef19ddf9c854088e291eaff4bd801d2d801c83735cedda6341c32478481e017a407c6cc8145311137ae94b0e75d771bcc5681ecb9f6cc60ede839b686dc3cfbc176fa830bdb884f73db236e078abadc37411a5915c5f40372d49d13872543d13d96973dc9af5489326e36b7095218a814244a3f8c945095ea538b96da860d336096f77e5f24e268d70eaa53455fb86623f04dea777a466a9d1953eebc11f4a647d86c4adb111eade07a240c5c84cc0146ea1cf945feba39ee9ceb40cc1c9f963331c72412ef87d0bd917bd5273967f50625852b3842e1312a17c14c39fa16a9f4803c65f4e3442d221c5bdeed7ee46d73f09b733438186d404739181010fddc1d00e03cfce29c66e007869e5fd0360650f9d3903af56d7838be699233d38ae4d1067198275bf6378527b96aa282c76a8a27bb129e223c1f0c43454187b6cd8c76a96ca24701978942fd09458d26e3b44940fea80e356d87f36cad9aa60434e3c739037d0c49f1e436ed5de0101f99760a85dad6d46a669315c4d48eb3823e541ff38028db0c27ed4dd0040d75e016814ff81a16022f166aab662ee6534b9b76b9b4e06f339d3af4dd0cf33c3fbfd4f990476f88a4f796a8aab766c442b4ee27d341ac93c92f94d814ef8051045148d05d4517d4503aa84cbc26695693ae23b2fa21a7c4c403a4dc0138278ae7d00b2f0b5504e4ac676f73306d6a016d6280700bbcd5828022ce7582686fe596bc98522259200aeab497c64cd1015d4af4c956b688559e44cceb64571e89e0ac923a5f6b26a04af7f284afb001bafa67fdcbc5a37035fbc483f19a2d331fc4c164b6893634a248d2c8588ebc623bf9bb3b7ff83c74a1a7b1f89d9673f31bafbbb16dba33a01050fa2f93e45ece99bdf589ba18e9bae35d6a4ee68f6cc2310a5a9e36898e43af64b10ffb3fa683074e995cb8ce6494d9bed355e2f5d98c2946d6b49dc9fd9dca2495ae3cac532372b97c098bcd608a00318abe3af0341b4184f7c9171dec3c11b2166ff4eebe748b0649917b31fed289c214702e3c004039550d791d2076634f2fe8545cbb0d57981d5e86b4897110ce60ff0f4b09b9a5a5d38e7f60bac275c2582b34c180f965e61cff9477f22c9dc5920c459d373d87b8127576b40c61cb4f465631c3a53a6f3b84759eb46848127c78e253653636551e259688599ccd5aa2fb86deb13990b3958a97a509485e0f2f97f5f465b3727ff9d1d86cff0a4b593740a07d06441e1d671bd22f33a27d70aeb9366ff3d89dd5889b879ff949efacc1ca0b750f9cc407b5e2306be3fdbc9f989353834f9fcb133085aa62ffd89ebb78e135e6aedc44e47df20a862427a2d65d469a3bba02f086e8fffd7a63162ef226ee47abdfac28ff1c47737c2d35c3df3d33e129208a1e4f70034b0716d88c501f29a664b6a7f1262646a5e6178a611feba2e6fe823aea8f80e83bf46d1405214eca184728aa635c564451e482ce708f4a28a804c22c7350f5840f36f905e3c3d63351740349cd5b9923062d9aa125ebf6ba07e8c07d86eac17cc42d97cf1e66decacbe237b969b92b69e0d045c2206678129d5bbd08abca6622d038d1a4c4ad31f873fd900551a5d06264d1653016833809225a8ca2fdcd36ca3c6c0257434fb155e71d792038c94cd18e3210055f0ac9b03c4b1899b114cd49adc36976b0cd1da7a6e957e0175c547c8d5daf6dd0b318c2c06fad79480d28be704099859603b6778861010559161ba326d14a4cc2d6bce42b6faeef65cb637a3c7676850949378f273f11394d60321e80ce3c08688ced92f8672a032c94b53e29dfff60caec9b1a0cdd06f249ac2e6ae43101411cbfe0e46ebf819b03c472842781da104b7b273ad41b0ded370e431d490cac0a6138f8a465b5033b18d51997dd50aa83a533bb54766b11e04fc761a91f80b6d2b4c5d4e5a79e3bdb6b4d153da52f0ed5c8b3c6e477d1132d1e76b4e1f952973f88e63db573cb04feec82986789b352bdbde5bdf7e1fd496bebec199ebb721b90b351b74601fc9c1a6d502773e233cc9c8afd2306e739f53530f4b7e320b8e7fec1ff08dc00684f19d66fbab253ade6c2bbdcbd87fce39ea3dbde106753a553b63f3433b36eb8cac97d7e62fdba8cce7b1361339f39e62ca898d2265cda8fa35469dd71c9c7e5a3195c5bf840d62619b5d3b18ec059caeb28c7574063352821f9ce25779a4ef16c5eabc826d72a0061a1d941b76102f5651f0d610496530e8b1dde19e102bc4fd062d1a94b6ab3a8d0448cc39184ec2fbe1d5ca703367cf93dd55219e8ddd24c5999ec76675aa126ebda25f8baf37e922e923c0377a583d791e39572943cfb24788b6f0d122edf05acc4db53ab91a0be50424600ec0afe5380a16c3e514df56f50740439102882a760746701c7982330a824aa599bdd526a4be28a65ca52263e9628c83e7f86d048a561a7240b226cbdb281d2ed51af5d9014089fa7926398c89347eb683b117e700b37c7db43577d81fc7b736e74960858ca2bd6cba6ecbf1adb55bb6e9abd1470263990aadbc8a537876f64d06e53bd9d1252db81b62b2f1e2ce9e893eca41be25d193994f88dcedbbb760349983adb2f5627bffed294913c62ca4bf0e786506a96e4ba58ed08e887be96e19f4f91c280467ffbf6cb82dd7e74545da2c68452219dc86bc0ed9cf4af6a6f3f12c45c44170aebb14c32073d4dcdc520cb7ed662ce06018ad688a6300e4c11495591edc1c8b09993b003b721ddbacc3195770330405d24b5248112aa05806ad56e9ec866aa8b2ba4615eb86f46af56bd0139ec9d3ceb3ddaab8d2169fd1917b8fcbc74fc0e46ebd2b03473593a1f6d3c3b826ea9bfb7ad3dad0ba30dfc2bf2c136217bbf8f006bc4e41342e71613a1a4738d30767b93841db4eeb475a08a1df7f9d430e5bb70b81417a2fce689d22c85ca438f36e5750ca63e5cc9712247ac41e43508c4134c71071b6cef0ce5984554743b98c81d24f70e1684048f22525f8f84f41003ff545181b3b6514902a23e9456a2d68ca62411b4221e0a633c5d8f175939196ff80d59df273cd4bef5c9222dad3f016bd7de2aaace69958a2cdcf55d954669796f2af8504d543ac1a221d3f281a7d92b8cd9745505f00c99118f7a460584ec3cf4b9a6134296e31e866560ba0c73388837a41997de3b1da2fa400bef9b22e8e99f75f6de502ec8ddb3ad1e68c4bd956f8a9192369f1438489cc9365c4db59515a3928de580194847db34950f7ff54b87121758fee630eb8ce7c5ee64ff06544820f2b83d60faf82313e8e063d2cdd807aec280cba3c85473441351c88f365fffb87007df68a8538d8c4f05c441b0515e1c0c5a5c8a2c8e8a2ecee84747cd326acd0e12b9ab9ada2aa11a46398533da5dd2b7901ad8bb8c9781df7d0b83eab352b4957522235c0f6ba2b04142659fa2481389649b00a9b918bf0918e9857f840ca258d508cb212a4eab3cf2bbdc0b46f5df337dc4765b3c7b8b7adb3d08c864280a2b1c1e3f2dcd0ceb74b27d518485631e14bc09f5f29b068b9b35562df952ffb5e43458c946daea85db0305e2115a38bcbc503a3364bdc93bdc1a91617201c80b67fb9f5f7f18d3f6b41df7fa352a5a8e67e86cfa51ba8c744085ac03a79c6f056bb3056e357c85b62492a94bec206a09938ccae0d359e2574750ba2e9ce0b19d943ff8148ec6d200aef14239204592e659fde29df74d14777d8c74ef09d752f3c78ea02d69590cb57a3a875106d10c1d13981a8d16652965a2b18c430b96fb31e59cdb65d4206e6d0a9757f87d4faea5e3bde51c46157fdee442731e8efbbdcf257e47b5a4101e53a1251d04976c46e0f79ddc203af504fb0f20c50f97228a5c5cd9a58de911a778a8113d71174c3e3d9d89c7c8a2ee756eb698c17ddefebf8ad6e212198deb40a1f53fac6504fdfa1e0ae101c16ccd089a01119559320d9762b5a0a675802e38c3a3ccb81b033009ab97b88c8846d809370bffb4faeec0c492c39d53c54352f2505701365039f16b4c14eec9bd38da134ddd934400be530a8564b5c86b3cf9964d58a35c5f682f234f645b0c151d5d85c3547dbbed730890591398356158fde6ead923cee54fd90641b84efdbabc17ca75add6200fbedf7d73c422a6810f3ee9df59068adcd88b02279634f93a36c8ecad47e47e9e34c059733629025e25688af0679a14841a01a9d3fa2e3c1c28e5009c96aeb0c70baa814b02e84a6650778571bf52724226f3410a96c3102ec89592debdc864140e225d40b7af44ff3484537a21e0065aef4657d22937cf5ecf5d6a0f21595016513ef42f970ae5099bcbbb274d199898d7a65812051150d0bf2c28254f4a621d4c584f4a39bab8e05debdcaa12da90eab03629a65bd492ecd3252c23bdab149fc5d6525b4469c4a2878c03654d828e8b0daa1be773f2cbbe746cf8c839587a85b0c969ef9fbfef55f59b5acda1b989079a9b74cb07a8ea3580a0041f909eaf32b4c78d236f5a77b670d1a9904b4d41e201778b8cb3ec90f57951fe9c099aee9bc3c8940728e3560531939e35bfc8b15c2ce00398091b6133a870982ae5997436be8d020baa79526f9294db259fc6e2a44ecd7c52f79d5476fbcf2a951014a7a1a3e8909cfe87484593d2d985a6979f74f74c90937778c3cd5255c27fa10c8e23f8b39949695d40a3eac8b35205e2637f916311c47b139a4f90acb2e649c184f79c0f79903e413ced924f96a64f8ecbe5252a431c30fa28eb2cd1b5535d0ff72af96c2722466430a742cefcb8da6d058725c25eb26477775e3ec5d98d9082022252d6e4c28124038706f1a18c3acb506f335ad0f9c5daafc9c345f30c005226d3dd3456ded48fad2dfd8cfac78ba78cbde9f329482ff5b34686de4bd8ab1e61b90ee228e9736be75479b5846e1656a56a5774e1f2292b5cf4271dd6d3382e4bbe5546d8e66aac68b8a5df548b66b39280e75f679375ebe43c541e67602dd657df471005c395ef2cac858c1fe9af83d8bffb23036fac72b50dfb11aaa3a3bad9b1d053a769231b4b05a589f0b6338f0ab85a27cb35648d860c8d1a44f29e2316315427537e2635ab5715356d9e3b9452afa94053b285cde7f1952a6990c43984102ca42fec1233ddc551328636c142a6c6135eca0ab76d071f01d3510b7f23896e9bdd106b8b3784486459d4df007d60e9543b26340f63f2aaf6728ce4db94f3ae2acb632ebc9ded10d3a3f21bce53daaa58e6069511f80828b109e7bd4e7302abd9885c98f42fc09fd8b065ff0d139d89d01d238c36b259b4e1fd8b28936489e8a9ccbd2057c62636413c581afefe9f57e695428b835ae6a12ee49ea183696247389b9034600e20b921c0fcb44a103dcf3183c313d46c1d1f8a5d1b81d71d080bb166144929100612759648d2dfd059df684666e1e8535ec48135af83ea7a60eb70103370034168d0f37eaff8c4d03370e3ed06a8f3456a750436c57950942fcf940465cfc5e9202f92ee3d493d4ff91dd4863f5cbd9a6c862e0251b1d0f2fce403747e75654e96ee0f4396986275a6223caa6b5882c15db8591897b99de4687b324b838b5f84b3d8f3d0e94bbeecbdb2eeccdd6d967e9bd3b2b3fe47ceac94e35fe3557524e9d04815177f4e8017622f107dfb8c95f818420ce491ad76103fd271832816ac452700aa6d220f3c92f9589fd1cb0e733442a8ee95196c6f9e9a25a8500d8f22b3aaa1b18ae5feb107ff8982509b1fe0f9caa8ec1f3cb91b358303adacb9461611105f6cb2943a40c13367a957a7781aae22dfc177767a090d8bc0d8754e93094d9efe71281d9416b0f849baef3e4613eec467e5b5a9ae74e9fd71ab482418610a6fccbb27b4e8a6ad90323366555c3205bd9c61cffbaa3d71fd4d2c423fe718271c88ed21639b4492be12f4af3540fe13ff260163ec065831becced2423a7fff323327da1a4a9613d86b2e978ed1ba0fbb88945ca02177af697ca23aa64912f603974af99b76fb863864ce1083634b6fae5d07004cbca6f09ff5fa7b63e2992bb0824b415b4539625c09583e880c31c56f0b7aba06e68902220214d72d2dafcba65c1d8ef17700200432c050a101504493dc3d0ffb68d32564faee0e436a8252bee844d19bfa3881e2cf3dbebfe44db36845bf764ecd234190754984a956580a10addff2c2c771db40e95e070106f395201b3014fdc2bff14f02f9313dff8384860d5217740657143e740276fb91a9116ec733a6dacd190aebd305a4c64f8f73a4a998dc76897e761f35601a40b9e8247f5f46c85cf16b288f99124b09a0c97965388841bf2936cde70017f9bf0eaaea3d1d88b11281e8e85d8f4f764b3f864622b697ae487fe95383f3eb0e30924a07bf8de70ab0a3f40c54012903668c91700ded1bfad1b24fa524572cd366774ebf23be86f314f639d8d239112f2d4a2101e7a91b123958fada1fd7bcc05baeb9210872c202c820088cf1eb069a296aae04e80ef64b7f35891e49d84e3785970357dfe64c72b4a43324c275409b3ea549f8371c2bfd287d321048895ded28bcc4d701aba9f57b234006172f3f6cf7a8909847123e45f46009e9cff0bbd6e344aa5ea92158dd3ee958a0b01064b7bb674a743a09ba4a5f0c6fae747a1255a6dc9650ebcf09538b504ccccfe46b2f45d915451d2419f4aed7d1d9455aa7503ede429be0ed19f7dad148045cc571335ce7b01c86f1ca8ebb58ee32dc3b62fcf26f0bb902ae8a219479feccc457ffce4ed7dddd17417fee7fa425a2b776a664379f0f1fb24cfda4b268690837e6d193fd35baacabe2f10741a7ac220f5140cb0aefaf470776e95830d17c6b45e18082874cec9fc04059d14a956a062fea4af34dd92e8fa3ad169a562e776ac07ee6549853d3468e68517d6d05b4a8eb488fc8a26fdfe288be67294c2caff5fa27fa40bb5d76a3943202e6f4c2e4789610a86d2160a3de1f2b4b258d5e3eb9ff8f1d565b91fbea34b62d37390f11cfa55a34d8fcf2ae83796e6d14258216d447419c1de28f2071f3656a2b4459cf62a52073810103bf0f771f1a2d5024909a1e921f0f6e852b84b5b8e111fb862f2a2538905330a8a7f4bf5a892b9683fc0b7bf8dfac1a4fccbe152164195539aba7dd5ece24869ad2656de9a6789b818ff890dea9f2b3a26549d1775050d162c5a41add2505c3b6f2076785248835dbb489c77e5d3c9a910713b23e05461822f500e60857edec947e28ecdf41f2593e9bd56613189b592c42a5a8e52e6519aed161be1263c389fcc3008522df83f9bb803d36ce928d0c78750c2d08a356ee79bd74ab567f50a660f0bb77022fd44aa6c38e4cbd82c8d5b0640e929119c88779ba74fd7227cd2bb45fdd7460285a9ac505ec1095ada46964fcbadfb76f58e73f384e82860363397d45bfc52e012534cf3251498b6300aa508b2a76da00d7a12efcacaa4b4b5fd714b6aad6e3c629c1da9789749c424318448d54b3c6cc30e2022d27635a1d0256ecba66e493c7aba12519d202c44e7f9064b4fdeaeb426133c01e5913eddedd9da00bd3df6d8040140a079fe28080d24c38ce33a09773ba0342b482bbb9876161c0725639c5db56ed93cad1773d0f10c73c0a76a9639966d73aec51f0fb2bfd0f21de456d7df1b4e91474b7ecc3891346560029af5e156ffeb62438ffb6096b0fd43daff85073dc55f4d9822ac44e9550aabaecb27b1473f22c15fb0c387adb142129bb544146ba80e44d6d71a671174fc20fdc404bdec8baf0483890838df4db78d967ac31e8a03a33ae23c45d239e7c81be12f6e0fd2958ee0ef89f9fc02750e64e613a23a142550306e1e66af5fd0ad4fc536ae4872746ec5a2454bab3593f28f76df80d9b95460b747adaae5d17c0dc4800673dcda5a03d0c643cef2f342c64e11e10edd74d852266a7eeaab459c9888116fcb96c9d3aeff1bbf8d86173b7d07916f5e5862335e963b3868082d939e393b8459dbe4f7d0156805676a5a626cec48fc75e1b59dad68ca2c0a69cda57d9d767dec41415202c26c02849de1a372d05ad8a0d37003cbdb2c1db8e4957399a14e99a17e0e7a9033b706d05cc4fd8266427d431f6ed4e8c9c1dbc0d67b6b98522c17996d2d0562a2d4b4f4719e5f31bcee9685a8b2399a9a4a1c9c809d0cfb6b58e4803cc4c29a83fce908556270f3af151e94b305166a59240a227e4d853610baa20554b2ece9c01c34f2a5bbec8847247707f7119d5734ae84547a092f058e67b47bd4e928505b4bb3b2ae02be65edd3c4f396f956693c3931270ae0dc2d10f1358b1b4391bab1102150457d675681723330a04732b6b9b81084c46cd5dc123d976bab6ea89f6178f4f792df957dc798e08f2a24e064966036e26dae30c44191a5d654afaf17181ec509d94bca68fe87d68950a61bbbfaeb16794b91077612e97e8dc708974bf5399543163439e386110d1f2078c50b765ff37a8c28e455248380a15903a21db5dfb875cea70f7f7b74363af7ae199dce18f00d949ac8ff9aa1c6fc6913c761d7ed0bf5c97b8fa47d1b1c298f1f98cb2c284a6e9f79e5bbd60323575d086692b6edd9c3c50b12df6472c22e5a75a1a2b5f71e53b0d477588d3683b0fd092534e64c13c238172b1f1b732be5de1848d3aca446340fa5726a0ac041ab3e32eec1c310b42112fe87191834aa102020de4e315ce451199a12ad74c3243634c204316bb666ee2178acceaef713ab3c4763026874a11ddf7c7e3df867206d929c7ac5b890c05bde9674c244c8971e9702651bcee7ed00be9e56bb549f31eff19d7ecab3876bf884d14fc002490e7fdabeb0629a92a1c6e182eb57efcef24eacab0230660a5f98e74fad8d9e9a59e0da2de69dafaa0075e06602a4fffc2092936c6f6bbf3ca1aead495597b57c695f7d4264919a420d3aa1afe67012d1d745845c289280f14e4d8d4c3a115c167d2eaab5ca8b3850695b89269d3a438c87556f4dcd9fe6b645c52f197868b5bae99109035ad1ced5cdacd7ca01b36e4cf7bad733dbcb2e3eae189655f4a980c779acdcb7b79d63668d236c9a311a4e744151f31972fa392be99f6107d1e2b099a0dfda8ad8380b4520c19e5750cda56723d0ecee7385eb145c0bb79818549395121d0d000d23236d07ce4a5b0dbc566cfab8fc691b0c9598cb87e67438a80a14a8268ec65ad6aa2144452c90ec08745128e2fed58b146e3d84a6eb2eb8243c2b583dbd50db86c27eda93281256ef3def91094bd53cc89163657446016aac3f9a7c69a01dee269ca3b04663bdc003d31a3ee95e34d92312d934419bc633acbb0c9f8ea6683199a04221c146fd292c7064db9d73626b7a64621f327cb9376b304ff92bd1b2a36795acbe1af40bdf89c2fb1ac34b169093c9c207ec7871cab5db9129914807b64c03f2c292c3734ee216b87f4976006f6443b65d34fed0c187869052f5338303e36ad358cf9f0c615f3a951c06dd91f9977c4302159214a99ee14ecbc852b48f1083946f774d137479de4c2e931cf4c49a5accab95745aafb3d75ecbf04f1e4526ad8390bf29d376652b7f156d697de65f7c4fe815652ff06b1063c02d91d21ae4f33801057f3d022ab7a30b5ee02565acc67e8eabdf334d2e54ac0b83d92719038142cf300db2e3d9901ba964709fd327f7f7d912a61c7f608434ad1f85e0d3e7d46d0b8d9629ba5cbc3bad15ce47c684304efb1113e81df67c7eb14245f0bf8b83953dc209c2b39021bb28a067ebac307f5fa914e4e61bc0979b28d1c5ca5bd9b087ef9ffa5c2b9bd08580a410a2e23336de9dedbfa8829b9aba399d17cd757531c3bb3398da93af1bbc5a406ccb2f3862e2c9ae69d8843f0ce3d965ac29ffb4bc89363f8c4692ebdc82a3996e3ed872856dc04cfcb350e744ffe5f6ee0537261328b722d7f869c0feb8ce720f36551651489dc2d7fd9b38bcaff2d9fe6e56755971e8161705d6e1ac595b0a491c0df78e8169d40fa5f6fb976dec73a86c5d0090d2e0c96a8d7353ad36b09adf5b6de52bc4ad491e099a42747af4c954071a20a7b5c1d4f51417aeda825ed03e4c0b45b7f0cc23258d517960688f566a9dec3b537cc44380a1225255388636db45bccad6d8465a742d7e3f93836be1ed80d2cd0ada93ccc55aa00578802c49e0c80cd4954e9d47774e73ad9f026f81ee2cc48a2946aaf6ca7c5a45a35e08072b9aeedac8e40b641086bfa35b09da4c6a15f522cd17108ebbce18c9420205bdb1b797413cbdf44e8e34e8fb67cfc7eafbf6051dfe1433a27a5ce8a60fcd88bf4785db01fbf2586f22c4073333ee69fdbda62b9d6eae6ed6259c67327469796231e89596262d81a8f5d1c526d58de535bc27ebe4e463cd34a70ac041943fc4cb8761ca485a78979efc937b24ad29d715a91d896496b63dff2168db8839033a6e2d843a1e0239ca1bd02e0f4069ab44689f9cf6f7fb768358eb1052a2798e05244bdf0eb04418f30e674b775c312ba6c9b9af36fb5b65ca3a5425d653a5f89503b54d9fa54774e52b856014a9d2bf60753b4a7081d0f461d0fd4f64fbe8dbc659a65d544b4d2169d0567404e99bf44622879fa5bfadc27922b06cac5e6612982464210711b6693095c57dcaa6ea64ac6abc711ff2d4ab4e8be0adff9e06d89b1cebfb79d3bdb3f3a59000ce0181a9ef35683eb9ed299ecf542913ad9f20ab1a32570753756c554f76ac1e68a90d97cd3cd07f9ce4c91b9d9dd77e757d0754df882147fb19468aa6fc5476a710ce58f58ec0e689b4f06abf92ebc21d032c8bcd2295c54426f5df203b09384dc8168826057da67d726e5175bda149ffc5c1e95fa832425bbf2d34d5a1f10b2e42627bfa1614f0eb9112f0731152924ad98183e3c4efa8e230e8e868b0233d12b4291db8d076de324b35653a5a9fb9c89c9ed8d6d23412f2671ed56656989c2dac0419796be75224303c9ee323f20979b65af270d2e771e2206eba8fe17ab74ffae739247b0f8f74b698ac9d3723761c8f70190d6b91fc6e624421de14ab191af6764c504a6eab6a14dad126d8a65468dd59e5c9afedeb141cc11bb1c870f62aeaa6464048bd9527c73271c7ea3fd102756abcde83eba6053353e2ab96b5971b8843051ccbec6e509f22f43c06bb005d330a233b12161a4f2115454d5d3c9432902f7bde564b23797bc12667f2424208b46074895ce303c26173401390678297913c6af80e1b053ccec26b726ce29cd5f83c3a7991401a14d4075e52fe8696a8682d69479cc85c3353a7f112688480a2374dfbefed00c3fabea19f3313084c9de02517865e992e731fc6061a849b1cd31931a4123b06e32708f8c8047f8310d427ea38c7236fcbf90c4f828a9a8ceaf7d11017ba58b148c877271205ce1ad3935fe4dabf18321aaaeb76c609eec7adde005abc7e923696baa2cec55d49b57d9223cb0c2f90fb6b323938314b4cd224981bf7912b3369d4fe1763d42f057ee53eb3d726471fe23301f1e93da8889093bc44b3bbf7372eb94c7194a0c3d0c69a33da719e84e2fbf79e8904c0c560f4cbdc215537054aa94f84adc2423e475e22f8b193ff553f2d3ff805e41ec67e4a876bd0c6ab9e82205783e51224ae190d7e8e72f7e0724b208147e5db361dbfc35df04dcbf07b6602033024ce7528b813e8450c892adcb6d8b35c2f65c54b457581bca8a1c82f18ab362c2fa3ffcad717e6eaf1239bc226b7d286fd9e5f41d6bef1a95127413ad913b8e754fb994169e038061f6c44a8abb883b3775320fabfa10470569cd32e2ce921eb1c65816c21aa609bf8014983886258d45ff312beaa61e7030472a7429d983b3ab8ae1a3c2fba04913c8dea98933918fb46f500f1d307bc4c7074a6315d0fe36c22fbf3f3fc5435a06dc0238f0814ca52bc5fd5fffced4b187c735420e172b6c18e9a8417902a1fc82faa1518980415cf1dc54ce2d254a6fe14dc3b7c431c2bee99f6ef75104b4e161b06e92494de296485b0bbdf4593fdeeefaf9e387456e06651072bb42c819d8f16329324233789a814b19b3258eb869086d1804e5c3f843f1d921a6d7fa27d87279e4b34aac95961c5035c7e37ab8e9c8000702971715671ad69dd0fb3e4480ebf24cbd3814da971d84a7bd7646f52f04e684377c6f9eba3347c230db31b15a8e701af30e25c59d148c80c09267e06a5e23db05889b4b709de0d21020a3ea2c923267263fe3ad4c2c955c3ad5d44f38ddea124cf4922ef1ea96c91f66389c91529dc709959d1d95f76e8ebc32a0a7e43b667cc19e5c836e797b66a0b5bd9a6005e0c6d4cc8e5074684765f293c3ff2f0f08ef233f5b830eaf673ed3efea29e42988be3afa1161579f3f57f9223dd1f7cb6a95c6fb3b47237547011956a924401f7b73825c9735e28e4cfa4f6d482ad635a2aa127b213484cc63d85d3ca83170f5c4ce2a395a749dcbf938d1effae9c1892a1bb8e6c8eb065d72b65e5fad27f493871df65e4c5cab59eb82c653f7b22fec9ea8dac82a8a77bcb127b1172b013df4bef77237f9d5ae0617c10e2e41df1434138d748d1d28b97e89349c0aade7c0ebee56b1ec238775d226f727ce8fb67a96cb8ad7b75b0dcc10bc64e0f35a40403b339e7a48ffac7d89473d6c7fd9303e9cc48d21295b30484e044508f027537e594ab320a1f006550d7cfc54be6ff5169e0fe29b5e5ac594a457b11593ea91229e9be5a6b2590309534823831d5dd14ad574a4148c55c11723d6e8874194a62365aa667c9dff316e7263d36e85c1d02c59abe132ddf4707b0d99a1fbd3cae03a77520053fe13ad472189e8901881822851ea13705c900cc45ee85fd31710ca980d1857acfd64a9458513c15acaf2e3c1c41a9b136d618c0278a2338d61fc7b0ee1527f358e960334dd429dcd3bbc39304df1ba269c219a4cb2f2497b22ea9bbd1149ca24a7220422c499866444fbfb8469abbc221b2929a9d84a207c9dfa7b5066dc109383290331da4edb587f7f1aace204d1b5e87cf40d5e0275b0bf65e301fff15ef68da9a68d93c734efe1418ef0285bc965ff4e2955bc003f0412af3ceb90862797421de8dd16f4645130787d972d7d459f058841f4926085fa57ff3e8e3a66f138b6283c9394cd35c12c0ddd19e7206129d90a4cdb2e03ac96e74805d05b6f30f335ed32dd7b675732e654d8c25da1f28c9aaf9df0accb5b98a7cc9f8c7e7f0198f4f87970856af2f8040ef932ae49d380e190ee11813bfcac9f4aeb4ff8d5d4922efa591cec403802d532d152feda4283430a4e8c91594383417dbce8835753421de287ca0ac8749b800e93bf9419d186907e9c3c474d0b55da87d473624d1fb6ab4fd8073ddef50fc18b118c4d28f30239a5f46eb88595d378d8edd19e509407a5a2062a04fb1170321ddb54c7998fca585d1f00ca6cde2d9125d28de83cb67c1577ec4e2852a8b38eb5a9de075cacc5d8eede416a6a3c29cca1663b473df0a28db25281951ef41b1014cff4bc9494f9eaf922cedf9dd63749a8e3cddae9dfd7be7b7ba30421804b73e25f24bfb1cd117293adf3161a682e95e9a2ca20c475526dc7d7bc1655f72b9548ad044a9e95f6a08bc501db5178a5fba2fecb61750228ed863c761e99ed79c58ae5712016f9bd1c1ae14ca8ea1a7e8311dadb1b043b60215eaaca8af8347a2939cca8d18a4c5a09fba794f58ecb7d17e02c9083501fb1388a50dd695ff58ae3767d924eb8620045dfb1c77fbfdc9b11d607235404941d7164a5d582db2158b5b3467211f2e65624c660ade300de35af64186d34f3256a368325c3f0fa1765e3c379f68194f1c0210db15b07993d48528a2776862dc43b0a83cfa94590dc79bde1e87887b0db4ce3d0a2e9decd43e88650e66c1f1acc938ad1f43ac0116d56013c4d571ae7ba0814c222340ed68a3850529677d5031ce5e3e639f8996ddfa00193f90c5950e22d339d678ff4b233ff249b6846763cce8cf2d3bdcf4bfd8366ad18cda62090f584fa6ea244b77b9e3fc154a3eaa4cd75502d46d936ec2254ef938e5a27a859ebdf8a90cf9d0c56fad06582f62afe05853ab8f35461f39e58dd972959b92c4362b86732945a3f55f1e67e55ad04125b365dbd0b4d30a10be12cc961077a818c0ed3badf40ad06a35583e806c23629a924b3fe65b48705cda9cda959443f405a0852f4e51a6391e7aaa20cf15668562a134c633fcf7a4b9f6c3c990ff15fe0236c34eb28035455df537fe95ae0904f7d675e4f15b4d823733fe53fa931b2c2afd3f19783d8d08637f54f1723129f672256dcf0866f35eb5e6fd1d1c9c7dbb92c7e433ffc0f3f899f47019647751561a443537e2ec5085aff00db4719aea8aef11c2266648fe73def4efa4b333c990b1d1f15d0141d65df01af666624065615894e9c6a5de5f26e1481e0b011f5c13fb5413898257d2e160b8d3fcf80add56f08fb8ff2807c75bb80b017ae20c4a39002b5f04b9c0b2c0b91062b783e865f44ebbfcee5ae40e4578be488551bfe608b4280c7bf10011ba32f801423dc842b229a85b408aa262d7274c482327961b522823e86f996fa1d370a9561974b39ba9341db6da499d2e074badbd6184b583cbd7a8906064c33d34bbace24482c22f82ae62f88b2041f4a907ddeba33fa6c90e9ab1a0350207bf45b4927e0d4911bbd0136e9df0819b6902fcc5c76eee27bc360e0dbcaef24618ee4eebcc3874f661d418095abcf69f236e9c52e204558b7f414a200e70633a20897ea7a19aaaa92c2ff2a8998d1a4a2cad9afa93e335529acd84c819a7887b478cba3d334d7e26b111c2138b16570fe0403af9f12ce79eec71669d419775c75fdff48fed9e500c05f2fc695b4156a066e4587179dc08e10d2a5b3702955b92649c4310d54b5c12e67bb6c4a17041efa600ded233f772d19b19fdd520b324a9232d504b7a9aa36897b49477f9679c63d398c043839fa416574070ff4fddc445964b69d4f2919419d5cb41f422a4fae6bdb45b4822f3a8b9c33f19549d957096949c007671161d81c8cd8a160bfcac1c11bf964ce16d844fd7c8da3629f9647c0dc68f0168d0f13af14683cd21ec2a63309b967f27db19a0734d15e3b766f8235a944f55590da6da2b2d12a6afece06fdb902234389904628edc55c35f74218871bbf3b110acb85f687636d84d03751c0cd91512a85fd486229032d54685c52938dc232a00fd8e283e11982d670c55e0e33a25ac095b732362697a32d4c80e8040dd99bca7ed6e41f0f7432e90973e41e52de261ca40de80e4f96595c12cacf7a8ae3e4e9dcddfb913eb1f4387fe3403f10f7f3d58572e66e2980a4166c4af53ca4b976071718c72554fa6a6b985675e96514cd26582f503a9320748d5f191037486b3b7a059efdb41a57de3131986a37863d655f4ff86d7329d15c2bc2e7c22c025b2422ec5531d2badebbfdd63b03866645c0f075da2e10daea6c6230ac36147fead76f79f4091a31fc8227e9b6740ffb5c40624c49dde36e3b2a15aede99a03abb5ab664d23958d38a7156474eb3e5fb38d43ea10d70a9928796ec01cdc21fc1e271041d671a4098205e1126bb37ee37a75935b3cf6d42d7ceb5b39df1f8172fa007494dd9a9f13c84c3d5f3115e327856c1b3c819d798a31d34516ad1c33996db8cb26106f4cd43aa3dc394996f758ab163288d5e680079f25e77d634e1f8f0624d7531375d8c2fc1e13b96fc42d0f0ad342a049704155e55f01184f44306be0d49eb8fe6eeb7a74c1080878a029b11cf054c018b16d6b9b1bc86b406564afcd749f283cd0128b78fc1f700dc7a4d499dcd2d71433e1a41b2bea930673f68e2045c9366be9357d543df45ea4f8219d27a72adce06ed94286b8809142db39b7a004eb0b1cc7d78b6f8b1728375d9c4176c09781f9909d5e463f7bdb1dcda88c79b954b06e6a045d417c776fc17cda18e3352bdd1d41694415a54c61c8bb0a40b5f01bbe7ac009a1dd2f44cdf0050564f86e0d6cac9f8213739b60e23eda8b05baba7b8937bb18c4af46033942a4dfe8e565d4b3afba4b94df19bbe9ebe6b581cce85e08e2e75f03bd23668e0cad7cfc955dad407a5ec08c87155021ad1f0d1eae0f960c5ffd05b20753b2cce26bb71730de72e6cf5647ce240ba0ada9f50276b7fb8ea53518acf938fec6864191fd8aab06ddedab020a92703c7ac013bfba9597f2254fdb57b773d73485392a3022d6078fef0ab89773aa2350f18103ecd7038cdcd68bb89cf8bde169320789026eef9ddff9aee88eac8c1f708faf4906c54d029278d14ada3ac6e3a4f0cb9a1e2f20ed24d57714cd76318ce8f7e1507055de8f887dd37aa8b79471be63d09a9b1e0c69bd9de54f11d64fa4448bce28e283bb5c646b38e3e0d8872d878805257edce855959c8a508b1426ccb10a2e3def5111c164946215e6cd81df12743c6a127f9d558aa445638c62a699be0975e722712753885e34ba23b9b4880577c4049b9004c1e31138c45c63bb7f788e10974eab9c081ca2510e570499d5ba0b23b34d3985f7db22513688f3a687657e8562c75a220fd7dd768cacbd36bb4c6e09c1e53f82af2a3567c7cddee378913e22cd21f741853d5b807868d36e6888b75f397824c41cc254106319fd34465d203b700460b2597c20066ab4d1db735776a617dc05096f4cdf5d92f8f6c750f3bd417f98e391e70dd3cb052069fe04a8753cb36e9d43ed77e9525e525d1d4666fc781d4d308452d4cab24a8ba636aa0c3f2dd7b9900b92d83f8450d967a2fe6e966efd1567678722e946ae527304a1ff62026b6162f26e03ca33f990bf64b38c7860584260b26e013ba2e2d086007a33d1543479cc93bd19c7537c75cd27c86b1144d3f2618f521dc1c74a01801e1848a41539cd3aee715a0b99988cc3734285ba01143e8e9728b3d4301d0f69e457082a7908b521801add55893bb7f1beae431ba30fc9318abf42544d3782d93262b8c03e8e426c3b9346417b79e9335a8f6c7713864b223d5b64ec9d9af689efcff18e61abb79faefc64ed3f8bcbd3052ada3940a1ab97d3ff7299294141f2156cb65eff133690a32d807845e703233bbba407ce49bb08747023a12dff6e21519f9bc03e2893034b3b3bea9382366e11bbd9e8cd9ab43ca512297466bd0eba490e16e4c18de53680c5895f837dc248a32c2484551ea9aed11cee3297af2bbb6c57f43253aa963725b0e8082d0b5e744cf2b9ea72d356c23de6f2d7cc925f28a9a96109c18517940ead6a3c4904b8cbfce8866b5ce285c8ab4281727d8044b0e67caa8e1ee153e9433dcacffca87f8628f20f39a0d5db43307f1b7452cf2217ed86b3612fec6e24ba8a695fa4ce7df7172269a805fb875c87699ced62f456d1708c0832f3a4e79ec27bc3d5812fa5d0c1ed250ad1336b176e9ca052dbcb9379c8a080feae36917641b49928f10e44afa122beac14359a98eecbd8d55ada98520a71e031333d50b2c445d95ad0218ad3529cc25648994b53f1dbd0e703967fac56d5b1085e69ab06f5c0a81d4350c8d7453c13a45af1444bbf0ec4fb7b6a534f4a6a5558b37385721e421f2305b66192ccc466c0ba0759ab526de919ab35b62bf6d0af6d0878b00685a90ffdccb544a867990b7751a1809eac850ee1839eadffdfa58f82d8bb4bfe7d59da28ebb0f5701e094557112348a0359f9147e575ae0d6f056275a7dccb33f3cb05c7f42fd1ddfbab67c6532601eb7d1596b5da7df84db5c15b5fadf31b246430401b48a51d83dbfb8fc9ce75f0c28840f6ec16e5033e2752996563252541eccfd1c9132896bb53f11da813e71c20d8a07be1ca21167275b7dc9516c65596562276dc08eb4227c58934b507f2424972748671947bb65199060051cb1204a07508f64c574fceed77c1e0a1bf8a37a83d150ba8f03ffa4cf2058e7b9190bee11426585942a9b599acc69982c307acddd2fb8d9bad562891a099b7f0df36883430ad06e1d400b9cf24e2320cb0f1d7006422edf8341af2083410d7ece1f8625879ce0d10cc7155b2d39106fe11feb10342b2e754ce0325890207d35ad525a41346e3d45dd7db8d0b3ffa75595ad1c8d8aa650ced380dbb0d1b3a36cb5b2db6f642a21d45c5b1c58373f750c7ad08c79d989693633992695c683e1ed9dc40e9a4568e25a877078d3e6e4df9d11b908a5c0dab73ff52dfcc5dcdd39bb7eb586dd67a2333d3e25a0f9c086ef9344730ce16cb026e49848273cdf452c9df9fd7681b50d13b6f894157f0abddea64dd2aa839fecead4775e11e9db8e30240ff48967761832ddb0e345da3b936cf2afaef65e48fc4ea7b100a702a7689c3995f02a3954f6b66e4d4aac8eb9d6075b32bebf16648b251a9b88bedb79605e50c20330d26ccc524ed58f4c01641befcaa856f77f54b080030297104933ffb7633e2bbdf23d97044afec48d3bab7f8eb6d78106af458bf1ebcfa139f6adf9e6d1fd1634b77c0733ce4701d5d49f0f231f99948bfea5c3d3d18b7d7f7e56fadd9e0a5bd826b1ac469fc2a74e65b8c5c69344677a7268a55cbc9965a40017d7d570cbf86e8e591942014f9c2a5ffac6bab404f23a6dfd9ce343637b049cb7bd9d713d056441ab529939e9db3713b3a3c8e8d82cb58f86d4c6df3614edebd750efebaee857f1aa10a96daabf0a52c797abc787ef4b2fe38ebc512ec92d43bc1856b19eaf3bbcaee25bcc0c781caa9d2fbb26a8f0837f3cb2aae75c5284d244271130a1b6938a3229b3cb8ffe49b8083b08c9f898dff274a304feabae8908e18d0547eea0e3e519854de022766a16975d74bb67cd282ab124f3618bf1dd7e36ef7d68337ec750cb2d3f68f34d99d8e73938b07aed1c52a8d0a2fae4360ec881e294c86b91f164075c6c3ebbf95829f0c61f5d00f12786c337ebc4cebe5f615b7e26763950a3f47aa02c5ac25ea52d93441092470c6f8380e0887e307a0d004849c21778f5d7da86b5a00822c11430e3e9d255064d98c45922d1edaf52e621aaa12db04b6d5cd4bda78ef8a17142d6f61c8d508813a0aeb98074f18c853e0c7d7c73529ac0233658b69c8a4b3cbbbca6f27ac80af40e84f406e29a28749904089528850b1a3fe47d65e0caa7a2eb39493d252192ff3dfa551ddaeaee953a41231b1a989a048a222a7b9c8f44c3d0872588125289af301ca69b10bef4ebead1936d67368d5f4e583b77f4a0ca2e7a846f9d9a5559835e511ab76ec274c98c4cb8f42c8c04b9b57be0db3a058908059b1c8c6a4f71c73c76510df24532547a05364c32f902a1d0f554fc1ff30f99c38172842133bfe29167d9c129b1c3427398bc87b5c22675ddaaab78a877a3d34e586a15b1dd0f976b95302aef4503cfcee11deb2598f5edd73fb018d13f9fc4b990f65043d7319c7518d386967a54a41d9eb49b87da046ea1ef97a0ce18e134c3857622f9ab8697e8300a6fbc05254ee73a160cd6b4d7cd35e1c1848a2fef954fa9c1487240d0d85fb0605e0edd588da0fca54c3dc1fb14cb3abbf06fd82fbb33a9862aed19a529724f51bfa3ba542c82f953dc54e527bea75a821ff915c71accc5cfd0f52ca6cd7d2888f0e36789c266fd3e7b2eee02697aef516ca715ba18b799a981383b17e7101aaa06403b6f60e6f8545f542d9f1d082dbd322a46da971e3bbf2d7ba03daec4ab352fa15944b9ccf87171263ac7b904aa92d6b2b1090bb51ed0ef07fb9ce2ac7e6272e9f627f6b60af3b9ace4892524b84427c4e4324b74c353ab8f8d5d62e8b02b22a33a7457866aeb92239a54aa92e50d157df12ec71da97d83a1ce6ce3c4d61803ca99876cbbe5c4dc767cb7c89c540dd6e361d84a0e2e79ac22b818258317185a98da9d58bbe5bc00b7a2f613411f07528056d80b13be548b951f575636c7e0e84d388187b8f8beb425ff3f1112a9f3eaa6ac2de6d07f3800e37521e4b9ac4e297ecd9eca9490d803f5fd7bc057eb03906732481c4efe7aacc843add338e12532caec5e7787011ac3117e55df76a95d3cfe515484fdb31adf714d1c912ba43e85422b67d22de310f9d9b2090bd0c4e93a28c2c49d95dacc212aa393a9d566c1569cad57e57935b736b6b6329d91b2530ffb87128acc87ef7b375030df78e2ff6a3871639d0b620c1321a0c6aa57858df2a6b31d9ca411ee85d24e8113d8b4bb81cab95067d66f24fe726d5017a392a545e14d11b263a91ecf50e562fbf7018ec809953f57c100bbd5feb8e69b34bd6482ebdeb222666562eb497383223ca50db0e74f1cc875377ce64b34ce3f96a5cae11c38429c1f186733645d2190fdd51a6d3ee1ec30215e87307899f5e297bd8159e89e2f0e321ce6d8f514ea82cbb322f1a30ab8bc228ef86803812476d6788e912147810e7a92f8bf995211d6d57d023a65b3c0694a8035ac4028d5930d2324a07adcf97b456f234069780d62b2f25133ab5058e271262b6d9afca066283a50e601c3875ede48e20863016cfbfa38a61de1100bdd7bb4439f40175be7a210d1de6b056f621bc1094316d25217b6f42e49652a69452ee0871085e084538cf983576805a8cb0bca23b684a6583c6ba83b0068e0fa0356660029baa7e40532d458d20d06fe346a5a2aca22a9a69a13ea8950550c5a8767c63dd180685cb16542081831942a0200b133857f000680758ae609157b29418c8268828d8c002cb1533e8e2c462f9818f94336a3843862fae0c41af34b1e21f2e62777754630c56238b1a5a541d7581d4f8510d958678d7cabb15064cd913e1df6ec93e77ab12bfa95b95d6e52a1327a4f38e7f1fc9285b0bd005e2a25349a80bc4a5c787aafc6cbf5f752584ae6b7f47c7782e86fd43e8f773a76405df739654c28ffa0caceb95a8d8e6699ce555f9b0836108ea613e03eba2ce920fd329999f2ac77f34d1b52ed47f330837b78a5fc4593276300ca1df9f8175097196fcee94d06e9d65e37afa3692bbd5906e2544c7af86a41ee6530ff3eceaae4a09a86c4fe5f4eb5a452a84764ad8c5df6fe3fa5648c8f68e3dbf7a6647d1ebf592214acbecc86722a494b267a6e53b16bda7653e17aaf2e53b8f7c2742e6a07e5a8c31eae86e743cfd1fed422db3406e34a9f2bd8a96214095bf71ab98a5b817fdd467aca5381bd76e4084d015f6a717e13318eea543888e6e35647b1dbf75aeb33dbbb621a70e080839158957f8227455e2536e35c47788b0ebf4ec3af1cb6756d8d35f974cbd084f44c7d36e097d1d2f820e117e898e4fa57e5d9fbd5c684fbe08dc0bce929f8247f4e53b8fcbd7ba6f66dd372546391ddc3a0be31710e8d695909b7e7e98ca15f539de51dd0acb413fc7e7e894b08fb3e4a36c5c198aa31ccf0aeb5961a81f421ff5d8a33a2555b06e080ad5318eb3e42b914f3bf97296fc13bfaa0f61bd51c960e8578dbf311f23d9ec9f4e9f754a60fe94bd92d36fdd6a6d5ccdd164dc0f1a9a8939771d5b0dca3deccc0baa0aa1f610320d9080a8901f053b33f70beca054f8d99edef44450bf754bb647bda9432de977bd89f34effbf6ab8eadf13fc0d22bde033acb32cf870420c76bedd6afff436aead3bfd90ad5bed677ffad30fc9fef443b48779ed611e665dceeba7d53e12ae2bff21a6df5e3e9fb8d5fef6a65f524576434cbf3d0cb7da6ee51d064cbf3d1153b7eaeea3aeed89b0ce8eebf4d10dbada47fdbab6473d91ed51dd922a43e89f7e498edf9ec8e9518fea9650530e8e875e09ea6d5c19e550dccf6a1f06d5ad96fe10d4d3dfa79d922adb0da10f433bde711644e9380b36eae9fb497e46517457a76eeb96667fe6d4b88c33752d6721956c64a38200b93d62dacb0d880eec67293b6928daf2d1ffd1386fcd60b8ed0e66bb65c0464a8f0c6eb8608a2a3d10c3b5cd327d735bf7691f4402c3f16e9f924adfb9235acda183a392fa1c1c159c77a53aaf59f06138ae710342b1a05a8473bd4dabdb33128d83704b524dcfdef6bea900abf6bb69dda7a49a7e5301565397a24e687b104208e1bb13554bca805f3cc3634888b3fa7f5a3434b554d56aea924b82440b213bd46ab55abd0b230ce474e812a3c196e0625a6208b55ffbeeeeee6eec890eb55ffb6e6c623242efeede9203ebc0031a5dd068039be148733721dc918242a1c61d49d5b843109bb0bd9effc1dab3e4d0a1fb43a11f6c6d7e67ffcdd24bd8736ea9fb545a659f12c2cfff48aa461be7c1d388d7521a8fba4069fca0522e125017288d26ea494846d808a80bb4058daa9571850d4f125c30d18406547ed0d140196a30b9a28c38aec8808ae3805517280d1dea89892c38f8611aa02ed01629aaa9878ce6c16a01a80bd4065255d5054283c98fd17b77cb08fb8c12ea02a991031a30f01dfcc02953025535d20f7ffaf4f0ecb4d79ce38cd35e2751bdd05ebf7c28e4a686bd828b0db648c38b103038c3256ba84f845850840c8a70e205aed841eedba2faa3f989fa794ed46f7f9aa8df123151bf455aa27e8ce35395a82b9f279e7082c3e4ca14d7f7362d9802891ddc9002280a2c5c1f8da7039fa11adad0e1810c2ed8b9c00c2ed8482289239f282eefbe3dea1c8ed0e20344184f1c110315446c9811031d5cc003970c0ebc70828a1b8ce8010fae246af370041837c8a2c7e789abddb0810d23ac204afa018afd011757fcf8400862bc61e482c0900c7a6cf0e135861457c7a193041b39b0f1e426c9050120789062441c5c20d1c5b55c0c018412517060850c41ae5e377ee8c2881ac21872a283ab6d6c08e286346e9c34f9c2c64fa5b0311d5952c540d95837b641c849e20a285d686012061339c0410a317eb0010e2636b08244edeeee6602a563527d3776456251fb352bb5bbbbbbbb9bfddb83da0f998841edfeef6e6c62adee09a4b042cb7cfbb3a509b90548f5abba405b76b6e460da22833520d29da1c3532a954a6f53e72ccdb9b35d8b6c4544099fd1e3327de99170e5c08a7f041f9792117c5cd9979e6bc64d1fd0af94b6960564c651f5ea0299f1c419387581cc48aa3dea029991535b5bc3b5e5a363032aa4209105970a6035cb5833aa1f9286dc060466b35ba5b075be4d4df269359aa6a04066e054f9bbb13fc6d954e6b27009fe91831cc4dabbd89185404b1432bc6c01b1802be3cfbeebbbbc310f1ecc23e8c951651e3cb8de0d0886f1e031744656c44f6e5dcc759d5cbb5a0d2a646b44108ab5619684e52486c921213d407c05be8cdc4d4804016a7f1681e8e437d50522e355f97b76376f40e6ec21db986f7f22b0a71a834077ec4000015666623e4af01ddd104e0cfaa9c4a3b502dcb1e32736219a935295eadff39887797c66e7a4f49f87a7a7654c446c4dc979309ec9c33c59abe56126f7cf7c602b03dfebf4f77fe934d8197e2dabfff41f09f5639ead216159fe030f2fc134ec4c9166f54f272f29b57f3788da5f646bb22c51bfa9fba69c8ef1481963f4ff08a39fe4afea633c1e5bb37dcd027a6025dfb4cc24b720b09aba12c73713737e9d60ea18875faf9bd83458a2f63b50edc778fa8bf80cbf88885e44ce2f1a1a1a9a8961250c2b61ffa327c6c3a3350c1bbee33f4caa7ad3d238ab5fa3f93795683855756e6b91ad691784dc571a211bd819138c515f4725d396f54693d1b8ca719cd5cfae6fd6ee8520a70e0295cf3c5a2f38d6130adff55dc8f0b5f66075c8ee34a0fea495d6eb2120104eac6a0f51a721429c2527b644adb5a2b55a0abf5fc7ca64df3fc2ca98dcc74721c735336d9bc7a3bd567b2b0819f242aba5f5bc8107e10e682f9f4d6013f83397c236d067ad99fd7f74a3aa43c8c1c66af3f65808071115495787a17675d23755f699bcab4a4c7cf84dfd278db3f6e1ca1ae807177eb712027f812a4cf56620641bf36154e6f7ab6f7a662e4edcd22c8f473df026ee1c9192aa7fece5a8fa8cdffc1dbbe587eca565fa75d3328c15794f14386e58a0f07d81dee05237d23c2702facd4a97a7800207698a4601924462a4faf5ab93d615a5a09005679289d43df4145aaa0bf486193cbc91c553a5289d400a2b5015d5ea02bdc1458e125e004108072d4637647c80ca8f0f8200038e2d5c1c41d18ea4e490e2e8461e35a9fd1a77bfb105186ff4a0f6cf377e2a4c5da0378a7871a9728594993d6ad0610d31053f9b0a697f6903024b524bb54cd4680a769f177f6a31f5eb34fea7c5971df55cebd6284ca5b454565a4d6b195982f33faed33b2d8b9a15dc7d5e4d69b3e754a9b04ea3b19f8f784d32dfdff676b3623a54837e305aa11f7487b34b69d0d571031257b059a900570ebb950a301cf1aa8d1b6553c28690217777f7063b28a58c51ca1821943262104229b11865eca8cc499fd21e228411059a1863b4824666e66e5e2fc618638c181ccd31b5999b87d7ddddbc1e645f3f75b7db03c20a5f50061468562805b9037daae59091717f31959999998a54b5173046082184ce9037154a951f9e60b7402a84018c11a240032184a5df529742b3fc7930238411c2395b116211eb60905076bc5e5c4194efb26380b12b95761a117f1bc2eeee86eb456632664945c2431c628c58c45adbc77e4bbf92d73399669f4ca6aee55fe284743e3c9943d7e36f25e97cdb3a12cd52a9c4ed52d81e878a7abf4232da7aadea6f2d4da7b0829096995e3ffc5ea85c21431d36421851a08931c6f8fd332b54416305bec6cf3a763044864ae00a6a542156af31861ab9ae700302638c55f87c5586ad8b86e6c70a4540e0ee2e23e4e1b16b72bbace68e0af60e5f4e46b63133337bff4c68c67faa0b489276927eeab745493932429a96f9e6c7505068198e024208a960df9195c21085ffb55eafde12f891a86a5c016f2ac4da1b0bbd9e54416d15240b10bec30e06f84866f56f496d871d770c91db56cbf8fbf056cb7017d351c1de9b55c4397288074b0d0d85126540c1a4bb53aa1d28f8a061207429f28143bb2e50973064843d81145668f15ee9e2832eeae7dd08d5f8e00419527688a4d040c5141ca8a6b4000252acf8e098a90423c4268d115db4f051ea82c59c2655f7185dae00ea223424a58db28d99e98c47ed2eb283476de81cb3a3ff9bfbd444bfd048924053a9549a73ceb949467cb458c745de640b1bf111171d7901490fc5254a1fe75437994c2653aa65e0cf308fb376b4cc0de3b4cc93de69963f977ece1f6d327d6632994c26934dbca15fef7cd91efe9106fa398e476999cfbfe0b48c3f69991cff22447b3b3b260eb6b7a5c9794e7b3132cf39e79c1f7cac731c2ee85ca3fa79941d7fe2398e0391a01f4fc1a9de2c047c95aac8b69dae0b683fefe874e34077e630283f971199b51a3f08a1c7e8dd77445b450d462ee6e37f0d61e4764009a39cf3bf18e547d9a9222d0d41c352733ef69f7cf8998413ce4e4587405bc218bb4f840abb235af5cea6627148293f6bcdf93ff7da5f8cd8d66cfc1f2d2157aa192f2fc3538c692ff21c1e0afccfdddd6140022b95d78a08bbe2b32b76389a2b3e75d6feca9feb4a0554f547552a2a88dd648dbd2055f959f71465e113e42b72f7f009dc411d2ec188ade90efab03da476b40f73b6a68f600e3d47474747473d3d3ddf3f1afaf43b4ef778cfd6602fdf717c667bf97e83958140eb15f9ccd6c9ffa6d67d3c7068d67d73527a9adda752155559b10efe6c0ff912ca0775fad5afc6c9a2e8b4cc7cf9dd3bde3cd9e4387b380548c602f62558e50ba8e9e114284d9a6f15c0bed456da932b2150c759f28baafcad500cda3eddd31ec6434ce4332b22db9ffed40d6d692e495b5374946d9c12d42f99617b54b74229d91eb57552bacfbafb605262eec33b3c3d3e3f42482f24819cc33af2e7470a428ab4e0820908fa411d9f2a9faade3df92ddf1ae61352afbadf50fec6d9b8e0cf431d873c12ea40a46d0c1ad8d997ba52a9542a954a5996654c544a6059501237643e92f6985a1f99383101cb50f5b7e6bbd0c9899e93d2cc33e738ff493d34b8a04ff4a8fdf3f94dcfad9a7959966599a9d33a7844b9ce0eebbe96ec6207bd6b1d71649205b4943d3b8490abd3f67c4a4e859f1579911f399227c117c4f197f36c8d3f7c7f390d56c6bd580f7acf7faa8ffe3779f0a89fbfe69c18a552a5ea2014b489f884eebcbfd81aefdc88ed9c687b40289ff72425f5ab713aa7757a47486888a8e808897596797a7c7ef6c8851792ec0f0ee7d0d0fc484188cb04046d9e9e0a7f52d5c3f75a5bc3362ef83dd43cde3efba99a2707dbc95e75dfc8f56d14273840dd875acadb314ba83b53378dda33451050f7190624f44bed5fb225ecee90460e114e91223f4a83a6e5ccb5e71d95d510d4972f5fbeb8e27feb4589fc2533c497dd8a08261febaaaca6263bba0989712a595677f7d1ea25ab61e2507b87dabf6459ac316067d6f5802b4ab6c7c780168ab4d7fd9e85625b5a091a9f6957fc2c46114b19c05efe8f5e52a23eb304cb4a533e36bb95ada1f6624f38c19eb0aac07cecbb06a1f1a4925037e80ca49a416dfbbfacfacef8b2fa61f6a75f07cd7470ec3a712d67d178304f4fdf1b90d3e9746a2143712bec73bc8debc479394ea7d6a93b71eb42adcb7d280cedde59fc58275940e3c32f490cfbed4b22603a300c85698f658f991e4b3d96e331ec7fecccca609e7cf963d0ee14d7729644aaf235ce4b952f420ef93aa87c18291fc5e5a035aba813b79eb324ed667bf27d0cda3fe726c49353cad9498c4d75bfc5439b5fb34d39d0807a5da0337c62da3852d5053a438d36a6fc6c034ae567de2ebc35caa8ae05d2126ce4547f151b5a7e66041fd75c62e6a024060e25eeb144cf1d7a12d0069e6a42dd202648355b0bd00d62f253bdba414c746a1093a19a55f8d96726f8a6ffd82807ebe0149f9ee37f0e431ff5dc316a6321abb13b6d41b48f8b54fe2d62b46d4056cb32ed7784cf32eeb68ffc901fc67dc80fe3fff088a437cec8fc182a2f09ccbb2474464a3f59d83ecb878484e7df8d85adfbbace27a1fbba96d8a8ee08937999999961c7fb6df7415ad96d94c4c0f15b523f7f246d843f86badce72a782ded167feb96fbf8684de0f5e38d85af2b731b1224dd7d6c54b7f4b0fb8e3c2c7546f6f9618410c22e95baef088490fdb71a12fec302f09facabff62cd0e017c6fcd009e9fb78600ff16981d67e93e6ebb55f79f3dff769f0afccb02ff7e919629e213f6e3f63f7ce34c57e8c746740bb21f3b23f1b5476d2cc0ec555c00c8a72d086f1b0b5ae57f865b804ceb281ad771312cba3cb720dacf776e9fe34cff1ccc1380a33f000ef502e044f81ddce9575cea03c0e97812b81ccf9cd6155175230000000000c067ad018073decebf23da7764eb8c3c640bc487dde7333111000f806e557a7f67f591235add5efb0e6eef6f7a11b8dd1e294ec77e8e7d188e7228aeb7c7fe8983db63bb0f89cf2d087c235bf7d8c68256e1fff6bd691d8c9f994c5b4d2f3720a68fe95854fef731865b2c33748d6afc0e74dc8f5f84b3f0095c63d724c8906d5be9a94564db31f60f9f103b2e0ada1aef38cbf680af038d395e7579a8ff8e51f49c85ef3af07d071ecdee3b416d618bf8c759f04befee55fe812f61ec3e55bf9c051f4a85ceb98e15daef51da8352c638e79c13eb3c0708f4f31ccfe919e882109251e439738b2a8cdd4773620ea6c5d4ba77bd6137b5d07e9a8547d0fdcf47ed2e2a4163f8054ca0a05bd30e5743a41c825167f166302b0a2c1094292b2213fbf9eb5a11312d916ffa7521e9ee67ce88772b156a3f92aef1dd485723fefdce2d100bbcd4e64c80ad8868a6d77e5d935b115982bd2c923dd6ad8660a5c764fb143175ab2172bed4baeef937652acc05b5fca854fdd33ffdc35d143b3e117588f4559d7386b8041db6863bce627b342aea606bbcfba23214f657ecd91ef106f1074aed256a7f0e77aa9d44fde53330c96152c4d91e9d1375f804fffea883286567188c8d427c82774cc42653aba5000514a000ab958e216751a1fe1f4ceaa9df2f976f9192766b27c557c4e1136052ed17fca63d22ea38fe6aafbf88becfc41c67f5cbff54ededd58f8762cea431a7b6ec18c9598d04fd2216b55f3bacc4a15213d91e8072dd89e986104208ddbf23a9d87d7becfeef5bdd4f6b4428e8e7afade9cadfd25eeb9464dd6a88b61ab229691c287a5c9b8d0bf5362e7e1a9f590d5172fa8c1fc5b58fb3b8359d5505e5d140a0df57ce348e72aa2db4b9b41704a43621f5cc1ab990dacbfc52669a826e7505770bb2d5ded21e1bd52e6aa309a4b118d1af9fbfb0547e7ff19bbaa0273674a1ef33ad2e3b92a269afddcd5b333f557ac374859abeb401e93775d56584deef3d0365d6774c6deaa293d353f9a736a9925209c37e38c6fcdaa421a02f5880be6cf11892046e48f2a283ba1b10acfb5addbd88eae73a41af21170226d105fa32a57eaeb3d5757a765c889e591752f51c9c9d96f97cd138aafc3ea565d885a8fc8ed3336bdaa13020a1b5bb00614be07f521768083e37fba56690f9a55ada804819a45bc330acb7205c4b9fb93637d314b4f4dbde6c6f0bb2eb953e835b90dd1ef34bdd6e0fec4d3974765fbfe9b1ee877792f6b8b7205c5aa63b7eb5c79fd332ded18e23b6806adf70500cd361370a740938a91ae9979f3587611b0550b5b9e440bf4de252f9fbc767b6e7a1d85f124ac280bbb68e857c4d5ce4baaf85fc35ce0787a4bd9581a8eaf06b836418aafc4a5a865d279b1f27c110242b7114c86ac929d01f6d6ac7ae7b41abeb53dae3142c8b5f86ca9c033327d91eec3baed39e8d0e8ff63687aef75025980861227934f1da6bd5673736fcb0a10a97f2a50f981261040861103405d7523b62786447308f9c75c128ff638003766c0fffe7136427802dc1df2101aaffd755d7da05358803fdfee7a4b41b725e15de7feffdf74328236ebc0821a1ea8368c8819daa3d56a9da7be9032a77b6a7b5cc067168ff7215bba98041c89b92724b5d202f51aabfaa2e101c4635ebd99e4de5170296ba40713c0182c34bfd2f5fbe0cc1a515fd190b542aa221eea3a32317b85df0192e4a3a62a2864ee89c94aa54ffd47f201afa54ad3dc1ff63c03ee45a447c82770c60077cf179f5bb5dbf3d78207267c51e84a88268484a1142e28ffc6ca567b691b638aaa2288aba444e54ec497f7ff3f4c48e8a787a26111111d1a740e4339eb3fae954d18fdd43a142c497ffaf521dc9c83947bcc3d3533a7d3643de06b022851562b0424c83427b0d048dd0a4e98eee2e9d75bcf6bc4cd5de0eea537e7ad455d087089da1f30ba8f60d3b7eefb8fb5499f7b5b44ed52c7ed8ac4c16d9a1d8bbbb3b26242424b444af16a217e921d06f0aa9d8a334953b3601d2c85c403fcec1d232feee3ea7fbe731e7700ee7708ecf505f67e5389d1306b48ada2ef840a172f78f2ee787cfb08c10eb3807eac039ee42ecd8dddb1e45a72c66407a8c2bc1f91f84104efe164bfd8e6893fbe25cd3fe9c70fe8f36cdd2c7e5e29732ac5b2e617ee4b8a84618316e2b8c116323eeb3a98b612f39ae34bc7893117241d6973651a4fb8e684133140179b1c2469ca508673162a3296c147da041e1c7045245380b1b49194426fa879939c8d4bc16cdbbd632333b2ef85acb40adc3a0ebeefe4f9ca6e5fd4e6059fd2a8f220ae9460d465a6aecbe07810b472008de098f7472e58c314c5728fc865364b365be8710ee6ecf30dd7777f7477e9491c9bb526d027f77413fad7e0743ac4860ddef9ee370f70132f7c3b9ad605361a9c2ce8f6835c66653a11d72bedb17f61bece5f3634cde55653fb5fffd9f7729baa36598d9c59fa2bcddfcd89d069377c549b6b5c88ada84f62568d1d6b8184546f3a8f66ba92aa87f6f0703d78f8be6eef322e1222e7229e8b75c92781a9ef6022bb59faa5a559cc680b618b5dfe3d19ae2a5f6fb40a15f4543e2c36f2167754c7b5fcb9fd0f7f1315d14050efa4d26a2f0e99cd6b9a1dfacae04ed577b73e6e0e8f4939c294fa24c81026631bf4c4d0a96fd61e65c28837e734e7f7eada1d5af842fc60b92c253fba9caddab4fa67c9d83daffb595293e18edf0d0fea9dc38fde40d0a7fba68f99053fb7da0b0a2127f5df023b72dcad36a0d7993a01e5aaaf6e01a60d04f6392c97e9a4a0d817eda0cf47b1a1ad5fe7e35410bd5bda382f3ae77a165be8f09d2b152fb41b085ca8e9887ed6d510b2df3a940a0da218408541f2a2fb57f474c5cd57b4169ba567b5106faa96acfc4efcf98815049b5d72cee545fabbf56ede5ee9efa4841cff2f579f8a9fd313c98b9f7bad095ff56ef3f260cfadb590ffff3845d40c42f9f59001252941d907a78b0f0e121a2670727ac3821876a7ffb68b8f017b61076a01fe4e91b96d59f434f0f3eb581a8fd3cdb0303510c2591ddc4d7a2b40953da847e0903fa69fe05fd3a47274a949c1fa6e44489b2c34b67c78a9d2ed94d95f84cde251f32339bd0efcf79ed75bbb8fb8e709297853aaba94c67411efa6d51cfcc1f2d1481c0aba2f6f3f071435b706ed68cb578e381ed4103fdbc22315a1ed89aad409121bd4342867c4c7c830645d9019fc9bbe66319866118e6df11d9a95e8c7304fd68ed16d0f50e0eba1bff4e1119fc38e8476b370eed86b0210c6ac1938ee22e26729607d16f4e0de620a1412eb57fc69860427f7f41bbfa0c23bd5e2f16b8bc7b787daa1d3ae03ca11af4423f0d0afdf875548360558519517eaf721a384139dcf413caaff670da847eac094d41a1d80fb2a01fbffc454412e6dd5d5e8f48923c5c2e464a5248b6d4fe242ba594d29d932869af8d8c8e5a6324766dccd750e8c7385ebe8652bbbfbf715a86c7a81d9463a5a368f00adaaffa692bfefdcee91d284995064111a27686baa9e2cfe45df05ba93981f6da847e7885b6049c0cb5cc849180939f2ceba296d920a39cba55023718b5cc06919154b74ac049152de35db71f81c908bd992301642353b2640615aca00231d85014074a80252871eb0212a394524a8961300887a4fa80ba412cc8a9381c0929aafd43324ce30d8846051441bc5c5207fab18769fab871c0f42b1734836654c4f85097bf1b90dd1e58f7f9c3f723f50847a5d4098911d25e3f1af4877c686808690ab1030f39b0c1092b594029c2c1a70058248dd102a1285500e103a1fb4f777787a61f1c2ee10e8610a6bbbb778bc552f74d6c4695cff0fb10520c1e6eb0c18931c21802156c6040f02021b403207c622006182ad394222d5bc8303aa053c60bd8f0e205155ac02d5c84408310ae68e30d2d57a2962b64185a90983cc0d252b43ca105e5f8d054a5b04211d36f8576c8890ecd529c44a9ed648722ad6e9013263e7033112c44dde528ab0dd13c69d51bcfcb73d962b48550bffa7776e84ed320b58ebca227520db110ffd4f541aa31a73a113bdc13c3908a998818b6c8764a3434ad96e7ad5cc94fb2ee8b818b894b61bd9d7e155be11f958a5267f6f9979faa57aef48a547ffeaf90c89225b264698ca4427396d58fb44834b354ea6c5c5f9bd666ae6962aba865f4ee96b37a7d1be39e28836ea1bd3502920240fd9663a1708f9c887e3356ae36d5a6b6bb205bee83dc3eeded576ed5cc07b70f1a46a17277b387e05613b006436461c50ec410e38a2a4498e0c206910caa9c8103f6c1132a324fd11cfc507bb31c351187d0116d08a901818298a10829e0c8c1192e77953b63a9de43f59456f9a50f4d6eb414f452120218b5db90d205969b1dc278d5b0c48b20d040e88a269a58d13265eba1850699162b0c469338829a78a94deb063541a38991fcc25f541e71bcd182379240ea62092f2e50c58e175a6e20c60d4db86ca8f430d4022ac4d071011729e410851941ac5106100d2f507eba43a50f497525d5b53328d7efa1d8ff70fe5ae28cc07739e9fcf95acf643f2767e254ceaa61eebe87629db400ec60ce073b0dd65ec5e756f1b7ee58c52e55e1164abd887ef021f69333d20f048b304af9d8aa026da442ce5b89ccc677179edcbb631934148cd97aeda138ed4b9cd76c654c57a8f6a8df80b03635d650dcb6c75d32953adb1a5376daa8892b3d71dd329389437da9a6f4fda6ad317dff2c7d3637201a6a5bc1a6a27e3720a88e6bc6edf630b17cde28101ff38f4752d56195dc4638512c7f1044c3ce9cb4cab933f3b7fbe463f2e5c43ad94dac6fb26c3b0647488fda6e977208dda1c3f51823fcd9b94387beb026ca971d0c31c6de18239381c91aabe93dfe9e9ef7b9b726fb7d78ea16b2dc80c0089d67924dcb4ca589c597d463c051c6c83fdfe1ec30e6df8abddc8060cc18738719890f4d57687cac5b16a0c7970f5588ae444c8c1910c6d0d0f4d19c348d46972ea810b2d2b3831fce204a63881f1fb0f8e2e68a1453d61803081b9eb00192942e54e002e80c263b1059796204473688e30651141d71d180198e5842cb0d6104a186087a8400021930924108377ce1c4ce153d98f9410f8c4892610637a610010b5c90414e0e508248e2c91a3b6ca182186d58b9410b1b9e6062043521b8324507307a28620766681107186de0f8f07cf9a1c94e8124d4a50a972d6f0091c50ae5501404910fb608ddb8b08231acf0a1062cdcc0c1103c00c2440a355e60c495a4315cfb2b021ba00b0252f408867680840f3e48e1a40762d4c0f53d43a0f22fff642ebec09932c5103ae470e162a6a24236e28ab190556cb150cef245380b1b4529c2598a70111b45e12c4532184ec76f1bb7354371d2c4155504d40db2c1a7e2d8805433d76212e4e248bd85ab3caad817e12236dafe63a3de363692f34f8fc92f71a59244fdc370bbacacfb907845bd7cca6db3b22ecbbe23da7e487c7646bac3166e1b6741b1116731b177e4851dd594aadf114e55d819317d298b278e4a8e1c9f755faa624fb91c2fb9ed25fd1f1db70cc0bc8ef70dc8d6cdf6300cfb1f9e490dc5c93771a512951cffa3334cdb38f9260cc06450a35c8e4771db67260e7bde640783715faaf4a6dffe4767264e07b7cd32fdc6cdf64c9f83d39a657ade28507a1d37554e5cb1a7421fe380c0701ba7b5b7e36368479bc5469ce5b7866102a77edda09b2a6a48aaadba413550516f9ca80aa81b44434f51d5ea3e7f941aa199a8a4ad16553dec10d5880000001000b314002020100c878442a16034a2ebe31e14000e7ba2447a521789b324c87118858c31c618430800000010919901a2b101c93f5f0e74e696165bc29b28b96c06284b28f1233a1a08e6e5fe19e092589635011201270d12c17e3e85633fdfd31dca956f325540bd84231d677b9635114be05b46e807430e87ef0d062ed9528cb59a676c17d03d829f331fa416684001a99a23d702a78a38d304ab553de68bc788144c3dbf61e90b356f4f5182e47bf74256a7092084519290f00da09e18a968258f62482b3aa218bb44f4c29062b5a866a08e20727185598c540c52c3ff87f796ad427f930f89a57c3de193b40af7d80fcbec19b038cc8bc19faec6b88800b01ee83f88992e195e30c60c3d500dbebedaeacc0914c88bf97c6593a363cff0af52da563f8c1739f70e1fc557776596f57705d5881424540dd18662e013525a5d5401c689992da2b8d52bb45a31e74c2146c555c28ac17677de860b1a97834aa1f1325914b4b2cceafcb8d3ccfa5c113b892a61e9a76b591ba1b06513215433d25c830cfe1a424fd8e3c09a9b7897742b06074c3c510c4aa428d87325d217ae49904a9f0f92ad664f3366dd0a14a1ae17d96b951b947d3184f43047f7fa7de4c5ac6797206c0d7debdc0a0e3f583c220c01f64179f8da3ca3689b3702a16060f2156ea47547aaff5f580edfa008ee5ff1118f7a2b50bef4eeb37421a5bf38150d316a9ae623123967a0b836bf71a6c6ec58da1080af485c5a58eded1421a087063856eb5bc28a13663c6f22d426d6c867affd5c49a694c49de068b2facfa5211688548272dfdbff8c700f5384f15adb47eaf21c272f6a86f86d8b8ca18b710ffe185f580574123605da052b542db8d8a5ad5c946edf29c50d7651f8afb1b6eb39db276e8cbf1f991321c5501f305630f3aa1a4d9d54ff4ad660b5c192f12532bc57ab53dc86470e0ab19d09063e309dbccbcb48cdcb19d3efdd47186f8259757bc238a199ae91a0dcf37860388b180e4b2f0c15e497279f0cf0d772ba00542d8dd90933949d1a1346df9339f0da9028e443ead22ba28ccc0b5bd6009520bfda92bac43afd44472d53373a48e34c41137effb7d6b9d66b28c7110ca2b70e58e83afef9e9a2fae44f1423577c8ec73c8aa75f5a2b2df6f254fad7e2812f1d35d82fff17443e262e440023b8ca071e1b8eae85cb94914ca81844e579f1418e96c8d4a9e6ad855172dec35175becb78266e1b70bdbbbdbe335f9affd49d794470f88daf01bf7ab9d6d4b04442751b0b8055ca10de00fe5c34539be2aa194208fac6a4fb220843c1a0d9aa518836ce12cbc52bd54aa1a21bff43cbb5327e730c8dfbab368d8fe05c840325255188a18604f4f970d5270fa3c9838f4f6cdb0bb72fd20a43280f8cecce3fc2badf09539669b58bf1da689f9b0b46750aa035ab1b2070bbb40bfb232b0bc1d0496288b042882a87a5c84808be247f9ca48dc608c7489db74516e8b4c96a00a5239c6d44979fbcb79a2b668a58465ee7f70e87134df995dc0e3a6f295524116c86f50fe1dffbb9a43b9a7b2f838bb0cec2392b25858af158e67517791bd4a54237199bcbf7f46864e1c952798dfbcb8aa2d442c61a8064453f5a0e83957e824a7826936fda0b5853800bf02c83b31ec7a290c723821cb9a417394fe0101247f5d052e9f640796893dc5279d449c06fa2375d54e477ee6c32567da4a3afce6e2b57ed9a56798965e68e0f35874445ac23bfce44fcd43b56b2f8c12430971c08b15b85edbaa06f32d41448b5ab2d444c966387a7987e301b017316cc23972bbedd344ba153cc22e87c45d64628a082d0095a3b19ad3630ff69307a5420077076420b03d2f10d3600a07f543aaffa8fad02e280c7cdbd1930b7e16b59db4518d28db76e91ce68802ce67cec7128b37b345e50318e89e8e0892ea21fc0b2a3c71cf0a064d6d65234fcc617668d044533e4dc2f876cf6f13793b6de6f7c768d3a6453070bd9c67eb9d67ed91e2cd07c401597b64a0fb677bc9d6b48b9820d056f71f2296f2031802d80e559e8f15e178cd2feff60b54e174f3983b2ff316c679cc575f3640bd6d0d7095f92348e741a5b1da3c09740a5c3049c3b9fffe2fb602752d4db8936595684337411cec09b39e205d44b200b486d272d2fb76813cb203cc7a729dec441a16a0d978d560e9e602a19d017b11acd1463f8e871f24668833b3c2dee452b826d52792b8048148885ee6ddc02eaf298e8f38cd62f58cfe8f47183e57f938906899226073ae646491d58a1722074d0d04e6e6b226cc24d9536e26ef46ed3079629deed29ede0acdb79454d79967cb94c3aa1ba482cd35846016d4c00c21e47fd17d7a15d951a9f8ed5631537556a1b2bf4da1ea3f105f4e1e56e2879097202cef2be7eb89de0a9f628e4e1deed133f42ca74cb4ed812792de3d232123a8f8e6ce8c18a0c29d704f6d590f0f701ac6098ece6559d4c1a44c3428b0a5402f7247c139933b71d18e0c8e52dc41d73e7ec75f76d6248dbd6ba84921e4c0052770c1a4b13a44094336a3d73465e658886829123380aa43dbd47088aaaee732aeee877cbbeb9f19bbc295fbd78584dd0c6fa88ee172f4e61048a80eb1a1fd54036a3814efacefc1de76bbc1b8b0bc6c07d8d60063e028b869824ffa456a9442020d924dd7a2c0428a1ae4d18d4b417660c7e64a3e2672540fe1ebe2ccdaf844f4230118405c9b45f9853e7f9052224224041a4fd4d22b94b1d67f3b34810e144b8a76de19e240676b0a7318a2d75d9fd7c2e103bf19e189112c26c4f40695a404b6d4a51bb0266ada7f3ec452971b5d8b99fef1d4913442075f19bdb3f52016a85cd77ee0f44395195467577d338c264d70e2509f824e08d36000cef6e1247aee7ddbd1c02463c51ac0e94936862ede4e50290f24aa54af7b2c937eed4646553433d965871d4be720761058650cef9210a3694a18ee318df38c6cf471d4eebaf16c718cab1a9fbc79c9333d8a541964e3df541a3ee8310b4fdffed9adae7f1b1d9e49fdbbb0af6001eae596f977bf0e43624c34cd74d17330895c5cbb80e0a10395d03ba24fff77c1204c128e9e8ffa403dbeff9c612e4682784e359ab2306cdff7fd2b5eb1b2e514170550fdc93ee85295c8e515e83414069d3f14b5429f8352687d709f4b04e995a9d456af4194a029416dd5867d3d5819dd365452b1dde26a159aba059a21a4386bd2af8cd99520fd7ee3b1b884036f0b2d3e5d5630bffd2bdee7c18adf3d414785ee9f4ba2d463db7274e410715a0c6ab6e42ceeb50d603305d1e52e4c2f14baa7031fd53e607e0dcad03c97f2d52ae635acf63b2f35e95412e90d799744105fb84a7b3b6ac4cf959df7f5e739ac7224c697a159ea881b929399a6cb2b775ab211716b654996b5b4d505b053b130c7ae70a22e173143619816caf7b06d5c73709cebf66db7aa1db8402883ea745ccdc1bad188522b290072ba6a537ec7d50e2b285cae61499d48e74441bc5e4e383b603f284915742070e8cb87cd09d20193426fcfe856e75bbd61fc0473489a8602382cfc1bf41bae71b2104121bda64f58a0a7b1f17ea58b6e260d1b8da30248e47a5e06fa5b8a3595e25d3a3730824342948e4e2bbe31531c6e511f3185a49e6cd3c9454ba2edfac34518c9574032141bd5b821f487ef90f2282194d8ca1087d0c90f1ed230894d93a3d6afacbeeb0d94782b655efd2b61b68d230ced20cac54af6399871ece58b4a762434e155ccdc78e655bfa6a7e1a5f0995aef7c08fd231647a82d1973119287d7feb951248de864c4403ccef240fc79ce3beef14fb1cc69df6a9277d4c5553bc5411fa01e3d92922d1044a9d4091a64f39a214247a3a3a714bd29d02eaace831992bb81e925f7a80c14e43b2c739297efe24f8f9c47ca08b8b07d0ea6f9fe65a849f5cf0072c35c0d09a84942a917d72a13d10dd73fb3b71f6cd3890ed329a98d40abad01d92d3235608cde31fa2cf8f413acc4255d5725931cbd6b0ecf2c81c2cf80fd577586b370d32c8d9700b4589252b7206cac866db1abb637b846b290ecfbf4dbc0e2946923bcc4683a94d54f229c5904db2dfa8c6c800a92fe806d91005f2609120cb073df856b96e078ec068ad44188d7ca0d313a72487a1aa4d990159bcdd34b5a99ca17833c43be202e2e9def7455b67f81a0c830e0cb1a392f86246608f516ac7b3241b946e8498f636e2fd97565f014dad20e78daa350527b4b5d9785f870ba8e7b92eb44a15a03c4cd991442e92cf3692c6e38a6e80baf3d069dc3a7502be54a7d4b0881abc50632c7059aa7ea1064d6832c9f740634d4d096b46a776f127cb5baa61f87e2b8f46bcbe839f7f0d1ba7a840070cd3d47136f4232d0263e18dbfd865a205def7c51b2157edf357c990a056b2c2a8dfb9a241ac6fac35aaf7973e95e1374b82788259db9e211bd8d98df55dcfd626c0637b536e706bbb80c515226a544e0927bcd7b17fb21abac2fa561c00202f696f55c2654e30b8cd908c8b9f703b0b7aa308878acb98b082b742193f696c27196e8746a8dddc2b04eecda2624246df2ed0b15ab4c8d2f2462842261de221d1888508dc4522e18cc8bd9a5c4c8f50d128d1f73445fc4240d8c199947a540b618d72b0cbc1553d675e4cca9e8e0bf35b486d6456a3c61a09f63eb02f92c2fe2245ae2e750e454d0322ffa90cdf9b9ed908fc5631b07062af96b345eb2393c050ae36bdc3305e267a545b14807c913f83d59349fe919203d370746cce98ce7780652668fb2b4a5de0c1d9243c75242d490790a8764a2dcc6467ee98501114a9e38bfc766c19d16b89807ac6f5844084034da71e0327ad8dc9bc17126e8e9d1a0e25a3f52d87e3d195fb90b332689d8f89cd136104b6bda8ce00eedbbaf7c8ad9af1078c04df7b6ecdb445e2c258fb49bb5201c136f0d36057f780a131f50b01bcbc822f4822d3a9eb91be15b67ad56870331118b2fab8f4d86e25248cd5bb26c87c3ed01fcca96646da15e5f3c1182a0fa63bee0a8eca4833396321f8ed441fc015fc425bbf91e9c9235c62412c8128959296cb9ecca78b96052a66516afd638278b9230e2f3a6a9f5881198e07ab19efdc17238610d55527b5a2a00a00514018bd63cdb26b82d8d2e07b7ef4264969f633c1656138a556ddba9c4383e0fd3f5dff75924950e83167aecf696db13936b12cd945b930bde62fe890d51c80c24a1e6b612c2785e00108f151d8992660818c8f714919f1aa9245dfb55bcaad85b6dbb4d1b294cb0b0af3165b79f6561ea55d12700398887507e4a8577006a91b35b24a078072a7f11dba1ac8f33390416fb27b009612a7b40a1393b358bc7ff862b530a38b2e9ee7e88fa8bb92c2e4b0a38fe3c54c97f4080a7c5dd557c3b1094c6e1a33621406e10a3f68c928883fdd8c7a0344b9370ab8c428d0d61ced0d1090e77b58810f083386fb7a64269453dc79f7552992cbf1c402ad9f5b19995d3afac3595c9786e25ca588b3f013081d35f3578b96e213ac9a6e65a721c8b0a51d7a70c53652b93903d15b120339c001f70f8b8bb3f9956e9ff673840eb78e5bda990e0311638c87a08296ff7ccc93c03c97af3611f7c6fc8192532269a415ed8e4233c9d0f17e7c9fb4c00420a7e6196cd7bff58dacf2ec3f302b9350ca136b5764bcb03e7efdbf0182f5bff1d1017636a72e85fd104b6d63666275a1df3cad1e2d054b1c4a18c385d8e8083fc0d13f6c7a2a04b4dd91ae5ffa5ac4bd4271144f93ec242c021e69b1d25f002715600286dcb722c206c5fa03bdcd88118ebb2389ee775dbf7b84a788dd6c8a6c0c5c69989ded7afcd4a0ed97aadab80e3139438d7ffddce533eeee378ff8502a0c76480ce957bc07e83f0f3a13f13f3f685f5e3e32a70801c7852dee1ece20d2d82f9bc395ff90179cf4718bfcc718aa613e4223af51912f58dde39179e7df244eb236829a5d5343bf4f145ce0707ce2fc8f7b6fde11ff0a5958e94d289a8347f0aaabcf0aac06e784c4168ebbf99a4ea7008661988af306fa6074a0fd5839b3749e0539baa55fbec1e6ce77f840aab96cdd30466bd2ad14b38411280d38c6b4e64996becc59686d0394e6a156e761b14ebb7dd0106a45b92e21fb23514264900370a3f1c1cf63c4f4dc34905e477344c569f54484c94261c29f4b7fd1557178970a817e10496019177bcbeb5fcc66e458202812caae93e95b4a2ae200d2c60a18eb199dab74f66d1b7325d657f8e5a28481f04abd443611acec494fdd11f1a998fadbf3dbc2725cfef512fec3035d7a47432c805ce7b8da6a5e8cd9a8dd815f84e3a2d4547b52e0def8140e800169725cedeac3aa3faf0d0c80ecdc31fb18b8293f095143f8998b993fd976303a581fef16d9b6f00d3bbe339683e90aab862dbab30cf49aef9634241a8d5bbb9477260cfcf50c4a3d06f3870151d436b898fda7f0088ca379339c3009c66a6e454da9cc8d5e0d5104e681e61fdbf0d7bbdeb6b7d16d7b0878a82700778cff2d9a15f123fdf617db523af6c85ad5f2abf05981fc3b6861980599b896e5b7dcc4b9b997a00a96aaef210160d88a2ade1fd13f63826435eea0a3de011af6f8cf7a7935d6684ebd40529301fd843586295d66411ba58f7008a02b1187b833d382e37014c109b0df7317f546d5c8face86fefd48490675fd2cce85781e6003160584801ad3aa1eb5f4ba2cbeeec894523746536f2dd07a4fdaca5ac48a8ac81dfeaf899e0813a67e84de6ba0366d27e5e96054db1c8d3d85d7435c5dcf83575f48d0591b9f4b0d4405285e58d0bd552c6f9367fc5f2042dfd078562b208408f32f405da3f48f8a8a6e9c69407a63133c22e2fde988abdea4ccca67392c5e1d422f598ddda7de0e6a3c2d7ce18740d028fd30bf0dc913219e0315a04e46ab559a509d5fd4953395df5abcd8dcab77f41d2cdf9046a376473930f48896400bde7cfc530ca78c87e2c6407532a26258c48dec89c19f7fc4f6eecdab8608093072b4f27439c93fc396d34e31c23eae529195cf814153fdbe754add561d527e4be6bb50627217634947cf0104df331689d566c82435932e84ffe28b2ae802d0f43e588f936a6f7ba1c9de0e07c4929abdb28f5588d60072aba90068ba918b82d47d65a389f2c95bab6550216445414c3ff8692d71e370e92cdeda9b2af42bfb21b0d5bf7ea10086e25399efdca244fdcb685ed37ad17ce7e6a639cdbd4f30462ba8e58d6a05d082bbdc3fcfe98acbcbd744f8230a4b31d182c87ddb99a159b5fbbe43cd3d71404b3a1215f89da0532161117034f89dc27808bfa3ee3b60b6f4a246e637fc8e83514b7b88dfa1e3bd0772bd456a43552af67c2a8e0329472773a9d01a9daeca31e392a10cfff30f05cb1a6c3d767d37d6e3253732419161f85d933f0876ca8dce0502675b2ded74c4ed8bb302c718141d3aec66b5df89ca9fc4c566b1e000accf5c006c1281494a13ee4d9e518b8eba1006284f1e9df2de34cd8f00b7b6f91781d151adb15f6753748fc38d4e4c442634cd4437f4b54cdadb9d44b2353a075ea6fa62f782af9ed30a86b199e55b50fa1c6e74fa5e845a520f6650d4808270d3662aa8879b3b63b62b18a9221da4824a69d9174a98530820c2206c23d334cd97f624b49df69d918e53a6e981b4dd90d570f44515a1d04a7d3a4a071fcc9506e123ff349f5d0bf5cd025ea115079c7080e36668ba36957678b27becdcd4ef87efa5b50b5ce9eaff4439fb3fa5acd467933c08390a21d4ecab21a69b02a3e28479f480a2ee806b60cf3ade84a3edc9f6c0bae8eb38f496a71b0ef481e4e33db831f1aef5754d56e4b7e0ab778784cf45924ba47f28f94533a2c8c522528412c43a5454a49b1304b0e662607074d8208017a11d3a1845608b811bfecc827bffee641f0a97e7830f098a8dca649cd466f062722e2a934e364853f79c462da24d05fd7f432cde385f220d75a25c85972536bc59d8c1a4c7b78c0ce40d5ffc67392178f61e69273f604179fee258c3d12f9b46e1500046774e7286224434f4cf7751ccd4107ff05507d8b340b0257dd995f5f9fcae8702080f621b181d7bf248167cf39751261d4704ed46baf34d4e9c15a708725c72787bcc48cdf8f14c25aa72d480ed2fc71e844e837195609a92ae3cae4128cb4bae379d984a74c59cfc6c1f98e592bf0119a85f9a9ea23ca38f50879f6dba94dc74b266e1433adecd048c0ac762c91df750c36664a749b42fe9883f08fc308c8c6c841ee217d818f44fa1cf59545418acf6554778e3623501488aae6130ced9f6edd534953d692ed22d9109ca87503e4c07be6c3ba8c857289ebebb82c0d24cf4a3f4b03ada21532607f77ed9dacab1eec7c3dda6869972b74fa5a077ce4603513f293dffa260fb164858edde7a0e6231997e60ee1d719e21ce9f8db3cc1606c49cf2d74ceee82f13750a17e90d0e52aba728d21d830b4af47ab44c05b10830b025b45728f802984d21d8af5f6ac55762503439e70efeb8983abf029fc7d3a33fac624c0ef1679b61e50b98655841deaf32774850f2f40586627945a953ba8d80af12d9de4cc76ab8243448b82955dc262fd6ee39277699c24d172172e0a4ea5d03608e230906cb65c7e0c0eb185a53007b962e0d03add1cbc6e0b1fe745854f5b82dfedbf6ffe5323333defac3dacda8073e45ecf988eb029731595b43d39825dda6285f9292744bc9bd80e30ff4dda10f8b5fa563a9b55ed10f2009fd03233e53fce0db72fbaf4f946936b28bad488ff8450cf75dd765aa03eefd32d90c2e5abc95743cef69736b1ea07828dcb725327578225bc22ab678f975377f874a1f5e6d1e968a8c6d51e871b69ac2260b8db2008ec4705563e5594bb0948b62688e942fbcbd4126d16f84b50e81191a0abf1b1b634fe2610944712ada8d97208f7ed5d8b1245524f2f9335ef410847a7facfe91a2a1d4fb987e9f30e50703ade4eab3048f557b39a12ca7e07e06d46bd8601f022d05415570bda992ac559bb1733001726eefed52f9dead342966998aaa9ef949aa221a883ebda1de804655ca90f0ae440a8f54345888dcb4740d7a26bfe8a5281f0df13df89257d401b8260fd617db5b21abb708357e5a68877ad7a6b958b85724848aa35d4e3697472eaab52bc8e65e64118675afa4748e66979e4e7e427a275e62c0a3c062ab89b71ea6976b326fb2896d9e11431c2bca267f5ccb9702db433cc392fcf7dd166def7b0d83cae0dc3bde33ca5aff15692d5b2458a592afb00e93cf30392eaf734c8faa5cad7156ea65250048de6019cbc6cbc810729abb66bbdbd59fc6662d449d3c50ac3c7aafd62c6dac4f8cc7aa1f66028006f3219401a891819e7b4c8e82da4cc21a852da2b5e2503897ddffc5c0eb66450f5b1c5256433e71629f8e1c7955b7225e9642cc25fd12fae50fcd5489ba1ff9405369a684cc563ee7fa60a1c7939fa80e9a7a3949305a7e75eeb823be8aba142330d2bcadea4485553dac8533a5c75c07cc8731ca1be191274921d383b50057901b499fbe4ca1830f927b910045ca05a9720cfbc87484cfe7b8867f4014152e10498346ef02ff37c73c8817e837537ed0016e5ddb876086d8649408fdf566117099b7de3ca997cf15f0c25e3356436a412dafe4365b1784376701bf71d6d647270e0a986df446651f81bb18c09fe58153cb0a4017f799bea7e2edacd404fd68b381114892dc7d89c708d0cad8e78c306d12d2803476849095a15b9264b0e3b7e2f24d7e00819a6bdbb2fdfcee2e20fd2ab88f1ebea75f32d73816a37cd0c50a1335c3426dab583272d4b5a2ce8b70dba7a41c777408c5857b68d456a5286e0664fa429b4dd2f82aaba501042a285c1d985e1bef81ee16d3984f96b84ee682fb5933b66bf1c7b256432e907adf9156f57887e959eb6dd39543358165a180d3a661544a9b31cc0243ffb8b5d0edae5253a684799fff5ef875dcbacc43b1c52282f831be843281a81d56d6064072ce9f26791c0655a22cc7a7beca3447e099ce8d9d95f05fd1005a7084dce9237db70fce4c4bbbc25bd78c05c302c19ee4dc369c0bdcb8e5fe80410f32c484f82b7c6b37e01b9096e71e8e2bfe3c54e5e5369787327962ff01c4bf43699880ab8dca8fdd45dca170caed5034b543e9a33a83418c0e26afd663512ff9b7b881ddd9e53b79b66d519c3568f5cba16ad2fcdd575af3f659edeb85a4f4566b347b0b952187e9a3c1caa51b861d2553e46548fea793759048b92e272d0693977dcd91306a10f6d9424d2f9bb2ccfd9ee8f0c50d7554a917b7f5a2653b905e82bce0cfe58d87a30ead3123dbc10bc4e5332782e4074e077a25ce65509ae8872c0a471822c7d2419bff67809e895a008dbd1ab8c04559c264c8e9c2c91218f3b3f875c810df2134c1c7935b3bef81b1223d9ebc977b45853d2d2807890ae2e160bbb9093b2ff50df9721b1144b20ae3d24b7cd23cfd43ad6c538fee5dda41aa95083a6c1687ad1241e109323ba5030b9c565f5c7e8099ad547705d2becee9313a75621bf65539cfcdda275b19a549e2e49a486fb5ff03f8b168317a869ba51e30e202023b94c204a88827d4defad29b825baca91c4e5a6ab1ca4564f568f580d31327a57c588ac5536a160cebc4ab7c9679fa9d79458664a37fa5f875e4b59edcdf596d3d5ba337d395713a1c00a98c9a1b0007f1e7bbbc749ad460c74eb5ffb681e6bc93fc816695927e0c3d3e2770557e57e66b9bd21996c4c597a6f51f6d001965643258a9dc4c28393eae64b2ae803a32194de8859dba190c13c6ece6c3360dcde65b16f9a74a0127ae6ddbd9caaa0261c00af256420e16d36042d063649376324deaf50e894cfd3a9728036139d0e992989bf63e606afa51470278bf8f01f4d6e6a510934e43f8dcb141439d50527f27d4c09b2c4c089b101840ab10a06141a4fc05c6d189d869cfacb78b39aadcf4ac62857308d93ba5579ffb4243914a2872a6dc52fa875fec536f0f1a8fd4328754b2803511a32727a8453884e4909fa90e39847a746b197ec49a655b633973a382f84df1ca58841351844919889f075d645afaae3c81f56cc28cefe49370ea8a385a873ecc3eae40f66870d65ad3bc2063e0f761e5da60403ce2dbe00c4d0bd88be525d309cc037a527df11d8e16bb9e4283d8eb62db2cc2a120b608233bc58b0e350ab2e084b19bee65c3e2597798e9aa63e3704418f543b14fea9857bad4de94cabf07a9a6b638833309b710995e40c07654a72c85b8202e5414803d8177aa5d304e40e9484ac9fe6f17572539fc42815b702821bf387acee985de64ebd6e1e9398c54f6e541cd2ac05809fb93e345bb346f0d4a961027c43f7eeaf38c8f7113f6855c070396377efa366c80790d0e4de7287b024b3e41df7e736a0d3b0f743b5d46debc69e03abcb911ae6fb03d2dcef88bbf9eb4d92c2e9b70da039eb5c237dbca2c49d98c6ae89032a013cb968c65b95fac4b20160a735f2448bdd4b6ca49581f812b994ce33c356fdf7756f6c4ae3121d107d1c7063db1c0372e742bc42b1334e7fbe9e65ecab5dc85941a4685e6b9485e2c30878b1f91f9844901c170fd85e09ade13ddc8af5c431b97a5619079cfb9e9fcc9caefadb7b6fbdb97dca10cee20598b2ae8b554d3200ebddb134afb2843d4593677c2d8d9fe84d710bfc87e84f6bdf0ea5676daa10bb314239e57a58e14baba91e6322f9941c66d50f5d82fbaf0180938e386f0c9dd05d3c7cd3ebe603c962a0c3ce3f9da522f2a0e53d5d74f4477ed3f6f998e59126845b23334432b98a283d9c794b35c1f0cbbb9fbed6ee88fd0dde97541e0648b3b4884a90dc0cf07f844768d3ab26bc789c949daa3b90203bc6a404f041c127e6cfa379e162bea21e88b45f32e982a05bde5762b7ba890761e00da3bf6ab652d0ce0b04fbc69b390d6bf164ea6fa81db90655f498c1e4e284c6f86219d13dfa0ef910b6f74d1918813454364281146049e88cb74f0cdaafb58914c477cf0ab47692e8963853af97842588bc48602a36a44bdb0dc0998dc7f95a8601cfda79696e11674436db925c07b7ada12a9af5f8e2e00098697d59ddc170efbb27cecc3a0b40e93576edc3142d6564c0c6b306636c8aafb9fea602e590b64a2a16c92b63dbc6ca475b84fe3951cec187660ba677f5a8d6bd2bacc781d770a2514842ce38cc00350ac320bc2ac0a713fdd7af849378c881ecbdb28f336e9aa2489f02e2acaa5c230898211630694bca0ac4795cbe93e1a4effd127d983d34341d0bd7968ddcee1b148c069c9599d06f85528aa83ddfabafdfd0fa794e8a493360c22c2778354410feea63f821d258251af251283abd479d5704453800d750b614be86dc488f1fab0aa553a94151eb9db096975a282a255d10e9542ff22e98b20ded2c493c57d221b41ad93893f4562da0ce51aca9061fb5c9d33fdede7f96ce3ace0cca69be6003981426859e4f6a2df816e22b87774e9f389b648886f465cd534eb2d627b311a70fe4aa8692caa88acb943ae03dd55571693a17e58e2c7e0ac25fcf1c7e75bf0db6bf0c707a903a06a66fa2f813130e6a326828970d5b4d5b2ac0b71d17d06b2603270cf97c0358297a6fc050a771f6148aab8d980a7da8b840190442b8e5ac963733fcfb7d01ba1843d5c4edfbfee5d39dc0d712f419710fe499280203602836340c14361583690e8b2e6b81a10ceb1cec320634f201e85533244e67e848905b0a4b242b08515a4b394f55d724b97216cca4c741e65091d7411ab3797215a6a12332da43a316e23f74ec835230b4ba612087723fa10e4b5131bf4386e812dd2895919552ccce0fcf8986b8ddc3cdfa1f51c887f9a4d11249938a2f52c2c8fc9501065d374bbfe9d29449fc2c9602194d97ed907154e8bf19f51e7cb4f59809a957ece50c84f3257882100f390de42ff15f1453124513420b5064dc449e74c744f34751e15c1a4ae92abae5b94d353a2c1f2bae9152b6a7dbdd15f379cadcce30dfed744fb49509dfb709c8b079f977e9d78b984cac13dadda1066c393add1fec938605ff92b08ded9005295cf6e6ccf2ba0ddb7e566a8037d871a5b6247ff52187d5935226a5a8c03f59fc1205cab6b1958bdc7f736f64cd1de100389ba9cf91d02c6558ae0c2883d608862daa6486cf2441ee96d9c4cb22fa918dae641b4032642b0bf807390676005352e86b854c34e36ca47bc003207e3f7fcea88d095ff8fbb9fff1794fbf2b09091391c1aa590f866fc7e63f7cba218259628ff54f25e5bd5e038f2194217a11dd736b2f3e787c010eab0805a1100a7dded9c086837b9e7a57f07691cfa7c3a0791499be1e7cd65cc2882b4161c8f16d07158b2a9d33cae0fde615f9cda3e408f3d3740ab65023afc24664c0ee013e31c8b22a8f05f87376c0285ac2121dc04b0b1112fc923158afa4ccbc08ca07d2ca4242170bc789cb4e66c402253ec82ea47fe84d818ca0f3bd58e6e681daa98a76200d3274bba604ae936d2d3a15f48c7dc264d0683dae0683847c57bc69c233d2b78683c87b3c155c3200a718320bc150c670fb3b978cef8721e8f1b3a9100f158045bd7fc058b0ecbc1c2eef7b8fa724206e0719101c80600356ce95315fbf3c3787e427f8ee023aafe4c543553491a6fa89e217dc49ac593fc12bc649f4700bcd027d0fb1282bdb0528c36331cc2f3705f5b2411a83d1242f71f86c296a0445ec4c16b2abff96e024a3906e431eab0ec71fe17ae075a9214be9efe30645cfad741e2e06fa4e9179f4e845d0d1f45a264fb67ddcea8b7881aa90681bdd200bf793ae294a722cb0b38ea353328885e4a8635bd047334372eb3e6ae4396553cbb130e4b89f0ca245f6bdb671821036fc2a6bfeecfad649637c9703c791004477a4af04b9860052820512b9d7daaad59f138eae0fd18f27279ddbd5bec75779907da1010326413174c9dcfd3023013038e97e8e6daea1a1805b3169f7592a7fbec859ccf8aed0a4ae331d1224d6dfce5d0e4dbc714eb8d4730a7ec714ba8837eee412ed091fc0453948da54274e630e2951d064cfb98de8c9e1d736f06e7e73baff106c532c5c2a17dc1f7031c293c88c7705995eb9d817bc71c7b476ae8d16e50e618094f146c3758596c3e12a35f8e3d32ce93b093ab1f881e7824403b1ab9438e3ea7ff0ca7cc417508557bf666e18836356fc1e6ca88b825a07762383093af51525986f33224778cf4bff9fe2d8e52f9c8f2baf5bda153a0eb544debcc9e6d1297182939710af9e8c409937642307e251f492f68a6079cbcb517cd1b5337e112e74bb9f3b73961ed911fbab6a3ffe4ce71423fbdb60341bf299618b581d3cd0d23332edc7de8c014c479a06e23feb9d26b19aec7b8c334d413f7c20a6229916a73682c94f0f624055fc4b94341add10e4cddb68cdba105741cdfb8f9adff8ac134a0834e1ec7c1a1d1b4047a2fa5f930f92cb33cff350da2c7c36e668a9bff1c1c26edee819faa4d55f3ffd7753289fee7a8628648683fd6206318c0d981d0235f1063d56ce5383bbcfbdc51ecd903836becf314a00816f6955b5b20cfeb4b6023c1ea54f2a4a311d620f5e9274517bd2beccc62ade5e5fac668f6aeaf57d965ff3a4c7dad7212824223a2979f094d747382e92b182aa16b8d64b136398e2ed46c9effcf221b48bd2ac609e4589c8e40c908fd18b8ed043fe6fdb42cc7d343ee9f2d72df7492fb4fb2e08052e07946cebbddba67e2a5a57e2e88fa047383ed93b86efcff62ce8a30de15a12ae4c95f0355bbebb75e124ec5c46377ddf4ddeb0f8e1fb1fcb25004639e600305d41f6b03c9bd1c8805b52dba72c011f4ddeac91cd8e39dedb260b51490b5be7b3232e7d437b660d1afc5097959f44c7979d83c932f192a11ae82fac04ff036e95a3c19e1e9cfe072e7995d954dd9a5a6e2774e134f8c0bbaf5d68005fe27306ad1071ddd233c134aa6a8e2f16f3961c5865048c9dffc582ad74f4c0c38a47691c9400fdcefedcc054f224f8ab79eaf329a3f6b205d0009cc94a39d23350880da25035bb99807871808f3add3152dbf73ef1c0ef2b4599037d4d6b3ca6451c16554c78ec802fbc15901e17c9f6131961168d41e61f259388a10dd1b0a714c5c8d8c4c712417ba623d99a34217f240aef39dc1f59dbd4b3b80115c5e14f1ebd20703929517cf0a99cab5684d341cffd900285adca770bafe31487fe2846ad8711c86e148b80bebee086a937b87fed773a113be53a7695ada22983e748b5147509b961ddf6a359e90734189334b0b633f9a86137e2c5c836c6e6d54130d90998937eee51cbdd52382c427e84f0670779a85101f5d8ab2dd7e390b2fbde19e1ef2a2b4324e013eb2a5d5b53018e6e7804ce129806da9ecf498954fdf5649a4b85a64199cfc75f9285dcaba796bf78c7ea7a40291352019905d2480b6c756dc86244583faca0ff7f8f1bf1c474f5568542ef1df8b5583202aeb4c4321c6a3ce51ccf90137d4759117d4c4165f2dc10de0b43cad92a7bd1dd3fd1490efb0124ed69f302f426652619f0944f44891e3bd6671add2f57a5d7e0022f6764d3eb08d1c26f2515809e88ec260786f593368254beda0f28fb169056bab145a5d1181e7067e8d5f46bf5f0584a2a41d01b20cc327c7ae5c9a2ced1a9fc9b004b448c41f7202ab06a76ee4273a62f89f807352912c2a8b18df72f27198664f4c9fa178b654580b1d66eae35226d4f2a94ade06e9758c0cf80d20853331bca13271b7d7829b52bfde87d0a4f94b62b3a50960dad82ccfb8dd1ce76e9e7c195266a28d41ececedd9bd1db021d9157c7994a8788441e8c3e1b1eee74a7e4ed75db570abe2a80c9f989132ea9079290504203020e8f8727620d3e666e1c0fe4b8ddee79e62208e1a4303cc2ce6ac1f3dd6b29cf89c5f3870e12d20c258f6985dd52701cb096100093865e1633dc9eda3d3905341d9d3dc742d06eeeec9f65e3d1326b767bb3cf824b87405c76a7519ebbaadbb99ffc6192d4fe92a514340164977f5314df581df49fcb6d7895d144d78689868326c4e3f75ebc1e05dc385baa4ff2925ec479ec1a5648277ad189da82b41756717743a20102b70157e9ea6dcd9ba8985cba63111e901a250b2cfbc4de0aa79021fad979614d6749835a925041d6f634be44e7804798a17e1ef372aaa2671d5e0173a8f6f5b5be6983dd94810f923e0343527b2fa6f0284555ebe059641b5ed3171bd2589c778b38d0458002666d61fdc4b6b21e791914022e762670c3412c8de46e9e7d89a30d9185f5742b83a178d33e82927f3355287fa071925ba0c7b1464970440687c053221ab68995968bb0960f9332a6051038889b5494bb70ca79009a0d8c10cc029dbe1524659e110104c42b1ac6c733e5f6eb920328f084e37fd1f4243ca591212e93974e751067635946757686ed50d2561d4cfc5574eff9a28f0b0b103c47051870ea9ea16c8f83ecfa99562310ac4de2653c54fe681f03097320e58e7a86881053894306a707953e99afbb4d2eed0c9acb6062a58b506d263ba23d7b8601c295c70f1a8b74f41378a0bcc9dc928543510ee6b580b233fb0882a2bc2c9454e28bdc49d5d7892e439890b4279042174aa6b113e7d34a8ba96cadf120a457b00360dea2a60f7801876db6ee0379720c603e72a54d05a2f095a99849cff1f28a7b9076d9599091274f5381fc62f65f18282492ebe2719602b6acb2a433311176c626755f9027e028c5a4211cab8b352ee25ec43683e2029dd62f47fefd5ae4a60dde0c72250ae33021632a447c74aa2a470b43509fe06ebe2f1653a17fb77bf6e53a5c11681f89511535109f0a27e6c0644b42475912131479d85f619f730ed503e5c0776122bd13a077ec3531cc3048efb5301a791916f470fb54885d1d79759f4ae1d2ae259f02b3d490b7eadfeb754423e2da50d25b79df695d19ce39b33aa2f1f726918db087f803a954768b845513e40f481dfd2f998254d52d275be0d4c2e18dd2ed7a925fc155da0604b981814e769614fc3e5dde45fadb7c159c8b1224b7c1a8ce514f9b10f1b848221edaa11f85fb6f8a4c0f1b5a7d7667e414812490ea59fb8c5350d4f42646077f391fc4576079a7788d44f4c325a7789cdfa516326d323540b0ace8db4038901f1b60bf2dd3988b91e9ce3424e806ed9f6d6e5b9ce071d105532da0a91f5b022eeac0f9fa9a4ba33a5f9db2468c382ca8215443dd2555b08b64530a8a0f2787944c464ca13bc6aa1db5ff40d33ee6c41dc94f5d6b7b763c46680d3633a4d35937d00464fe6a386e3e6a9abf1af371267ea80ebdc12fd5d1857a552cd673a286c2dd43bf7b488da22476967052d37d1cd4ef9c77f639f9535632956d289079fb10e1d75eb4eff91a58063433375fca0d763ff29223df67550f4c2d1ff45a82e3ffaefa6dcad79d3dd0c28c7ce24406d30a77eedd8bec3bbb117311cbbdb4d200fa807b62ab4f07f64e60ff070a26226df2032baaa67ee7e64e200378cd3c9da63919bc40c4a8d1bce4cc13be13cbfbe5fb64890c85f40570c22b279cb6b7ee22bdfc0bc8330b63a407f04f446c7ddf39ee00de13db689f90ca0b8f67c413a88e3822aa2439dafd1a57f17068cf7870d5c45fbaf9840be3ba1d70428f7b38aeaa362d28f01e9a3f78bc851454c25efee22f8ca5fe40a45163962cff3d9ad727d6bb111d5244b6c783fb83ea2f5511559e8ed1f6e3ba5614d7206216124d500e20d08cb9336b5649f38a9b3332c438ddf061c7782ae4b6e3ca8590937ce698572c5b74c989d4093660064fc4017add6074d77df10ebc3580a35d6f094100082bcb8daee032362a0a68755b2b376067445e902bd5062696c8551dee386b7caf69a1b52d2a52d31d5c429824b52a81b037b886d6e9255a6d49fa2fa1f252debe7ef76b67a1a6c5272fc17919b734d043e910116798ff447831cdd1300edb821365cd6a2c3cbd6a219fd15a300362e7e728880511c1de0d33f317a9d4ce3052c3ac71e9fb1ba4ba287972760f3c6e2fc8fa46602a4aa63ca1aacf2ae4efd1d7582103c4816ec5e00f59d4e074025ed89cd2074f17600746d4660b59527d69c7fba506da946aaf7e7c9f973a55b635caa529b696459c7e55c30694380cb13ba6ea74a42889de70a1b9990f6773b1f511413146487a8d045281096fa0f9b8def63ef84cc9e5d139fd8e4a1a0c913743cf8f2869b4619038c8284b1d0291e45388dc7709d9d8b3da4d30278928504d142d3168d410c5f33a669fc02d0dce688b3ff85d13883f2b779cfd0bf2ba9476e7325c6ae32a4f033968bb7eb55ea8d9d295aed8de7ef355fb8cd1e2efc60415cd5bff343cc151474ba084bb60767170a2341c2f3c5fd90a63b43b5ba1fd49b377a1e578686924e1d47e05a5f9e45bf96fed881c9cec7ab3850ef233543a800649f364da1808a8461001e471bf101d34c98d123fc84d015265c1a2e90c27b589300055b6508fd7b8eb8975922d89f700f939506a0abb4c753ea5a03d04d265d4ae7acfa565de3f387a1b6e2f6053b4b1d7a1d4a5ac00ff1b8aa885547e090edc5ceb505533b11f5a861b3688764e6fbee3a1d0866ab7c746ceda83a575874564123f0d8ede8efb30a18816bc8eb17b76f794efb928d88d2f000e0175cc05d3dd8010a767b02a0b741a2b773e7cae0a918009cc83186d0eaae34b76750702ea8bf9042d67b2ef14249c3bba217bc442b3c776da41e6a840c1283a07d8ca3df737090bb805895542d110538c800ca4ce6d984d66d2fc25444a90f120470f852caaf0f86f0308342c3010e6a38e8af5463d0a2bff3f0c6114d14d97f5ec4152cddc033865009c7b413bf0b274e49fae47a46b408b18f06f3121c1297fff4227ecb4d425da945ab957ba39ea3a7faa156aec6376d394e25e825ed5eaf520e5be514a1645539efcd07fe9528780a6b8722a6bac8c4e87d6a71abfb98e2588a2cd687e89c7422fe687870873b4d36c4d21a52cce72e57b11901c3905b96b6fc44b07b1ce68f9754e595a10029e55fc70b884e205fd7276b5070447c0a4f8f4ab15ab27edd5e9d69c97c9f2abfa2fa75176fa2baeed7350125741aee4b90105e1daf3cf8b494e9b88659eb88069d7be2f5ed3602a8ea6fa79b3ba647735be8e756971b08152df6d15ee98ef6c92b11f672d7bf19218b27fa924f6d3b45a5373d15f05f5c3ddc0c68cfa25de3a17d6263abed93ce3d62f574fb80a7cb6fa0194bdd931d87cbe2f8b9d5eb5dfa295618bf67e82e92a6f4e48224f4a018378b351fb9af2fee2069ea8304c2ef05e39369e33feb9b131319f0a0db1b02fd534ce53fe7e313b144d8dadcdf6426350a8dcf91d939b7278f337429d7e617a8f5e16c7bcee4f8ca0604d4d6bef41eceb5c5768fec598528cc2bc09138d8878e646fdfa35b755af0a65fdc246972bc82c71597a6dab8ae9ae0b8cea852a2842dc32be01b6f261dd13cbf7a4856d5a32b02d15280a1ac8ed038327c67c86249bda2a9c5ea9ff5e3b8ac57a8e9fcded06e7ec67d05d18fd21274a8ef6fc579ab676f7f867b2054c9affeaf20dfb950f5ef832c4965389282d9807a46a2da619231e1b6ea6e2b59c03d7d3d3dada16c7e03b47ee683fa7562aba6086b6a66810db914123870ca823612ed9c57fd96133f3dfc784c2213edbce5ce2923b3bb9b9d1024b3baacc2a4f91ad7beb8d7d4cd6b349826533f0a22fb12f928a3cfcba4c3cb25d2b8c03fac878bc0ed026ef689df6f82868649666ebb33896aa550218669cf1c14cf25d14934f6becad2bc3d909cefc631cfe4544b3753835fb225dce9670fb4acd0c867000f4fb3baf140fe7e0d9b331959b5272503871740b545e31f3b22010c3992538b7df9626bfa50eac1fcb8a5c6e2be753d9f69b4a1381d3005325f36c86a678952d350ba738e2d990b0c66be8559615bcc2de39701389eb0baa7cea127b212e1e3812e329f5e5b9fec1e273503e49a15f752c3b85c36467024a1c323832f5eee1e029bbbe078ec77ab7bc4d32a1ec580820f3cf2eec7db34a58c38ec1076e8fcf531e71e31e0ebd3e69a8c2778f9cdb327afd9334422d31d0c78b7d35d92ea209866dd830c6636f0c6663b2c54d0b31daf2abc98e5ca5010e0d8e4c27d80062865e4e6d848024f0116b8ec64fe1d1db283ac4bfecdce7bbe371c40e142e48880fe2ce39f349827192e30d67205b6d332c9fdfdd6ba34d46b785907470f58900b4275ef4b00b4e047443b543520a2d0bb7698750db1830bccfb13463f2f9e400bf8743625eace58681c98d3ca8281f74f57a2784b05311d06434791de46dc79a37b2e7a1ff209e4dfc7ee09e4f89064a321316cc2e3af26cf4f3b7ef0be3b366c0f548024656d02664996bc4cd9d402d57f9c930dfc5e34ecb144ca7888c6e080a8c06b63709db8a1fde97b59981f001be595e4d2ef1141324eb8cf92c929bf4a88262a52f9cc1acec19fba803ee928f7a062a465bc3ca68e8964f589e5377889c320c0a94191de9d0bbe603c73740a1c7925241d8dcdbf33af74e20d2358df9f680310c3cd7211cc0729a24638402eec242ec116d5a0d4895ea7fb3a1a8f65d05c57c20479741ed1377442d18d7e38105278faad3d3dd56974907f3cd10d850857860d86150eed006e77191c1816c90ad3895d35b46616b6636ac73740fc6b8705bd02640d7e2f9d368e77ab4aec027f405099f56ab759292c7c2813a83698314461993424dbfbe9408e366a41c8f43b80409e02c3078e309a799fc114da2739b250aea41c2110a8a487067f72d1d9510bf49ed0c22fbccb4d22e0802192a591af660fc9ea0f52e656e8d9e6c04f8daf0faaaaf1eebf97b5ac641223f7ccca43f45581c5b528d90d00e4b4eccfb038630761e922fef5fcd3dbd02f88eb4da254f9e5e7430d73052842c696c42f904f30e46e8c77222843e853207fe902ea75147f903bee1f133e9857a6e4a2f6702fe6b698c528e64b11b2853e47e6d4a982706e51ccc9e7c0e7fc4112d4e546abf10eba4e3dce2a2356aa94c46cd8c1fd7a62f4a89af221c3a761dbc7da68b41d9cc18860674ddb20d207bb499b0601026b1e20e414f65786181ff1c50a73967ff18ba2160d15b0aae60e3792aab07c200cc548fc04cd118080f4e7b0f0a75a586d577b2ea1e1e2934750abd96b7c0419f7edca0f867253ab3bd67c76ffb986093dcd1c74aab6acf83fc19461beb292b4a54030b8c161838881fdcc3c9a079834b3e7a120bbf3fd9c74df5ed1c13a999cd7cb3f8827cd10243d789a5bce9b8eb76a849868ce67479e915f71e15cfaf43ac1f5e378ccd85f892ff589658784a117fa0cd05cec1cc71c6779f19d3e884d35934f44b66cb65c1c931d801c2d561bbc2df0ffcf8ae6c187ad295194fdac68dbec6aae85b92f37f07e1e7d2cb9fca548cff2594f9985cab24410636a023e51028c417e4a5796ed43d0926f1c18a3cb6ac008b5d18f415c20c65763f35828a5dbe0cfabbd2f280808e11514c9f7b844e78ac288f1d053ba0c558e7c2e301d2031efcb0a6aabc37e0f5f0154a9d26e2466ed8a0accb61b656cf52b2d480761c5e4331a8238a7b98a7ab898beb6649769e34cc7f42282dd321c97213a763429b237ce1c45f1b14ce92c8a53a3f48bd794cf44cfc7e13ee52e538fbbc4528ece08936b79871c3fcdc2bcdcb1f5407a2d821116ec824f7900177c88acaa4f0ee8caf4a867d108cfb2f28098db20737d4697ad2ffaafce1b3ddb3807e6443abbaf802bf87d29d10f47740cea9f73d2c3e1d27ae2e1b5b7e864f2bc9e81e13817fc1743c44c8f40a1e451235eee1678cd66b6d070e3540191e84373213bb9088b4cc32910412ac7bc1883343382d313bad1d46fb6f41fcd6d93d4435e198456bfd03b27f4ea1d2812ccf4300cffb10038ee2ed1b450ee13c96d004baf8162e8e958d16fe5f37c284fa31359b2625eeff784130e00d6ada370682319c7469e678b10c1bb3ce4cf97939d6189b53bcc2dab98ef824c286b672451d1fb0691586c219663b178ccf3eaffbed9eee75fa25f4c2148aaec211b56e9d9ef833c804812a4f4e9fce1c8133a99cfd786d87dbd689ff1820e17223873d97a60e44206b73281ade888f3f83aa4c0594d90eca5b5290ea538754c35b30da4fd673030006bf866b209626881f6f0553ef0937af4442422946992819fbcc9c3b10e676b704652be31fe321307c404cd83f1b137e0b6c552a0ed45087570455494455a62576988bec0acf771ee4c0024afc355d5603a3e7528fe592963acff6b7263ea58df0db28e4d1c217741a0cf79a0d1dc34b1332a5136ca0d5ae03c5c001971192cdd87989740443ebdca74dc1d510755e408d7361fba2c8217fa35e9f298d634f699a1f807a6106ae2db1723a196f556a40a0ec4d7a659eec38169598f7f5ee5c75022c7ad0433b780184284faf1a669bc4e28489926028cb33d313ccfaeb52bf9cdcb2ac181bb38dc107390da37a7779941f676b1debbf5c1dc226bd722c2709a1063b0f532ff89665e465bc3e7b3ca2b9754b655e3735ce511688b9e6e477572586aa4fe40a24b8cd06f1b5627ef48dc9122ccb0e5d497853be9f84617e7a372c6789bca55028fb347e8020fd8ae873bb6b072defa57d2c688e061e7155f09a622fbbba9c6b7a28c7bd58b44fb40de29844c6a702158d54dbd2110dccc53882e9b06eb6188f97d0b3aead242b92e938bca6310ce720ae0c8095e6c66aac9785e637bdc90624c20d30fbe05d82e3616853974da9588cf5f8f83b3927adbefb681b63a69b52629324dad129b91aa11350118cd38d0b66d6c5ba6b021fc152d96a158598a28d22150f9a2b628070889d6f30687039590d6bc3910ebe19e29fa7497808bb3e5725517c526e7a68b9a3cc2b51a1ede49cc23326228ff26a3c4c91d8163b8f363678c183a50a7b3378ce024448c63b65f82636e1f5a29fd7fc60d326e9cd02d2258d2115393918db1061c878a06657cd13d8df1161d24236aa4c4f5992fca006305d8227bb80a776a8bb293c7e82b10e329f128fcc6909230b052b1f82fabd2e82f9d28001605efa9d3bbac0d09bab1825f01eb817f4f84bae195c6a58fe015617b5207076b11b426c13190a9a009f7ce00a9cca305e26ba3d1565a650e2ee667dbcd1bed7c92b128cee65a466720d7fd139e2ae0febba62a9e7a3e66ef59fbc69f2a9ba212fa1f335a2c344e6873785af4f1e870bfc0358eb770d3a96d19044ddd3f1ba3cc46916e3b23eec41c5dee690767039ceff8cbf88cc17f42df8460222fd522df8455904bd746503d3c1d5743b87c38f34c8b4a4d9bf847bf67916e783a18a5f17417abe90e37726b08d1401dee4bb805ead04af134802416999ff8eaeb58b0330f0a85c1de4ade37e2f7cd4850448e44c84f7dd3dc7a243205ba9dcb4db6ec5696e4e60ca3bc9d9b4037a2c2da0293b9dfd9a0e93e3c69031fc0e459bc5d6477ea43728f8c24ba8895ed23dfad3b2a2951044d38af9a8843c00f256024978ccf89ac6689643c91449918914358e669303787c1a4b10dd866b75d15ccae4564779187c816a767e9e6610d2890a02a7240e4b38185b9a5ae296ba516278372edf65f7985c3b2b5c4d5f37d77a7c187a0354c265b5a630f8e8fe58426617d2adf84a636de526c94afa3a3d6ce26acd0e36c37db688b1f6c55987bdb96f5fe6a407fc47a3d3bd19a8319bb447ca14dd8b9809ce5a290f8367c075013eee5c008d1d300297455b07c86a7faa5263426344f529f8386d1bf60e1d5c91f01f00096879b57094a07b72a6b305c9f8523aad6c9de73e805326e09c54b3c0da928ee71ebabf441a70583941aabb669553b9f47efa786b576b8f9b92a993ffa2f27eccaaf2ab71e25146823d2f18a1e8806f6a53556c2f34f5347c56a85c7ef80ff2a63eda240322ec86e3008b84942e4c0701236692ad91c266a82d446008a6f4e44bb0caf2ca1a9615928f016a6b57eeb65c4b01e2c0152169b83348513cb381d18b7c9a64b133d0131d93d3060ac1130656f1eb7a7c4a50023166c9d3242ddff0c07cb2be81c92dfcff8809df6e4258949cc4258165f66611a1ee01b7c5935c9076e028da1196fe9e70cbc54db1faf4308024f47ceae522ca30947d576ab93530cb78f2c4840d38d6599f57990bcdff2e7e632c616376479ac13e2900d41dfc7f0d35f529a612150c6212dc95e5ae618fd3c1d32fcf4af21e6d1be77e566217d977feb8d02ed0a933c6fd0042485948513f87c9af4b7dfe0b31838ab97edaa8f321a0c6b4e0c5ff7b6e36f44e7bc8125760e0314afc279914f0e4b21d9e67dd3df91b61fe8134ae368b8608042c8c9676b030c71751565fe7c281afb138dbc054fa44060b0d115833ba63a111071651fe3d05f9975ef8506c065e744ccb5d4f834ba08325753ebedb56ed6c2972a9666055d200ab9db8580e3fe1dc28b4188bee16506fa4cf7a17c040754025a5a8a24121ac444cece591afaf8317bf3c71494d82c922a795df8ce73a5cb7e7c4277ca8cea2f231e5ce9ad01aa7aae37a22481e1073680f9eed76ca8d05b87e5cd8c73f4d0d651c3b5b6aa1d0a2ea28f6e23ecda8f969eee40d449cbeaa8dc53808d940ef75dae7f0e22ab6f70cfca28d6d735ca2d21696812a410bf7619b62b27704c833f1b22ce36d49249c490ea65ae828bb33cd83a10ed1f0a68cae1cb0723ccfc68fd333e5e09f5cf5dff9596be94437b1c3254a93c2390f0b6d27323f75995e2f073f0de5ab04431f7c5adf71f9295e6b9ba63448790fd86f85010ed2b209da8a2d64fb665bc361b442206f4e6074c5df578c140b3ea6d25af58dc5ba5a96d454749c2828883800fc19bc90d1312018837c5298183be743f42c1dd840dea70439158eb0e3e88fdf9c2202c233fe31213e821793da714e19a31a8976ac46aad4ee2afa162f7174616b05ea4abb5dfc396370902b5e20aa0d3a45120d0cdeb427c6f75ae361473ffb9d61d0139ad36e6e48a150c2f719a9a0a6ee87018422244c8f51fdf37e54d0513c6f9834e639da00aa0bc8a2c472137df60a2b39581057ebf25da810875913434b9f58571d140f6cab2a1cf4df09778cd6d1d301f18fc4ebc14c872088c2cf1ff2d4a2b3da91993762d7ada3d13fab61b78e5ebaf8bf21c480519a1f339ad791aab91b1c3da391b9f63e5e660d05dde398bab430c41ce99bf88e121c11c2b6bfcd7c4740f5ae9992d484ae6ac54d7f0b4126ae853d5d4494ee6d0530a9cb3c0f95b5c03186c52a1726f87b5370e1bc2403183aca35fe3cfc80e6b007177ea2bd30b1df758efef21d22af1ef083b471afcc6ef9ba4b16520056981262d0abda2bc24d00fc1a51f675adc123dc424645c4315a032deee7829f5eaec5bcd3fd88dfddf1a7ea37df57068c90c19c11d789f4cc5f7ff6b7201c00cacff06f1ffa6fa81e25d0073d2dce40911c53994ee0ecc77d400cc81b48329c677af20b2b0b79f47ae39149ac0cd3d4ebfe12586024581719b979f2cde8ee658beb53391ada394f3714ea1c04de38cedee9530d7b358b5d2c6ac2bb0d1729f18e940ad8ceecf0c328ed90edd5f68f2cb1657b531af2c1d713f1732540075a29ebadd60b7c4aa65c37c1efddb362be6fc2ca174ea50bc0d0b2a9ba527bc2fd846a69a111b911d49b1dc764168d23ce77f3e0948049fb407fe368c383cda7f2f0d4480a222456dff448e6a105a8c0cc113d3e54b6dda9f758da42a79ef66b392277f04c4cf232adc6ad64b2d05d9a1483f6aee3aed16bc273a533a8acd11be23c7efb24c65b6f30330e8e9a0b8ad3fe8f6122ef8bfdfab43c7c9543dc2045c5c819ff325ff574bf42afb0ff60b72b089860372de3367dd50ec279f6c5a1ba87bb999324e70bdec13b8f48e609fdfcfe0c7dcecc8be4209fbe5e804851e04d32a6e08c912ced776aaac40330011d2389e4d274b8b40561e8a20617ccd4aa0fabdea07c2f76db1428932068a094c8c1fb4885d29c73a06ae2d2c8354710da43413d8367a4e2615e6ff1bbf163ae47d0ad3a05fa37d457ae20a8c4f2a1f57384a4366570e95f241e6534ffc34bc52f0c40f86c8b1e481cc87dc54c403c1671a0a2f4c1c261f0d73e66e3125737e4a02f266afae9482d8c2c327b3c39e96d5727facf13aa9abf6ab868a8c1e1f597a27f89f446a3e72f7147bc7c080133509b2ff35dd3797691b42359ab3d1ee59b636b563697854497bbfddc7021b295d5c8507eda4f54d76e05c0aa6cfce8c7ba6852be8a4855ccd6c68e10e17380eb477400154b98ce0aab3ad921d442663cd4fac609672a0169420aab3338abbcf22c5095b2f65673281ae500a4369d1b6ff34d4037a0a57a6e22662b372bcf70b4606a37009493e0814783b377aa95ee32869c0c368683f3c82b84ded2c0a902966877094ebde7d241cca4a70a60b6d9a737df2549989afe3e06d583419cb04df4d04d0980c8eea9dc4b3507aae40949855463a99ebe317689fe31f08b4ccc03f01d76325f089223fb9940440df446981ad8776e37b1982c7f668d88d2744dccc25965a0c1dd7c1e185ae2d229f93a09f467cd10bbbadb63752057727c720369bd6a2a20982444f835db102d4a7db2940174fff039f42c4162caa534bbfdd3721be7df0b103a4b55aaed01aa59df16bc6887be858e92ec7b33e832e52c5955a4ea04f191246d0628be7a62e0e7f93e75651c317756af6eefc7958053d277218342ef35402b263c5b4fd78ab37c1d884eb84ad7f383ba3f2ebf54b38d16424490b402925e6a691d1299c5c073677d5d0466ce59c472a7043fff221c39f5e91865dc52bc91bc9f55a09c5eba1ac8daed1f2e70359f0302037d364efe3edca3528ceb997e97fb0dd2b3baefa17e89ecd7df40fc60e8ff05dbb2ea888c64e6f029271e3c119f54a894df5e40717bdad52dc00f67aaf1088dc7bdf22e98e2ede913287d402f2b7f9d81b5a3832f8475b9884182e465975a467cdd00d1b2c493158689c7e4add3c9c8accaeb89130d1eb7070b34064decebe7119598640c3a7941fab2268f28c70d58447c681961144bd685e504c0b757abc1ccd4e0eaa6a4d169cb2790956410237e74bf6bba9ca623dcaa21cf086b8af8039ec1ab2b11b389788b0556c238a2040c2b040006603f49d609de01c9a7e0aebe395da0f24e7359f7613447b46c1c4d0ccc1f36a29a878ef53c7b59ea53f2a177f59d3553ce4387553048653cdce9f0c0ff9f268b32753a2697f25397e8b2f6752705c7d738ba8a69ae8fa6df84a448d236b24ef0b316e70ced12925d285627fb04c7caac114c140af3ee68b019c2316219a38f155ab6d0c388b0cb7bb0f29e7c6813251a6e99625cbb08f9250542f7603b55018f4a79fc4e44000547d008b74cb8cdcce5bad882e150362af5ca216064fdf8c034fd064006d4da5db052417740fa20031b2edaa89099f223eb200f8806a9819eecec8cd774d0e55445e387da57e14c2bb50c59054b756ec389a2058211c37d690d6a51aa99ce001ee575583500cd8d719ac0a9df3b381ca88971cbce00bb79b2de10e47d5d687fb7fdf876e0631f4c1af86c607483d189b6f9321dbc8c0e0c149ab34b01152140641c207135d80ac60b2c6fa47e5e4f3ac74570f297bfcbdf2b84cea792040f47c4767d15cf9fba060912dff0096e665a4865ac83e6123f28b33cbc31e9282ae75293c362c899b9bd970650991dd5a1a4414a5d60572a3ab82d7504abefd300503223569d4fc02a51cf6be0b443e1a3a3ba51322fe70f18007d0dbbfa0c898f8476e22de490e014048aa9a29f98ed34e7c953b10a24840bf89cd3a54c0686f2b31eb342a74d2fb0a76de4af8ee479618f7665307ab429fbcdc7c823a5a4ad54deb8098d6dfe395845827aded1882a8ee3ba349b1513cc08e3b4479f250ed81f4c96d5eb246ec334ff996a15615636da75f91ceb36728be70545c953a39342c94d1ca49bdd1b6ce082151a0838458201f3a0f884ff58c1c13a34cda5574282f9c1e1ba403d835011ad4bb659b8d8b23f85a94cdca6e36bb2e031646f38a52708d8833e8d2dbb6274bde6ae53b4c63553a3e5990ec70ca6dcdccb2395662db4ea87d482e1444ace44a649b79255b8d65571de559c7b5363ba246a1e8140213801600047c44b7a790d967013e32194ff7fbed9349ed59e3c4c013dde7046aa4ca625af3c9b96d0b68b9693fe26ac96232147bc8506e035de89ff9968f50ea7a0181b8689b949fba6b64ac1eefda1739490f257c6072b414828ca3c0a871862f275777f7ba5781741ea5da2fbe02e05181a6e90d7f9ba0134148610580b51d7edc805c4503f2bb41cf6588108a39942d356f2f58313333fbcdb6257c93d0e7d8457910d91ba75e8ec1d6024ffe31909e91bcf2829f7e13eacb0e5569af789fd6cda0146e72ff21123ee8473c7589b0e0960aa96a78d3e88b2d09050552986ccd29ea338489165fe09ff2eef0514a7922fac6d4ea521cc2ba5961078db0e0e07a9254c2bd4ae1dab159d9863d5d030d26019f09f0e2bbba292ff031521efbc571543f9c67672e079601b691072838e3160aa822645206044f4001350bf48ea358269effbf507d9e00df202f47fb1556aace4291ceea2a4ce9713a01f80acf9957385f54de2266f086f907b0d81e9b70e7ec732fe05e5a8168505c8e08602b49b05f905902f4dc29bdf30b79dceffc39eb4afa263433d989eb5475c6c7ad855e19dc13e3010c2e91863983baa45aaec1b3194d00949a949bd97f4e9415f118aab0359bbddcfbb0fa74ac348f4a0e9ec58033819c513600630c3e43416f8b6081db06680a82e798011a23f4538211204f948194e2ecb96e5e94bb2df790e40cdd45b6fc836d44fb35d3c5924756bec4ab81b04789fe9e46ad08e772575328e78a80857fd54d16476f00830023db323c45454e3f8f93f1c27211fc874a9c5c489d9b97ed4ac62df3920ac0d71b527d55609e8433931e76d5df7942d08b78e88435db45ead447beca4598766723e59654702206f45a0ea0e92c95afe26be5aaa89f66279f8a6f44877cc1cadf32b68c93d90e8651f333af62142597f3f183cc54ed2d45deb596767cba661e885117fc0e66405340152d5335cbcb39b6c976dff1c2bc7ec3d6b2b1f95b384360f14dbac9ad6ec1586f357505fb40a6cc2e79bdc804769b3c00037609e9e16e938bba9cc803a0ce354eedee782b6a791cc687576f130fe79698657acea31534f898076521674ac90a7590db285c2270126f152d9198a89e86020fc8012d2c36675804a488cdfcf3beb40ad766a92a1ef3645cd13eacd5ee9a6c255853687cec4b93227f2005c45422cf77009f644d26e5eee5f1b87ce19a701164f123e51798179fff6063d8e06d68bc9ce2253c92a2a00f27c94149be924202a9507ed2016c79d0d13d822990c8acabee830c2b6e2c2634cd93f19838faf2140e2497036ad79a8f592094324a8b014702ea8367db1e099e53309fdc94be619be1b37580de778e8d586bfc666d2b302b5b821272c8a80e264f8031403c1556c1b6c714c9effa5f7e2c2f878a8259aa8f6ddbb86cb58ff68d646b442491c8eeeeee1d1f09c9084d0835320e674e6d736b1f0e1837f7a5744e3068a23042686fb80645aca104c7ed5a457cd950073cb76b157106d60186dbb58a280343551146970a457cb1211146b58a202aa2ca2ea2e2ee0d25c4451dc24a658e61842600180008519b4dcecd0a55b66c781bb35dab0a147b4315591db8204649cdc13e40274804aa2451bb7c8cba020dc47842d4860aa480828623862012838807667471842cb42384710211de6e55a9f2bc5dab8a0baae090c4b5d0877390be4a1c5771e570e6ab9e726a1824698010c220ba09a1c4d9467bb7e36d52ca984326269b360ba654a981094c30025b2540139c81027c19e1b181291728d81a412ad8160de10b8ad706a64dc800d3247ea8026f80ad149804ae37784bc0261720810738dcc00313bc24606cbb16116b207106104488d104d7ed5a447021c2c8593c656fa836b226a8e0ca22ca4d820e168b238c082ba84b2ea31ca8d111b689184ca3a36a6faaec20b544a12d88585c99f6e68715b8005a6c339c45515c396bdb78c1bbc9b9e9918385505c394b860aacd5c22222ca71662d46cded5a4408eded44a614402c1866bbd6931de010d86ed77a82825706c64a7847b864042938dbf2048e81820598b45dcb890f6e8ec033dbb59cd86005f8b45dcbc90a6e58548e7ae4fc7854a69c0a158be5762d2a52f686221ae2b6aa70d949e07631f79e624c1106e212246919bc18bc6cac31ea2071e534a453c69c08e11d54398743278410423ab38bd6a2504f61436d08218432a718130c2e91b4ec62322402b0719f730e2679d0767a52231e087bc09a135731469b3df8977da63c09e661e68dd42a2cdf75d5b0af46e79e0452d83e93c678ab8a2b47759872c6c80258735e1659407580970fd7d9c02867b5d7bd37bb9e346912b32cd36cd194b704ca13bab48c94b947867b67381cec987e53de1a53acc02412a944b17c5d31eceb2a65256dc7be2471f6646abf7de4bd419f9d53e0c624c61846164d81814b110c636d671e5753e4e951f4e34df1293aa00f3aefa6783ce0eba75ce1b91264d2a2298a8ae0b13ae50ad51b5c82a7dea0d0942b269329066a5c8e5201ceb9b989c962b41df99847796fe6b7ba5d519c6e8537e5f1c83642712ac0ef5fbc40157c477005df0aaf0cc7037e09143ac3ed80fbd258983bea4786db014f732063c3df53865d96898538b24cc16e76b3c49001f7f2d6d1ebba17bd464baa11ea06cbcf0942a717fc4206a00f7829ddb8179661c800ec31ded5bb696d9118e38c31fe852231461aefd5a8e7648aa74c0286f1c1d885834d5ceb0720f67b9049ce0e84f811031afbddf7de7b515af6fd5d81535cefb5a800b1df3b824ade1d91bbe28e84a61cb1dff332258a7d2fef316de75eda0e06847db9b1af5b6de7b2afda8e95750743581c097d2c60cfdb33f61c8288890fb02316d12862110110e38fbdfdd816eb40083b1e25e5063bfe5298b0e3554357ecf89bd81a5263c737768c5f70937ddfb586dcf8391bdbe0426f79eb460e5a5bcad725b47220036ad9c870004401b6c441d1966fe0cd6e9cf84e35363a9e0d7bebf1434a97654be9be3837b63c416e2983d852ca2259842d2f6f31eaaa9b31b67c8e4e109e1bacb1e55f280265cbc31003952d3f43103f10124289255e98dc208d264fc878228496285086a62cd9d2b5a258b17530c2b865031b6c786857f88166b17c58004030c1e28cc9ed7d3d110c68a8871e3b50fd3dcd299e5a9f2212bfb0e8efd3de83f20f52201e6a3cf64fbe7becb6e6548a02b5524a0f74bddeb11c4b5e521ae980755ea09340f0d863061aea81c73450bc8babb963114b29f61762a042580c2f1459026bd5a8b89234e7c01c04b5e1178c52624fafe47a952fd82abdc0471939168493e8527a43af8a38d7e94f2b66ef7df70993199c0a4e6699ce8131eb601986b8a2bf6c8565e0cd1dfd401ff4296c286c7a4929a64fc1a9304f8f8253a168cbb540104bde0c9cdfedca00fb396d15b0dfe119f8efaadfe8449cf9771ea3fb1e931da16bc2e4fdf1f01e133743168990e2c19e2212bfb0aee7886360f7701c97a21e3a11d862bfa32c3a725a4090b13767e54a91d10c60c4e7a8847e2a09d22a007fb2aada49e5e3ea09cdf02758508497168e01f16e257fc800f87a797cdd64a578e8631aac544f4c8375c143332e0a1fabc430ad823771257fe5202fc4957ccd120dd573da8372e8112d60c959f11bcc8f2537acf82d8632207ed3b683022f10d23ef2e0df7d4c307b9a8be42596157f652536e4b0a2965f625956f3c495846608c11083544928d79d4604b22efd9cb892b759155739c334b011e803069c637ec18fdedea5a84e5120fe3a11087f69a0a11e7b78a0ebf15a7a171ccb1ec9ce3c8f7dfcc27215862c5f237d0c1186b892b75915bfc0ef9248dac8f80de7084015bd8c375a77a548c4712e084fc4894735c14ca8fc4c02369de634d94d3a553ff320160a4ca7d1a9aa6766f4cf50adb3b2503ec03c71b539a3205095040c34340f941de640a69ffe60603e754f76f99e4ca7eab31ed3e34d7ae6d989cc3cd340433dd94d07a2f9cc8998e24f37cb291e1a9aa788c42facecf769475c70ac189e98db98691f4fcc67cc543273d36f94b963d1d03ce644b2cb682099678fd140433d32cf0e443ac1e454b53c31bfa619195246332393d9ca03939d0ad7dd0c0907f556f41b9ddb4473c7baba27fbcf0ccc1d0bee2bd7edb49d148f69e6fe473efbd53da6cfe89f7813965fd581a149d9f3b0b29cb29a477a811ff0e3c7a617664fc337eca7a5284022f5684f596d32fde019fd53bae94150db39d2c2dbf62e38d6cc6b86376cc733731d88cd548bf16477c1b1320d34640f249f9d484c8365d240f130d781a6f7c89b740abbe98ed593a200cd4d27427393061aea317de64031a7399199cb5c4603993e73c7aa19bb615f534e2139e28263c91cc90e761e99bbe058314f11895f58a69b7e0589abc7c3a6178f129aa7ea4f77ac981c237322a69f34d0e9a6cb68a0a19ed34d079279cc1d6b86e624638a39bad53df130afb9eeac8435120d721454d16fee4a8a02f2d97be4339db2772c177be253563b96ed824f51d4d22b76cbc7d32c88c2d317ee39fb4b035db7d7ad4e555b759c23b2b68b732ea6e0ba43f1032d4b58f76531ff5c43b8c18545837382882d7af8a95db06838e98015b58309d8b2fd9e9062c5116b08688c71c4ba328bd95571c5d011acc7430e5a708505f34d15d6a59352231398c00b0be61a1c5834c0f77470e74cc2872070294aa2d73420f13e50e3679146bdc9105467e865e84bf41abda53aa5b79b4d3a769fecfc72e42725bf295035bfc2349224199bbe6a404ecf4ecaf13a1147c6476598d3e4fa53767b26cbe4523ee5441c6731e91b6abbfdc6636f397bd2189a4d7f1a10bb8fbc376288ab79130f95ea506ff782a3e93139b57b3cd3b3dae7fafd33e3adb0bd1c4c84baa232a2f77af6f7ec6a9febf5d9efcb6a4c1228afe924fafa18e2e4c143a5fa51288ce73dedb149df8cf4d8f6a56f371b26ff91ee63b546fa8b326fb27833ef1771ec37f566a4c7be2fe9ed66d35bd2bd7633de0ad2cb7e519e9459b534e3f1a0afe67d892b4650f470e5ca95186c28740082d0949d6decf6588eb0106d2c4cae74c1f2a4cbb6b49a607eb3ec49bdbdabdf49da90bbada601c197b7f782f1ba401ff75987addee4b597f66f8abdbcd789d7473b0ddb3a6b9f0cf6fb7c48d76286607a835b7b8cdee026c968cd7eb3cf5aa97d48d76e9fcd1bdeb606fd5c7bb7ddde97bdd55fd26f3d768f6907556438e8e354b1d7df6f5917f91c181498a4a5de34bd653a09dcf7b24a49d23eeff6f2bec61ccbd74a407b249992f91562ff86d83ff97bb799d76fafcbf6f67d490382fd699f77ed246d48f6e4eb36a3b1b4184dc69a06c4de07d3dbdbda906c5bbdc970b59d4ccb2f4b525ee1f74d6e6aebb3af1a10fcfb9adf4f397b4c2e1d669ac78cbacdf53a1167b7df14a88281b929a7b0dfbbad3d98f7341830de0a15bbdcd87df7fe49fd604eba0ea353d8ebb17d7d8e47ba86358685f4faec287c9aece20aeb2d892ce5ed5501f2ee43d23e9fbdf6ec6f4a965d6a3b59972db3cd2b5c353695419fa04ec868449dc80181a440c05bb671f644172b6948295b4f1c6d29c7b052ad70b172c696eb012b5a7800dfed5a568ab0a448de9632a348e04e0237cc768c59a49fd9c6189f41ed744a299394a6dc82368650e5a410789fa9a5b651bfe784950daf63c31f5e66d950be2348f9f96d5a08e3e4098ed86eb23069163fe5a58fbc3c6d215e3e6a2d9460cf2de3a715a23db33ae59440cde3014f35ba0486bbe6ad706d284fdfa9941a5b218a849ba2092f444b68e9e004564e9dbdc7560b881d7160c5188f8a3f394d7b80ddde4eab566bc9b6dbb55a421b07236c7e10c612656c6969b5113af8e506e8acb4444ce2ca06b688ccb041da40958ef9cd66aba6d6c185ee80888b0d8b28461454ad886a40d4646fa822f7deed3b0a0854a874a194f20053ca62a2c9934d9918daf4d91383126143a560619dacf10872057ca24376092f6e88ee93af81aad6125136cc762d25a6ec2d6a8046d2a6b5c4106ab0a143c8259858e288bddd0c5d97058ec9e2734c19e0ad478f9ce8a48c1aac81f1aa9a2da1e007e46ea7b9106536f28e62802a28b3b7c2db118ef1be93020a27d4a472e040d1ccc89c624c30b844d2b28b5db6d22923743ba0c4eb4008a186b08bb88496123cb49208e370c3d61aa1f4ef24edac701ecb4e8340d09e3fbd70825e8ea810487469259165490b092568b2cfe0388e7bd463b4d249b7944dbf327e2721216593aef5d042428723a6c89c4ca4974abff276dad7759d340482b6a9747cfcd22f98cb94ee4da5bb954aa61bd925986f769736bc4b3a0581a00d737c3a3e4986a07dd2224861c3e8cdc8c6df8c6cd249f7a4bc916ed2464ef7dea47db4934e9b54d2464efbe2386d2d86a4e120e90d1513937d26fb4c3643fa2565333333a59360664a276533332598199a194d434343229148241215a2f4b74ba55612565a4934b9a5960fdcd8f6d7a4b7a06dfa296fa76d44e6186bd265b2832a92def026914824bdc51ce63232a7ebc4537e4ce9d94da5d29fd642e9566ff7a5939e0681a052496f38c33ce2c3e8edb431dcb814c46eeddbe9743272d298f0a10a2a3740010636c8018a09a898c11558d270820839c080490ba818218bec9491a808e1ba40024b1a2ba062891c741124441b3f9cf184134ad03244118ca2602b5a18a1e1c40c8c9841ab0c2e4808420fca18ea228c211c3d1864e9c1940dbf5dab074c7a60434674036821d4dc0eb743da8d6e0bc6bdf3211d91909050102c6763b3756076f03d25273c272ee52452e6e062af62e834fb291fadb5aaebbadeb67356bda136a534c6fb4bdecb0c2fd40242086184114618238410c218a11387f2eebdf750313aa8d28163c0002564c56903438c21ce109fd05bb2b9009cea33ed1c8faa91bc946d86e26a30a0fd6a1a52441eebfeb1ae5e92b1b42f912c25f73658d67306b89ee5c7825a8f6469da861a4aac7bc872d007ddb9da39035cbfac7e4decebad1fec2ac4b55e1341224e4ececd8d4af5a350d7e52c13bb0a714decfa2bed2f2aa18adad830b960ed023a0d233da5945638e5932f3e00aaa08c3af449222e57dc836f89171765bbc3f764bbc39b3730932b362cacbad90163d59f73731324ae7476c02fc4154f5cb1e20ef8bd2320ae178018dc17002c4cb0c0e0a15a469c618417604829a58491d8ed70cf3d23aebc4f8814121a0144c2233e096a5fb723c6379fc4eecbed88bf52881412ba9c2a1e520ac46d28ad0c6fbf9490b9e5a72bc13820055de6deec8eb72ad8c42c5842d57516472638cecf0dfb46bfc9ebba5418863daedcdb17a5ae561c5752dab89ad9ccb49b580dc7a5664e9c19263fa00f78440f1bcaa21e3051123a82077beb71849529de9431833eb6130f1b1e8504b8e381c01d85e4ad0f6b8a30971c32a1ed4e1fc6448eb02921f32e6847eb56f136ce68b1d3f186b84832a14d8936849bb200df79d9f3472f1ec52347041f6a443059144374df2c8edf50db55f10ad59b8eec566f36516f357bb3b8e6ca69435d93459bbdfd80f1c78639a43bedc80b2eae36da64c36faaa2172893b882ef92ead17ea251bc12579048f6a711b959b67195fd66da959e05b1e66dc4c99ee99fec256de36a1e6a3da55ffd73b768244fd29a46c595cbdb8ce2e5a8c9bebff3493c4af55c57f6cda91e4c125def4ac4914271058f63110a1f15afc42b11c7b18a8cb874d9307ad9301ec515a44f2c7d329fb4a044104fa784d877ab532e68c378e456f01675b4e125763adc2951c9862e04b05dcb88238cc0418ad32926c6f8628c5142e79c7328d48b31c6382993f9e43e1939c1180e034208636747c28e42c8b223dc31aa6c268419ea47a73ed122bca150358738585ac84408416cd70a8294f9036cd7a2a28d0d83116b04eca0ea9de6075fcd30549deee2bc0208d6275a05de501928f256787b1e6d7968e53a78a18fedeacd66dfdb1ae88364b5d2636e33bd9d4681371d7bfeba0ee8c37418d3e773b29b3ee7b32c3b4cce8e7356ca27e5cc669be9ed9efeb93d23113c83288c7a3d97b37f1c69c01b6f3461dfbb9cbd0531d9578320676f4176d43ed97daadc32bde5ececf5c11c970e93b59ce332ed82efb1df401fdaa1b324bdd9ada9b6d35b96e1b9e3a64383f28bba25f4f1e4b34a8551aa1de97e4e85e7763c9b6de768bd7f4e4e7a99b18f20ee6d869d241a416d7bcc622edb123220bbbb8336a25e865b421fb40b0c2f449cecf145b26cdfa652c40e401f9b119b2d5fc8401118a08f4a8f80bd50266aadd448ce7e8fd6fafede53e3dac38c8a81e1a1db822d0e8f111d03bb5f52c4bb9495b4d22b957eaffc76966917ecaee3c3bf27d9c25544bda7ed68f3a57c8fe59d4b22493d4512889313571006bb881f37cd12750d1478ab794d22b4b10a1857fd45baf6ebba8e6158e9b7a453290ae0c79c08cc4d77c1b194a0003f46bbb84201cc4d3a68c7bce14d6eeda4bcbd9b056d2dbf293b2691fbea07c6e3715d276297cea0ca4969a55ce75cad3bd65ed01e89303eaa2599306f8ee8361042299d73d79b4aa808a3347f6407bb3dc2018c67cfc75cf5ccee693b989631cb7c6d6622c70e72b2e3ad171bd39bbc0c59f67caa85f8f9a867958d3d6a97c93ed8656eca1b76131556f6bcad41fbe698cb7cefdc8e2ccb5b3ccc6f8641fb066da7c5d39db643536dde9ebd3657ec375fb7d964359e1a5853936b48dd86c7ba3420f6d6fedeecb6cd5b3caa749b71d8d3a95dda10ecf7b7fe3ea801317dc8fc16edad4eb5f0aa13733cf59bddbeb4ec2e751d683520f6521e957d64ee769691a03e73f3664f8f236fa4cba3f29079ab376cc8bcd4da75224d3ef2b610ec319f792acb641fed313fe52d466f419b529d53ca3e24a8c1d49f94d995d9afbc0ebcf7486e267fa594e1edf86bedbd64beea7ccc984f7dd5f24f04547cb99b8cbac6bb21526f3f29169cdc3a703aa7724ec78c979759461c30a342fa9032cc52146ce06e8a4503f75ea7dd39299d54e9b8d662aff5bd9b5df7dee5a0ea9a44b7b9eeb2db73c639e1b3b7f6663f4cdb791752ef1c7554be53eaa419547a91736628a5c36eb89f2f8818e77b319e86e79ccbf4f4523ae72eb3dbd7bd2eef569eb67324fe2ebf29f25da08a1ea95b6af4c8a33b4072ea69b7edcc81cd2ec4e6ddcfa69f2edb546fa7ed6a36fdf64c6f369bead874bbd98f527a03711c94f20ade2444c9dfcb4b9bc9f92ab34ca75a80cf0e043ea379ebe16076690edad4488f7dcdfa343a97a8324516299aec5bda5b1278b337233da41749869366482fd28b15b9afcb7db9e5ee51ba73279dee5e63a3d27183e54b467829374c56dd5bcab594e9d6e626e5f91cd8b5eb97b6a35d5a961bc3b416de94bb942329c3add5ac94df14362b39992d1558c2bc6153bd295bb8baae5d2762393b4c2277066b92c8161af0c61b6fec2c4fecca724b4cca4db18d24418a0409a3162b64cc825a912426895908d98c0641c78b140b1b55cc76d37c822a1904190428ecf6367a9d06048bb6d20d1ecb3e4768d8f96defc88bf4bdaa59908f186a71369a8ef7de7bcf260bcc03b5bfe79cade553de6e6ea28eab376b310a65f5f657bda9547bea39678e29082c2df80b46b8e69b8d114a0b6a76b952faa83a50559f3915e665785bfee6105264cfa9e59c15ceec4335169ed67900543d1da81242722abc7db4e5532dcccb98cbdf9ad9bc06faa8594d972d4f7fdd04b06b4561b4edabf67b67f6aec37c5a6d47fb95b75fa63bb7e38ac9dae9b5c77c480df4b1a30dc968be3683fa056d4c63da4ecd1a4f0d8fb50565d547bb7d4cdeb45f37e54d7b3c4cde8224a0dd6abf5a56b59d23ef8d4a3f6f837fdfcc5bf6491fad36449e6aaa0db1c7b421f598f6a00684fed7b31a73fb189d6a01bb76ec1ab6cd7b654e1322bf4d0df3e64d3ab06a43e4b7fbcd7ede06ca12e70c70c232e9a6bcc1e82d682779dbfa687fbb947d32168236493ba83a6539471b226d4d963915de7e6f49b164cfd74f19481a04829828654f0342d2766a3d65c159296917c37e5df649e8be905c4f428714c1e82fabc36a9f1a7f63363fdfd43b30cdb91d1b290a713bde69784126a8a540528ab17665d76227d1c752969fda0e49e24b8ce5d6b28b5d163e080f4b2fb6c05eca2d9df6771296a83fbd19b1d919c3823ff366f3b2cdacb59ae27c82d15bdebeb1b431323558308e9f8eba767164f9aaeda06c92d882b31b95e5a69991c9a81c934df9a5eb44984c3ace3b9a56ba0e2c914e4924b9b32cf7cd4e6a2cd0cf5fd066cb3db33312516f9e719d0d086cb60f86e9c0ebea332dc87e11d88f06c76567f5c8dbf719767d5e20b0d93ef3f54e66940c9c41158e36b89148c09b8d8dead5d4bf4f9d64b600f4c61b6f5c913b7e85a1d010689c4fb62479d9729a62b2d7ec723fc6182351eca1b7473a9d9a21bd64da0ebd97741c199f66d2b37c42a572d49c70e77ca070a8b17051a77ae371b32c4b72b30f743459f618e3efff321aed7371dcc398c2101c3a05bdc17d37e965bfa3a0371e5c4ed09b4a4b8dde5e450ebda1b0a47413284d698f6ca334d33ef719d5784752d00ffd8ba41da51b7b233d09f489a761d3779fbd67da459a37f9656fa44aca4efafd86bd56bd492f9b74f89b55c60173edfa575f6f357d7cfd866931b870d16254c5acb36e0ac831c0c6a137233dea9d46492809c0f7a869deae33bdc9fd742ac749af7f51b0d4ed09d750782985cbfc33f1546f42e2e923196f05faec3a71675bcd49dfa4975d7fcae8e9246dc8ccaf371e324f416faad251d027cc9486fa9d14e1033b7c705f90704204229cac90001f90f098f042842f2af8e0d878546450f4ac706b7871d2c47de1b4e0c2c90d6128c1090f1f986cf1bea8c209027ca812e58991856bbd26a0a18613289cbc2daf8701588145013e382b2e064e84e0c4003e1401006328c104216c1146113ab03f1c71c30ca4f8818d2aac2fa0d814fe0005084e9c119cd4e8f041cb0e589c48625f6b3c135c474e9c73ce39e79e73ce39e79c7bee90159db8ce06dad86c783a6d78246b8db1c618638cb14afac5097650f596c4551179f81722ce3dac8fdf9cb5f557de6cb531573d0354fd40951287552e708f83aaf808401f70c6e007bcfd2832fd8407e09bfcf100189bc79ac7bf2e11070011473faa5e51ea15e5785de468c78e91b0c7f3449c8c722ac4ac548f9f21e20c8049c411c075f81745e588e2f6a4ecf8ed35b95ef3cbf7c223a8db875623e08b823e703cfee2c8427b7b459508384804785e9431c3a1b7a993d45d35cdf243659aacf3420c33fc08c598f26bf2a6bc2b50f55eca8f0b46d25659956fe2ea7d005900b948006cf27b1257ef00c84fe7571457ef393f05144ea8c9efa96ce445478c91e6504514656cb79da4f4bdf7e67382afe778cdb757f4be3815b0c7131eefe05f9747c68e0f5235cdf4950bbce9d8f13a9e17fdc8c84f6806fcf394b81d4da0eabda3e70654bd9f90f35bb23327a514420821bcd975bff719a0ea39372a170c9f83a40dc9868f38880696a4f8e2c2f8c9000ca9215c1b71940c55faa21e88d30357ef4eb359cd73748a381522e9692852f652cd5048a724944e914c430cba10629101a87ac771d9b53ba2189c0a3f6ec7bbcb92232703d96bae96ed2ba5d4a79e64b4ebb720383570056f8a91b13477110785a34a28640757287d42767045a367b2832a19bda1b68dd13726bdd56cbbd96c8bb583aa6c93351b491bc9d9f659a679a0eabd26957f73641cf9da8873b88287d50b58adae99c2404403691652ba22e79c734e1a39e79c73ce392af596a4d21781e0425f699c73ce39e79d97376f33bba30a06c6b29d69373f4f4f9105d9310cfb743b8b2b787cbab2ba05de6e6e7ae4fcc050757f0fdd3dbccfe666239f98550cbc598905bba3bda1ea17f8ba4522f7e968062b40b040c8c2e3131c41dd53432655e4b8792f0872b6b539fed6d3bce56c8a0343e951b7516197a75a9651d906aaacfd75dad55b91edd8b3bc5d9d64ee7bb50aaa2ca60f55f6a56c2fabebac51675015bb70017dd09e96beceb94d1ffa38022881ecf18076da3c02b8df9bba6ec1726fd9b63b754b96595be9f5f680c81893b8efcea687ed5a5df0b0b7d276efb15d8b0b2fb6d384d014d681cec635e0e6c0411de0b2a4011bde1276355075a58d17526c208e63d988730375288175cce7a04d6ade11d5302535f591b7e391bc1dafa1bcc3f86e454c922468a3def5547843e27ef3556b818520c88294213e9e6a2d6c400bc911429226441e468d630e385018b623b67d6f18e674b81d3a7adce45c81371dd88ed771d323e7074d119785b76770bccc94ef3da765b092a1a96d382b8309a84a3827a9cb1b2ac39f709e307c8a6aab715cc5a362a582e766ffc5ad7fb53a19eaaba4b556fb1c243d077bb8ce61300ec821e3c268bf5da390efd9b0df93e1bd17df8bcfdd1201f0bb732d2e8af6d3e0651237c684dd1d85b1c10570aed473a15b414d2ac08d18aae2a1aa1681b79a1a1b958e8ce46d78a8a1d029350c4d70b38b6127ef85950cc178d4759001f038ef416d69784f01b76227afb391d46940e089ca2a78cb327ca219c9dbf2875243a96e3f18299e573214e58f825bb3e08959785bc2dc889df4e268bb96175d7601b66b7971c49e34d263a89a9f026fd99ef89366246fd307b1efcb1c510d53b6d376a054f9b26b7921653b0d560db192a1f8fa5bf3dbaee8c9d3cf7d37eec3a4ebb092a1071300ef03d629580bc6d0473c7c2c4c8ddf861042e820840f08dc41f4bd2e2e04ae7c966558461fa9c57ba72935548292a1073f211099c539e7d416be6a11638c47a0f4f2b084a10f09e9e39cd3e78921e0ad42b8ec26c62bf2d165718289224819830665e8d0230a329270c30a3768e003d61b3bc6b883b7a9b850820d2e96b8ddaec5451525b25a1a216a0fb1e71640c8de0a5035d10657eaa0b8a0c19e5c38915ed87adaaec5c50d2fd082cb1624e0dc600a1ca268c2ca9011b6e862d32dc008c0123431bc38dab2022b5220a5eec0c68a2d80108507b6a8b29f91d616416c77d276ad2d78d84ffb60d7da428969bb96165ef6bbc5810b220b8236361bfbddbd5bf7650826bc70b283277888c151d00e4e98d4e00b319478e245ad1588196801c59424ac94d1042a7ce80116454882872094a86b5c60bcc0d12d2b5db1ef953a839c3a831c1769ac7941165f00f103287a60a5054004210946f8e0092d46bca1c509355028d5162a5b98c0320001510c81ac35a83d8cf1e58ae282da829c5a6bad34a82ec8d9d2644b0b78902ab87a5b54b0371b2a49a84ad872c326b16165ab420a349eb06285118a30c6970bb811841fac20e20a1b6cb9be70e28220c75959b5046134d4d252e5a5a12b0db454a1450a2b9587ec074c6d16475908a166cbc8873d279e526737600b57463a182dd99bc4f087eb6ce0a385aa67c37b0ffe3d1893bc0d5b55091b35092726364d1429585bcc500307370c59f14510378a706205891728b1851826342e2751c83a291657867045500a8260831368b144173ba8e0891a433f2c318506397cc1c2a8e4a5a2a0e2d8ae35041b8620f4a6b04ed698a5ca154bbca1831dd278b2832ccc6802cd82c6a6a54dcf0882c116443b98a1440ad440a309b695258a2c565a4ca8a8fbee8e230e10f6d26f061aeac15e3a10d4feb0cbf76097f0d82fdd933dea9ff7ecda4950631c57f52ffd429ac3e0d3fc3f433d33877feff73deff7fefdd23da897f44fe928cda37f867a60fef4cf4d5cd5c39c46c3e81f9d87a1fe795cd5cfe81a737652d6f4cf508a02f2d87be4f51f7cf94bf7c467fae73189abfa34d63f31c4553d3cf69fa19e1eec50ff3ca1c8041eea9f9f21ed501789abfa1fd25d5cd99b6e62ee588e8bcc1dab1e6b02bfca8ad9b16cde6cbd4cfe19e239e99fc7c287794c06bac76eca40433d57bf2711086b024663fda6c455adc798c01ae867c805c79a98069a7755be94e3b12b965cf1645f071d244149f1d01379ac89d522a81af4688d346c6cd2c0e26aa3d65aaff0c1aeb5d64abfbc2231aa3041462499b4ac106a559102ba84a2255450c4925691141ca812281bda76ada22dbbb45dab488ae70f60d72aea616fd72ae2a1a886fd3c804bdbb584f0259ff7a8f4acf6b4410d1553230200004000a314003028100c87844291482c20d4d67d14000d8fa840664e9788c32887519032c61863082104100000012002333465061122dd34d1434e664711f5d12829cab5a3907b69b825f59363c47b9ab1658638d4ef907e6db7f24387bae528cb1dad981032e4a8b763ba0e7bc3710f38624f47913d68ba973fc4f1ed38e24d8742bca18d2d67e8d0fa1d86448756dcc9c80f9ab1850c1dea8703d27720ab176dba91913f68c4163274d48b63ba1df694e3de38ead5317a3a48f6a449f782bedfb46345c890a35e0ee93aecdd717a39cad28bd62de40f0e7ddba3d6e8c611f96356697164711a2a4d461897a3a3dc47e862326a4db0b2983488589590dc6674d04d13c32c19f20f4c6c5848e2a621f712227c6963939fc931821e9a25456e1d7b3becd5617a6a24eca6629c1f1f98c54269c0323f0a7dc307a07852677d88d905c4e84793d35a63457f38fde77ae36875bb71dd398f199ada08bd4ce1182907564b641881fcf32672a10573f188e08da4ab11eadc52273fc9ce03db25e929bdaa8096d9c33d851678aa958a45f7493ecc1a28420b38fc38ba9e2aa17fc8c40fe64c210896ee1e5fd996c2ec5e756d4fc691e1dd3e3b9c6c613406b020da83ed784726d2b7bc15816eec7e81a1712cd68bb72b461c9e7a46e876f85a51381ebcdd11681e11a5fd790d53826a8162f14c7d517ecaec632e1d5e37fecd33041a2b0e81c3b3fb360a6d5b46ccf58af6f8d0328de6e62db0fed11663638a4d29112b2834a81262bd48dcc7c663890dfc5d5d7224d241a85b89d83ca137942796778df57fa5040b0c93f502d4d609a483203e0e7d02f67f65c44cbcec93905138079f97d4cb230a52f907cd45ef5fa42124d0f87b71088a617d6e75d0cbccf72c0d082c95bf7c76fc5438ad23e6da3d08ce374a0723f34b4e67239be169c7c8600d2537b2a576019849beeda1056d5b7f6364955a3dfcc1bf79ee11f380723983852c883b29358030719188e0eab540d850c2eac94ebb073743cfaec26dae164d26394d11f3a56e1505745b1b3883178704fe1041ce40218fb89180315a65a026d87467a0643e4d2797d2cb657d81c276bc45b5b934f2d55f13591b95f0d651546495988363d73712cb29b7f89f2002895b05f0b6b11eecf1f6ad0b42b2c06f648252f04e393bafe9e9497166fe36f7ce4407ccad68acda85cb6d5a138a612daac9db1690f52197415f3ce78e258357102582cdb6c48268528b1334f9509267099efb8644f6f2cf75fb8044e218114cc16dffcdb7e7bf1ca3c5fb25c29b2a74d36be0483180b32d05a4501ba6c9b330cac90614b6210664b03b35d0c136eb22d2ab2e70e6ab1e286ddf0b600c5f26000ad1c77e4794f67044c0821a244657dd640671fa42379d5b475525708f5c138b2006cb30e46029768f8f92d2258dab9a330ca0d67bd1c72ff560d1dbfa7d9afc53b87f3ab46194736abac3d22fe00982ca151492db2ac7d68abcb9f6e3314bef7f37d84f939fbae4ad7be6c2eae87a6f0e74ffd626faaeebccca384af354f55c6782bc01761f6a698684c47542f24e672818aff91c77f7963c13b97489a86499b243d3323bb9976cba2f6293464dae2ad6f982c67b06c9817b4ba0848c3d47506cfb2b2d9af79d196e45e4dbd8d0a29004615cdd7158acb010ca9f00657ae729d38614d3bccb8475562d9ff8c1954a182690c2b3febe5f1504b8ee35d8ec1422cc8ae9bf725d56dcdaad9a77d39b73d9b6e82404a958a454e9306302005811735402b283e15c89e7752042ab10f49c4d7da205b60d869a4c0753809fcc03149c687aa1238315bce6828e11136803908f42ec54b4cd83f6c46c0fd8e7af50ebb98300a639bf5882ce7446adff8ee680baae50118acdedd8b54ba115043072c27ce6e54a8de40ebcdf81abac216a0dc77a841a2cb02ff304d8b245b4357803c94c252050b485aa5be9ba980f2bb44457bc8c6ff8ee48c5df2234776f6cd640afc53e2bf714c44a33c9a22e1edb0bbde6ab4b8eb4d88d7bd386e0052dcf0e5d296d74b41436546c3da29ac1704ed7fa39cf84626f273a852475f934d761af6c7a6c606158dc28809b2811b25b5baaad25dc63baf8fa71f6682c403980b16e1c88a4358b59bdc29aff4e8a58b179d3ed5daa2e15ecc3ab7632d5efdf8c593a8d9a35d0e37d0b44ac55634aa64895172020e8e425bf2494618949013c71c526ba901b13cb014103829353813063d0e58a2114e1b5f25819b3e0a925c06c5d35fe70f31fa833105015e39b87456416b673f08ba3f9b61e1036b97a85be9e31730c5cec2d84e5a97194f93ab23bd46c1b944b7cf079e7c9429e5a8d6884d7672306013d1baf3d78afd6dd0b3325f0d47ae3096af37ab8695475149db531cea858128e932e11f3e789f140e70c439764105b5e474023eb8d0bb35037037481dee7cb131ab9be0d457a67662836d84aa4a47e3ae6b495fac16458cc383e9fea76f91066d36c4177bbec4ec9d98f90445f1eb99130abd9f848376156d1ef982d955c47014b026a6f0ebbe3407965a8cd85a47103d856177abef0782a6ce4d38a76196d6c975b1d5edaa49e5a693190e892875dee1a3be54642232fc32e9f8cd192015d82ece2881c541c83c9db930f4d34d36776b374c22ecf5cb494b468b79f9c7830f6f32cf645456685004deb7a6fce3fb0d66b31565a9c8f0eb4d14624d37af08e93f1ba4ee4745186c32e732c143244b25b81f3dfe7a505dfd32bbbfc4d7105e682ee768890a04cae95430e4c0d7a5c1565755e2a07860d00639cbbbcd6e7b3a9b4e7defd1c6fa66739b579eb5219261c46eaddb77ea1054ec298fd058c7962d3d6892ae652391b96feca2a914e7d292080c035f621f339fe1eb8e3bae09dea04827fa196894d48a5a286b461d86cb19617e901195edc196be5007515c945f76d4fbc5d5097dde0a499b8880112c23fcf9344e3c4b9615075b023278a5686bc6f7b8ec8bfbb89fb255b456179de263ebd9accfb93fe291f4f838cf5f250c14d3f58dbc5ab61fce18d360b41662e8b4cc243f5be6d89bfcd6e7946b150f52551d1a9bb42754545a1d2d28114665229f94f23f8617c462ddbfdf904ebf1f14cfe97824210b6ba091bbf4015a1ea27ab29a259824c102ae2bb88e6bfb26b942020d434139981a5cbbba67a303ad17e86420df2745dcb9f956421a0e1c2059d278034047ebd6b9c70a954fb87e8e0026b0b0bfdfc888afba389c4f92c92fe43360daa92c054f46bad4b12e4c1bd1839a9d256b1aa585f685c4f239baf3074788598983be0423031f7323c811cc8d63096b22934a2f8cf953d16f5e02493702999574edaab18dbfd4dc0112018661a2cfb3080315d56de0a172c734c3179f776590d1508f3920bea3e7580ca51178b1ecc16f0b1879f2e916164afbb81eb745d097dca04f64ef2c501ea4ed002ed42d62b3a5cbb8f332fec12766ad01827e311b5d521f283d831a5987657e5afd5c4a26f2afb98f309088c940b82e9dcc34b595a9213ccd870f0b93a96c88dc8f9f4e97145e0700fb1820ece58caba6c5870eb42c24e85909e294e412c80de882a3fc2bc00df8774b21447029bda5d8b372e717ed53c378ad855b0e30dd0a65e634b5027b98d7239054c259dde7e9ec1c58a723f2d1ec4bac1b1508ee41415c23174759eaf2301fc848aeab5738928249bade66490847737399300cb34f612495998e69a1615f25bd2e444266c125acf1e2f56e4fe239829588680b1705d7253658613750cd422d7de721fe5fc3e01e4b747ad43e9c6137ff06322420f25b1d237e34a05ebe6b5d2eed81f8fecbf0ded36d66762ec15e2bf5aa98b351a81c61d9bb552eaa8a30c5e46b7a9d95821c4db1c2217b9b32538bf1133fb0327fc47f077c9ce803761466e67e9e64ff0f08805f5b3c1328a968f9a569e5da562617f0c3f1038cd55fd97a82ceaf55ce3fecdea536c7af5884cdd736dfe887a127349e6814a21cef05e22226528ccd619405e8fed0ac730026e55333ff8c93b2e2d564cd4c38960a38cd508f8d88065961af07b008c9c5ee4b513eb9f88657fd2717a0bc2b0696cdaa0251b6fc0a0a4bf1b5f2c144770c1258177dcfce21cdc74d9394637354946878d1c64281846709fd72050410531f4639b006aa37c7545f2782fc699d8f225172d4f49e5e48f56d85ebc7251f9506d2f41affc58ff4d67b5372bb8d6df9ffb634f6bf29d6cd35f4d6deef53191bce3110bc83f4c5a4211508d96c9d506a2107337193e69113503a894bca19dba7b1f918b5fdbd2bc06039417a1ec2d8cc6cddd466d11ea3e40b71a91e356a81b53cf9e71b5507ede112228ccd496e7951884ca74e06f2971e9ccfe6aa2c0ed2e4e54b9cb283d72b0caa927cb362f22033118917ba50f83e3bede99526f570707f52bb669a6cf730a046ea1101d6a8b283d10dbaa37033952c5dcb2448e7ec9d26108f2ece4b843a64dd0f8274de59a2ad0bd48574e0a35aac75a04fb03314860fe0e09597418ea3cf214e37b5ec35843f16378dc518d90b48b2eedb538e210410231ba0543952969d74304c22ed34204e47505fe3fc55324f5ddd5226285e57c1614f7ec538de189b64e16058973a7bd420663e0a0727b9c58eb4ac6de209944846b19ee3f3b383fd942eb8ec3329cb261ebb48ba2bf6f836e71e8cb8615c1e8a27c5f081fa76a2679167a35f51481e7aca6f0c712c97f198d80d9ff9a1b239af93eadce34ab46b70c675af7310c7bad5ea7ff49dc5f43576ece14fbb9aba19c678acbd0ae12222f6824a1b1fb6b44be2ad85d3c495a882cdd616eaae235df2625998af1f89b9e4354f9e8659176492bfa7f8d9c6c24b21113ae0d662f7fb4d30dc8c57deb7402850c1265411f2354f96a782da8379cf0c16b179ee2418785f837bd3b2ec054834381449c5f79a5b51c624f4e8bd35e63af28be7fecb8c9fcdc8bb4332cff717b4cebabfe884dfda7d856c66fc255e476af2a56bc5c4ba739abeab10762798edd3527fb0682964a901efe6d45db42175b21eee60cb52be4d482e4d08f77151bf7388a93bf19a055722fa892e7b5d64c0dda7caec5fadb9b0c3a026fa418b1471715c8f5fbeae879ea3fa1eb31bd8d8ab70851a9ce4c61bf42f68641fd15ed7ac90d9aee901eab4851d467f1838fabab0c95302f8779de7d5d2e54816a2ebffb365264676fb3acc69215ccaeea5703519862a9a0ba2aab3f4a1720b83cbfbb68a25f0947e2728f37910bf485054cf34758f273281010674908c6153f0da16fc62e7d39e15a8524764eebe0299eca90fe02d1f63c0419430c469aa718514bed8ec609576f248f037af2ca6bdc068700101baacf6c9a42fa2ae5d941f7860ef0e639c531dfa5f7e455d0c43aab7bca3f2dfda7a7b22c52772dd6e2186b41f975d62e92c5cd4e2ead67fe7cfcc7dd0877a268f628183bfeb1afc170e41b1b1fd210103f3ee06dbe4e7e66f908ad99420fe5aeb5862f2b7f1caf5586a059ee9181ba12634691603b7dcab8a800c78322f715b9f571d9b240087dbb8c42c22ce42c49b3936624cc4e8eb39da0a10b1ea4401a26b3f7920c8f0b0126f4ccbf40ba8b19fb78092c300ba54c357f00e0a15b7e0f3e35b4c20e21ddc14d3ddc4f3f2257e9167df096c627e944d477cf551d57f2fc41f27bbb6ea3585cdb48dd556ec92041c309c4fb8b00044bf05ccd4407a1f0e73372a74747a079cca987d1e49aa8caa85aea359b19c56a973ce603e846bbb74ade78944771ab3485c30283821b021e665b10dbee39edeae10c6b66d77898aa6375967ea4fcb2d172a5a6e4132957fb2ef74c8a790f46b93302cca014432185d19fd14b7957a7f85cb15f3d54f860e915f3d150ca9ad10f1bc15ff68d9aad2b3cbbe2b1853e3210e5fcb01b21e8d83a8654de789f46b13e8c38f0cebbba5c3a8995e849e2740cafbc1abf2578718b357eaf570c650044b5fc84f3d03ef6da04508280ee0a82c25ce236330ca254a96666e609c2d279b7692048e9db49c480cad0c1c1a9cf9afd3344f8fa79d10c208469fa0be0742472d82bc0eaf1cff5deb4ac608c4ee485f5edfbbce5d0a11004195d1abed484896b942b2625315bfdb971780c8ff02550deddedefd877b767ba22d2fd79af34fc374a9369d52387735234a83eb2aca90d9e0fb95b22fb1d5ee5aa9a997919e8d08e326fc6535a674ced1b4f9e540670341b0dea703b67b29a71f7c37c5414c0f848c01dd599f41a848acf082f069551821e764ca3e5cafba555478eff6b0ee8306382999668bdd89ae7b7347304a57d67bf1a4c0c47b3f6cbcb702ba04cbc0137c10be7e6fe5f8ce5806138c6ac185c6e87bb4d2288e9a07551243a0f8b5f12eecf3c1a0969bacf976bfea06f26504f722f72fbfcc137f086ea57c3bfe21047a08cdf5230fe8d902943da0d9d82ae45b2c3a11ccb245f4b65cd1337b73e59d4301a4fa0d0507084cd557dc6281855231210e24247b9b0d90d6f5b026e8174d6ed9bc66fffe09e4c1b3e5fbb5143317d0596380eaf01c1dcd9ac295f86ad85e18ee65dc70f17a3c170988d8a939782d43f545628cdf64ca46a1310047bc572dbe32f80aee1f4b94683c0e340b0add75818913a8754ecce3574a5550279c2a2d43a28724d217520d0eef90aad6866a3f885a2afd061ac164bc42a30c6c8caadc6fdf289ba538a5715f40c1bf88a22e73797555e79deabaf25b3c72697f11273db88e74f82770687d666561cce2c91077932f400bac74ff67d231f05cabdf4aa2faea7138d05e5dfffee29d2802f2fa5be86936b4f91ba1ab125e4b1f42f01c2f2368f27d790f10414b3480ff81c3376edaa57df0ba96aa52188f34091ae4068e487f6801c2e3e225f004708d9454ad42c5cac62d95b683a6242f9ace3ed0580c35e15669fb6629c39ceed17075700c12265f041acf634a24b0cdab8db536d5f98d3f471057b7cc3e2e290040fa3d1d7e9c858cd94533cdb31776b9614417bbf31f7fb0804df8d8b5dc38e4c5aa393c9f34fea6009725f5274a58c48064dd88c3aee6a5b3ee7e687da4a899536817a6d2396086de54d1ac71d2a50a9bb81f3276123f8db31fec5f7a0a99fdcc7e103cfe9c296ff8106e57107ccf1276d86d67ef67cad48660a538894803f8c0fa2f5b4bb2ceaa22ff5cfba911ec18465feb27eb1c4eb9297471f089903080373aab1434a161ea74fe656c9986d21f62243fbab2ca1da29bacffbc44586786e2563a06faaf9978ea14cd65dfaa256e38d1cce74ddd16e3a55dba71cb4cc4581a31cf7b05b01e10514628d88186ee264fe0428087e39791142b6a8b7e2d8449a07a287619ec952988b5cf68002af5d490f44f1becdd5ee7baaf2702ba0eae878cbb265466e04e831814075ee5b7b58f0f27b0fea11c91101f3df978d2729facb67a59e703ff2f545f994d7ad8ea97fc1dbd0956d7b36de072b95c1e6d61e559e3d39327520039061fd6500d79cb5703bf5050db22984eb99f6a422b7ea48511dcd509338a912d5b52f7262412dfd46fad05db76c50258014499f64c1708dd9fadc96d045f3e0dde1cd48a6b30db65f6b830f9b448a657101005438fa39f38b4e8751ca1ec3d1f083a4cafe2ab866f8f4de8b40dd16c9f07d89edf6d7424710563703d1b0a1618fc2d90bd927854f7a072383bc70ce69892672210230c1dbf43121f2fc32c2059d8b2483d0c091e2188fdbae064f2104d337d95b96e33a91991735a5afb47f2ae05886bfafc69c85eb38f56b625741f36302cb76d95c641c49cc4e5d9573c59e61d1f381d9918a67bd25b8c0e2fe0c94d5479c6fadc23631ec1ad1ca6c90d3938a9fa77af535ce3e5de4efce4baea2b183dae1481180b0215e08be85dd83546700289000c7f32025359617de42b18b894e4dcbaff5854ef7a55beabdcaad99d3e5fa4a19586a9b16d9a78ef0ec79bf03202728befd43d1ab512595f8b07f613135c917264293c216dd24dc984df8da4497d206e8dc0814f2fccf8912dfe0ae829cf1e1275a146d30901e6de9352428fa52d7082ca951709673396c5a6910ae018648906938e454e30bdae1635060747405b25d77bb61a14e0c757682143fa314d482ff20502bb17da27c0967a6474572e78962b6eec4ce7ecdfcf768afdb89092640e129c29f11128b248770daa6244d26abb695861631b005fe5723256f740ff000ea96616f5f5e8fe010905e34f49c002d67c11bccd0ba5a98556ac575b7883c584a09e977a1be16c448d45cc1e40225a5cfb35959e269f6e12a397d6c46384a79b75124da9a5f44a53e28c10139c0f876bfc911c808bd461a2f7b0fb69a5ade55b3a689dbcda83e9353ca0a0a06df2b043ac9d11f19b3450eed5dedfcb089c0512dc5c4a73f77d1d48d89af552698cff60b0777116ac93f537514928c1214bf2b8c7ecc7e4818c8d9d55f086f49a1baae0d2b4aa95d966c9395520df9c0dc640933a1f2391732aab6803c014de8e2423f5b50bdddf4866d7381b5d0156ae0ac0333da5b39a7817e1e2ba8d5041c1c6bb634b8d27ef5b75ee99fb00f953e99c586ffb1973a458508bb7799dfc030ae41452a0c75a0bd6391389387baedb2201d3e7e56c553e3ebe84571998784ba6eba2680310313751f7c5c77abd6a0cbc55d2bf3d472ef74c4d79806e95449ee9630291001414275bc0fae1d17dcd5a5a6f2d658c3433dba9cc858de0e83712303ecc8e5c110486c32a7746e1da277832818d57f7045898a4fec298bf9865a06ca325a60b5e9438b44e9417a75b0f8824e7a02c573efdeb9710a77d1c6aa29c99be0f281e8b04891d6acdcbfc4b6c3928005266ec6f25058b42ac283356aa7b0e7ba1323abd8759c3b4b91fcbd67bd02fcb0dfb8d7f936893a8f961ca7d747a8fa3e8c95629196b71abfc85b5b43e1c684355d44f1a0fd40e169bfa2266017d2a45c6787bea43bcf80bd9bce3745d46838fa443e6c4445885ccabc70b4f780c456244ba39ae542449d1ddac019886fec97f0337f72de47692d0547b34c1c5bd00117b668e3203da5a99207c816138e24671f6448c98f4f6aa8861620686a8d72d2e2d08d3d7aa6569245901ccb202ea55b58850b69b20e15248e461db60d72650b409ad08d48f8b1e5cf395d51d71e68f4e3e698b660b8ec6ad6d1ffd372e2b5ec1a7614f6c541bd583c939f5a22d12fb1133ada2154872f37364592f3f23c1208133dc108c86848a2854426dfc799f23607d9385139b3524f1005843e0b29d3a13d89b42480ce2771e691d11a1bc4e4f61afe26625c10c8f0df24c897df0997c916d5fb7a2cf2a1c36b0c6dc3a3996eb44c2bbc8a56fb354beceae21655f3db0a6ba15a7e7842e2201fadc084b3081d09ff1f4ea87356ee124fca19d999dfc906216cfc56ff8c3ff30e982e073c9115cefd7385c91dd4563e9ef07ec041c9ac49748a5ce2fb06f29c417240b7d6f4f87173c93826023aa966fa8b17a8f92591cce4be67c4c5b3ae10084d275b3da39d128341da0579d99b403c754ebc1b4a82d7951b1eda74d59aeda0ea8a01a908605a4bfbab195843c3810244f8e0767e6a2303946bf660ba1fb6d931619019fe64bb19ac0e3fa28d708b074b5ac668906541b2804a8e93a29a320afd55b7495fbc8a1ff51b0dcf23a5749945feb467370c0c621e29c88042f7f23e4184c3acdbc6719814e88b146586e5ca1047d038d3c3034e3261cfd987cfd84749b1dbd0f2f751b08ddbe1c79243447df96a3a39c513b4e1169879300edbc16417a55e61592725d6706e977fca43d0caeda7d7760d8b245aab4b6716ed44a1f95efafed6d989a516a308494201941fd74b344ac5849b2aa29631fa2a9be23c002a742849fb584fde9cd66746e65e43e4ddaad5ca8e56bce2b7a287a2022a0692b458fe9344c2ac3649ea6d8ae34b0e924c420ea894a1194608483a52468384c33e2d61e0ab8102ec0287f628bcd8531ad05b2ab9dcd0fc47eec43d4b1862aee5dd6a4ef6fb570d9d83c27901b7b6ad77abb526ec8abc4f322b65926e687afe44870955d241bd30ff2c3dc3ca4a26578b47fb2d65c3caa467a8505128a1570c1c69c75e8c6d28b2f172ef012dcedc6a79c02949f2429affea193bb8a02f081d429bf7fea73ec9af97982b606f92ea571b2ab8a13cc607dd640ba07b0c1f71a3b1138484326801dcae780e9cb8514c71289b14ff94b7dbeccb8c0f1cb0f1380370ade146e9b02367359381262fefa1a2b2ab9499ad7f148c3abbdb6852aebab0ea030f4519d3d821bf0ace4c1038851d8c0c3a74c85d2465fb5e14e9e6c5461efea084ccbd2ac9f28f3d793d68564e0e2342a8568c1d8c58b5abc27a2944d73a6db51615244fa3eda1593d164825eba3062622bdf6fc850a74158f38e591dce02d94d0d5f77c467a5ea14b37795dd139cfe8c50a98e003fe355530267e47335879926f615041a48b8b9f761579def3e8bb6817b228e400bdfff93f3e444d14b6fbb0f8b02794a3894233f166939745e1bf7a7ec712770009953e5054444c162303c5ab2cbd5afbdbb7f8c50e4aeab310be132c19b0c045ff33041b809c3be8f117c8e3a90ec0233b04909001d807e039424677e61bc987828219acc5369d135c7308969a12af1024deb36d53f7aaaa7e1d733da3f3def4a17c8c1f002ca8ba7b435195b9101a728342030708712be5bfd5aabb41515ebd89b72592054024cc739393b85f13feb19629ae7bc81a1a97ba5e9328a697d84e5fd05871200a7c44eb0886311c4b9e23fb584d9dd65a0e5fbc035d799d6e8ef15fff09a52210d91841dffb4ca027f7e9915006a3089cfe5666c82a61e657a2084267c610176b18a6b08c92d56c3befabc11e3e403de83c228c1fcee2e0adfd3852db8b1ce204adfaaa4cb341679e7d2916a48ebd5e4b8077c5c08d642205dbd69792f89ba4ee439e95b359737d69e56766de36e0d2a26ad3db7fcbea52be1bf5349ecb95e97e729450159f1c407c52415e5c7004c2b5f3233fdb93e156edf36330f20fef6b5434621ad47700b2b2b50cd462b33ee87f8281696a8f8e850a19b1b0db157a331956f5a191c3152018b0bd5bd3c71d835b6785ab96991d6b281d5c0f1353296ef3f4a8a20603a9fc1898f47b222f754dee5b8f4ca917f826498dc98e52310333ec9ba89948295b22c50000eb2e1bb0be4ad8a2ec0445f0654be13118833e8aedc5d16daecbdd38c25d377e403f1cd6d2315a3bef3e205544388d572ad846ae36b1021c26c1808e9fdbcabc7923672ab57e6a409ffb39afe2773d84553ebad357abc824eef948c635161978b7662589fcd1e2fc1b6afb112563695723d41f340529c981e240bd2921acf99d49742cd2b4b95c37e214a88a5259af20ae452c9606ac28e22eb1761e8e2a6d7b3f3d4a24e667a39e44e282e5b8fdae5d99d653229866393ed14ac77e7c84623ca440cc34f3c18782cfb4719e218ed42b8a4877dc88d9251b9a13ce44631e2ce4882dce5366e08164fbeda1293f2b817f271194f2162d8ec8df01984db4df7e6c9c2c35633b320a23a1db30a1a00505e2682cc6beb4014badd4835116c2af9080f7f301a4e82520a488bf5a27d34a784381d8f1d4faac4e76e33c8962a9013f9f5fc42c011211a9994de21185b122dd05ed40d2121d8448b6e26db641eabcf8fb750021f3da6f2584c8940805918e7c14ea0aebf816dc2416bc519b821ed460c4a9a3d9c5bc08c73e950897f4d16103a97647db4b1b9075f5c39617adddd9aeb5ac96872d69c4d3fe90993c268b5355bab2bdfad13d5b910c2e979c3784fc4d96ad9acd9a66e41b81db2c51ccab35ebcc70d3f45b906d3c243ef1fb4f22d2e671ee39de9dce97c9ca8ea98241a9356965c120400477a62cc2ca7546c182df200a7336d87d4af84fa64851a28063ed6fa5e838d0d234d999d8897f6d5b3d3ca9391ca55add8984359edbdedc7d58bf2d4e0d69dba98efa67d09640238b03a98c39b1197f18b0e87acc870950bc763e61dc4ceb9a5caed4b743959456a84fbedad275cb5de871faa48bd9d91438a4d0c053cea8c83b4ab97a383b9c6e9d86be819157be59ebc60f209043a7b2a0b2b8e00f16f157f319a0b91956387c8a63b317f2310f872c6090894d53bfd78a7a0e44fcdf796cd02b21be0dec7f9b7ccb3638fb9917835ca800591cd79c0191630e7b30399a26e0752af2606ea8578e73c45b5acc16690694c28c27cd2f69698a518a678e8bc453828da37b73de850e201c23fc164de1d06337f56720dbc2f6948b95482a5d42884089a8a402a59f81f840120f40170278c468ffa7261460b70e6c2eae430ed1b7ca6546a37a5307af2615f3dd329d48ef9269fb64541dec6955f8919198c27584092721f6476ea0564eab687b7cd1484373ab4889bcbfb55bf5b3ba55c5ae4495e6c55ec1aa041966aa704537f108330807e68e931f663028e145733084bc26978f0514ddfd0aed286a75a7a245d810829172192be446b4e111bac9ff5f55d359e9e8d24fc9e4968f308bc7637db3e776895239c5fb2e9ab9f4916016c4a485872a9d2994f7f19124ebd2cbd28066154ceea3ce6b335af82141edf4fd4003a369a902db4b3de17d2a57bc813498e32016a79fb5407830efd640a4a80b30f56c9c86c31776c5a9ae24df735054b28cd4e93f6ddec3c634035d00510c24292e4c2aa712533ba464df9d55f30017ec8a9294e695a2744697868aa7e2fd1b9f79b6121507cf436449ef1aded9715b0dc59100dd1ea261cc36cfa70397bd50f3729e7d3657f63bc98e8dd7499f86e7f3a3b7a5aef58401c30b5d9971842c9680f13179b9ada2a632da5e04044080baa739e18176bd838c29ff6e6ea8792b1f503a17e83553c300fe8cf99d592882d9a2978a3740176b1a9d49d1d8fc419ce6ea12912521c79335acb130bb7a55261dd28255821cb4e5a8560ebb86f57005f94bba8596b55e8ab6c1f993d9e69875360923c92541379a1c9664d0bebe4ca553a79f53533a34d0d612de03aa5a36b8c22a059d21d4af3d6a24407b37af728b01fc33839b03e4c011089650ab7f6f4b4916fa40fb9912da08066df74311f2b25b29be12a2c5925d2a517d140d203e622bb8fb1e6abc13e27d2df9a21a9c55c6ece271a959b6998a7a7a4e34838c3e4afd595638da6a33bfda52f1257850eb4143e835ba9ea4e649196c6e88160467e4f3cd998eda644dc54b6f7ef8ad7d9828c149a7bf88b3b6dc328e37c18b778ed28024b0ec4227215c8138239dac29b4c3919e1002f2f5e49500376928193a7191b02ab21900335802ff13e93813d1161510d68e3de579af551438f2ce44f44fbc5306306480228ff1d5444b0b5c4de322f49f67aaa9b13bc6026d50e4d6a22d526b2b115241c3e09b7d10e43408bcd42f0e77c1b704c1adcc0fb41778ef8bea1f5514804acc4eedff51c5e0f0e1895824002880cce6a22f5f2db3e959559afb9207d58460909101467ce6072ccd11742a7babc32fcad8afe4a139dacbfda9c7db9d9b27dc5b616e0e3e5110d314315d7a35d56af5fcb25a9d4f6d67417d7beee03c2bbbfe1771d35cf98b306e2f25399e0daebf474dbcfe32d0945d30016e6c8fdc2c0a7837da07975eee353207fd21084a426bb04c2c26a9116f3584ea75e844385c2a94b0bdefa03f2ea2389e08465325c40f426f8c6d0be9d7dc4c3ae3d6d6fb47505157e7858de0848feba09bc7579646c3487722ddc255688ea8f9a5063c779c3dc3a849505b8ee574777c2c7a8dd54b356b0123eb7acf20c8aee3ec38ad22c7b0786024e61247eb7c2d48636a72efb643188e12513dd9f817df6c5a745731f9530989320d45252480a7fe9f2538821d4f67c2b9954613f963e22e28aeb75a3ab7428269c7ba29542fbd2e50c90409457cd1eb5815625f844dc892d0150ca1f97234a76d4db7dd471787b6322c67e7cc60a5b5551ffdd8fda9656f02fc8d8aac5121d842b729723e4d067ba796c38de89de1dde5370bedd5c80543f6c0558c8782ca7d8545481187081bb16c16e32aa3c3d1bc3793322e511111220bcb9a738034354fe8cd259bb9ba6f04cf55816055499e8f7baa974d2b1164c8ece924aab09011eac96dba420e60a241b27a8313a90d46bfa499aa929cf568719510ebbc13c070cd114a81adf662e0db1020afd4648fc8b31d1b80c7a8507c6342c276c97cd6cd696f5efb76170ae3e6256eaa3bcfdcf65ab5bc8a851a97a39d00397ddd3efc5a7404b2a5dcfc80d3ea714e9dea5d6011dc36589ad0d2a92f716f2acb19b1e27f99f1c4c6ed3380d6e1902746d1ba1b945fe9e3e1267a958ca1c2e8b7c4e02b43e1d32de38b27643f7ecc02445cf6bc631e06a8a565dce29172597aed8240bd040b7e4313c854218ce9d966096db2b17a4c21562ccb00978917ce6a19208ca66b7ad006cb74c8c476dc169083ae1cda3ad85a48b66e324291bca6661190d190c9a27b4bbf1dbbf9a282ad820e5308f018035cf726742acce338e99b1a1573ad19e98fd3da309919d65969a3b3f194ed3b40ec0b778ae88b429f4f0a59397ef952bc6987bafadfaca13de739cb515685f793de7464332456daf407172ee9c6a9992ce4360b00461876c9b588febe5cecf6f14ceb598d55bec40fb86f523c754a049e9aae17d1a24e2f1713947602771e83775d5e7ca93dbd853a4af310f29fa83277b2a4abcfa4530b2efdf8327a669f78fba715d959ea6182c404eefd9c8c1524dccf014b4b3400f28621c70e58a936206145218171a31077c86e5f00d48466dd420a27085e8c1fdc05db7aea92265f7c102accbf34ca36b9b6648e4725c9d3f5a482899b3b12e1e80c521019b632c7ea2046524be1c2393ace9cc7dfa4963c3946972d729657d0163d31d084bb449a7d478350795254e96e55072afcc1b826cf3d488710037010038dc3a363192867d805af5f4c0b0f75b90cbef74dead127c3ae9c936effdfd5cc6571deb9cd685ad92e983b83f6381bffae961e4b41c9559b5b46b8ee6ab4586499ddf31800ad92366f492f949dce1800958f3cd3e8bdc8af7efe95011a2788bbc9aace37551fb37f4c4a12a8595e2fa35825281631e7543153c9c6ed656d300cd87501042d3c774db9c133326d979de6b09a9c77b8a9536b82b2a036e08d63301675b498902bf52a970141c5b9d675e92a41c4ba565915e007c1f2f49e765c074b36abb3caacb12c62008252ada5ab828fc7ef1a0e69bc94332de6ceacfa0ba1ea29e6f7e182301f656b35cb6872025882f7b06eb08c991b10d26a9acc24b43221a09501ecfa77d4b43c986b5de40c976be69fb6bf788cc66d5a384d73a67fb9b620f3027254049f7ab9a7c50b8568ed0d2f0cda19b0966bd733aa5a0d2535a2d5bdd21b5d39d7ec9d781e9bc615575dba705eae19aeda57974c0870ba2cca9f017a83545653a1dcc722be186e4f4e4fd89ebb7b280229e90f270bdad45109603b63f9ea099af24d4928175b7fce7c466ef5ac697f46800cbd166908067b4c5857480e7da9bbd0849642c60e2b4de64802aed4b7eab31dd9ae1287deb0146e880316e22df4073d62670779dde72082f67fd9cd0ccb8873e311bc43c609d9dcbcd048fe87355d7a177e3c746c36cb364780d243e87ac826afcc450ccad11ca345d20b1fcd26308332ebbcc10eda651169d62100cdf299ec4eaf6919e4591cb13991a5bf29332389d95e1dcdd6a56ba35e740e30b0a9ce95e73055675574ca890060175e12665e5ad875ea30d031b27ce0b45a8b63e4af0f79301e09444947f2b7c2c26b07d421607b15eed67e6538a0bbc951318dcfedd61698a89b46457aecd3e0fc0121dd5f147e3caa62bdc76c109074956fe6182da7e1e816f139b47dcbd087d5b366b70233d0b0f83429e51250f611fc267c8faf7441e469a3144f6660906c9d1407b348d553152036d0607c00f82e544ef52ef314fb6498848b289e2afc67c34a20534608c175c7fe64d136a9ac6ba4e3af42148dedce82f5e2e86b1472eeb1b56a3e63c810acb448fa6f2918ded720dfed2cd6fae812f43873a0d65c868f3cefe8fdf45a9390ad517bf12194e1fb0b5ab788e27e7b77cb8ccf4f388d401bc1e9f971fa83a20de9d6ed44e5f8973a9fb36ba2f5c11b21aa25e137aac0f56d319a0ae0d302e27d58e56416a09fad7980ac0a3f5be9fa016a4cdcb0876d1f10b2470de16ab8d9d601b57347bd0f216fa6d3b03952423fb4977e98e347eb897d32ef618fb250c9788c2176aca84cfa97cb8ee58698b6c25620631e4573216bbfc529c4a3d20421e1b380871ff5879a09bb04948acc0edc1245fd64077655237d74df205dbcff1046bc053150791828e4ac076a44679345c7688749e0726f8cc5fc803fec761614397a681ea7e2f2a797eafcebe23c91c47c5e5f8f8835109cbf6149130360316187ae4e0d408e98e2effa278e3d79cde38c307cc67c0aa47dc4ba155cb4d9a287b620d21f712e0bd85a19450b0cf4e7e0cfbf7be10dfd0ca56093f02a36cfc9254af99a4736c92febd98ace2db86b855471d04c88b127e5665de806a0c76a4ab2afb43332f7d63553d4508aaa7b25bae0b7e59c236e5251023e268cd6af97e5a797ece3ab660c0ab1f17f149740fb5a504e2ad478d38615dcc44735044c49030129fefebdf1fdd59d97cb812c4571bed68d325e631ebe5bcf01d86907468f5d6235b3a2280d61b388c1e2df24c86495a6cdff4794ce4659b3330fdfe317dedd0123e59161611887854ca44735749f7588ab1bc9ebbd018dfa189bc175b8778b93222c167a7fbf6d68948b0c0303dcf64ca41872f4e6ce8894b0359567625becc705269245dadcfb276fdb80ffce0998c732954907f3f92c4f54dfbdb9998777c6ae404056c0a15fe1eca8c345fbe71563ebd26c61ae666dbe35a5c892aad2af23d9dc3b90468d55e4b9e19c0d441871bd0b554771880cda8c35611ebd213a1f355168ac2ef12c8f378cc23b0f1655833fe2136db46dc24c15f526b9289f8920b3a83d223536432bd686772028a909a6d977f354411bf4caf8221d8df2975734e07f5c93fc315c6552094e26c36452568f24d8572abdca633064042dd412063c9acf4bf55918c5a6382951062617620a9a51eeaf0cdfcfd16e793f40113651a16bc934e685e206c0622bf41fd043e3923752b33b4845ba8d2a25f813bef45da70ae23fe8381e516f56ab52934a8292d067776b0e874daea6563bdda0b0f25deeb88492d8dda8bde3dbfda72fabba83eb81952ebde42697cb69dbe1514a16c81b1b4f1e18d09af3108e5ab4a9b1b4408975654c0a6eb22d6bf742227b4bda178ea49cb824eda2e567c194e3644d265762e37c007ec62ad61a0cd61c8c518da6d3386c9acf9c31f6643b0adf1c365498425da316ac5c9fccc9a5a6051f4fbb273ba3150d3abd6fc2bdc30a7d46f37814baef2c6a8749648d81d1efcca4b4cff8bad80889c1716456cd83f1869670b81cf90b842c21ed7dbd931001c1e1353cd2482591d64da03ae69c046ceaa7e0c715143618f41e467eb04fbd893df9f28c921d18d143acc0e5be9534f169ccbf4b698ca702f98f68936cf1ebcd28b46635bc752ecda39d6f6b6b9167dbb89c5268dcca76fa0040ca96f0815e4e523adbeed76d75e76cdbd0928d9b15934d8c15ee0e6d7488e1d0d10552de8014bcc6c1c231c707789ddc60137626a3b7e607bd531668122197c43ad946e9afcc8816ca2c6cc31dac475feae03a6b622d63f21df9b20e13131a0ca97d48763fe25a9b2ee263e013df2454af8c11a7f491264abd19b1ae358b682b4758b3ef6cf640eb74c5f566d0896097ea9fa7cc8e763af716778a44418f9f7b331972b25bdc698e0bedd91dc1ae0bc7320f825ff18257d61f6c0bac13729aab049261b4f9139ab39f9784656e8833167124049e7b6e290e2c05a7f07c11af3dd4205cec509305179c5a46516852d83dc469304492823f63ee478ab8a5db1dae470086aef78548da3c876ebc37a90629ecba0c7ea97603195dff7cdb65a754078c4ab4fb5f580ca5462e851dc50adb26c095bb4c5c5ccc896a6b395a841e76717f32968da0871d1bc8ed7ce961b7fd27ee04458e621f7d7705e2768b5977ebf6ff466891afdbcd17658addf7e91adaf48ab76fe2abd96db828d9f4ad4332edf93294e0ee1e6765e55095f0771e1a0b9c17127992ee212ad1f578bddad848f442366efeb4d8bf87c99e1a40b5698a9d337170070ecfceb371e52a1dcd857d14df7c0f6125761c765374d1c52e6c357c3c274cf40d862e762e4df27583c48ff4f868987120a8d0c169bfb1eb1f9d23da6b07650beca64790dd6db4cb355216bbf5be94a9fabee8925d271bb1b8c21f55b9a9e34e52541b64e322a4c8c4a9daa206a5e64cf7f082221072950d3c0371018c46570510cbe0ae2c23e49aa6339a08d110f74f481a9f21573aab07fd182c09e38ff9005ad9f4fca8b23856527ae0c11a98b64a86000fca0f66aa4aa2c23f7354ca74abc295f4924ab66470a95018eba0b9d21975751808a4ea886d668c66e69793c2e06d6afb7075b8db50f7976325328822986bebf1552153b01499e240e3c645a98eb83e3791b77a36ef7083230934155d0ba7b9fad73382f48b8af8f14abcd10130daa537d9ffae2bde168150f2257e90eea0c645993012cd99d671d0d94210e525184075384385bc089f42a939ba1d4fabc4cbfaa4a4e37ac5204a6352accb36b2aa6c53f433007aa7995e94ba2673e1668dd1006b6bad029289e6a884c6d273aacdc030391aa13dab0840ffe7cd0062dfa64293791c26b4ebb17f8367aa10d68f05779c7be490d661502647d2cf3d87c6aed5d3272bbd5e1547dd86ab4850df74dcf96c0d0048c88a35d97162063d04ff2d80c042021ef22d4be5189737e05126c52b935cbb4573a40d198ceb38023028d930af6c66b321809c53cb0e57d41d902fba9f83e50703a4c42a173620061191b1ab29332efa1084124605489b8f2d2cec708665de5f193b70fb3a02066107c720493de60a99c236e1ccd4a142d6cac3af0a596bdb48d8a53beca57155c36f3aabda90f44e088b5ed1fa3f30e6f4fd6b8ed94bf6630b8a2523debbda2cc7f0d83205ecd3d839df8ff040e23d7fc20dbf20b71cd14ef40058f15e279ef4c309ed8f58fe370b75c1c6d9993b3cc79428c67da547f053fd33c28b654eb6b4ec93870cd3cba34e27a05c7d636570ca023539a76d2600f1a93abc59de0a913d090755a046f37e658aac1f89de9dcea131af67969940211fb42a1107d7c896ea7afd3544fc489ab5a6e917d389b1d20d61157205b4293bb471ae2f0055315459449702e6adb05c8a110b76a3cfa6558713fd9e2789096b4019c2e42ea4153307123961e7552812e3052bb264184a7b0fd04c340dc6c1c60e3f20fa3b226a9ca5ae72e5598cd35ea00505b349e9acff6ddc5781f19243aed890579f17167a15be98fd2eb938763f7d311cee92221e9f10849b20e980579a82a0e84dae30a926051894369689cd92a5dc6d25051ea984e7dc429783413f702ee1229d5da03fcdb04273184262b775cf4fef2d594d6e2a55a9c567369ae604aabd4da137036f1249aa609db90d6899b94d2c95b96db0468b93ed7518a1c35dc5fe5d2c4a72276b6a21511db392cc4332a867b40da4e38c775edb403269cde07e817e0911c66240010bd8cd3020e00cc3ba3eb1f123ea260abc98f12ecd421282b54fd1ba067b8e844b02bf96187e954d961d52109c631248b92aa36e45decf8399379c6171aa92f34c18e05f2704abead67e176fda8897ff49ca0839c0a653102432302ba96401d31e634499bc6d3e0c7adfb3b9512df2a02124ab05b2096a347426516d5a0731619d7cb2b4810e679548ee5101c320e055b15be5652d3f68310fd25b0a25120956610122ebac867c1c363838ef0717a0f85cbaccde9c496f3264f2b472866332619f0c25d475ef51de3b7faca59fdd970949075b094215b141265be606d9f7244bb8572984e3a1d64ab802d1e64cd60157bf6a263bbc8bdf65b26acf9326c02580d22427391277fc420c710108598329d7001043851b912f76ad8ec5ea8c0e096edd361f8710eb03ac31c457dc91584c3d0922b56e82392b94e179b481b96ef094b600454e3a4fc2d6bfee73e072507e29b25d08ae20c530b2eccfc8f52e36effefab272c521c0f48f2931ceefa1cff01e09677168861d2e03fc5a1efd83682bafc55af90c2ab1192e4aa200caad440f059a6655380972c14c7566e66e06572e5dc285f3e6d54f4a3d7a24676ce4bf470d187386b01723ef92aebeaa88641e814aa472841459df5f1f7e22e91def7225b993cd0513a1d101cb3420a6213b2a7116024d413ec297835c8e0041c7585d2f3d60cbc0194d727140ee5a00677f0f4c20245075b31207ce695397a61c93e4bbd61e5340b4f832ad207bd7f35deb6509c6a70c2d61e4d2104dd6f7b796a5c942b49a6fcd34ff1e94ab412522838412e9e9b2243b38ca67a432b973e637b94db7d99722b3d63cf6505a7441fd8ecdc8c3295f93582c460664fa5b36826256735a9a0c16216283721d4799759ac199aac5a848b470a14a063443940789acbf453480f32040b7f98f9c65c4e0e60e01fc45d4b8172040d879e008a0fc07fb1d25d85195211a8d51c0c1c1b0fa5753c74848a8b61a1eee9bf53e05b01a8cf535d18da95c8c4d0e3d0382063bd8a5d64f6e3958d2c2b9bf00df61a03a309051f0be3d08b168592ff3f5230da0e59408686041d9c2c1ab040d987aedbf3ae583062e48a6883e29b89a32d19d4cbf9d3c7a7afb50dbd5852c71f54b8baebc5dbf088ae51f63eb1a6ab1be5bc70e57a927c7bbd216e6c91b36b869428f168a16cc41d745fbb39f233812af699162917f106e9de3449742d586b493c302061a9f12e87b8cff705102b2f5f26d7f50dceb23950cd1ae37cf8ef588b484ba6a47a6aa90225016204583acac722b2280c192e295d6409a40957a4846e4d30a39661f1bcdaf0b3ad1cd6cea499e37fdfd8cdff3c1ba844136aadb7359fbce47ce8b633d2dd9088953ff3714ef72df30229b590bb5697ce40f3b93ac41ffa42b7fd4bb67b5adb79c9e080a58807f5a6ad847e5df543bfbf9aa14d80a69922f440184e144296c7c68438ef42d7d01e4000fa40323949d529895f5fc79c06c809e2292e9d8ab4a0aa33fbfb8658fc0d1868e0cba250e86553cef88bc107524f6fe4b387e62ad6500e931b1b2f61b64620b5083cce01baaa1228fd08829f94fb4816ff3298429248d9463480c69e164fb3b9a9ded8fb2a882cbfae4ca4c532892389268dd33c7b3df46a1b306707ecc2eb0678d07762965ef143280951e87d1ece4be540f41c88b3468b73e4f69dffcdfcba46159c76f70c592ab112ba3429d4c4039ae3572a1d8246da898ef39c8fd726c24738caee654427eb4f1e2410342b5ba147bc419fea044916ea6d5e81988414fd6584d8f3328443dae46888e247117ab44a97f189bd63eba939db6676f291dc70097e5a8ee08b664959a0e0a50a8f331e735c3452036cb7fc9bcd50fa519c834ad813487b02cf8bb57797116fae91b9ef7a64ac09f76c88e5a340fc8b7a17b6aab9cfa6ed449d1ef6d4f5dd8c0979c37a7aa77b57a9c804dcd9b57936ebfebcb87e2e4fa60e9da13044a3904cb4649440a30f9e53d56590fb7c7f6f47742635afa928ccd884eb53e269d2fa486e377d6e39c1a1829ac1034e1df21d9e7dadc8ac19b6789a18ff0528cecb1f35b4252b8846096eb8f13a805b563e8e6ca221bf212bf4d5119331ea8a9187b7d3cec5f6176aa6ab8bbd3319879465bc1462675a17d98bd29abf59165fa63fd198e81e1cd7cf0cbc619c6f9ac86f47b19b649ea9348b74fc79fc45810c1aa9613920a3d875c500a85910012ad1231b65fc2824089d989c508a09b5d9ab4c93baa46aea67b405c9d4c28cca820f8b0ef06c21f7adc566648a887a6b6549a78f7bfd4043dbe4a64bf30d03acc592f5843bd6013273f379680055da6afc0335229eed27e9cb800582d11528dce9dd9e3d9498c21cdc36e40f4ac0a4b6439409d84bcfd7561b33dae399f305c7fab37006d8c58cbc5ff3250239609bbfd88b80908d300dd9ba30926437856a05b373f41b0e123af96a2aa2ec7c3f606d03caad1c67871d89fb54a921b06cc9be7ae4fe9c4ec2daabaae337665700885fc28de4a6da702550931eb5090308fcc5636b8403d0cb4ba66684111bd7a1cfafac09fab5c937a0962f9041e1cc57b905581a925d25d54975200f56232e61c4bb9f688da153f0462018017d085f30242591848ffa50a140c4867efd147d1971e33c31bcd7b98fbf1bde5047534dd8f811fbb7ef1217bad598e88da6cd1fd73b08e6432f3f3d8b21121153f71d864bdf6c3935e3825efa0e56e1693c16dbef30ea32e1a90e17287b36a457f823d4fd457ed666554ad589002be93d488acdfd579f992edccfaf82d1ca08e449addb483381dd3a19910af432924250b22dab5e5a612c9c5945b29d4c65c6ecf5846e21719e17383f1daf5363be5eab599852d2e71552f1fa637ae5a2ceec2c06eeb96e4c87b186ea0da48737c331750013ba5f4bfe0dd1758ca0be6cc9faeb5affd22699aa24732df9627f36506aaf2763d43a650f3a6f5ceb1b8e26571675c4fd34fdfb548c4144af3591846e477ee928a6a346b79014566a6f73baa74f68178d171c9e8d49dea409d7dc882b9e69a183f9d5f94f0696900b51fbc431e655887b1f9a305967119c6e2cf0b50e60cc776870b2a03328ed54f17a08cea8cb16e61653e9f174f5821733288f5f1ab177d642a931a1a2bb9e32cc8fedb67c18246e15e55982f19ad051ce81fec5349f2a6d45058960281e338635a44aabd1ba22d3ccad92aeaa08f041a4736638cb5d856a716e49d06f77b33c06502185b76e798dfc72e06923da1651654f14ed8181cf60b5c74e133a609f487357660a49506cb467433ac577bade319995fb06c40519a7eac0812bca8aed32761bbd7e45f8d1ef2e0c005bb6bb4b148c6d780dff27a0bbdb7662aa5d2df8484d732133006b94fdbb5100f9037a0a6a227c5e51fdadfafb4c95191b08b71c4f52d5b7c14316dd7a4c82fbe80fceff65f68380139a30ed7ff76c346ba7d75c4ffbe941b08d98355dc8852f399dc09e90b10a97490461ab62da6d9b1d726af50000cb00a2fc708221f69f5a733ffbbff1fba9fbf89c9f6e300b7eb4fde20e1059c4e51796bbcab97141dc4cdfcabd42134127d8e7802adbb9b30287e72b5ab799bbbf0e645f001724e12b29c2b94452ac6ece3f3a880d56690ef41eb6d285815b799f6cb871c80c4729463a20bf7b0eb4f7168ccb49af91e2a5bc0b19fe1ae31422686594a77d32c275525a98174e62e03b66e2e233476062f14c00fecb99b170d1fc2fca337d8c6862b3d171e67a5f8554b64493b549ae00046717f7bf5d439e7f99c223f92c624a5dfd5ec1b4fcde7ec668766d755ce2e9d9aed7b34cb26c4282d716aa8875cfeab22ad87ddbbfdb87bb21cf7ea71d4ec1ad50abd36456faa00b9eb9af0d1a037c08e417c019678e44439248d04e1f5c828a0cec31fe56ecda4db7b39fa72365b3dd4f88bceb0e08a5a2dbad9b5e88261eeb02e2a8eb661d3ff70d94d53224b00db48651a2dd5c7e880a40f588423e3852306fba89134925b03cc900336d685256639b137ab0d48ef7bb04188b776c407982b80582de20c5cffb5e02a6ea81f078dcba7379ecbb63f3a4e3e5abb760018a868ce0d5deafe2e962fdbd7380b3b5ee5d8c84a521070e7b908122213d8a65c4b2c182f8bfc4dfbfedc5af7b1afffe6db8ad09f161110ab8c1c5af41881710946abb41f53b431209b85fca1e4abe839eb48a9fc5f22fffb066824ac89c2882e9165b9d3b9933d8b04f6165a283f18e125fff7c2282dc007078e85d53784693a0dc917e2282595d071d4f921bdcfdf7aca40ebd6ede64b0d22316a52d3d41a2969aa17f27fb0f34c0515860e31d4f71c230ba22b68cb2ae392f7f7a6289ce1d0bab3e60c88285091e35248755484fc9123e8c62fc30de557b4669afa50621ae239521bc89c4e77eb7597b877b877d85e8d605148fd5eed5da4aa7c44ddafd91704500445c0ae77281cdbaaee888093291bf2337a5f22c3ed4657f0be0003c84df213c56557639c8e4b57a71b431e02c2918ca6f48b17bb7f979f15156e47d6a87c8b0c1d2f3409c5e952f802d81c33046480ddd1f1408800d4d1f8df0102fb8fa1a8076c0d7ae849ecf72076eadc88f661228abd09eea4ba3da4ed051bb896fe059085109544e50db3c7aed2215d3b3d474a8bbc83e80319b26d384b7d35e9b18c54ecf9cc60a5a9b43a67d8e3e81709cc3e11c02ef683d75960165b7c38ea2a22c5825582e9660904eeecae752af1a829302327c036bd161de86520c68c4137337c5af20e6fd72ddae82ec27c139f2737d0fc466fb819c635f7415f8aa943e3c105cf771b1506372b2acc628b6aae16c61d461496c8df67755b61b5f8a249a80962dedf9ce0009aaabc05315ea2e30cdda3f8b275ce9df8a4d9c05c86dcd52bb7fd2cbf2c342a29a5f3e891f9f470957e238bafeff2c801e87c83604ee0919ebcf16cb12f92e8036cda95b5b5688b6deb3f1f300e2216a3090b847a25cce46b9a6ff8eff30271ff452906452d9849d9376fc4ce76882b5233706c477fb0dbc62f522019b1fbc33e0e20e231588f107f07535285d421a2c35e5f1baffa8b48bac348c99e2e8d33d222528f4c7697bd4e6003dc865efd4b5fe6ad54eb366625bbaeff5be5b1f38eb7d8a77b91bdfd0594d77cfd1cddf3664f40207752024185030e04522da67e7e05572081a0a831f13871a2d8cd52615fbe5e52e020294e0f8e6655bbe63839bcc6c92201dc005e08384f096252b3c91ffdfc62b339836ea4e6e7b0c47ce20f34e3531ca844d44a666187856060d99a63ba4a306bb3e859f0f3e48b3e7153e2d15be3629562bbe59f1779ec155ce7c02b664e45413ea79b5ab9ed1d2557361dc59de3b2bf9f30aa4145ae1100dd04f31d4b8044071c9cad9b0c923d23839b746b864e1ea0c1e4adb258311d4dab614e6dad2a3d0f1620e76044da6f290edd2b84c7a62af0a813ac2b474d980afecba4acfaa03f2c809ae8c5ad01fb833621f0d2c3af45c722b3612f0a6bc423c3db081e83e2ca9d4daf820cea48faa29fedbe900638a5181ba7073d6223805a6b02c6e4c3a9f6d59e369564dfbc26d7cfc2ea8eaa69de9051516f5b03db53f9419a2624dab4f87f3d18b6c655f34099211bc66c5df7f39ea8473d3570f7101b34261ed3c66d6cc918f374c87003137dbde9226a8694a383a748d2527a0758eb53c4fbe133b0740307a4f0c009ce89a0e97a652e98f71d2acb753bb5b5d90ff8fc7e0edbc9e4d84e39bb230bae4e6890ad70c9a4ce8b882f0bf80c40ce6d3eac4804b591ce1b06b036178494b00150844e1f3ea032bd944f264f7496a8ce4dcac55ffbd4f4f761b6fe168e231ee742ac6756fe1b9f7ea94ae33efca6be330661a2571a6d57f1a7791f88d27b40ac9bc3d8b4a53976c55fe9c4679e7db7026537ec14bd1f61178421795fafb2098edf9f11d71b9bfab549069afdd880c08168fa5a7f44f1702d8ca4bbfa4a39d22b77c35b88e5ae399f321145146e295a8b5689b7c39abe3b1feecc7ef9651b3e030e71114ac487f552ec1cbe96a3c160a1ae8315f4c801f8e3f9972118921b71de15e50d378f182b091fcfd5553dbffc1ed2f580a6a001798cc06d6309dda7b6118040de7c2cc28bb27096cc5e8f448417909302a233cb97a258114b5314989f5d5293ba9f54203255f041f5e5e8411c5739f9e84a713e3e0de0f6c095e100e5f2d92d9ff7769e500809699eada9d4c51fdac3ffd1df85d8fd4d5096271ce120a4ed4324fce4a9ee7109a0ab51132d5c9353c70ed7e5c1c8b08987751cbf25c43f1abb0ba5c59c1679ec60c3f5e3af5b019bbf2d0c4519c59c455ed13310d4515a17e8cbf3951e5d79b4726748ad840d08972be375754cde93694b5c8fc018bc84918a22c2c12c37317af0791c27f5c5880ee8412ae90c0de7e4cfea67416711260e705bf90a046ef6b160f7acc7e5d3398ea37c15a329af8a777aea8f40b9a9c43a17cd14bb8ed2377e6ea194ec48e50c41d66b3f17bc164d651604349a2d9480d7a2f6d702da454200f7b4dee5beab669e5b5958e52da0e624d7d8e676563a6991f9431a46beb34d3a57f3213f34ae66e20a425050513840c05d814407f413e6fd2500ee8e60c789d877ae035c40c6b4a883e0d32038f63a4bfb0112efb0967ba14ebc4661b0adaf8f00a9b2232338d82fddecaac66ac95a19d6b102b16d668467fac22e8edb870548a53fe8aa13dd26da6f2e70c44670981868f7bcfb6c80564c53d881450feda38892ce6c6081dcba8410c7523dafc6ade6399ca64d1386113b55c4d456b477ffa4bbd6fa0ac25beb01d5fa96f7c7644d8051fa5a5f48d9b30ffa12d64f868759cb88ddbdb71d5efa3a0b54a4189cd1faa6779cf58524ea3693511d2a93ca0c908c66e8aff978837a2bd866b8f533944f9b418d82631885f6bdb43317821eed4786e7e3807d36fcd5cd97fe4ef8c09b2f2ee28b77299882f1221e9b86acdd1d8320279f03b54283e81a09e2246ffcea2dfc32749564e8a85aedfebc6346c311de94383983cc79e6e2020363af9c8e8ff791b89c2ff4513e858df45d232cc43b9b45023c50c5701ceae695efeac348c712e95804abe8158ab9f5421055e7b90565d9a9aea23fb2db370c46c2163da8b97fada2c4a6af2b9e1c9a138f0fc3968cfaed41e9c918917f17e3a29aa8412f5821f87017cf623ab2966d717cfed47ac7fcf363ab4011529bc550a1b29562bf0888a4780792134080dd2d7c067eed56788da7eb10bafe91b48298d4b47776555f92f41755f9d3e3c1926369755677f78225e988148b547dd1e31dde48636f3998ced9a607189492ddb3c267080c25279eefa22a8ae0d4507cb2680237bfecf7a9b5d7d91b115f799d24f0e700f6f9f4630fef1e9c7a6234c2370983383655de5fd83f42fa3ec2dfbf4cfbea92c4a0d4a47bfb6fb455803b520a40011c4f5c571fc6b7078fbdabd35d4765f61234e8fc5111a1eefd8487287843cba1d82b3a99354661bfc863f542d23065930c75a53a335e11efe6f034515161527037d4448173b52ada0df4e24621a24b9b915278b8152f5e730de9941d94437b7b8aa80ed3e5b458b49f357908c6c8c6552f8087321f41a79c914f209cae907c0542a9994bf2d7e629827be26312531a3e7a03473c1c9cc45f80ea2c727c666d8facf231c32be98d51b74f17cf5827ee41eaf21cab065e1a98dc598135f222061e615e9a874605ecc500ce41ba736e3ec8d555d28afb00fbb6f32376696d48db200e5caeda2363e9547a0bc9b01e4a1f9abf0b3f99e0b943cf43b192a0bae36cb1eaf18bf8aeb11245416e87c99412471711f3941f69c90230a1c93779eecd93024c1f807611b76d692ab59dc9ca09c25c6d9378de3f12b42605ef63af5d30023020f331fba68428bfab5a75196ac7502178949fcb1d06aed96d4ae9c9fac34b261e326b651feb7c9927d0dad0c7326a6f1eee2a5bdc7c789f9e79cc8b3fb9b39e5e344cf2b269b4999e37d9315e9993ceeb4031e6cac613e7258a52fd6a094b9a5472b4701f36cc8cbd1fb2ca085c2d39a3ed497279173763720bfd35389e9f099625c804d1d75f750a1bc905732eaf992a59076af165730b0df83118c5b24de4c2031a04196501a257838ca53900c4723a12c97fbca6e26781887ac62ccb81b19700fa64a37addb07d8c89e47d8ed7a8d8b449c7d1907597f7221440bcfd15e1d18ab2f55f2b2ac70b3727983faa304b6aef1fe04a8d894e19779329259ae1a70df923ff290fe3e5d18caef5c116e89ef371b42cc133bcff1532877e1eee7741fd210a51aa5f8fc8e86cae92204f10303787a4e5bb3e113b6e22f0a2135759eca166c9d60fc7a40b132c1246146c4c230b692193c0b9b28ecd7468ebf5546cd6d99780c3d1dfed48081d7a25b0b9b2ae4d07f2d39ca033d08c2ef6aa57a746ee650f3a8042cd79f93f508f50b31ce4d5c63c12147bf9c300bdaf0666a3292edbb5f878737fdc0e52f0f9ef4e539a9e7b02663ff3eefffe2909300924d73cde28e397fa7c2ada91f0be426fcca3f211566ee6902cccf3d8cce186c127298d29a02e6c20bb8112bf222f4d878f70a1a146b230f4314ceae5d48f868a7fb83284217cd05fba3c3e26252c7900d8cde653141685ad5311ef3f00389b940f144661597f4a786005ce8392a7c4d02d3c309fff8a6c73beef804f89073b967f42603565a8a70cfe161ec197d8409437eda31468a024134e364a65840becf7022a53dbb75010180e6d3af5945006116c2dad2d68d4ab1c1f05f1ee27a006935dbe6d95d55e7bfb326d50dc52c94d7687666489ac994619ed3dbd2327d6275baf200c2328cb58677f8fa6648ef568b45e6a64ef2d53140dff0b3f0aee3377175d67d28854228f888a72474646458eecd5151252c974945b22c226a9efb6194772dd12357b796b13ebe6228c952d8e2c426f2fd5596dab438b74be5a8322777ff7efcadd7d7caca3cee4dee564ee31cf38e7fba8fdf2a239dd376ff4eeeec9db99bf4d9bf763a1e6de769771ee2d0c5e6570f7067cf49bbbf7f8e829b8bb023e7a95f29ea6cdbdbebb77f59fc38f6273dbd799fc1670f7203eba8fbbf7f0d195dc7d0b9fb97cb5f0f7b689b33c8bd399c45d2dab2d9b8b70591715f5b2cd57e6e9ee30770f3fd04b123baea6abcbe620f8458d1da8fad3a54ba8a54b08b485b646892f1a9b2cd8d713f501fdf45c0003ea89725b0960c560c7a9807e8a5ab05cf9fe0bc31034c08e9750c24f567d1915d0360bc3308cbd6c16cade43f045f12b3805fc1d20b17e08829f9529f5675f432b5adf8b401b7cf1614053acd84450b4221381be982cb4629b0165c1c49ff27dcd8a0159b185dffb57189a1d9f223e2805e61d7e0c48ebfbd8c3c21f2a3eb6acd8bbad0251b142c5c71603da20936a136d33a029a10844c58a4d0694058b3d581ffc0981a8b8cda18cb6efc5faadd91141262b5648f81e7c12ea87b4b7a2a5cb43f550157bd893307b11c8ca968782015921610604fb181009b11781ba3c14f83020f0fd49885574470499be77a86f4ba8a54b0f542ab06581efb6fa5b42a01ea8546003dfd570b0e34268483cedf0fc7c210fcf6cf6e18f96f07966a1f3c480802c917d2c4b0654a6f77d0ca84c0ffc0a6ce18734daf7f1fc8423ec7c0d79a0be9d9f2d1540814ffbd1d2a54281bfa502a8f06b85fa3e9808d4057e7d9e1f879afd68997d9787a2bdf8a365e7b73c14edeb0e5017a825cb0824804f03ea029ff634202d5d1eaafed7e301cfcf0824803f03ea02ffcb00fcefc19e2af0779c87f6d3a542d17ef6d3a542cd2a80a27d970ab5f321f81568841d2de2cf76befe0834a89d9f1114dad203950a686a462a5e872d069455a6f77d995ef8e3d4f7b5074806e17f5f05861f13a3c607da0de2c7c49717146c319b7f79e95287c3baa8e1e2441a5893519312cd082325a321bc9cb18120c84333e20ba12a1734361e36ffe252044f1cb4224e323d3e7c5794b81a2e28247053638b149248a3872f6b449df065c40c641070854b161bec8b0b9725e2e04183c702265af4800312f9fc14b021665f5b9230fadae2836d87cdbfb6d4b08386e863c3460e01a081439d26a670d3a5c4175dd4b0e18c195f6ecca009d1f4b5458c092fd842312683c96221ecfba2154048187e5f650e00431672b020d382135f26b8e0020a5450b1040d0a48810ed407dafccb8416c0353434e197962bbe9d0cbeb4d4f932a10b3ad6ff827cbeb4c0096dfea5e58d06a167696a929d2127fca2698e14b32c7c34cd61d3346787203e354d738064ef62a460937d28860b3659023659d31c91c968f3af2c0a98a5c9f244972c6c4cf8ca8204171f9f0ffacad2832813c51a72982531ca6cfe95c56b1c7ddec7e65f59b8d8b2d871206390d1878f4c2613db800e6061842393c96021f88da3cf63c9c23625480a2fb422589861f1018c38c618b3f9171633585c50e10bcb1615e8e8f20013e46c4983cbd715385abeae346143c0e65f570e40c78e082452f9fe027721fe4284c8820811122488cd674a2cac7280b00f4c61c7b5a469c2bfb2bcf12f2d626c1fd0fea87cb23ae8e8b26530bccd149533290141a02943a073e16da602f00402354d5505008420dfcfd0b714daea0451e707db141f9b991c6ce2151a442a5a10409d2f3cd4c1f2001ce288579431eba1013316b010c34431c3d7acab082f8048c28c38c66b8b01cc98a013060e1d2d0ca023d6e086488619b337c040a3859629666dd8ec90464441081c76981941c6cb0b66c8914213726c31620e718e03c413d0983921866c8e05c8d268f385093748346180990b3cccacb84174220671000f506196e6015d6629d4215a0187f80035d6bca1818bd90f0a9839213b438d7804026630f8500002884fcc30f382059919734e8062ce9599993944b0217a912136c08bd9992b666a402183b34624001166a0694099591063666004206a1107982d7164998d91e386364418e088527c31ab220b2e5214a1841a23c4398298a1a103991a44135cc0020e14da80c384590c759e90c3c6194484219ed9620d2aae2c311be208190a20ab736676001b665960105f78438cc8c21b5c646fd03103e20d118d34e8b899c561c01955f4d084f8250122130750a207191a38a820c3d70a2d38c08b011cd0351b401c29ac21ba19434e17b325ac48f384284412e20f43ccbef8e18c1cc43a34cc5e682107395f1c2007cbaccc03628823a65186288006c8eac0c2015188397ccda62862160608b1cb8cd882970f0398ede0469819186e6851838eb8861b3c9831c30286b8002d44054c2163838dcc8d71966601e34c081acecccab8610519c404b010451b5f6668238b183a0a9023aa80c64c0b37330670b18415621628d67ccde01821b621c414676472dc207691c10516640e88f34514234e96d90a74849023568186186e1ec0c50c0156c8e88022ced74c8b11b2388490c17106cb0d69c830040b5cb0f145c4828d2cb322e8ccc4c8116d404394c18d6c0e175458010714617c91316216851022973365dc209323c31b2c8059e38b08c41a59cad091a921e70068884ab811c7e062968515323a508805f89a6d3162e68610621667bab8810032c4c1c28c8d1a5fc43ad4c822071dd91a72441dd0987db9999dc0851a2bc43850885c7c916184105dce886f6e981940062f16d0a4f1c54b1a59c420e8cc909033db6214d1086314dd20a00bd10d2c443aa69841c1c40d6a441f88e8220839676c53bccd4c073470b04d79f11f8d196ce087200882df940783a8093306c06566869730e203c4c8d688c1d90203bb0013b60103c251020c9c21e0981163060db629463c6588b0087c84f804799f202fc4022631a0d00327852f3c41e09870c24e195e68b3048c3d5d88488c537c66528ca0f8829898cfcb64b132c27c8159c0a48e0ae1c7e11344d6c6081423a30b2f64b4014384093e3e1fd403c636c5a8470d9c182a9c146cf5c231a18c3a69f474018b82a62656069a32ccd8eaf3f8cf2de3055b2d23ccac471d5a1ab6293cbe868c317678fce792d185adfe0e0f8fff5c32dad8eaeff490a1e6238308300c1935705943460b6084c4119251e6033f58d31a37676cb2086cb226994c1633c22693c96462138f8f20656233206390d1870f96990d6302be184264330610349baf19a3cc1830d8a604b501cb10dab923107f1e9bcc06c4d790d182cdd79051c3ce1dcdd8fccd686373a0fdd9dc89289832fa1a32b4d449c336457c63f335635c619bc2e36bc6a0620c25ae685992d499e38d2abe6ad08205b7e28824a88841cd0c42d08192bd9bb18561f0c0e333c06cce185b64d809797c6aadb5d65a6bf8167c0ee4a0cdc7b7047e21cc3f3084ed00df822f947d22ecc30bc01f59cf056038837db11d5a4f146d89117cf10b02653eebb980e78d1b36b06749f5a0fad583fc693de0efec80ef403fecb8105a98f15b0a79c4fa7d4b3c51ecb810265bf54f72262153f50b8dd8ead3b48c538c8c9a84c2e802e3049bf77c342c4a4d4f6f1600c3f70989430463845d81c218b69999f08609db14213336c62380d87ccd1b1bdebc609be263aba287e20703c31af2f8e0a9dfe7a3c27e4a7d9e2fc8878f0a24ca78d8f1ef6bc082714a10dbf7f454ffe3c1f67d90ef9f47899d6af310006bdc8061fb293cb68f06c458eb17c48cce6c0e21426675c2508817709c48c01371629073c51931bca8a2000dc8d2058a39741f0e342f58d845d30c8e93c7c797c50c0e2166bce1f5091993030bb11a6a1a4fa2eee0755422b0f012c34b813132333ec668e1f5c4d21857a3cb6b0825bcc00ac62cc0eb8dd7ce180678058d292387d715dec50f6478358d91e3557631051461b814600a1f72268839628d34a850e20a05d862df0e6594c6e0c045166b7869f182604c45a18131527889732ce1060c992de8300135c5270e2f58b0c032c31c2bc240e3d3e14ce581481937de5ce1c5191456b052c5020470449c1fc09ce1668acf4c199e314fd42ac43862431de34dc8e0d563cc121e0502ea00e040e16cd438e8781db18657122e471daf9f310ff01af361b102091bcc38038c365e2881002be4c0a68823e678710037328c5f191d74f00212d305081e822053464e0943b411d3c20a5bba14600061ccf1e560661c23448dc21b4003012a133e07165dea9c50e190c20b8cd7d398365e3077a31e600b2f06762430c607096030188c4784c16030182c0c313d3e023cb884b3a931b8195e5e72bc1e1873c68b0eaf16bc1ca85378e1f54c638cc6389d6a82e857fc18536f40230d9f238015c0f052c30be90c2f2104c66cf19ac28b36868c2df6e13065451a25ea483303016038428a3563c4e0450c54b8f1f2dd6006092f37bc80c62c30a6a6e170d8f03280570448c6cca1c2cb7028c250f399a973b815158d7fb1868d155f78a5e0e55bc4623131e2b0c5dad861c8982f5e5978d5367cc638185ea21920d83c91c60737679a10810e37d6c052049825bca062b130bab0c53e1bcc3491a5015e3d78a951e33523e265022c5e3de4181e57c6a8e075861719af3180d43a8202766ac789bb37f1518119dc88bb87e0a302437eb7bea855bedbb4dae19cb3c25d9e2ec25d2d0546192698e08dfec8cfefab73392ce40e63824d80def38f3c4d30c11f41f2257a37700f8df0b0070bdc432e1e2609a1429b874aeefec4c7045e70d799dc19eba231012b2e55afbbd1c39ef03f82e4d17b5aeddc3dadca13cb826c5dfe91232f1484de93c465fdd5e0ee1ff888c02e71075552496c53b624fff45ca5690305eece4491fbf7c3dd8ddcbf0e7a184067f26e8b656a59b4e8debcaf8a348acd8dbbe789714548b97baf924dba4bb88b6bba4d484c57b8a68b8474e494545e25e1704e9669c9e9361529c26d9de622dcb34d3c4ed7cd653b99871e1ea92eaba196b01e55e63c2a6c81baa38a482193832d840fc83e51848560adfee323fdf39a41584175991198f38855afb5c2604adfcee7b556f06352abac7eb582b12a5ffdaaec5b204aadb12af3aff690e0178b05d1be86df178aa961ad1fadbef1d599c36af881b7d6295fad9fa8c107e4ab5f2cfc2a1a5fadb1af66507fd40a7ee2170c94eda80bd45aebe7f42920829586fad5d857eb075ad52fa4cd943e9e8a44ac3021e0912afbbef008a47d5f15e2b15445088f769680539f87fe11a086605008fb2ae830015431aa7f3e8e63fdea1a55fc86d4fac1be0fac35a91655b1f27cdff7c592540abe2ffcaa1148ee30204e507b1068e073a1c23e066a58c1eadfd4f7b41afa67c6fc6f350ce83f5fd52d58e2036bac86b2da53c117be4fac81b509acdf17fec7330baab05a6546e1110446f5a3c5c4afd65a65b5d6eaf77101c6eaec0b41ad0af4a5b5824475b6f35551563f0bbe07be073e074007bdf2a8b1efab3de108861f03dff7d5580d737526a4eec0be0aab3b986aadb502f9a4643bb3af5e893cb2af6650c55ac1af86954975e073fa827c3b9fec8355b07ef5abb5eac0b7f3c9c20ac2c05a992a5883eaacf2d45a8dd4073e1a28ab6258bf5a6bb5c616f87cd4f0abb0b03a7d3b15fc1ea820f87de11756a7efab0d7cb43aab62f8d55a6bd5818f26036b2886b556a6af3e43c4279008ac827556439f3a9bd5763e00f2408d20acdf17fb64b78e0a18ed30a9f5ab5fad95c865ce730f4aa8713a58c3bf033270da74f0f3260d0eac183e681006185ef5c300a72253c5a5b254781432696888f283a16440664a9c29ab644113320fc8616283183991f12972b23bce3085d12384e9875697c2a8732cddea18b3f4743879a3f300d1cdcc3704460e78e88d8610a961880d086ecf03c1ff40c06b48408adf602af88759dc41bfea49c3dd454841d099bc3c8bd337774bdc95756a625a2aa294847464e40e82fbd4d8d382cea4ddb6b4eae101020191e80ac374854d6243becadeb832e6d00583f1c82660c09590cc51f883078733b113bac226b30568417cb274cd3a083d001fd8d9311e7189d814a381467c683028bac421ba7c807065c604d2e006cf175db03aba603c0d64d1c5b38190e89af9ecf864466045b016ba28b0c3800b5842305d3c7e78fc80443d8a449f1e75608111119b644f200ff049c4a10b74725414a3c578e80277620d84433b47600d79c221da1218115907b10662b4d8141e1f3c3e663eb305641d807360893500a2c1026ba24b8229e1eead247020acf1f088f5082b48042609a7787ec43e19073220b227300576d4d80e080b794010fc40192882335a90109469204380c714ad872c26aba02c540a8bc22a320002b932830076a66b070f577ac44220a2122ce1175880acdeeba0a38c056c51451b279a48b1a85410130555c111268cb2b1461105230f51f68107509ed431c5150a802005a3175cb020862fb4a082890420e0873245e4040348770a3abfd1469c2eb0b8828d014a202104103c08009427172c81e0811f0ba431a2841f7c2061042b07826014821d5f3480caaeab0e3ae28003840f7e2cd0430b26964822010838001029a0e0c52a840e3880f2448a8a299690e288179870c1002a986093002472c0e18b0959da88a305160940224d105aba6e2915d5a327ce186fbe70828d114514400715c2dcd22a04103ee0402aca484da8470f15533841830c2a68b9650800905a1265c4c77843c5144f2c614411050042871550d022050052478cd498948e8410e8117a1d63bc69c0134e2cc1c6882280d06105155008a3450c2b2920545044d6a1d304031e3bbc082206cc970070606443982f3dae1e667580747c73c0e87c728867c21d3e1dbe3215e93b028d2ab9430412017f0108be201588ac019081ea13fea80bcc12400001700c79f0ec187b1ae061602708adc74c26c6645f2c068381d5635a681240d1259bc966e10e714936031de0a9baf204480c8ad1c4a69087470d796256e116d803f608b7c81243576cc7279b85433d0e34f9d045db80a70c87765cf99480c034086bec694dd791264a7a64f9425ad844288e2e32b00c6973a5c26a3d20b0e0ca17360012f1ea0f1218112cba623108a6b428c003ca04f0822b5cba189871c0e383c74795250af0444d83a3eb69cf2eb8ad30ca66600f2c2bf402e68a18ee88395079245d29c386d9902cb488735cd8f1edc02ce821730a31b81fa0c192002c88b68436410c847088cc090b11642ec0b2430a0b8c465a7a704d4e50a26b27cdc990a5078947dd20086844c6c0d2159acc29461377804c5217800ed096c0d1459349f550894c80442da1cd98f050954f4474fd08879668b15a023d31da4e1450083974d144260f5c7de9828123acc63288d1604662439040eda4330a4426319a8c811e253321e193d90f1f41266860812122110ca24c70852692b2a49e2426a929194f286b00560397663c21056f816c26a38545300cc2260b2a0c08f8035bc06826e240a728233e226d8119d395244f7694c4a050482824b643d7901da1121811d803332161101e47a00358bac8a20ae640a21084890014020b4860f4071fdaa841f3c30e389c50c2085c3a2b7771b71040f020001b684035d504004c6a4d4941134810c1874bb0a9838d34caa8008904400d3020ab418a28cae490415405350714e0d9892991a6881ecc94c1e1063235d0a041100545a40c315451d551c701571eb0b14602ac708f15523073488cd064665410c3345bc0163a98a9392dfdf0b1431365418020e00020dc12ca1300482d89aa291d0921d063474f3806052f5c1000a3c8113ff8b043091c6cc0b4e4e323aca28d9c0d901c599ac962406c2922081b06c0c21711bcc68c4901ca13244628e0a9744039be39619c5fe3831396f1850103a332e0d3e2cb628605cf155f151f155f9a0f08f0872f2b9c52855408440760417a18f87e7c0a541f3d128021f0f5a863b8e3db81d1be99287e3219ec0b2b586bccdd9d88bbd3965c021f656dfc9e5776a366e615dd12e34c341d72afa00c07976d6d7ecc4759d4283be2ee13f828fb31ca78fcf639fc421ff47f4b53a3e66bf3b7f9467ad966abc3bdfd8dd1d7e6efde550c0d2ec6981663cc89dbedb15013bdbaad17fa234f1f74e4e95113eb5e492149f28312172b1204831a6355ae3389e6bbb7e515e5ad634beebe808fb1f712bddbbe8e7989de1136052ccdeb36167acfcfe1bf38f3d49f716e67bbf55f2cd4e6990f9f01f994707721ee1e81bb033d50cf703a7a249f738a1bf23527a7262726a725a7224e4a4e494e484e474e464e4e4d4d4d4c4d4b4d459a949a929a909a8e9a8c9a9c989a98989896988a302931253121311d311931392d352d312d2d2d1559525a4a5a425a3a5a325a722ad25484a9c852912245948a2415412a7254c4a8889352931293d29252112525a5242524a523252325a7a4a624a6a4a5a422494a4949494849474946494e484d484c484b4845909490929090908e908c909c8e9a8e988e968e8a1c291d251d211d1d1d191d3919351931192d19153152324a3242323a3232327237dd1d888fe1d599dca528979114da102d2868841f81364413e17fe845f8ff7f77ff7108dc3d7c20fcaf39e08dfbd746708dbbfff0113c338232f8d7685fdbb97bfed36e5b8765e6ff9dbbe72d5fadadbe3adcb6bb233f478e8ce039824ddc5f9b3bbdfad7e6a3f7fcabdb5fd3259ae2abcfe1df297e7777c069b5dff6cb9b853351cbab3e82e307b5f17bc1dd77ea24e39ca3b670ce18cadd3f1fbf2fdc9d2475264bbc2bdabbdccd18277451fce4f62836370f8a7677293e7e42ee3a9357e6b933beb2ee3edc3d017797720f7b20b987a0bb5bf9589bdc1d0177bfe969b5fe9673d4ed51fb28fe9b5010cfe62d34add5f699ea1be5f6e53d4f8b73f7d1dd79b8fb0ee771f71d77a779397463f473e60b05fdd5a75df2e40d2929bdbd36ff76c3facb3457bdb6e7ed76bb65bca99edc1a9f7faf76af53ddc5c232f3799a5b1ba38fb92e8a378a713913bdbafdb713fdbbf539f3efd5df8486826e7f79bdad6fbe7b6bf3d4e1f6cde5f04e9ba8d5e1eeeeb150330b67f3be66deafb16cbe5af7344f1cd1d66199e7eb2d7c9e554fe27f9cb9b5899abb7cf72d7126cff674f1c65dadb742dfbbbafa66decd41ff160b35793cebe4c9adcdf36f48aa9e6e286aeab6b9b52bedcd7f9ee6d67f517cb5c53d6ae630d14ef163acdf18e5c2504ff632dedd1d116afec5caf67c6bab98fa37c053db9e39d4fcabcdad7c751be37e4b3df928fed2e6ab75d1bf19e76ebeba5da2f6d1f4b5f9bbbbcd5a541594274f3e79751bebd3fed0933a6d993c79bb513d89c359689b8fb7a640f3ec2ee8f5935a7f160e9f3ceb64285fddbe5878ff4e79a71542cd20f2492552d99e29ceb4a8f969eeafaeeacbbbe43c6d129caf07287e9244098a71b84a0a57e9f2de27b8cba3ba3bfb04777954523002b8bbf5b1f6c4dd83aa9497ca1bd169abfbbbb35aa739c595f88919232b9890c508cf086e340282112a23488c3c1931e2cec32f2441d0d7bee88524f81f92e06b3cfc43127cd07f6d48bf940f4623b45a1c77ff9a50d06ffbdee3e1bcd16b65f346cd9a554d67f28aa80673c732778fd137610631ee9996d849152e532a7d016f67b7be3bb3ea87a89e325e725ed9f3b4496a35dac6a5796b14e3acf42dadd05b96a6cecae4592b9eaed572e7d53ae39cefb6276f77372e536da5cfd38a87e4a9080c45929037acdb322defd17baf5e5bddd0bdb9ff5dba335173f757b7cbd2f2cc7d7b1dced46d7d0effd02ddd387b7bdbbd39abd39a3b5bdebd39abadd329a5bd37776fce0abd27cfdc48903cddbb44eade5c7ae250f36eac7573ba2d8a6552d1866e9efaa152aa56b3bc12b5190bc9931f62f2544aed4bb5d1bbc34e6ab5aa2d8c2631e06a21aa1fda20a844539c99e8b4d5ed8b95ed4e42c7241f772958b7f5431f3ca9f3dd7767b3e56df46addcf38a7b7d5edefd99ceda316bd1bbd5a51ee8ec447a436eee4eeeab689c35adb1487cb3fd31cefbcbabf5a568744c65dcbdc3c33e3f42dff5ee9f46b249e5f9d5a1c1200b05053b7ef0e6b2b5c6a2bbcefcdb91dceb9a3381b3577474da0e978c473bfbae551933b797758ff68348714ba396784c6ddf10efa7234d29142199b5a5677afb4b933f2c977dbf35e3d6a71bfcda02fd1cbd3a92e2ac3dda1f858f482bb935ae3f3778acdc742cd212551bf85cf7bf53bbdd258b775735100bcbc4541574518e7ef5dfdbefab5ddb275611b4916dc9dca47d20277272fafb7bfd4775b9c59a2668a95ed93258a7157e3fd5b673397c35f5e2dbc239f2482631f6fd4fcf266bcf5cd18f84824e6ca2c6fc6bd7d2cd41cbaddbe77f5256a5e1c6a53adcd3fedc655ee7e818f44163829a4efcd3d8945de20a22f2f9193e5ddb2ba3d040659de2c1c3e5fdbadbbc343687458a6ee6a83a1aef334b3be3c53bcf51bbdbb9ee51555b97b928f43166853b7b5be5a6f1b8746a29b79bd6c4d9c99bbe8257d24b2c5977767d191081a77b244af26d2e54ede96dc2af7e61c9129bfe9f2c44cb8ac93db97f7e2b8eeebf2c4bacfe12722def24f6b6ef46e6ddeb4c4fbb7f0f918ef1f8744e14e9e76cbe652b7cd2d336f7df3f7b6599a2915f37c24179753ac4f8cafeecd39abad8b5a9527aed5aab6bee590009ca7b51a87046d8bbb99774bab212ed446b7ed2dadb646a11a5c5ba5425c4e4ab9094d91526e682af47e65b5afb60a6243cb3cad15efde2cab7c73a554148d626d6fde688a77365f33279585c34d4a13bd5570ce692c7b2eb1797345692c7be6ee8df231e8c97ba74eb1a975f3d532b1de161452a08614ba5ae659ee527d73cd470aacb89317c523053677b7f94881bb9342e8e57dafb4379ff633fef2065d2df3fc4d01aacddf57ffd5a9e5bd6d4ac9135b940bf0fecddbddbd6d66de364ec073726b7b7ebe3b671fc5583fd6e1fe4f8b6299fa3746519b64821f365bde6bfbe5ffa3b67cd12d28bd8b41ad568504c90f3de530ce53514f5c182a8771e621a97aca7849160e9f5056e5d6f74a82dbd656776394c847098284c4b1ad5579cfb4bc3a9c46f2e4099771ee49cf9eb744b2cd9dd9e4696bb349cf56de124d31d4e6baa84e5b26b55a954e5b1dcea15238879a565ac8e88e5e1ecfeafe51d3ea7044287e144a047178f6e6363e465043ef3cd39cd617874beff968045d252faddd220880fbb637e35edb2ddb0834e76a7b33ee965bf83cafae0ae80a7757e223909812b5776bdfabd7e1b6dd5d5c9a391377797a67d1bfbaaa1168cacfd3e2f2dda7997bd4c432337e281f7fe4fcc8197f8670777283cff86ff9eab619456e5df4af6e3fcee6cd751fef5fe2ee4e7cfcb939564e798f859af7ea7738e732ef2f0ebdf9e66e7e9c6f15fbdafc9bafaecadd2bf0f12781bfdbd498b7c3b8274231fadaeafeeaf6dfd2c4992995d2528aa477b390dcf4b41bf42e06bbbb4da4a454f76ed655aa6f8971bd8b8119df577f179799bb99f753a4949bb6da2966c0c70ff25b629cd5be1a82396ea5dbe696d508419bf334b32040e3a4945b56b6bb9b21d0e2ae2f96e559f1ecd559ed1bb5d1ab759154f1f0bedaea787aa3d7c499b95caaedb64aecb6a5ce77976a14e3369ae224b91b45e75b9a5a38f36c8eba38143fa9d5aa90d46a5556e589ad70993e30844b01217f00c29317674fde6761bc7199eab73d707337b9ee5f147fcefcf29a278f97ead7e6f76ed6972736d2dbe6466f697e7975b86d6ee9df3a9df25240c81797a9fe0084bfbaaa079cece332a5ba57bf75bafb7c4bf45261dd1692aaa71c145e9a85719372eba248ced326418265e6509ce4b5fdaaa7272e0c759e16d7869472d3d6ca0134ee40973b29e5565e34b5c265eaee3e3e3a7023a5dc7a37cb6a5f5dabed7b9e76eaf6c1df4b85de6c794ff2bddaa5a892ad2f9659ee94b75328b59a4e5b261be36cc524dfd25e1d9227dcdd404b3142e2ba255a4ae16c529092de4853fa0192a6f409773708928193bb37b93bd312166ae64d65c5d37767d18db3bc1d4e52abe16e897148492912ab7c795c76974fbbf1b6e2b23b244f5c7677adaeb657489092d2272ebbdbe12ab40124f29dd2b55a932c1c3ea1909497c733f3d6b59db65b4f150a036adcbdbc54dec8dfabc7fbb7de676a73b7fc7b5e991abd543a937a9b3bf32ca2e48e73a8d42d6dc6e26910656bdbc4dc262a55c53c2d6a2e89ea9d3c9e6d77b7ee69ab9bca77eaee30d545f193aaf26ae5ab6f947bf3129c3677b59a466f16deb59a4eb7dd541787dad342e94c9e76fcc186932449c1bee7d0b63763fdc64f9ed47f5a7ba6b8d3e25eb7cdadc742cd124dff66fb9783daaeb93b9121ae3359545484545ee59a949c8a8e90ac1153124ea94c4a526a32ba4c4477dbbcf555aa8bf44e7116eeea7045dbc4d269ab43d35aed62d98cb7aed57e24f0a3c7b8c01cb7afdd7edbbfdb6efde5ddbc34679c04e750a95ec6db96a87572da7c79504ebbcbf84959abed8c79bc545bdd9dcd39ddb353f889be1de89e9dba3767a57b96a7b53d93e870dbf2b4a9446b7be23848c2dd4b1f1798b997a7993a91484438879a44f7b438ad753b7767512eeb84dc995bdf2f7f2e8ab79953ac65736fb192af5dd43c7f87f7c650afcdcfe9be583dbbd329ee493d4985957cc653eceeedf3d2472f0fd7b2b4991fddc29f53dcfb6d1febc765be5a770b33b995f7e61477356adefee6508b1bc2f956f921bdf3b4370ff914f73e27f53f50a24479f04f6c4caa3e4a54952d2aca051f05f555541a387912bd3cfce4c9121dba5a53a1f87ba8ed496d6fb7a15bb679a3188785e2d3de6eaf87742e876f69f3d67707f5e4ed96e20e46f8b7db2af9a172ea879e76a68e8a679d5c2c7be46fc6fbff45f8ff7b9abc1dc661f476bb457d049fc376eb9de2cf61526f134d5f050e54e0717792020abe569a56433a77f3675d0fb54e30aeb2570915166af66c895e1e57142a1545cc03e7695188e35f4321cdd7b47c0d85265f43c187fbd7c2bcf1af8541e3feb531cc09001fc3f8b87f0d0c0f9ef311cc1398f06b5f9a70ffda979bbbbee6097394f8da095d4ea8fada0941bee6058dbb8f5eac7ccdcbd8658baf75d95d9ec62ea2fbd76a15171e3cf0918b9493bdcddbdd7c73b9f4ea3546ff6b28367569a170be55b4a9659a7677b3166f0b14ee7eb5d5a5a9a4773188a29242a5f08994a4c1167ea2d3964929b52f7a9b9ca7ed9e3c3357e1aa5283259beb3ea1daa094226f5628be3d6a5e7169b95a94f0dbc627d5cde6d4da9c5a2d41dc1df422ec229ca18619b09c7ef444b9f3ea3f72e4c98b55deca73f79b8f57b8c81bbd453cbba3620a77dc1577ff6825349d71e463d70cee6effc5e8d2911f5657902bc125a441ee4ae0c1aa84a6ab659250e79ffc30e0ee11b84f968f2458f56e96d56971d85190620577bf3e8e3083bb2b9147e411d189e26c6aa1370a28ca7bf5bdf3caee74e74f38e14d3c6162c5d322c421829b5bce515950a2742671dadc15e1b4b9e3f2b14a1a7d53adcd221deeee1dc69157a96e9b58454535cddb5bf7db9ebc3792d3ab656af4e66ef9d6ddbf2a66dcbfe653fe84a68a54efea6f696a99a5fdd8e8e9e0bd27f5d58fe2f32ac5e5dfab25e4dd99dbec9d277a35d6e13ea7b88327f52d4dad6db3e5f1eca725cebc1f3224679637dbad0bf5a4e655a06536d9e6ce6cf2c40ac5e8de55d56a1ac5a646efe6bab59a4e5b26176cc055b533767271172b5b5d92d4c8befacd18727cb97b5d43670b71f7de69c4b35befcc3d8aa1c347316ef828c68d8f62b6f0514c123e8a29808f626cf0514c0a3e8aa9e2a39893c70f0414189f9af0f189081f9f72f0f1c98b8f4fd8c7a79bbbf324e00d4431ea261777afa618f3163b77b9eb94cad5484a6ce63be5e4e9b7b6f7fc6dbf77c543031fb3bbbb07544ee0d9abab7d3d54788408c2fd563135957b731d794a765b253a0b879b94b8077787427551fc04978ec2e1eee76993d86d95d8d0b2b4b74485b867bdd34acbafe14c2cdca42aaacc1877710e2dd2670dee0e86e279da2419e73c6639c077cabb69e0ee517ccc8ae1a27863dc9777e32e8feba2e90f2db1ba2546b3926435e0a569738f6274e86fd1c6a5cdc2bc221ede59fa2ab139c5654a65c68cbb9771f71c0860cee05eddab898277c08b72060b1f75c871f7d08c0d3a4c256044134cee5e2b58e1032862bcd090c6ddc137d40821081ed8c0a086bbd72f68402094614f67dcbd5e7185c406843054bc70f7af495405637ca1e04b1cee0e2a90429b355c78218d02dc3d168300e6d42b6a7458e0eedf9b3754b052c705374cee1eca7093c1a08362ca174e744b8c3a216fb7ff52ca8deaf6c15fadc19343e5d5bae5a4fe669c84a4fa5ebe5af7b7d5ddc8fb641469f26ce76993903be5a1e6df1dbeddbb0457ddeecd91b7f3b4496ef7e6863e03f49e9b2b357936f2a6541e57599139fc64efcce570895a1d6a961963dc897178e3cc7b9d6af46a146f9cb9ed0eefd40ee9279fc3b6a6f7d57fde12eb94bc5713991b635dd4cc7667665e69eaab7db14a8bf5bd7d376a4a4dd9be34c9d27cd36ad9f2c48f859a59b7cbcb754b34a73b5df2a436b7fd8d9aba3f6ffed2dead5fffed9665f74b4dd9b052acbbdaea27adb9f13e2dcecc786b53979e69897717cbeaf4efc9db59aefd398cb569d5b3d2e4e63ad31c942785ca6c7541da2c5f9b4f6291f787f469dadccd5a282be3ad7dd1ad2daeb4386334e8b4387c9677f3eed5ed56de20fbe76971544f1e1169f373e7d5db7c2892247f088908d40f1d11810ad21bb5257a1fefbccd1f827af4ea38b0bc9e3defcd9677715c7763d4246f7a532a9f6f2ee31ca931ef7ba87d54efccfdbb8c73f9f2fe5e7dcfee48ab43314fdf6e5ba3a6c5b2aff54537eee68c71f96ae554ebd3b4fb968f667b4f8c799f85b54aacdb77b7c1736dd2e6d43ecfd4e98cb5beb88bbed494ed497d4db2bc3addf6b579d3d30ef5ce244fda9cda3ee3dcc627d9dbe669bf7c9367ff66a5b37057974493b897ad96ddb6d4a44e9ba8b9e4337e539bfaea7026c6ed143f14d2e4d9cfd2763f512e47f5a4c9b3544fe4b76c5642e2ccf32ae57d793faa892dc9dd168762dcdf9cee1be549fdb7a6dc4e6f7fafca7b5177d2a2f96eae6b4dad2fafc63caefbbd9ba5d3ef9da7c539fc177c79af2e4d3b75ef922a526b9e69f672e6c9dbd9bb75e3edd2abb7bf2fd60f61aa27b7a9b5fd7ccdabd3f8c9df6eb7372244e48de46b3ab977c90f79227f6fce2ae88f3ccfdc56fb9e468478e60ec29d166775e47fdf33e3255f54f4376314cb1cda3acdb7dbed49abdb9f6fefea878478e67e8c067d79ab989aa877667b9a3b53bf7d34cd441bc5f976da5dded6de9d4631d6cd8f629eb9df5a9d7dd4b4fb0a3fde7fa6bbd7e6adb7cd8ccdccbb7d3635c6403c73ff69d39d4d2da0bf3be5ed30ee76bbe6c9dbe699eefededcdb3ecac5a137978372f252253c53a7518ca930ae8a92daa92936ee4e4671592724ceb7ca95456f895a5d4eea49a11e6a3f670669f3edd6dbe2ab9b35cfeefe4685434daa27af99377ab9ac93abd347cdd7d77c2eebe4c913e77c75fab71b5100a07050f5e4b6392d5fdbadab656e9cddfa12b5bd9b75753b637bf1262f69fe902eafd9b35b6fbfbc17fdbb3544d4bb596f9fd419e77a27aacdf3e6bb7577afb7f943367a7137ffd67837448994ed496dea8b5e2c9df1b69fc30fb4af06faab13d2d7dce6695e991ac53c7df3e3cc1d4631ee3e166af6cedecddae5abdbf82ae87b67b6b79be67d7bf262a15b5b4f0a0d9d415f9b7a725ffd96ea6b5adf5c96b65a0d67e68b5e2c0d2e8a95681b2e53aa3249ef62509a658a4197ef52f4fead0a9729d5cd664ae546c1a089bbe332d51697a906c01564ef66ddca1bd1095e437077d4c70bae70f7233e4a89d138df2a8f859abdf37cbc5f6ff3ea73a64e3b2e53265fe84ce28a904b641211516f9bd9f2ea57635dee4e4209ee4e82bb8fe0ee56dc5d04900a77c7f97841cc7fde8a952fef1f41f256acbc5010ceb78a9536c97b73aebc51ee799a183cd1e0963809d592224b7a32ce392a898f5144b8d5fd6bf39e57f6f3e5fd46ad99add6db2455e769934c3515a1a232edef2cbb7bbc3fdf32e3474d7c657f0ba359dafc27ed89bbe5f776be3c9c790fb4a4a988d640387bf26ed6e63715a1a2faf2ee5b929a02d4dcf782e7e04a0979b3b0166a6abb6d99c33a6d996c9dcdf496270e7adebd59bb77f22497dd91faa6da5e7d4deb099e7c149b7f75375e4fb75fa3a6c501947da8142d5197919a059943cacc0c8d00200000a31400303028168dc703225197132aef14800465c64e663c12ca669220466110c3300cc2201402000008300000639061865b0f3f86d85335fa705425edf226ff057058f72a6521621b0461f8d861800d97036b07220dbbe999890f7a5437c52423591af2360d2db5d36c1512d453327447feecaacb1c41658ea9378a35ca860ffdba3bf58a6bb1096b2794e3f5d86bf38f50034b158147afb46e3c7083ff85205f57359c4ea773cf796528c1fc30baa25413817ca0d310187176862b693c18b16bf994326648ce7e0059e56f895cd004c4556714d64453502f8976522273a8df463b5604e28f7428377e77c96650a9d89dc8847080c5911bef2b20a8f837d8e85ba7dd7714df717ceb6e59f10d13208dcf919e5b756930cfcb3675a077b1509f29626ae2aaa32088de3e0e10e339220d391fc5c3e223b995439511252519736d6cba0454a5bdb00bfb267621150f1acf1d376021b8e551fb0d1f9eb49bead95c100d019ff48e0366d70599651f484609409f66acf90f997ce7bc3b7a16cb0c04a23fb1de5cd11273e29c171ba2bce9066a1313e00521af534c53af5eb7e893403a42a39e1ae2c3f19dcde2e0bdee2cf45af38c55be6032c22f60aa83ce4b8a3b42c20f531c7e9fb88d7d2154699fa03572dee418faee8f31eb755918937e2ced8e539f95a1f2375ebf0916361b933dbd70fd63114757c8943c2017ec438420917bdb81a74b859903a22e5284d7d0f1045211158574703bd1e0ca0b45f90dfd50cb2b534beedad0c0efd87440f08091ca0668ea0bf8bae2a616ee8394ccd86fd12c33a395a574658f828dd92fb8521c391380a42d19bfb4b7ac9515ffaf22ffbda8eb7ca46ff87ed162a439c95bf22d245c83971cc98e940a1bc9bf39712ea30de124a491cc538a1281bc1ac959948a2fe762ce772bcbab6a3ba59cdadff327572bb8e75f25bf4b79dde4c529fcff7cbe0340508675916dad15f5338667f6cf55fd18094e59efbbb17f5869eadca6c27e16f31179a912e5901122e3f3f7fb27f21fdfc33d05e7a83b75cdb64e868e83cf1e8128521a2c03245f5a9ce2853110a1ba812f76186e59c57860e8fb385e5e421c62bc169594ff8ac17b9cc73aa4f51f4ba79ec7d86fbf282d79c1b845bf18375f0d8e6f908040797a3fc71b1c88389870e1d5d9c63a19e2c070b66cbed6e5634fe8679de1cb3a48ff4b4bb25e4259a0778159937e429f1503bf027ded6ee809c6486e8f8a6cd87aff993e4ee779ff4bd3fec7c4df43dd380f18245144009bcd08c512b932bbcb000cb2614bbdff395d96a698f09370bdc3e9fec3b0071fc4d78c315376811a9296a95291240facfc342780616b012f722c3c66f74944bcc8e0100416838b7cb9fb99692aec1d1d2f70722744d76f45493028f32cda5fc234559cb8887317827f0ede80286bc13bbb931fae7909fe10308fd1c6205e619fe486346be83a8c607d020de90a218aeeea12a69f1cdd4a34d63031a5b80d6938f74f213767d7235994da1e85032847325d2831968f86b5238bb8de477c0a7bb9d76846a0f6c4de81bb0e05f998b9fa552be6dfef70294c1a90f33ee566ffed81ff5ab1900240f2a00bd67933db85582de2c5f6ba57906ca3df792cf2e7bd330798abf6e955ea9ddefbdf74bdd25d757f3cf62f80b1700fb005762cbf20fd78c0ee1f58a584e087b923ed9f5bb7172d28261d62f10956b42b010473aac001aa3b0ef283efe1927994ff6f6b535ce3b2a80c79de6b34a6660d438bd1abcc9ec214857e58c019cfecc1915042cff111aa21e205c9c1cd6786d2f64067c35918b82a34cef730bf46bcd5768874e0cbeb4de78fc565cee343ac63ced5bb43464544501ff3a03e761d747088d82210f2a5730b599854422f852fd769c12433fc31844d03bab7b4a82bbadbffee18007dc2caec01979237a47780b8abe2398970f320e2987a346ec4b325e4116fe50cd13989f9a9ec0bc8b2fbe924f69be352a6a828b4423fc40559549736ee3293a808fff058de6237e41bb87e1d30f5062e1027f169f03d117ce9dae20d3a857eb23c04382ef548f78639bfe39f8cf2a753fbaf22ebcadf7e5f1a479281adf3b110eb99327c2b217eff9e9fd2188153c5f61e8123f83862e95e8cbd136618096c1e5199d4ef52d51375454ecd16e165365b119f3aa6f6b63da78be61ec05f4ca2bfe8c624ba7bc5f48058075a02cf7f2f0e8444da80651bd7d806dcea44b78df79cb7ef0853ba467c4103ff022bc45d35594e9ad8d53a51a93001f8e3a5d1487d2665dd35413aeade9a406b1d1fbc918aa8b78afddec9ba5c626c18ef48f86ccb7f2f4dadc27cd8431a1fb2197569d96d8aab4e6d92645af2188dd81c0aa657dba08ad603ef4a0f9aadf038b8135dc426b7e7225432a1948b924e261109013733b18f113385456cc80b4abd0b644e31b1c989ba1f30b78fafcd476f59e80aa47d229ea99900bb63ddd35d32ed786baa473aeab59613637709e74da0faf0049432897c1ae58863f69adcf1af4fd2ce7e20ee37a6f525092b8876b8ab2469700e89b88184e2f1c8ec3cf178a8fb460e14dd636b4956f843c471bc2e7ffc437040e6e6e6271ffa91992cb9ec62d6b1d0952c94c70889bc7fab1fad3f49fa196f7490c7f647bff2fc77ea15b66a3c422937cea3431e8fdca5145d26ddaafe407e27e2f2e82de2c7e2b66b71c5ea75605153e6cbbee6f0884305ba9df59a3ea8882fc823b5fd406129fd74dd9bcb2c59c1d28692a33c2fbc43bbb2826c944f22607028ce8d2b90655ae0dded66ced3a7c4197249670a9816db2c8091edd7986e9d129a1c882bc08c605c5d9d7d502f02d5b229c0b8213343820e183234b357fdd18df42321ce073a98a8e3032999cd3599e7c0bc42366204949a420d8caef60bc1040358844169391f41dd70d5002bce78eb8316b49ac7b3765cd6c6a10e681d7c67c695075ac363db8237334dc2b273475670c1076388e16d8f82cdb9b4d7a4b3ed0236ab754a864a008d6c78f5e02c1bf0d042e4610d385f819fca8101122c42f9c30a2dad74091c8f3a453cbac594681a7fcffbdfc8d3b42e02fb22fdb77cc1249287527afb13d573e80158c73cc5678fd76bcdffdecb1592129753ce21d91a47929d4dc0131416f807ad3e2d83b22b2871a8e9fcd4e1a3a6c63d6b90f3eb7e34af94d930c5b8825eb59faa289faaacea0d74d9c8036f2b307093a21fc5162c81f9eb72bebb2eff58e067bb440491b0cab634c3c60d177814f6f92f529d0a1b6c28e9a69f725ee504548f73ce3b65732c70556b766d31598a0353b85670df17c7e11bf3234c2171daa97abcd731fcfd5b433dd57ef54d4b11dc7cb1381790de214203ecb43a8bf00cd82061916e4bea46711c097c75591cd4857bdc30cace8a0c777b0878248621237e8e6b035ec6d55b4d81b32443cb06e6c6db258e56b3568317e41d22662264e3026dbbfdcc5f18591099d9d1de5b5656a30cde9a56ad3d357160bedc1c108fa2e702900056d810476fdac83324a8390d884e8e7a410e88e5afa818e19e3bc012b3f1e043639459bec3694ae4dabec188851c53e4a3b222916d7ab792944cfecd15076ec33fb1dadc51357264d0b585d01dc0b240743c474a277e3855270438dafa0587d47d132dd31e073983faa69b3e3272d3d27de36a7da77c7fd39e605c7da98ec5b909c9ccdf06a937537ce9913a62f35b38e4882280477ed49bcedfd0d68cde70fc8aae7bc396a5643c4f928736471b6aba9dde7b6a92e8d8fe6332470f3cf30555a18f91fde68f4e4dfad07e8e61b2a243d166ca42d21606ca73290d9e4ed93b3e6d974830ddc79d9e2b14f1d275869aebec011c32dcf618e1bc77ff7644c214153de42642ed2f0842d2438badcc79eecf480dd930045626dfc7685da364c4524d7eb12d792720bc824ec34e96c909d1e66d5bbe3988d93a3ab07527826ba00184791e16a9d8d3c3f18dd2d1983be524c19e2bb3b0ed6ca038dac03687525f36522021a14101abb308a70af3a282da564e1bcfe0b55e4d0660008b9938f5ccb008a266b196fa46d95f5001458c00b4a88d69cd906d438a88786d675a7d95e19a351aaef68121d42caf822b624a784e4982830751561386144c94812a0e68d3707664e99af9c5119d9b41876f222464b93443c4c09551be474853f40c36f36e09639840da1bb0cac763fa5b8e821ad8c49be03418b9faa9b73d16eb737bba24b9c6ee9869cfca05019f0f6ea883e0c8ce4da2bb6f9f75efaed4cceb08b7a7524d3f1fc5bdfd94728e71ee45b05dfe86c652afb59da607dcd3f3a6a94567b74f31bdbe73cb2d25591386f7063525b9895b2e1074f85913ac3782f79010bcbcc5493a55baf50574ef5769d7df42b2b2742fe8e81d3ab31e6fc230513e264494183744b87c67bcb7db5047791ac36ef77e680e6278418113d3acef5d1d381f7a6299620ddc3bf5145730f4141cbed99ee0af66e62b86ea76e21d52efdd5b15fa3c86ab4f92d4d05a5d67fdae0359ba077ba53f1365d0e65773828c6ae321f9aaedca6c135ee7ce63ab4ff3889d01b9befe7f2210954baa5c5876d6c06fe316298ad1b8f0d1a7c8d43cc660a1d0adf26261a5128aa9da7d92a6492764c3a625788edbea0e6b80af9c78f9086d3fad903eb2e5eaf4ca5cc6562c0aa401f40802fff5ba7b787b453ca4ca310c6a4f51380c615281d4204321316ab612418ef199e78d9a42a16f7e3be52a8e19482fad33aabc55ba6d0737ee96d1c18f22bd0601c8daf80211ce271aea5bacfb8ff01eefea521392e471ec411934b5a1e375af1285c6f8894b7cf5228c94cd5a7e88db3dd456ffe378cfaad5de375b34aa8ad6bda6c0412d4649c33674ba5662ce1d1a4b690fff00c369a30a3f5238bd5dd66fa6e139f3a19dc19b428393325f2bb0a92fcfe07d9e8ec560192c07c02fd8585197a701e1ac60c3317083367d905c5e48c24e93d5e34c688436448aa52f3d126f4d366300b4256e04fb4a344b8f6d14a805df927100fbca130fd0d5874404777baf9c7d2eba6cac45f9f61ab77ede5536f1ac60412c0f3981af484c0260f745a8a17f73ab03b2395301173678d7556434793d7be6bc83c4cb308682faa03c3a1d423bd6f4a304d42d36b4314ba662436d5ad8443d1799d5cf05ed42b83b5e54239ad57d30033e9893c8e6e2cbd683900348b8317c862cd2cc4eec5431e142de80082a1375b94ef48cd20d81da02f04460d3e9441f7a5f434164163154dba793bec604a0a2acbfcb5f999a8a2b40c6f744ea8ac3cae1cde48caaaa1a0d861b8fa59bbacd289eb3ac6b0bfd6b5a5c9e228ff2aa4feba61afd80ac4497ac3eef0386fc9930526a821c5a128c37cdf0f81f7c8b78d166a4ab6fb1fb425a6154f9cd599bcdce16be0b346bf3e3710c8eb2553737ec61bffd54723a8ddbf779b4354924cde31e551a9ad727da58fe4d993680b4bc859bd62940c8610915f1a3acb33760e0aefd3215098f7c37e41aed1b6a373c93d6ececd2a10670fa606cb097c51d30e1d59deca9efb5b1b162e6488e56918272d048372a3e1676636ddabe34710c32adbef90692b4f51b6dfede01f04d92e722d53227ed521700065451bc1b6ef3da6956a575a1abda724eb159431887f04cea1431778a2500c375137b35359ed106acb5db201e11ac6d1c473a3244654142f51e9da866d35fce091de9b5167001d8f870f385d1d9dc3e38fbb47be78c5a9fba363ba6d387b73b9005c9665a10ccec499885edb6589695d7443d494d091a558574af50ba4081003e82a3590ccd20136ec4ded5c1c39d918462c12ef6861f565eb5d047f14a01cca95138fcf48e1e7b01820f9f15e747f239ad9ccd2b98888b829ac297b00cd5eeba96a972c97faa0f9acb5e773f8e9aa8c4d891e286fe0dc2dc2752e8d8b0e2266182d7657222e891a78c1578290b1509aab86792d6c1cedfe93052396140759ea1c5f4ea82bc0e163f8ba19f808f2feb5e8cd6a82783f7d23f08408849aec838866a711ce3d69bbe63c1b78b3450484db9894e43d5f75a42f28ec29043c1724d8f1ff25dedebc438d9e293012c888358a1efea9f9023929242da5240c1402dfa840af2f5ce8d1c7666fb7fa300b87994f88129531207d0e7cedbd452627df74c1f0fd40f089107d3d0697c46174aa849f94020fbb6f4ff90dc7f6fdcba57962a31e3e2de47454a5ec6f1fceac7f896b46ded23222427ac6efb21bb8d17da804c3866735314a203569fcfa8722b2c748d8fe2c6203615d8631c2699ead823ff6974b8511e17c83e600a7d05eb6dfcd35bba778152734279a9cdd104c6ef5d0e1a978b2e849206dd948ed5a134832f8422eb999be4eb4d23ddd0fbe90bf1f9b8374ab502848ee8732c189d5b67d70463e19bdc359f1205cb1a518d0138d91996f5eb7a58e77eaad4af74d7042d5766aa9b4701042a580b1b6099f8c81363007eb257c48131f1836756e40e922c0fd13e63a58ec0aa40098072b40b2278d9b1862230fb72433bdb95201276797e4dce09266943f289385bbb4e070bdd98a81954e201a5dc67bd16eef7e2539ba0404a7d375a1f14f0b1c0bc9bb46b80082a19b6dd8412ac9f9aa99798b2f39d82585bb3a322e3c7a6d7229d2049b913859057d2c3c9b6478cfbb345ea44dae12102e92f449f97ed5b7d3b5bc692104ccf4460e155e32c3dd0ad216f835ba33ae9bb6e4b31292e2d6022cf0b52c7c6fdfeb7f04b633467358379c8483ba34f639ddcf1e91bafb497c1bdc28786f2eee7767b99c0c9d9bfb5a02f33c5ec8cc22b91de4d7d839c2053c455f253961cce3037cfb9a457f10f384137dbedb321e0dfdf6159147dfaa11fb0284c5a273bfdf4616e91d75f6d3447cdd366783c5a0ac72f9c06407db84799349137816fb8d0c6d4825de3057fe32acff06aa0e89a2a369a92091d33e305c22af7bc56153084efdd4483faca9daa0befaa3a494212d712cd3f5038478365d33d27d447e05c5d2635521a937ef123838770a9e31a1bd0122656e2a3766ac1301af7bb7140f65db4e5063bd428e49d06e465d3066e48ca796a4819153276400826a00c80ab826de68a437751cdd0f481f279bd8e51c70da0c6f69b43be64f842718880251f62741707a340e1a8969e22e80e98d662a245749dba4063ab478d3cce15fc5dbbf4372b65340bab68dad1ba52c3056c5a3a062ba57bb9ec5088ce174708c2a6e61b8b1dfc7e5404369c4e3f12b225c02d9bff84ea07f52fce4e3f766a3da5c3fd008d52350423bafe43a2d806b030bddd71352cc4cd64ab472f4dd0fd157a1a73ef9d194f2dc3624d77acc77ebdcf8cb6da24f02c92f14ef2a8cd05412e7a6cdd1c0f277c04700ad968515683cbdb65e3523952fdbf39b169702569afcc04b95b417c5f39e745c4f8326e6fb8c7ce0515b70931472912e4a36307531968fd9b61df38976dfc3beaaf589dd61f4bedb52b3e0df2ca3b0195f623d9092caf6f2eac0c690be51ad69db60d1b499959b02015b07e79b32fde3dcbfdeb45dc65a07b77e53a7ef5419d959ffa5be48c74d294a57dd059b698ef51f4739677a0784b56f920709da4e416cc1681768cab418dc7d394fa92bdef983673149271ce6d0ea2a6c3433accda4f4b80d6c37cc5642716c70ea6e86f14f312e2427b589cfca7d337f88aeac268c1e3eacef282853f9cde1440232841263ca9d57a84957874de4353b4a884fd04506be6a031f0101e34004e9bca049df37c9b0d8fa1780bfe5f0f4c27c1cb549bae42b6a344760a498890121ce680984cfc34742314dfa1f5296d7ae4f0d78b62dd4ac71aeb7131b43a48510d1e29e7a93f1cfdb90f2219b2dc19b60054e598251a58458247d7f74457a525f5b7a652585372c9c2ed981e922cab212a818eb765ea7d29db816f53a9cdbee3e1f002d552cc7c793ceec6829995d2bd80008fc02b255f4af74f1306dceb274ee20afa89cb94ec243e44f9aec8c4606a75046cb19c64c33d31dd444ab5ee67a108b5ce27f7b7d7ad3d289db0dc823d8b79e7d9bc3e3904a8a358b43ddc643fb03e05cc810ae6598e675377e639b730357ffbee15b00303951bc473cfa120fee81b4bee004365571767c740a98472c32c4712a086972c930d10b83607db719a523e808fbe4ca5c086510ade24517881deb52ca7754fbf1bc0b6f2504eb0113a62d8a960fb4b5a3204a6e80aebdee34209fc633f23c5b6ef6682d2fdd372dc26055102a09269ff3601c6586c0f88c8e07235635c4bb12e5f475f5dd3003f1f3c4086427b11630c89266ef00bf6c64e4e06052d2ddda5300f8e43424e345591355864c5ce5f5f0dfec42d443a576cf8bcdbf2fee323676c18f271a2fd45d5c2cd44b70ab586649596a293541db0090be4d6f99fd5cec083b82c5c2d9a89b05a1a2dfda8335ce641864b2c7b58424cb08124861186fe3a2aadae44a82c64346644d286819fc3fb2a94a242fba0b9afb7d94e7a81e0b19ac282203edbf1648be4a7980181a26d442b38c6bdd2cead390ecbc48223df0a7500d317e6e329a9bd0a86b1def992a21fe99c30bb92e164c139016e96746fffb9b16acc46c03c94df4895097ceadcc9b92192ffc3a1c8a91e5afc002789a05a2aaa14a25f0032c0d28201f9ff3dcaa3f235ee3e88cc372a3cef6f1159ffc761fe635d74de28457cf78783af229626cc920a9135ce5205a8b1a41fe0f7e712c0c4af8362a1292b30273d60d4ba23e537035464a9d141382cd9cbe018e56d9f6c63ab22eb420a831be09eae2e9f2b71854f01431f2a6e471cca5b7918a10998a670c1df158ccbf34ab507a6b3c91697617707efae897ef7e98c00e6684521d812ea86d327ff175a0da410adc43b16fe75706cffa51bbee220612011e870409238f6a85bb3db36690ebda445c0e04f367169d625b4f11d17fe2577cc4b9ee0201bf13cef2f82c78ad62c47b7b1039b9fbf248faabcbf743d6f05b7c62f6ca0dbf1696c74b1de1ffe8e3165aafe157323a01a958befc907e155955fb4ee8bbeb2939c73022542c4d7d932967ee3ab7d2b49dfaf81bdc239222c2f73e43b0f9fafd2e2e70ab2268c8706bc3c6849eb8b03227f21ded84f22ae704079e35e7b437edb4f71393a20789658e0d0ab5a2ec8fe9d7971e4a1985b720f2ada9cfb26e205ee8681a407bf3d9dcfa10aa7d3eabeaed4d603aeb03e53da13598e53800d5d08ce7cc5764daf02c06e1b5d544bcce9d6c7ae6c75626728871e112fd8252a97948c2fbe31cad18689ce3194b8dfebf75e3b05e20837e3bbe599fa703b4448d8016d3521d1c479b9ceede786718728d46925bb7db64ecdcb884696d010d16774d2f27cc478a664bfbf058faf2fc07d70c469eba9170546cb7760fddedccfa67e98e8a50105844ff97465c42fd72e47f561411063207809c174b3c5a9e021a180812ca550609c3510f207e14d3c2044b8202a9a22f7b8f19265b87714206858910ebf40d144ef2cc48b4278a2aa683d267be8585953c34fbf9578e91f00628124ed9b183d8505914639faa1551de62f15c62a1851f496bc272e30beb6f17b5c300f2c4ddfee40012e4978df641a9c4f1f3a7609e2c596874706cdc853e470cf908f8ba8f1ce883022fd2dcb1c809ee893a780538ae872992bb6634a7ad1a155566713c4ca8c7672064f8953224f1a4e0790002484e28dc5ff099b460d7a124ee3654231c7a413aa7caea6f79e2da85e741184cfe52a5f92d56ff7e14dfce38ad6ea7babd6679b07065b5bf87266f10e7748e7ed3f11ebab0a9abf90cc31f61ccd7a3632c225e6b80f414dbb964db9a4f1595e1b2efe53ee27bb4a1b8bcd30b386b4716122ce5da0dededacbefc0f54d15f7c9860650a4f55b487b79ee3da1afaedfcf6c878ee84cfaed46fae281a55b7d5d0a42016e850ce5cfe0db588682a70df8419bbc357c7f9fb52789f80bb89e81a53f01cfc3979dc43f1a17f7a717745b9a827459336d7403288987e41c0ac5bb1561844428cd7fa2bc4bf240d691d2794dfc01f4820e771ce08f0053ef0138209ae13fac8efa6b45f4130ebdec8654fd258e3b08fd0e069efc3069908f8173887cf35863826eb3e3e4c14db33e9f3d730999c37115fcc63f1f03febff2d2f85caf2d7a47b9063cb49c1b36a00be671de6c9cc965caf9c148e192c2cc58ed61576fb39c7af25aa8d46c792ff46ee58ebd5eda37c1cfedb4a1285941a0f484e80db367901ae08c5a8f1ce0d8c1e0f2796db58909276aa6d946a4351af41e731fe98fa293771c175893729f03d2eb5b496f5968e2dde717bce67418b027a120df63cfb0f28604c6e5bfed0d37912efd44f526a55feacc8949bef8efe4dec65ecbf2a8e479cbd34ed9a09f6dd840900c174775dcc4e5295858291dcfd9e3f35e6183d661c6ba7df41e3802fde3801cd9cd93e0be1ae27133f0b70aea3e6562a2bf6483bf5c690e1f8ba5b97a9ff6fdce298f3252c67ee472fcef46a4f6de53e4d670513728d93e9c3be6b4a8d88db19c55e38fbf5a7afb70c812b598af38d39b080bd57c8226342838002b17d81366a6392f4fbc1d18e8a18b9cefe48e18ec1d436fe8a23fcd40bda9284204dd9492b162d5b28f3a08fb4d0e295c44364a68c0f492def8657708e36d6dd19c74c25a4e2638bb49baad6ab36aaaeffbf2bff5750170d0360142bfb4b991fb8a1885051fe4021864cc5117b31a41160e213f2583242d35ef93b265ac96aa6e2484c1c5dd0cf7939f106f389cb5d97eea7deabf320c62b87b146ab9c0f9fc19ba8929b48723cbe0085360191d7fd13ef9d1f0a295737a88c48870bc97c09170a0bc6f1d71da02d1f17ce8d280518cd3f971f639c9f7eb263bcd49edc9f913611a5ac814a397918634c0989936eecb0e20209c8f90f0e8084141f1db1be916fc1c84fec36c1e74364b1d72cfca24d6abcca16159d99e01c15a451a5b894501bcd98785a3e974e34b487ba0e3f12cca7660c28f9047c802765f2c04b1e4948cf388c6bd6f0f39255211f5584658f3d9d2e8e7d72775d06b21f9416c308bfe19f15de54cd9197f42b88aad882dc6d172c85d93ed001c6a2ac1e561de98e312421c81399050f63cb8c8e0e4baf4b41f6618396dd3937052b15c2bc4fa169d50f740c9eddaf8aff5c3be4bb3d1d9369a13c8c7e97f3292db792823e515ea388debb381a292190785ff0b7f22cb0c7c50a839d19868ccec1d25758815a04420980569de28993ad616f20011b9903a61dd2835e9a7579bd51472cbcdd1add0a26b03ceeb9e214b9cbfd4f6466eb423612b44a968850f99071ac52cb826c18b91a561bcb989f104bfbb3c186d4d25544b9834312bd77f033009422543e8e094033d81d5a4c4d44c11edefcc28134a3e7b2a0b677f68aaa27be98854df1ac741612c66bd7075186d0dacee8825c2b64edc8768098eec11d356385d73e891878621e74a5c9668f920e38c4c295b4309c9d6a0369b5c2b9d5ae95327cb439da3ea1ce90c817d42c9ef9dbc1c8f2421faaf91084f475442746c3f4b6b3280c8e8d89ee06a4b9053c59e4176142944b9c18580f3779a2ee00e1fe1cb3c7b83a5ff451d1fb8822f52c719ac2889bebcfe818ea2c7746f660cb6f1a51afbb008b394885b974a9380829c95dffea7b1ffd04818149b9c49cbe0995c2821eef3f473f34f3174bfabc771b58a4ccb85fbbda432f9033000d93c7eb9533be5eff59b2dae04f5d8322b6f1ef555ee4a83c3ff908aa816ec569df46ae4a378422a9a1ebcbef8c8ad78972c5fc2fb9ff2b0faeedf3d45f7c68288b06a8950505377e361a97ac93281588dd8551b96fc6195e9c392966b253b29f5fde531915d36eb4e6b692a81486e5979af2f01323cda7c14f495a307d7388b252fe10149eeda7f38714472af2ee8ae366f92b735486e01f23c647b0e2127643cc0580828c59eff3b8d14f823115ef0ead8c738ad2eee47c4bd24844171b5b9157272cd1f19c03298584548bc1b321f991adacf441b4baacfc045fffec3946f1a83a6798e66bd6cc79e7f073fa4fb971c4acbe3cb765659b23a426a1a08777e80ba9f3f0c7bdc284be2cbdeea98528e09de34b0ee506ecde82db4dc898d93c5b161d09e5a6e7910a69c1465cb3d3e8be18188fc3977e643a27a56f2f09ec0f7092cd7237140d0765516e7aba00d8b4eb42133ddae7d3b7800d5dea56f535f64d1bb56015ab24bf7b5b8bce816c19f5e95e757f36841954f7e51a7e6df1ed0649f2a374926fc399ef12ebbecab41d8156d10685c62d1e8c72bda71f848501b714467ce03cd027e706de80e72284cc33dedc3486ecd689b6775e017de599d9140ba474d3f3fc13133316fa41f0138ca5978c330b33259fbccb8ba485a82957b07552fb808dd8a480332c5a46c5dcd360b0e6f0f4354dbd39fdc174ce0a9d53087d968f197b33153c5a9cc7d7e6d4df1f43466f5502288f1569e17ca984a80209650735604ad0cfc7f8067c3549d3c74bbffd754eca5fbffdca80c31b9143f1040945523754b2eda19bcf3ba4cec1e5cf2afab69febae3b19648a376dd6f6537b815f4efca02ab67eb1212657bddd2b4374159fae53fd3ed9671961602f696de1b526d855445ab0daf942794712f57ae2234b01115e67d2be424c0a11c55fe805e021aa0789475b26822a6c254a772321738ed795db9f20abc012dd94d5b54602acb13358b9877fedd1edf0a4147bc26fd2538acc156fa59ae7a4c87e7037a060888ef261f175ea8c72cdafbb88f3c070107ea5b133c5233efd79c99e6b5f01e087cd00eb7e28360546f919dc9f37b5c0e2d85d37c83d2046235232f7843a7373e927e290403de5505159f2ddb9717822b8f3d66ee5d812c9fb5e9bc34b342383fcadefa6a493e436a4557917eaec4082c3507216bbf6b961a8e44a6cd07d9dd95ab5dcac21c806d6c315f5653794846fd30e840f13195ad7a12875c257aa8ade05080cf2920ae604ebc4ce691c84a08fd5cacb7637a05e8cc80c65c3b8b0198451918b6b0600164502666dd434139cc6ffdb3a4c422ba69e2f9d8131d63ee464cfb865ad33f066c6889890e192713e4cf269fd795dd252ae1d8052ced3963fa29a2df3bd6b31ba22599170140ec93d950abc9941e189438b087ad0c9c34d44fe1725d15a8be21384fd33f775d6d8191c7153e335b7cbc43bb2cfb1701c96d21d1eb78d6b8d2f71c3d37a4dd24081c59a928836b2cc49ce784e2b9eaeb5d79ca24925d42bd91373eb54a90d02f6b6fa346dca219dca09ec5fc6591193c1b1b9749771163605b1a22ccfa169271885c6419d1a19c8c0bc1f5885a33e1f403567d6bf09b3eb554b86fc87cfd912c79f6d1db9a71b4dae979bcf7a5c217e91782ee479b1d79c1b4db363b05b3dd1e912ad96aeeccdafb508990fb7c03c88e565d958ac50795777da34c17fc3cef2482ff4446b624a67f05cc75ad58d7d331e590de0ab78d129e955eb5dbf16f57d2c3a74dec3b63b727fbf525b1e6d5a35d49ee1ccbec1cd8722519f2ead45c2738c87ebfb765c1bec4ce4336b4db97feeb125d41a72381cb55b5c191f4a73795ffcac235af49b0aaea9ee3286caf3ec5eace55ef97fb7c935972ef529734edf692a69e558cdbf4fd857aef246827d8fc69e1a5dc8afd9cd68e51bb8e2fa1adc635fe78b4ee6b265d3676465d537f0141b27b73f565bdd51fb1dccd835d45ee34c9209b3f2b69e9c0a4daa6ef296cab7a84ab4269f2cf2e0849fea5a13a6fef94dff676612a4cbd99f8f6272ef36c53af14d5feacff91e80c1a9daabea7dd32661eaf159d67f94baa7a6b4852cc2b476dbaffc2a6da4798ebc93c4b02d45789b43824ac9524a7ab4e458565c7f5609e470159b7e740cffb3d3711a21c9c34775ca9c76dbafe2286aa67982e64b3f229421bbea8150c9f40bbce6f4e071de6c442b67d7478aaf0b2eec87dbf119f80ae41bb63c014e9d0a4ddd83c8a5e2d6e64c2fd6915f37c7c9d773dde695da77dae91aaead6542498a8a2aacc63c85d8db5edb67c142433844926877706982f8d81a066828645c04b7c1e54ef39f54b202f318c9cdcc888bb9617f18126630abaa53d5ea456ebb37a23033c92edde9dcdd5fdd5a5ca126c982a08ad6edf08d8a3bce8fa9a1568b392eb5015282fb6c0234248b67aa7e0b70698a8e34360341eac329fb2d8fb6e472e541cec058166bc741199b5bf933922599e0b984b56b6bc40e1767ae463796b8e3ee1fe8a838b0afbc626e66b9646977dc47d3323d75705adfe7d7a5566ea71877eb6d05d59152416b3ae080827941f3407da24590573f67964debef144410b89a9e9058b8924cc8bc5ac2a3fb4bb5d1cbd388f208ef0b21f9e4da4f9f852f0ab5556bfce54dc521d5060da46842279d75989ec80707deca04a7c3bfc8a886696b765ff6496503a3ab2187a1a325f4d755af3fde45ed47a43bad938aff9a70effe2406b0288693959327a0ea4416d4242ce5ca002e745fd40ba64defee80d0cf315bcecb2f6edf5d681d1f410e3a35c69852a63bfe6e7f154db803738f65bd611cea7c90fb5faa0462627206a70994268301c8f7b205c051aa146d17b25168e8d48ac362bb38c8a0d079217884e3cb4b1aac8580f4006fd0ce8f0a90156162e02887238da79586d604c00595d8df0b58956b601811b2de64e926c27c7d8eda7a3033086f24d77c4acb01d032d655f202e64cf6496e76cf97fa017da0a14ea6aa8a05bbc4a7ba566a09ea001a78f4c179b1803fd83884a1b7723a326766e910810c6db51b12769aec147327662b31beddb6177d2ef1303c7751d3de0ff7fc27dbdd4a932e69cf151ef691722d3d615da12b1605850d638959275916199e454cd5abce78dea562cc6ed565761ecfd3331330aa57c32573f9e1633231b804d4530a3f9d5b19e9e8d6cd032765ac2bb3fb6e7b1df37c48792d54803421c1a98cb706bab5f08cdc07b9d97a0093f6e236ea82b135a7464c47bf2f1958e328905dd69ab6463c0b131fc56bee388f55354d94a6374829290dfc0893a74cb541f14296b5f2872a374a06908e2d19a406affbf85a516d76972b99e4b8a13dddac18964ff2ba655b9ead24224d2372f5de5b0aace9860120503d6b39f15ff3df8e3c5fc0e01d5879120997252d62b58c54fac69f9923e918325989b2d39bbcca460b3fb61149a682a5623aef9c54b83c523689c7c403d58b5f6fea051a37033a163dd536a829984ea4173deb7b790d7f4a24a067342949283af2d34e9c4c59c0d8593b88b16cb142acacb3c0d25f1e70d1d7656cb3059016c77ab8e3d6e6f061c894dcc3411598d36ff3b0c99cc965242f50461d086bb17634d24f0e8b2e6f751907802a0e68a4cf692cef91fd8623ad9bfbdc74db7e25142c93cfaabbf60fd6c9daf92466884489bd2746e50fe95bc426615fedb246cb8b800ab61ea841d2fdf1f88fc099d129c2564fbe156e9ca9dfebf4a8f940941782fbcbad41214fdc508f5048990a054bef6e91eb3bdeeb7e26522202eac76879aa4699840400ae3bf565648d6d19c2be7f811e2bbeffd138972927f755d4cede3899a92c1a467f4f0a758b3d0775b90f5fba264b6c3ea0b983c2c9426433103f4fb0a5cf82c1be98ab932ceabc86d4f1b3bcb4708512251712142b378ce02c0e26dfa8e6bba16af2c78a675a079f617f8e40498734ae8888fa1c310bd052eb4fc686abd2e17f44ea10b662a570f5ccebd68395976df198927e6a3f43aceecef06cbbc453b3f2e25dd8e492fed55f20eddc225e5432558fecc0545919cd8b195ca2da8fcb7487a1e2daa378264f8a26d973df7260ba44fbb8f748d6979832d596aab5863e7be20b8a0fed768d8e3ed15bfd46ada7c45366d38585826a152f43af44cdea588830badefb18e4ac25a431fdc42346100da70c0c026ac05bba4c9ad24159ac0dddd8c437b541fc2c084b5ad2e489136e3b846bbefcfef081c8ff700c42e528eab043c56f23d58719c2004fb1d10f9162e55f125185623d8000f16cf4f8c6539c08f1aace41e8f703a33f44f629d73de770e65bcd20670fa970847cfc7b2ee77eba712e803e0ba6636bb30c1eaac39626c0578d1e3fb2e605d4261310b702a4b3383b5733d7551851a9b2aacaa59fd32110926af127abc0cab3e9ae8e286c54aed706042cf2a90a9ab612da183a2dd97e3a753453afe9d81a3f93c6ce561bbfd9ea8eb6a188465747894f2d86be41801cda6db670b35b2d52b68ec808dfab41b62721c2397d03816756de8628f6362bb9e5ca932681cd0e1e8c2310a0e57734c490749579a2916f8054d22fb6a34b9faa5b5146942868695440e206b6a90c535192190c6e46248013484d2011c44a2a5f54baad25164149adc62c11d288a46f323a0c231129536f98564306d120a11c1344a24230368432ca719a425898c1c4083542ab0e310e969fd8b2a8ed13a6cad234696d0e04846aad30c5220f41ecd328ca7a60fb02f99654ff0cb62f46378496ba69090ad8d20ab2c67cd18cd7fb9da117ac7ac3a482aa3d5a110b14a2b6842d63e6d06b28f43750e3e349f1b55a230d2a82285bb33d95cc3b09b1191bb70699afc8635af13bda007c266fa66586f4b36a27d0f03349a613a19598e86ad18c3b1b343748e573a2ac7f19ac3f53a4ea397e6673252951654a18f636cc7743974748cd2d16a8ea539fcda61367d5aed52b21d652fa17914eb1d5172e87a47d72aa1f9918c94ca91dc3fbb0a54ee6ddf2fc4595d4159dc9e1d8436413470d92c39a99791187de71aca08a53c42923331783f2f3392f7ddd0e05a458af008958c2047db5e1cc1912347f40e573a2cc3f15d8eba1df63abc77acd7517f8eb9d74852a138b9496385426403ad94c848465a29970630d3289336ba9eb50e02e65a1114123074b8065dda8620c771251c235f692897cc1ca6af41a237f2b92e8b0a946db4ac663f92ec94b1dacda563a6f690b8a5b24c5cb6cdcce0a6d847cab507c22c8af5a0d3b468e8f7f9a394cc2a87171ca3d341522fcd0e85ec354d0862dddac8cf965854f1d04ca914d14c1bc572104d1a281522186828918c3846bfa334fa688ea4ab1c23a0d192434c3b90162121504b4e0ee6900ec7b83888804e839314d491be43370e513a5eedc8d20e12ae34562a4436d02a923777904d4fab414a9663c4cbae886933f422c9b2b4ec8583433d809c5a122806d08648985ea0a7e1c2940b06fd6638b18748c457826618bc803c0cf51fd3cd1523036881e2d68d6facbca76f16c2c0da9aa7c7445421c1441b854256336d14c9c8661a2a48594db415241a71844e0709760621a4dfa6158990a7652331e618c1411bb2d8eb2836477a1ceeacd5688314016dab2bf2d568969e475a3612825f8e7571dc9fa37b47fd0e7b3bf4de41a28e66ad128932b4ac898ed6e0fea5aa033f19acb89faa95d054f86ea5e66bc9a8351911447bc4526430ed914bd981b449c8057310919ef61791ca194eee9b779096520746b8122a86742972fddc62502451d5389061a414653aa6a483a42bcd14caf91a69298b9a3a104b87568b24cb617907778ed1ed28963e9a23e90ac790d0b438a4c00ea3af1101be025964755a4294227769952dc7e2a3814229ab8956b16ce6503fc7bd870319d3024c6e033eba858b0f3410c89b0c07ffffffbfdfdd5de87efc6d13489618907693494ab236a81d15bbe8432868f382644a32c994d231b067ad6aea6e8d904311c80e3b0f281f720cf7e5399ce9440805257550cd983a4e68a536e55e989555a4330d771594bca1d86d6b87759f738e3bea521ea58ccba5051dd9288ea1840e0afd42d65eebf81aca74394d2899834acef7889125334e6dc941693b7de71dbd5b0b257a9021984d491c54aeb752b37ceceaa9e1a0529f263b2935abe37d6f506e2d3c07db21af6d666e50079535a7b5becf22a736286d94d8bd75964bc99dd4bc324e7c9cfc6083e27310430df539cd7d4f790d256b50da5cb3c398b55d8cdacc6a50ee9f534209b939a687d3a07cbdf5e4fd16f32e7b19ccef00a58599d1a09a73da781f5a7ef95ee27443c91994c3d71431e6d0bfd69acda078d7d35bce1d94b23d17c55052068578195bcb7ef0f8d36432a8778c5352777e1e32f6984e2819835aeab6737ff969727d98c5a01cfd3b8ceb3443bbbf994e8c66a382b29a8dca8fcbe572c121948441a53de8b07baa2ef7dcc9353c8f8f1230285ec72d96b4597bdeda3ac2b25151e70bcaedffc3f7bf991017729acce65b80b222063bc7a1c40bca214ae6b90d1b9fd7d6b1911321278c8d9c30ea82f2ef6deb1639b1d4981b95b56951d1f8b85c4eb271b9a04c4c9e6463df50c2058516f741c9a15ddc363d4ce3c4c709bae0040d2027a953568aa0a0922f946c41695bce2d45eb576a882c07294698ca0f9633de7a203e7c9cb85769e38ccb85e573c0b28abc4fe39d26c8a513d9a2440bcaadf4d8c34d6b97a59649082559504bd3bdf6aeb95de79f1f6aac18714fc6e5e27ec3a269c1ac1871ef360d255850e73de41a6fcbf36ddda191061a404e4e8400c92b787a8d73315db7d8c76188a8a01c71a8d9a8fc605d5945b6a5c40aeaf3a0c4cf6db755f46ee58810342e97844916cd8a77a1a40aca2da7e7567e3b7feb7c8dcb853131d947367a86122aa86cd94d7799594b7b1e1abf7244c8e5726473b96062f2c846315c28990223ef93c9abde9e106afb7b94a7fd792fab1ccd66b16836cbc9502205f59226b3e39c4e4ac7555d2e97cb1a273e4e58702204c8c9e5b2b28a5c2e974b630619822981424914d433773a2c1b4348bb8886e51df797cb8910202745342c655c2e1b96674345d3f2a41a4aa0a00e3fe4dc396d5dcf629f820cc19418a1e4092abdb7e3d64a692177f639416d3bbde8b25d76b6769aa098dfdd7a6b7bc8ece9391162c6c98a86858ccb6545c3e2b08409ea4f7aca89cf1e37ed5f827ae7d6521b51a3779e53823aeb193acc1deed3edcc74a6f7e3c4c78990221a9632daafa871b95c2eedd9704c94edd9d89236942441ed9f46efdce3de750f4b9080c9be29d3599339ed2e3b727f1475f5f25ecb829223a8c6dc7893739f88a1caa760342a184ccaf64ed31883f10c3204534689115477e267ce31f4e7a4c75011d46a0d795adbdc6a86ed71902198344a88a01a659ef31a42b7d6a32b1982c283ef0ff6e263db73924b84805cd749eecafedf7199ce837aa508ca960441754acdf543b8d22e73be0110d47384df2bbd76ba7db773831fa885dbfeed2ec4b4c93d1f285c0721fb717ee7d67107f5406d7e7ac969bd9fe318c303c5186279b8b3bdf1b4b4981d28640cdf59749431d6d4adacbcc00647145ae95d17fe390bfd338a1baf02966f4303c4066ea87e67cdd26973cc18339f36d45a2c0ffbc7cbadd38f3189d95089fb99dbf69c7fd2c4329d6dbccab27ca6b1ac578365a34666b36c5a361951aecc3da37fbbfa58534dc146314cecd3f3eb4a0721e754fe8cd1a256274c8cdd1e5d4509a3cc64b0a8e545fbb2593a992bf1cae840a5a6a85b5bdce80e215c5128a56cad53b3839e33663a5350d643c9b269d128e7784e72dd0f372d2a0a5d429a30217d86cc5fa673d3829282898aa85cfccfd2fa5ca7dbabb24a51e92735647c8ad2490f3f65c5c886550ed4fbea515c4eaee8706e1938508bd0eb772e6fc89a1d0cd2325014234d9b8d0eb2a5aebcb26224a39cebb30eeafad77c99cb74baf1190ccbb7a149e124a29eaafe3be91b37b698cf53acce09dd6b29dfad96ceab4de8ed5a7c90e383de994eb756f6e2143766e8e73d737afaa44ca796d1547bcd7e91fb87d86e69a6b305a371279965d382986afad421fc64dbda624bad27bff6c7e48fbf0d831ba844f89aff5afcfc39a42fc0a8d75dd9caddffc8766da09673c45c43dcc59b226f6ba018374dd87e9ef339a8339d2918b75634597e939c06bd3821565644470db14ca76b1ac16c8a3c9f813a88b4b9c39688bfa16b2e66c8da94d4bd767e298faf4ca766a3828239c808e65b58d6cac922465436880c943f648fced92962cfcd74a24d0b0a901403b5c71336d4ecf7448c6dde1d06facb255cb71e73dcbe99ce232c1b9567965751f9f182355472ea7c7973f6c8bfa54f593122045fa0ce790ed9bd956971a793e974298ff278d38cb06cd4c8f44d91b74294bae42c397cb7e9e43731dc42c351902118226a28775c26e747fd7ade3791a6a110e59f77bbcea544662d62240e3204130317a8b4beff1c5de366ccb59a81867ad45d6e3f4713575b129ca1b07bb9d5b4fc506396994e4c4b1085f9a8dddc5feae672a69343d002e5bc3ddb5cabad5d62ed5450da5031a251c178860144e5eab684d68fafe3dce1952228cb58a03ea17dd689102f72fa9aa7f2a3a1a82c342e970e3204f356a03631db496f9d4e0f394644052507097fa86652948a38b73315393e33eeb716b125fecf232b65a505e59c2043304d056ae143ad115fdb5fca2ed389d9446a864284942de6bd7cb611338d6941d14c252843a523df8570a1d7fa0f663a9153f9229f59592c4438357b054aadedf73a576fd2b52b653a376e3c868811f60e835646b5a55956a61d35c850dde9bcb3fc8e96ea2ef2a1fa1d33fcf5caead8fc724949f98628c8108c0cc650ee1f626cc4c718f26a994e8782f995239b3e1162c6c91115312e97232a4b08da2043304a0ce5d2d9b2c712cfc9e60da440a1f5faddf642edd023d235c2a27927a84652568aa01431a2b29b228f062850effdf61fe7e766e9ac2562843d196eb81f4454561a97cbe5d2b2a2c164071982712750fade8e43fb921f86cd0c1328f4fcd073d6f6685b57a6f344881927cef29b1f3e2e17f7282b9a76b9b4b0fc6665b975b9b0fc06a58c344e149365b352a28412a8fe95fc1731a79bdc2fd3f94d4593bea99ca15206f296154d182450eeb8a72d7df4eb39b499ce0d8b86ad0c84d112275af41e1d6474f247ca66d8682d4dad73d9c9742e0b3c69e2664a464c8e7d3639ca46ebcbef73314bcd15b45afc102f6279faa0b7c8394d4a478af5a045ce5f62ff4e9de9749a305825fe720c17beeef642ce69301d85891f4bb99ed1b24d866955cbc7d269debefff565a63365a5080ac63dcbcab478ab7aeb9d33fde949656d5512a44ad6d98831e4c9f8b9cfb43442a57c98ef49696d6bdd9ca688866525358c11a8d47ad1b66784d01f5da67345c3e2122fea1da4deadd14396de59a6b33d1b18cd6655042aa5e65a5b8acee95574329dafa249699886b2599b164d0e3204932150bfaf3de6fd54f6166a99be5c522e9765188040e5a6dba3dade69e91c653a595e450505a3893645dea20f28458bb1c694e1bbe673329d1b94949516cc771a95c3996278a088468349712c184c003aa010ae6e697db1a287ed339d2c9e020ea857f60dddebd76eee4fa613d3be01a5e8bdb7b40f57973a96e9f46c0da893e9da7232a70bd75ba6b30d0d0b11cc4b3d41f74fb1b5edd5daadcf74b26c5a341978acebf44acfc5aca8653a37455ed26040bd43c5e618a27767ed329d4e65619e0d964f6d195c40b1c6a7d35bf71a4b892dd3996931b28261d13c0c12e3c4c789901321404edaafd1c64a2365030183adc7ee3c3bb8ffae69a69365651a067f83c20283960583135423271b23454eca48e3e4440890130c729021181d58001d73f3235daf217697cba6c8bb5c9e45d37a5705d871951b3572f24d9a69f352848d94948b5ab4badf8d186be86c663a4f849871f23b406931722204c809460505b3a261714859362bfb2c9a76820cc1ac410196c760362d46583098084c400289d1a44020020a8107b40332d000062c400109a000022ad0e3000628000106c00101402000bad16800f0011eb99e25022610d8a123070e09944c8044008b00c027be50f245968a0e007c8212041800c9209880083148c0b04005283001094400020f70400318b000052400013d0e60800210600000e0b143470e1c243d26d001921e13484108701461002483500221c420f90d0a4b1b6e3dcb4146940d4c1861104243884508343c004618bf0394164c08c008e38ba06c30ef593a30084db4acb4b891f66bb4a0ac88d182b2b288a8a4ac1441596911841a484884b4a1f141d2230d2620e9910626e99186100080045f44a346c9186200020b243d00b106490f4030a00c121212127c80848464030e487ff005498f3fe081a4c71f7c40d2e30f3620e9f18743d2e30f0620e9e1875790f4f00326487af8410e243dfce006490f3fc4808444a5aca601a2f2e31b8b118d1a4736286bbc401384e55588a0a8e1d6182a1a14b7c6f0f169b464362c2863b835c6a7ac8d1a2929cbc7910d0ac6a9a0bc1430361a151f2a44505a342a24b880d1b29e2d318a68362d461a189fd9b0a0303016182a6e313016182d2be38196ff7764a9fcc8b42c152c965f2c8a999999cf39e79c73ced9dddddddd5555555555cdcccccccc444545454545454545454d29a594524ac9ddddddddbdbbbbbbbb1b21841042082166666666e673ce39e79c737677777777555555555533333333111111111133a594524a292577777777f7eeeeeeee6e8410420821849899999999cf39e79c73ced9dddddddd5555555555cdcccccc4ccce48df8ac660b8afc20910109098986a4c71bb8202121592c3f821134969637ae40d2e30d2590f478e308498f3754487abc9121e9f1060d487abc8106498f37c820e9f18693f478a3032424243c7a9810c0fda76882b8148d0a545eb0f99616317cb4a149f9318ea4a89cd1e2548c9421c6461364a3d1a4a1f202150dcacab8a148484a5090b24a4e4042526202121f9a206994e00cb7c6282101c991054413c47da6ad4f8384a4248c44f244564bcb17212129412424242424254d42425282568b6b4a0de5d4673667a4ac57e359d098430f129292434252b22424259a24242548425232021292928b086aa086fc5003438622e30c1f4114268d33d24843611490179071460b303110a3059b4564ad68585680b0f1445434292720b284a0a1d2864625072a2f50f91c6884b8911314f9cd0f229a14f7e3555088a8281f71900089073a5042d28167212949031c4e484818a6a565adb425821201906c54960a4a111496d682e28ab4ac36c0d0a8e00d9020212929215983052d98148d861d5939d0b49c008c10946065b5e09f45c8186bb3dc4a8b7b1212920ef8828484880a0a0909492f784142d2b2368b8c1f6ee8c18f5f3922e4c8b340d7ad16d73e8c301c8a668d67a9c1416184f12c356074da7082838cb46c34292d1b4d8a1a6c9002090989fb3590e28de860ad9cb1b2b25656561861a0a10647048084c408490f35f4204161ae896961f99594cf8ca0250d5c78817b3750cad8a8a0685630eedd40796184b1302b2d0d65f345321b141631342c3fe4c8182a1a9416143650c870052b48d420a282d2d282d2021223a0e18d33e08284081a4a90d9ac95111cd9b482848444072b5ad20083c8b78091d9ac15305252c408230c12920cb09cc199611024248d860b90eca083190040063e900104632802625501e6d940d9a01441615961d1b0b0a8771a1f256e2021214921e921064a380d88c18921480f31888084040c1394000c30c2b8011115941b80b169592b6cb8d5740d1531728d4f230c4d702d8fd2c60709c3820115241707063d5c36df8201c386e4d2c607f1856b1a692d282df82fa3e50b62a0d1053690b4b05cfc9217148108ba00002e908284e4d2f22c60fc8aa6b580a18282c9c1fa3672b01e066ab467238c30daaf21840b11202141d56d63a5e17eb8f14e659190902402482e9069a40b484812069aa7f2838cff3284a8fc0e342c65bcc0fd3b1594d6f269fc48438d315a90a2060cdc6f160acb66ad7c1a2fd8fca6450364d362840cf76d689c8ad2026b614716e6f0a3256519514139a21298e98bdabbcc747b902198233920a11e7223736dfdf66b7c5091e311b93a395ff269fccf329d18d7948dc8e108859ce3d63221945262eb653a4f1b2b0db5458e46b0e460c4ffcba7ee39722296e96731d2a24969974b110dcbbb5c7c74aa22c722d4971efdef94bc4f5c1b3929829269b9b071c2dac8099e961c8a503dddd99b32354246cdee10a3f5fa76f1f63152c437465aa052062742ade4503664cfe1f2e14784faee667f56728b5b6bf4851c8750ad97a33cce9d3cdd9c390ca1d832fd930c1fb3d4e9a416421dd464edd9b3f7531321d42a7ac4eba1f78792f62094ebf6185b999f1e6563a6332565615a4f849871b24129829282c96c56dea12043306ee4108442898e581126224c48d301912310eaa0b4ebd772eda4eb3f6fe4008462eeb585bcb126ae6fdc438e3fa84ef8daf07f55576b9c6fc8e107759c4b0bd9b6cfc57ab997a30faab99736dfeee69e67ae0639f8a05c5a8ee92bbf83885455a790630fea1df71ce16aa8a576eb41f9ae2b22e35ac989b54c27e7a1add3485b3bcb5b436d2c1636430e3ca8940cf139a5b69cff2bd38908e91d14367f6c315b683d94ab73d841bdb7a91daaeb3a689701391102041922471dd4e6a2ba84785fb6452dd389de50e9b31bdae67c4ff37b6619e4a083cafcdd867f3a25234e88fb90630e2a5db6c683daf2bab6da262de4908362f4ede960d24f71506f1f2abe4c6db9d69de0a09093be22b3b32995d31872bc419d3fa8a1b39e4e3acd313728c498b1713ed7bc790dc9d106d5169d87e85643c9b59f0b72b041a597291b7eafb7b61c6326e458834a8c3dc61af37faf2b7ac1e542871c6a50b9c89c27969aaf35726ec8910695287943ed52fdf8e114b658366ea8131f2742809cf8b85c2e978672d935e440833a6e3d6132b7c89abf96ba90e30c2ab5f3dc729f18b6e6c89941bdc5387b5d7fdf6bbc5cc85106460757a6e58e263cc70f1914bff1fb204bc477ec55c83186f4cd3ecc299d73503997d9d1ddb7ed620e13bb18d4c374d4ab656adb9a6b16728441e5718c1f5b9c586e7b07837a29a1c76ecf9edec4084121c71754266ae78e3d7fdb36bd63727841a1d47caf2e93e15bc99941866082e4e8827afe9a9a3264def6f10b22071794ba946f37b9e349b79710543de4d8825afe9aafb197e8b16e2d288716e3bb6b42ab25c4b2a090be7bfa985963ca1a0b6a355a4f29df5a8d51668e2ba873126ab98990bfd67c2b28b7cd36a1236ba9f7ad2aa83ce93197907f7e3a9841d8f60f725041657228197374b2ad75c638f17122c6091a404e0e3292630aea593a5cc98cb1d530293b218714943a77183e2fe3e5d66b5150c825fea3ffdfcff8bd1c5050282d325ca9eb57593345428e27a896da69ea1e693a77d29da0dc734beef575177a6e9ba0562e3b6a6d937be363827a6f8c8aff5e6b73f211722c412d87eed2653a4d6fadc76c9e48e7e6cdc8a104c59e3e76fe2db9865659342c2c9f23090be1f26bb6ed34d4521c0a4645d3413ec5fdd0204330381e910309aa1fa2b3865e95755534993b4069c467359517398ea0146d1ece44a4f9f6d50b398ca0ba114f2efc844ebe85994e94b690a308aaf5e742d95c5762bc1811146a9dacb56e7e8e2d7329e4188252c6cef3ce714f1d6a4b49593e3c0a3984a012b393cadb28bb1f2218720441add6cedff557cb74893d1b0a03061cbf5088137bccd25d62087b653a59902fd466af9798fbd7b89ddf968dcadab0c600472f14a6658c1d7a86ba9a52a65172a23370f042b1f4f275ddfeb6749c088e5da8c79810531fef32e63ed3d972dcc0a10bcc85f2c3ef561521ef7994948d4645950d1cb850ac289b2a73e8992a77a693e516ca79e97b6bf7ddf98551594d5370d842353b67515245abb31bcb7462e200472d1463f712fa6aca52931f2dd423e4f3af195abe27d72cd4fb47cfd6b856168ae55afeacc9dd8db263a1fa256264b49ce9bb45b050fedc1f96d6bafb5cb6af50d7c456e6458cf6ac224de69aa1d4b677d3bb6d5c2ae370857a2e4f226adafc91739ae9dcac8d912298232c9bceb55964f838713f2e2742cc38b95c1cc61dc511071cad508e99bfdfcf86abcb52a613a3a27195332e97961c683499f47182ea040d202757c0c10ad5127bd45e7793b9e655a8f47498b9d35dec749c2a54dbf5d85a74f6f6a5a742a585ee2c750d1b2a143a67eb132ec7c956af0c709c42b53ec75f1f4c9cd0e2670ac59e323a668e7bf9ea2f85eacf834e3bea162914f3e3c98f93b197098d42bdb2f7b435d57fc49944a15e739f7f5374d0a90b856a658e98dd36d4281b148a4f4bc9584a8ca7313c9f50895b7be9d841eab8543da116a1c4e7aea9a2b31c717442216f7ad241cba5b50e11072770136a66cfd3db07256aa2f4906b996efbe5328e4da8c689cd999e95506bfa34a1ba5b3bbe4fb335b6847064423166db45b79a3d4d08b369060e4ca84e2ef5ead63ad1a2e325d459bac9ed26b2ba7ccf12aab146b692bb17fb6b5f09d5be87977672cfac394aa8b78a889a2e5eaf98da24d46beb6cb1f72b39b39324a1187284baab7173237b2494afb7735af669d9ef1a128ab984ebc9eee93bffce2354f63afe963d7fec8fae23d4ea87c717bb4c4c176923546aafec5cbeb48be922a63d1b989465e06084da67e87635275cf6dc5b84dad64d46cde5d6f2f614a1d6a375d2492739e6bf5e2254d364b796a6a6bf861e2214f37c57dec74ecd7f08959e525a08d3b197ccbd21d4c13cdae7915f6bcabe10ea9f231f5e6c1d33d64f08f5e8386a0961da8456fe2094763aabf6a665abe10b42a96b45767e1cb1b91508e5ee7142a86d0ff35d8050079db32d43dc3435fd41e962668ddb974386d60f0ad77aadda5adbb15cd70795daa2a3bb8fb543948e0f0a1be2d397ac396f47b707d5e8b21b5a08f734844e0f8af94aced6de72ce21ba3ca845f6e73cc4f9eff21b1e942b3abd5c7b4d64b7da1d944b77d2eaf43f88d9cd0e8a35bbbbb6cef6ba845a1d94a797e93844e8d7b9b637d4b375ab9d37f7de6b4f07a58aeca8e7d179a59f837aac37f5b26fa2872f07959c5aeaf69ce3b4cdc54139759dd89fc76c8b350607a588dcbbecb7a9ec8cbd41b136c46e3efede5d333728c4d7ad19fbb6def2666d5098ddef1c94dbcf9f191b94ee3676e8e4c965fc35a8b63c4ff25facface5a6a50889db7f3c2b3dc19ad342845cb39d45c3ec68ef1428372c7e14289fa9b97cf3a83e29396ebb3efd962becb0c0a9d3f49df7dc344bf5219d4a222535d28d91d76228362da8cde1db3b15694c6a0524bf56d873dbe234e6250b8d0b5e3d872f630378541a1b68fcbe1d3f5b91c18d442fa8e21c738a9afe55f50faff9f7aa1be3663f7827adbe9c8b4214f98d6bba05a323ff4f4e13ed7e95c50dabfdcdcc283ff9cbe05e5f2f8663aba88ec7c6b417973e9d4dfdba3fbea2c287deff1254f899cbf37165426f6fa78d1f6151442caa93ff17bf83cdb0a0a1bfb277ff62e4e0e5541a164e81857675ba90d5141a19e95c8193ab7fa2484630aea111531c46e9f4be9088714142772bf1a7a9d90b24538a2a012a5b6a3e9b1625a897040412dce75705dfe3bad88703c4135d496bf6798cb963ee370827a9f585363cd13663bc6d104e5966bc8315e6ddf798c713041a5f6f3d041fdfa3f19e35882e2e5cf0e3d6acfd33ae35082dab53a17216fd7ea0ee348824a8d2d7e5da8eebc0fe34082faa6fb89093db6cf95711c41357bf9bedfaad8a88cc308aa2de41c1d266ee7fd83a3088ab565e9509d23f3fbc14104f58cc8feeee8da847d700c4175732ef13eb674da7c70084131d66f8b5e43efd57b7004413d977cd95b0cb3b1e3f985e2978ea7c49e7ca17ce57baee8ade5ee5ea8e354f7a495a92dd3e685624cd9a594c9cdcff22e9473ce0b211fc46c7d57170ab919d129d2e6d82e170a1f6acd761a6ef2e342a1334e4eedd3791f760bf57a51fb4b84b88e2db5854aaedbb73e426d71bf5aa8ced55a43d4d26e67a3856207ed430ca16ba76f7316ea7de3b7b848fdf92d59a8c46e992c59be4dcb63a1fead9fd59c9373b961a13679616a4a7976fd2b14e264ef7819b3d7d6ba42713befae29e2c6abad50baea1815971d47a8ac50eb5df273aef7f94bc455a8a7e8af8f6d6be5dc95f258152a3da48fbdd71e339d4434299b0ab5ff3c1b273f7ada5c6b801c54a0543d9b98d948d13d9337a1d3ac195fd375a6f38910d10059d104b95c8868527859362b25a750fad2773df49833853a2d29a3264de9a8dc4aa1fc91174aec9cf4566226856aafdf3bb3b564ae9b8e62db51d94f9eb4e9a911dd716b5f8b3aa5d7d74c146acf6e4bdee4a9bf9b8642fdfb237fe8282e3f9f992e838c1250a8d77bdab3e789ac651ffe84c27765ccda628fbdd3eb09a5bdceeea4f6d7c53c4da1a413aa4f3b8f9abb892dc61386124ea857d4e8189d6677982e779021984cc926d422be7b8cbe1172b7639e50a2098572110f7aca106a5a8a6284f1182913ea9d969ea6f63e21f438339d2daa985067dbb984ce3d840f5fca747a8b26d24b742ba3a7730ee3e6f6264d2c7bad3bfa7eb16728d3c9a261615197cb2531cb6665db28b18462d67edac1865811bb5409c53821d49ab7e5d222664a2896f460e3fa3c99edb57d09259350cb3d6b09d15a64a73d5d2e8d49cd204330474a24a1da8f7b8d354d28a1652f12aa71e571dd8fad7f9dd6e50209c5c9bf6d43fe5073a8283d42f14966d6e7982274d65f2e2a1a944d4bca4a1114768462a7a96b7adbd5f99c5d2e174c4cb616942207a146a86667be2e35315c6e57a61383808831c61940cc4018948c50ab093de69e63098f1f742ccb881929eb720942c922143753c5e3cbf81832cf749691c6499ba04411aabfd14374caafab6d13a13add65633b87aa7db204114add3fc78bada3638d61d160364fe4a4b719258750ebb5a4ebffbdd09ff36e851243a84594cde1f2c69ce8295da1a410ea307ebbb7d83aae317b2a2d47161a97cbe5e298f425844ad7b3127347ecceff41a8f5b572b9f3bd75dc598250cdc9fc53aa43b8eba540a86e5cb9ed2cb7deb1d5805087cf4bf70ba1f368f9fb8352960ee3e3e6e9ed363f6827774ec7d531937a429b9f729b676b6cbdf7794afa70ce714c083da54667f3e43968dfe1465ff69ced0143091f14ca95add962a909a5467b50be881d66ef1cc6bb9e1ed46be82cf3d66b93b976f2a0b6d5534aee396e0d91673a312a28ac25785078b0dfbf8589defb4458be08e68645d372b6e40e0a9fed2fd7562a76c395305985123ba8c41aad069320284deee96d9e5dab99ff17eafd1dd7cd5851196bfb4239b70c7119935b6f394dc38e5ea8c44eeba6f4cff725444c0c2fd4728a67bd7b77629e52f7edd8855aa779b33fb665eeac339d9b16230e434405c575a14e3ffd76da6374ebf5e542addfe74e3ef65f63072e1473ce0edb21450c39e629ac73f343adb0e316ca5d3e74cbb5c5e5f4296c7d0a5bba851db650caf8d3d749cf1bfd63a6d389b0a316aa35771693663ee4ed3fd3e9588cb4a83c67a28542b6eade3bcd9da38b2fd3494405e548bb5c524a61c72c94c3e7ad0ea5f67a7ecd746e5058dad83c1162c6e5c2b2528ce8268e2aec90855a4da7e5c176f4fbbc05a83f85a1105131f2fc053b62a1906396709d1f91b2777efc783650368bc807b95c5a2e97238d0a3b60a1d839ecda593f63b6fa2b5ca1792a289856b002b36315aa48052a38b0e314a680c08e52906214a20805283ee189964e7042023b3631811d9ac804262e61894a10600725d43a5d94aedbfbc6ae61911d9350f958bbc7dcdf3f5bd924a1d8e1c7e61c9e64b6c922a13a193dd7b376defb5f90506b7d516ae728115a2b3d422142077f255cfc102e472877ac19bd969ee59fb38d50edf425b796739fb9c8329d8b81d8c108c536793b754f1b179bdbb108858f3991beb7d0b2c64f11cabd838c1d3bd7cc9cf344a893522245acec9cbeb497d88108d55e635587b83ffd971d421d76568f376565fbbbb6b0c3108a7dd397f9b9e6b2c56a9cf83859a310eaf049cfa39e4cd329ef2084e23dff506b89ecfd736710ca7fff6073ea0fa1ce2508c58eeb8f6bad07a53767de48cae21d8150ca9ae3774ef29512535b2c4656901d8050fbeb949dc3b21d778ecb34851d7f508f1cbef41ce35bc7fa7e50cbde7a5ee920a40c1f5d501476f441f1f3757f6e7eead83a7c50e7d951f7bcd627363f3bf6a010dff572e89b3b8b5b0fcae5d197891ed3ee66da9107c5b81ae127e5f7cecf3bf0a050db3af7cc8acb3b2156d1a4f8b85c50902118b6e30e2a5f77733b4cfd9c6fcd063beca09cd3657345ea9233ab83e26f2c1d647e8a2777a51804198219b2e38d93adac8abe7a0e6e33623a28d6faab5f62ef69bf5d3be6a0f2adcc6eef2d5bc821f4851d7250cb9b3f4cadcc7fdae938a8f787197d375f2eec80835abdc88bf8deffa2d676bc413dea3f45e9a5276ccb76b841b51f761072cd96b927ba61471b94db4f6cfd6d4a849f1a1b144b8b61723a69a5a695d6a01c5a4ef993e65baaccd5a0fe31c5a47e32f569ec6950c7933fd6a8a5e5d650a341656a94bd0d1d9d4175c376106ae7dbbecb0c8aadfb6ae99ddc759c5c0695ce498fa8cf41acb54706e52d1bfd91a773873e06e50ee377c4b4eda0932b0685badf3391439aacbd30a8f7f6ed397ddcfb3e533028d4bbc9f5f5594a8ef80585b6adcfb6ff0c7fe5f28242cd876132738cb14ddf41d8d105b5b25df3ee3adad750777041bd4dafb9b4d6227567edd882c245dcf47daf6d54565b6bb8aeac228bd9a185c3ada70f22f2c5cdced407b53933facd5e477764419d47ab8c9a435ddabdb0b02b3baea0dcb294fcdfbb7558fa97e94455c30e2b28f4e6d05bdd9a97f376a6b30accef3059bf4693c1a438145542eca0c2499dbddd8cf834a376b43ba6a0d8fbd6ebdef9c5c665d82105a5a7b17547d949c9bd32d389ccb0230acaed5bea4f515b4f5966a6737d6436283068494911e3c4c7c9898f131f273e4e7c9c9c080172a20e26ef80826a8e1736e4fa107bfd1354f3d40ef127d4bd3abd1394326eccb950363686ad090a59ea72dc5262a7e5c504750e726ab8da73db27a525a8a6cb57baeab2e6df28d399d9a0b4718e3c0b3ad3ee5082f2c31adbf776e9b387e886d89104b5dee9c69e73889a3bcc33ffb003092a9da367a9b9efd7d947881f761c41ad7dee34db5a2fb3f583c20e23285484cfceeb663dc84d083b8aa0d05bef70b9874e6bef750711144bc7315cc7eaaeade799ce96239f034c4349614656306d2c16d418ec188242bb52ebb5deb079a606b160871014fbefcd4f4765cf51db1184757a1d94e875d12f146299ad697b67ade7ce7ca1566f6b5a7ef4cf69897aa1341fad956d314b75bfbc50a8fb24ec862877a19c3fc65ed6291fb961a61383517998222dab0d0c46b3d97d960e320433860e5da8d5de1c765b6698567b2e946bb6cb61e3b5187a5cb8509a9cafc47c9311ddfa2d9432b6e868bb648c7a9375d842a56e2b6d1f96509ee57a021db55069e52b42df455cc7fb43072ddc51b22b72dfe4bc6edf63b35c283d3d3e0b858eddb3879a96eb4a47166a2dfaf7e496eefac5d4c7890a341a16342e17541db150ee30a7cddfb2315dafc142f1e2853aa5c31e7a2ed72b143b771e1f444c6d4d9fbb422d62fa38e9cbd58d39b642b9e75e3fdbf7e58973b036a7043a58a1de79449829bdf7dcf62a94f387da8e9d104a0fa942255b4c4c889e7ed9be5428f6da4b55196bb6381f156a5b4289aa8b21ccc7dc2994a6a3c89931bb97f8cd14aa616eba774a8b1a7f29d4e367a6e73a3272cb49a10e32d7b590438c92a351a8672c91bfd730ed736c5128c4a5c9b55375eba4e750287777fb7c5dbb64ad8142b95cbba9dd797f73783ea1b811a38632a5c41e7be909c50b9b23f7cf656bc891043a3aa17013736bad9d9fc7b47470423dcde3d017fbb37be936a17e7b9ff141c467ad4e9a50ee3077456c79b9942e4f26d4a3f64be8dd63a6cd1b26d41fd65a2e6a48f5dbd725d42fbbc50dddb92b7eb284c2449bdd48b131a6ee4aa874166a4bcd1951421ded96df8d503b87db2414bbf48ebc6edde38556128a69365bc9ce49ade9a28e48a8e347d336976c39fd793a20a1166bd7b4f909fd343d994e32d426c548cba771b92841c72354e322ce7fe7bf35cf73846a78daea64cb59fab69a8e46b8e7926562ae975a6bc1d37430421dff5f9e6c537f32fd94071d8b502ca53fe99b9abaa6758a50ca7ef2d963fc5abb638950ed18d3630e152142e179f695961e64eb0ff37182689cf838c1334e7c9c6090131f27d882131f2708e4c4c709f641c721d4fe76a7d49ebfb3d863994e4328a6497b9fa645cbe93f07858e422894ed2c6f6fbcde49ff5457e820847a89aa8fb5b7c4afa1673ab351740c4225275f6f66cecd56da4ca720d4266af68ee6eab2e756a61393b25434281b14e756ab424720544b8ad8eb703e668c6e0a1d8050e7a03b49d3b2f5d6893dcb8a9642c71fd45a9e92f9ca96c815fda0d235e6eefe1d1d73731ae8e8835a9f98a5e316fb658f790619825143071f149ee7941dc4db1a3d944dd0b107a5e8706fbe7eef35b6f6c4c7891774e841317d7b5672d6ecbcc55aa65fa07286a68a118c8a66b3084aca83cafee6d8b7fbbbb6d6d28187e5d50ca55f2d9927ce74b6685656b93be8b883ea7fc9518feb410f133b7ab2053aec90d041e82094d07b1176ca45fea739d67adef1477d848e3aa83d88bdf6cd123bcb890da545050593fc061d6fa874307119237caeee74d041b1d4ebbb21c4673dd3e78ed0310785de271963cdedb4b51242840e3928fd75b4d3a6c4dadb3213930b081d7150ca4b8fffdaf37afdb04c4cb22174c0419dc5d0692fa5aeb68c8f89c96fa9071d6f504f5d5aca12b19d7f2fe7a0c30daad11f84eb73f33dcdd5c4642aa62574b44139a78f39b6ad195a87a9e0c4c78919273e4ecaf07142860f27e860836af4f412faf60eb921c7246a28dd061d6b508d1fe26cecaece7d2117d1a10685d9722d2f4c7eec70653a9fa5a0230deaa14ea8791b427b525fa6f37289820e343c43acd95df294ce4299cef66ba083031d6750eb3945a7a1f35d8c18d36106c5de226ddede729acf1fd541471914dba5e9b8f6cef3e3de23835a0b5db2fc83d839df1f834a7db8b85b7af6504b27069569ad6cddfa1deeb72d0ccabd7ee2736777db6e8141b1b6366f47770fd74b5f50b99d68bdb5e8a0a52d79412d5aecca32175b88a177412dbb5fcecf7b5c50875dea693ce9d69bdb8262474f428cdb2e67445a50ae11cbc7dfce7194b6b3a0d45d7b98d85c72a88b05f55873f4de9f67f612a22bb80e2b38cb6645471576a0830aea11e626f7e9686b84780abe881152f6e39d7495155b6a8d1a729e75cf78113aa4a09a2f66c878214741b9e3fece11af5ce7a1a090b9c7e4958eaab89ea038d7f5cb949a927d9da07ce5efc1f4d0132f3d4d509ff413ae5de4daa1954c50cbd737ffd49e73c850a6accd33742c413dec97095d36978a996cd0a104c590a76687109b1fdcd691048572113bbb5eae7cc4b8041d4850d990e6f3d2959c1f7c47509dc99e31fd3d3dc79a1114f25f69ffec433734635c2eeeddd0b0ee21e8288242dfb6117bf7f26da206051d4450699d6e0cd5611a82427d84da316308e1f1bc5c529021181fe81082dac3ba8cdd313b476d78d01104c5edb593b0b58370717bbf507e740f5a8d3db678bdf942b1f35a3be85a438d88bc174a11326aefd0fdd1c3102f14628abaf1fb96d0ebf32e54ba77feed7bf82c25a7ba50c9a1fa5bcf5c3a074f2e54f79e94ee1ab57f691e37560b4e7c9c1cd9ac14512a679cf838712a282c38f17172e2e3e4c8b3e0c4c709cb675a960a4e7c9c9c08017292aec8810b85fd6f3d13d2f3ce25bb855a07d7427f6fb68542ccad4b0b3d943a714363e4a8854ac8f924f6de16f59da5857aaac8d15a79187bccdd2c54fe4a774e632c9da75b2ce4908572cd3d271dc6bea5d6d01572c4426d62890ba57476988d17168afd69289dfa4277fd7f8572fd3a21ae7c8eefd3391102e424d50e395ca15a1d93e6b75d6eb1833e4eb60c395aa1fe35ef7ab4b45d7b8f59a156dae3e8ce639cbeab500edbf2b7edb854677eaa50cf1435b427fb7dcb4f854ae91811e949e6880aa5ad0fea5d89185733673ad1299463bd9e2f62e8ee793d9135855a3f6e6d62cefe3df6af4ba15ca27e42e698e3f7f6a4500d5122cac72b69b2b7994e3346c172b977d0b67fe8eb581448db2fdec787f7b06628585bd5b4dea9b374e473805959a92b0b7365155916cd662550a8478c8af4b8e3b6d862fe0985321fa76b6cfc969e1be34408905f39b261f6c439a7d9116e3a9bd978bc3bf12397bbf4779de6e3e49b8a26c8891020279aa7a275c8d109a5e98f3a96cd39b595d0c7893a1102e484130af9cbd3328f43b79c760d9495cb056545093936a1fc31df37d5d558dd41994ece6fdf54342a978d0f1f2727681c59a305970b62d5b421e473b052c6f071a28bd660d13c4c4a7b77b9b03c66a5050dc0083934a190366f84ec58b7d7799950de0e5767b22ec7998a09d54b755f93632d25bfcf74aeb6a074435d2e9750fda8ed2d3fa5324bce12aaf79db5452f175542e94a96cb116b8e910f4b4aa87d0bb92ee3f492a1f349a477ef9b437c3e1d45c164360d7248422dc3446d1d4ddcf6b496e93cc230aaee555e70b960187244423de475325c50bfdcdebe57b45b50dfce35ad5da405f510729ef5071fb177b2a0bc11fdd9a1f34958508eb53aa66f5bceae575098c8df9d67ca923dd70aaa132f72a7d4cec65e151473b8abe9b9572aa8f6b2d9e2b66d0aea3db6d06144ee3669938262ddeedb5286720fb22828cfb46ebda6fe2fa94341b993de627e4bf7cead4f50edcf4b8fd66b69ad1f7582c2f4b9102f3d6c6daa36411de7dc618d3eb1a4ec99a074d16333feb4102fb704f59fbc76f9b243da9812d45a45ec961f6c9cdc4a823a9d584bd98c04d5cef82c7b8818a55d4750eeddb999be85cc9e1154cbc69ea3b7048022a86dfca9612fea7929250088a03ca1467fcd7dbd61270086a0b4d7f9da3e08a13794001082d2f3dedce9cb5f6d94000882d2c3fa98d3b2ebf44efe42256757f5d3e961ba93be50ef2b79d37797bd50fbddddd9e831afa7c90bf5cb972642bcf41162ee42a14e0e9f3f8789317bba50dd8eaf9ecc575bcee5429db718fa75cae7b4e570a1702197be3213ad3eee162a2dab9e6dda583fb46ca1162b428c1afb6fbfa916eae9affb3fa785eafe577dae1f35a73e0bb5385f1feab5925942b250e855bba556f79e5d2c54dae5d6f12077ddb050aecbc87abdad56c6af50ee5eb6ff96ed5a992b142ef6de7b3d0d29cad30aa5091dfff7bfcb9594156a57e3b3d6cbde5c5b857209753e4fed8ef54955a876edbc65ee30d3e51079a442253fee0765327d86883c50a1ce6a9c896eb9f4fee4710ae5caf91cdf1d97ed61344f3735b56763d9148a1165a37e5db4fca4238f522874eb5ad34edcfa383d9acc83146aa1d474a5f36fd7bd74e651a86ebbd0e5f6439fd2e1393c44a11a5fb2e790e6ef639d69fc581614cc4acbc93bf008854a9ec9aff5f1fd4b2bf100856af7bcdd34b1e383da27547a325c7c3825b3c3cf13ea7d5a6fb1843ab19fe43aa19469f33e8b289d26220f4e286c44d952a3e39b50dad61913bd4c08e95a46e0a109b5584bac9eee321dfae391098589b9c71032464ee4c62a9230a156a62e221e66e9f4ec25bc9de3ba1635a5624bcac3126939694a9d7b90953139fab6926bb65cf3e5a85542bdc5503677abbce935cf132166ac14f971648c969685c6e572494a28c4d80ecf324ddb56729350e82823f75a6b4a42396fb4da525baf6b218f846a9928216727dd3a3eeb7840429d6c89d72e62e3a0c1e311ea642eb70e7161a613a52394af731c5acec85dd16da673f5515836a711cadd752f74563f217d4e494161c1e5c2080c02782cc24fc24e9ee9b0a64d6cd7d61e216ece25e4ce2bd33c14a11cee22d74dec3144455022d45be775fd2827e768ad4ce73fcb3b2c9acd4a8850ddf42d2e7652c397581f42adb287eb204e4c73b921946fae446b713d7e87580ba1303d7ebbace5c94eae31fa3958290c93880a4aa66565ba053c08a196f3f716b6efb3d2429a69ce41a896d8bd935c3bc7dfca97e9f4b73182b9021e82500b6d7a8d1ca36d49d307421d5eed74a8d14aeba7339d9d4278004231d4d42df1757328a5963fa8e590a77a7f4b8e9061a673a3d1f841f542c8dd4be68b7e92339da87d50e95ccae7edec37645f3ea8b3dc49ccd43b9db54bf1d883d2e7c991673e948bded18342e779ddf14a47cb29339d9e7950e8dcb6c46f98ec6122cd3378e0015f13cfe7dae74c27df41e5d95ce825d4d487b5b660362d9a0c06a90605b3d2c241866054c0c30e8a6d439f7c537bced6ea3aa8b4501169e3c3d2b3b585c71bea53b7eb77f86832261e7450a95fbe33c7e7f59ff11cd4410edf3bef7bad74984379efe48f32ca28d2b2dab85c1c0b3ce4a0106ae97df55d3ba69c78c441b57c0eb75923d683cae090c978909735e9c9f667cfa34647ddbd2113b7c7fcd03abf923e37a8c7afdada4bd689bb1b8f361c5ec7e5f4c4a7d1f1469beedf1b2af2b72bb1c5830deab47c0bd941658e93fa1778ac411d7fedb6f3ac96da722b093cd4a0341dff420bad7de54d4d83f2b352a67e2839c4030d8ad93159e3628dd26aec0c6a3737fde36f6fd1a6e66106c5101f4be4459ddc3a97e9743752461a277ed2e0510685eb8e365dfac7f5e925837a67d47271f28f419df45a9119b5a5e58b3cc480077511a63dca893375efe77ae8d89f22bb531406c538f13f5f2df9a4d7b085c0030c4a59973263eab2a13fe70b2a9d79d911ad4de99de405d5c9531d3d4ecca30baa17d1692ed91de78e1017743d9dd5ec94522ec37ede7dd25b0835df1614277fa88f237743987eb5b8d6986420f0d0825ae8d14aff58a687485f169463281751e2432db98405f5cc9cd6b3d3de738bda15d463b7f43c97f01db7ae3caca050af4f4b913331d4cb3caaa092d96a7f637bcd771e15d4bed552b7c7a69dd68f1b784c41b54ec73de5c63eed1a9282f294dfbea9dbd40c714541a99e5cbddc3796fc1d858242d94b5b3bbaf471731d8a660d5484c713d4c285f03c6fe89de32e9fa531d9060f27a86d8898e6223fca4eb71381471314f2e65aae65ecb94dd72e97676926a896df504afbd89f8f228f2528d7fa3f97adb7ab87256f020f25a8d6b4eda6f64edd1e744d8a1a970b265b369a9416cf22f04882e2e75efb6e98b89351e28104c59af0fc724a096df3e37104f589ccfb9e5b5e75d63c8c8099922e6ffa9e4d8d0711ae767221c70e738c31f22882422badd6b3eb61dac4f872c12417781041315fb69eba85e93422d757e03104959abec6ebfdfaec60aeacac9595b554e02104c5ec3c2697abe52efbc323086a2d7bdf9043ccdd8a1c8dcbe572c9ecc56264351c4c7ea13c3142e7a93ae3f74ef2c56e4a9c29f59e6c6e44cd6e136d677ba7cc1c732fd4cb742fa54fddf78b0d14b76424d74cc78417ea57ef2e626bdd78f6ed423123474db1f59b4bec75a1d4f5d76394da49cb2b73a1507b3f8f133ea78cdce342f95a8d35d628f52dd4e1b6ac7526f6d6fbc8164a1d3bd76af6f620ea5aa874de6f5b5c8bb439565a609e6c74963511a3656efdd2e3ec317ee32c143b9fd2722ed1db7fe85d2e974bca426d3af4bbbd8bd21defcbc531b9b150eba86f33d6106ace3e2d1358285455668d5a7bb37c6724e55956da4d5ea1dae969e71e72cf513aca6c161a27b3592be7c8468f892b50a3840e2647f6449c58b5fdf422f4d667369bb5a226ad50db8e2dd9d99e6ee73ccc11968d2bc184152a3d9d7b7d3e71156a11f6a2439bce72dbff9e8c2043306c98a842add3d9cedc4beb8b0ddf93b1049354a8f55efaf57e1c39f6db329d2cbfa8e06d4766f6f5cc644fc5775a3b7d72ad353a59844553461116cd6b96cdca2954baef261fe6771ce5663a515a503c5b525036464c60620ad57eb5c718b7edebe12d854af978f143ef25291442670f22849a26e4fdd28ac928d472e76abece5b724d2a0ab5acf17b739c8fb31943a13019b127a7ccce0e2b28147f6b9e1eb693ae17c33c3930f98462bcaeed32d70d1f5be9461607269e50cef9e3d1e630e9b38752341a9662d209c51c4bcdd759e9ba898c138ab1f586471f9f29e22504934da87c6db1b7f65872898bad61a209c5ca74f5b9871ec3a69a09d5f06daecbeefd46bd2e1726986042bd64a8ff3c5bfcd6915d422573fd1eb5a23ab7742ca1f87f296f7f7b4a8c5809e5ce25fcd72c9f122afd43a9fd39deaeb94493d87338254579d2d3f1b30839373def1cf67cbd2f09c59dd81e3765ef11fd8984d2e7c72972ebb70f2148283eeb917da1b48a9ea6c9233ccf3a2ae65945c70f6a4ee6abecb9297ac6d5070d9494153558362d53307184425dfc78f993a2d5de0895ac9ba1772c0fa26232618472971a636765ebd74a6b118ae5da5f4bd933646f3451847a867e8ff772d7907f13a1dcd9cfa75f67134be721423143b4781d35afe3aa2d2c46dab3609288531b232d5001a6e2e882c92154ea83ef2187071f728a8650cc71ea4ffe8c7962729342285cb6a7d359b4d6eab34c08a1a89ab8ea87d371c64447bb9e5b9410bae48d7510ead7ba75afc7fd1c4e6c2208b5984374692133dc74960a2e97c624867f601208a58beb8b4bddba65f8268050caab8d8d7db17656bbc91f145a09adb7f84eb57576739021181998f84121960e7bab1b5b6dcf9ee598f441e96ad7c6927e637e30ad4656547eb4b018f1d1f29b2363243ea4b6527d7d9e87b49dc5640fdd88345517f16aee49d8dfec7cddf233ea7bab079518cae710eae556638ad4240f4a9f21f7a4adf5a2843e0b267850bb8ef29ef6564a76767750a72dc2d6c698cbf70ed9413dbbdb772cd9b9e38e4d30a98352d498e3ce759a9ff696c91b0a3b35b2656da1877839133aa8d48761c394de32d6b44de6c0d9adcaabc88e123a9cb8351faafb490db5e5339183720799ae86ebbae142671207d52d31d2f7322d57746d020785dbdcd53f57624ee6dea0b8b9e77e216ec690a33671836ae9cdbe77a943a9cf529336284dce5ab79ed6d849679682091b5443df5cae75cea2ebd4fe049335a84ccfda3cfd7a29f757a63308266a50e71f26f7dcd808d153f7e372c12432498342aed9bb77587a45ef208c091a14d3839af6baf4edd8499333284eecd072bbe7d553e29a9841255edb9e7f9f7db19749191472bf2de526f716427ec8a0bef99331765e8eca1009c2640c0a39f48612da97c4a07c93e9f25e27b5a56fc3a09e9e95f23d97d0db36f5672333bd61020695dc1ff4d898ec0bea246bc6c90e42f9dc4b5e502dd343b6a8f9fb76521714eb845ebae3ebb8e6752ea83ecbdbca44dedcfdca2da8d55aaa27a6afe55386b4a05c5deb862f7fa9bb6568003909834916944b2b51225e742658500cd363db92ff5b26b6e2607205e5e91f3acc21e7b3d67b37985841a5fe3ec9d569425cad8272c66fdf3f22d60e779b5041b12f4d7dcc1162bfd8c2cc6c88a83c90643205b5fcbcd576190f2fc68e8914d4b24fa7fdd17297c8558dcbe562128573defbe5d6b6e5ea329d188d4b1e984041bd1bede29ec4a3cbac99e9ac7642cf725359a613a3719c4030798272d4cb13c3e58a78356b1f4c9ca09221329f7ced8fe3e726a84c76d7181e66bfd0ebd941983041759fde7488eaf41fd78d772a3f9c2e4131b4ea5a91738cb1ae3a1f4c94a03a7fe52e94f06dea5c273e9226c224092a4f4388a56fe4fd6fb679304182fade976b57cfd2f3b6e51d4c8ea07279b26e447ff05f36a486303182ca64c7bfa58390b73336298242adfd0ef5b075c7474450899d7d96b2d58897bec4059321a8e61ed961440ba5979edb8289109443c7652efae1976705922ba8f4ce29f468240a8402410c832010500dc30a00a3130020181c201207c321912cccd2701480033c545c8a3026202e1e8bc6227140200a06c3c0501cc43014c34010044020c8a6d4b826002a2678ddc2a2d69532cd28b65d66b1086d72ebff12669fb252e0c0d4de82b876c9c1063ff65d694e5b0697ce903e2eb89f425d775df60c6b3b9195d23e7bceb83aa9a492991d0d2593897e924e5f138784d84bd0ee96fb5b34034d4871c7d9fa1a79e178563ab630880a1f214348a6d843967947acd136d7c42ea97e2f65ca956467cabcd1042de52a89ae55b8168488d0b91f78f4dcf9daad4b4085c8dfafa48a8fce0dcfe7149aa1ef3da91c892d15b72046749f973db8ce438f43941ec270ebebad0c15c6abfcc53f5024fa4fc65fe60cc4a7a947201a485af2587c6cc7eb375f44eefddce18f71bbd333eb7d682c5d0b38982e101e699a029a018f0ca5182e14200ef76cd83d9b19f5049a52ee4cb723aae751608d215cca00967de121de920b6fb93864625072c31565bbee6b658a1a2d1de0491a4ffe629a47fca99879d98c9fc302383e2d5290973e0d81a1f128c58c3f1389ea5214017d0dbf83d814651538c64fbdea9ea700d1980b763d77b960d35d5cdb2bbc3a074776fd68b30860e8be0ff1f3d9cef9856b92234f9013d3cd51b39c95b7ebad3736e018522efdd09f84978b0996a076b6698fd32511ba5e7e979a76d86a9690ae83b53848ed34c0630932c52088eea4dbe3d152ebd78c219a82817b9fc9a091c1d7fa8e5c89e386e426e995e6aa45e24697a5ebb60d47275217f8a8cc5094c08062422151bda42e47a98e3314a0882e6b3069e03a0c4c72a59d532da02e8f0e7b8967b38d7d4ea86770d5c4689f4a500a021dcef17dbd69c874de9f2bcbd18f0e1b4287a196a97e9dbcf15ecff622c15fb62a3b252e0c0da4b74d1cf1c6e2eed9eed711a2d5dce53baa66baca3b63731e43f4b9a7b12eabfa0103e806515d13b8fa23d63332a5980b2e23a36545fb39c30f9fcf4c40a76d98d8e0744289c82a6f56cd69c4e749f7cac98cc929870ac1660d3adfa280032c8974a4a2bd4ed262d71dc1758e38a1c0724038290642c6a0429e56a2e6acb80a92627ecd9cc02426544ec28490e7c81645d33ff5ae896ce5bd1101f16aed971e33d016627df5343f82ae27d2e063eeadaed3e0a04441840a7c57afad517f1a03b8d345d858c940825678f64335b0fac010dd470340c07964ca5f844d9113834f8afd9fc0c191c4fd92703609d3c8bec7f0151f46123121016502d39671e8d682346f013fb9c2d8fe7a07ffc7143ba6a397223bb44dc0c5b092a2c05440f5618e74b7bc27a66fd0dbabd1bf0fc441f68916fb855404c07237eba96384417a483a2697fc43fc4ab4b56b7203d9c446af9b3888d70f9263d309dc85fb63af63b1417abaaffb8aa8621e2bb28d255d854df26a9bcbc6fb7d25351756c5f80a0144a35df37df746f550a8c13bf36f442f1574927a438121044a32d48472426f57bd07911c45b901aed3825fdec8fcd7b63946a0b98be608f53dab25d84a3f3e70411cda7b96e3317a41829ef4591bee2cf5607ff4921eeb20307adb18c05709cf2f59ebd57b49f99f388d1b039a5546c168090e8f82e76eca617f63c33b28b8c170b39c96cb24fd64e7449a1c1bbd18a209fa61ad5f21618862228befa41ea5068a19b488a099f5ebc5f87c6559e06641779d98cadcd786dad399be520ee1a505a0028dda1385ae9d5d8e2570c3df65cf7c599ac9bbffbb170c030f46afe9a114ba5d6429d18600fb75dcc911cedc464265f9eb3e7519a1431a95db2ff754b2b9f3693261833e9c3785b1480872427186d4d212e4f2ebcacdc50b6149b67a594e15008b339cbb834333f7719ec9fa76bbf79d54e9bd93da3fb39e2993fe2ad25c1db9d19d7ac003c53ab58d5b4bba6b4244007a8ed376d6345d7563f0ba9f76166749e4b8c1c1a87c43404836f4e8225c9921660ef27528ca98530541d11711952c4655a48941ef7b11e1d1c6e9a36062c0380e033e2e5065055343a70a69eda79bb3c4d055b75831de98112e8eabad95f822627ad06b7a177cf2a814d955ced54a833c5c0a08dee8ab743b5626d182af6736481ec365628a7f92aed8600454854ae32554ee40461ba8152662ca16897814b3b81b167646c9634ad62efbd10072a9829943d1d1e19a1522615e1ebda9cdeb59a472676de83cdb6f772d950514c6bdd2889736548ad9c957b87dd8e6b280666d167f1a47f7cb14b18c15161cb2269957f04ad2f4a6c7066eb9fef24710815909a342c1bf5c1d0444ee5f93abb9e8d12625259b950d6c49ee3f50e20fe7c11674d589f692708faed1495ef4d26b9953e37467a059c082afcac4fd96ab514c2a69a3475ffe3d094f1f071c29262a386a52872cdc27f57f4911afa8b3c94ef7171aad08c929a9a145d3c730b50ab898feb9ca78f39a8187f3a58f5e5d961ea5b3d3e2859aa3f69b4db0c2c106d758ee29c22b50f0fa76c7bf6133f3fb6b32b7ca2d0e3dde2b1646e458e66c21d7293da8870a3ca874d650d4903d15637601ca791aa05c467d72e1a6ad6b3188dc4d32d4d1755f121f239ed8069f4227a4386105725fc07ffdf1642710086625c2b62d807a272f99edd2e94acccdb66bca5c50fb7489b4dd0b0a3d2988da0c1a47e6e66b8fd2892a6a6280c2ab2e9c4e5864ebf3220d04de527de00b750652056bd88474900eb9a25297197367fc79115f5db0d246b2742b336f99baaeb3e9014e46d660ab0fb82a8d91fbc6e06608c4e1e3a0cdfe976698e38a50b52836550906b08a25f9386e8e0aafa7b7c8d8f0ff5f90661fa90cbcaf5bedf257ce82a130e416bb6be47c6b5142daa43267dafff89b73803dda896c945119c43ad127812330d33cb69ccbc5165bdeec4eb4ed91cb2c60ef04cc144d1d08eac1ff4bde1d7f511bcb815345924198897d46497f52f6cec704310812bd03df261c2bf8ae00c656fc3ab3754a9869ba286e838bd0fe4a732872ae0302a72d266a2a6873079373ca563a6a684a69dfa42e3965c240e4debea4cef7410883786149e5d324cba3201f5221747684ffb4a7182a92eabc2c274d2cf9ab1c66672cb270690e23614349e1b3a341212b60983bc2d6a7e56304378d76ede26a026b59c6b54a4e9d166e63fc6ca62a68870229485a4b8c1de2527ee487bb6dc55a095a8cd5b944aa704cf9b8a2f416f539947b450da3b40eb6166c44f18828680fc167ba0a0849ec01161d3201f291f696cf156e09557ed71877996f2115a9768c8f42f8068990a681a7a3b23b265178359aaa5f48dbe45d75327fdf035096ee88a4e2598bb8b9e7be318456df93efd2da1390c91e76a54475f8e73353d6b990d36f6c9c1a8c1a821cd930a446bed86850f9c6ba4d5a11353f0d05ee29206a4c72db140bd75b5174df81b29a7af29e7292b0c61bfb38c3ff9e1ed57657e19f1546e258e13ba7e14ef4e187051570ac6452be16374e26a8141e659e72a8e8ac0bf60280d32622dc3f19a0880eaa02c5054a9c608fc6d2b2a783190bd5c70240d241033ecde95f587e2748f8425df837b3baa79095677e82bf70e0954f73c8a569a7837046eba31f2bc30d2592971ba0130692813e99817df3c1c510010aed7b82fd657c101b13b3072b4bc797f0276270a05c5f7fbe934fb4b9b253a7bfba0433ef7424a2813da45a916be4dab1f3a00a67778d1991d01720c550f36614ce8007961c020478bfa107d51109bd5d45516cfb2156addd604fe58f953eb820a12ec5142b13a1475dda82999cae380ebb273110c82e975bead02d5a50d2b61e62f2aa4a29193b863e41e1aca00553cd8fb1782d4de966f7e6951f415934754f61fdb08f3971a89850370dda7a527afd9cd2af16e328b0f8080711bada4345323f2d3ae3555f5afcb85cdbec2e7c78c59d960ff9f3e75e3059b4c85853ac3a01d4cc89848de3eaca7359578539df39bf3b2bc25616eeb11b39e414fb9786ead0661d7218a04d2e43b7491a1a99b93a3fffa149c740e45a3233c50a21e7aabb53800c677d33bc16957b5b462449f6332d8e724020eac9afceca4b6904ab92d343d09c8a1da49b8e374e2fd967094cf67a2338b76ddc41d1ced9a813a880ca160c4901c8fc8ede8cafc9d825122e758238081e31e7ee8074d3cf0fa8f14e6684746f8942a4257b764f1ddd532e2501c623142cf374e010036ed82b2add806cff81cfce420721c38015e8c5ced250c695ae535092b61910fc380f9b125545589996457d5d18bf8946d51b8303b2ed1c8b07bb3dafbae14ff984567a9c77cef6acb1d1b206e0d6a968ed08d9762950c8b68e3d43b629f51261d6cdd9587b20f5886cbb192d61738fe87355649b0edc45b65da362645b874f23db741f3ab2ed02e0916d5ded85649bf2c831d0199b8725d9a6e70161461c6272829e50b2ad1fdc5d502954b2ad138225db748b2ed976e1c3645b372c936d9adf5e7bca1c9ef4e0d794f034b8c71677f4ef58796aaf83b4636fb313b6c0038194295d50f36a93ce8d8b78a9e9a7c527b5ec439756a0176c3407351503406f67764e864782787dd84837f4123446e88fd1dbb4035341adf741c4a4b680d3c6f404673abe27c837e18099aaaf19244b79d50480244258a2368ecad319ff18608cb06dd62e7ae1d5a60929c3abd6ebe7c7e9142337b5f81214d6b7b8d30af2126058e3037ff6c99b31fd683fd8d01d8f581388c71261f7c71033a4ed9b1f504ae3b2ed276c96951850f817b682947c9daf273f3bac0310e1abf10c5ef1f826938d071187217b07fa566224ff1cf271ddc5ac4ef9e0929786ea4b951d0455a90c1ace9af8d14621e9da45d87b78541bbb7838594f0ae7603e5e4db1773f3e99353f0b29ec10124cbb54f0149d341263ac253eb3ec196bc65e72bda70bce22e24db80f7a9954111e43b0e1052fd015a279c3964b4e976ef5b8a9262c3d087c0d42411ec4f4063d37135b79ae778d530f0e6fe27b9c7adac2fb6c63a197baa98f239096bfe70d053988259f92810714e70d72e07973e3ff490cb6776d7ddfc5c68c9745119a7fa551f6eb230fd3c3fa3de38c2541271c97f6b0e569a45845911b7d2491d498ea0a8d8b3e70c7d0b5fd666c208ab671f924fa6b0a472072e3b5ac640797e44e1a03be6d5ffd2452ac9f05d0cdb5f4f75385a18475f2c10444f7d64047222162c86f6a4c1e127a15d6c8f37e1e7dd8244fcfea6935d7d81f4284f729ce902146962cab1669a0faa6bba61942147b67ec22670b46e1315a71ed7f838f5a193bb2c641a03167c8c478fe9888a09d8b5b6fa78f32417453da7934d40e57b92c79de2c0f8af193e0f911dd7ecdff19db5a8d148006a743529cd501a8c312a6fa3d60eef83bee93f2947d3366eb1be3cedf550dd722aa1af74dba8288bac0a7ff414ee06142300c54a7bc4343e3403549f3f1f9bea5be1d994d14300a5ed5df73195db18a6367663ed6e9c1631c1d09ad4136dc04eb41be1d202db4bf8c1588e551314629aa77ade1ec32e7936a1d921901adaf1f6ceeb60289168cfcc01b2704e7886627a6e30062bd0195a541a30db01d0b96e071bf6d90336cfdbb575847c9cc42a9e650c0331698fa29317622ae12e91d29a42b6f9c176584df31581311565de44fadb29df2ed75dc279a80b54b4bf678a77e36270997c4581ee244362ab07cf209d50e4fb0dd39f55af3c13a2f7355574cfa0249d68fcb4be87e4bc9bc66615f54b3254731ad9d9dfafe6832e5a826b5b2d3cfc5cd2948ca16548f685a9d1c4db3c12080212a3a2ba865b1799a992f50fd8656824e79944e0bf5c442a39c922a5e9df328435acf48e266401ce30af359213ef9b85d663541415c9c2825bba8952e0807818f29107f0105efcc8caf7c4b4ca6e2c6721babcc5fea8d20348164d9452b505c7bd93b0b36a229e999e24e053657e386c95b540404384fc23f9a4fb3ce8acb04fac1d7b2afa254202bdb56e0c2d48bf820140b2e127744d3c9fe94290610cf5f5b617392609da23039ea813a13835dbf6d625764d897d19c8ceded64f4d2096887a99c6c317e64757f405212b6adaf17388490cd9441623a1cc9fe3acc693f979de487cbc0349f25a1b89cfa808407a89a7ba82d727761915793f3a6580eb34eb13027a7edc6d5b323ae819d0da83701833e58a32122be21ad4ec253934dc004199a12db4d04792aeac6043bf716ea69a63bbe93791533962ca00f63c457912a975243a3c0b231d6e0f4264348d01c804d9f1fcea1dd3aa4b71fd72c0537659fc8f97e821acfd971b61bf2ca24684f4ec51951c040c6381cc15993eca92d1878c65f36da9710aa2562798cd569c9f7f4fbb4d2530912a12a545ddc91dd52d37d3fcaa689dcba2db1f7e7bffe5b09b4afab5a806796a4db53e422c2acaab46a87dd1db973d4a00a428b1658e59935dae7ac045d4f21f7ad74f418e9dbb81dfef81acd71562fac3fdc78f44888a8bc95361358eae6b8e2e97120515a2f994949bf1d47ab0dce4af33c93c4829c5e228ee95dbf57c34f660f86dae5de204731ada42f460c9d9d8cbe19431adf059821fc04a45def412b45e8a1e4cda40d6985ca95d79e931cb9a02f293433fff4c92f157efaca1b7c921010a396015e30a6ed16a022149452f1980cdb48c9ea5064bff5e834d6bff7525e7ca88c2dc7bd51d9411c228cce1682e4881290ab89ce1fc4067f907561785dc66e72073b90a0a7c24b4cde1149d054d981090f979d8c2c1290d2a09cf0623f20e4b25edd2357bc2a9315ce31c8bc59698b03318b4578bfa511120746083c1c7987ac7880417c63ad9306861659d3a62d512957ee763bd756fe4f1a37576a10f022bfa41557b7d46250953e8cb87f5b8ea703bd5b6186d403e2ff4647faafa553ad814f15279d4ad0c5e2c97a598ba5e1a05c3115ce565f880e4ce50a843dabad49b7e6a1ef0eb1dd8d3600c35cd522e84bfca9d4eac0385705b9569e1ee6e02fea9adcc134a675bbcf54c2fdb38e51ed0202266e0f19f5316673a52fbe5e1c43f8cf29c564889516ff5b0283c9152e8f74eeb1f5fc1a86f7225ee0d0b5c28b2c7df9424e525b941cd750e0d3a63c508090bb223f444c68d5882d8e6f3b4d57c846d3c8f241c82c12a71ee69b52144d54fc25b0034be6f6c4f9004c1cda28fa9aa34d640d8e36c127bb35e8e3a3f07f700a30f5e0b1fa704bc08252171fa6b9803a82db51bb65de2dd359e24c4768affb4ddd5ce9d2a3ee7475b58a5deae0ad6b9433e164b5f40364bb60bc7d21b510841b8d535f667efc11df0fe98249395d887bb16c2019822e8614ff1e58205ebe70252a0e3d14b1a42b098cf3843e8cf85778950054a67b4c6c54aad4e5e4ebd3c518f234fa9b3ceace3f7f5b67ec6317b4c4259791ed6a8db651f1eaedb55a8a165f58ac7d4ad72fe65b195e7676802c56cdf95f78ef8b7e7c9a5e48eea3cb0d5cb9c5248f6ac900cab2d98bcb3aad205569e5cfd1f65792519002a370a0118955c544421c5f40c5e56120758b26be10941c060301e9950cd6671a4173d00371b5848d1b1ec8e1aedec0f5c6174a62a7c40cd635d86db91ec99fe19fd2528d21286ab1cc6c30966f280214d75a7a0a2db2a02f9d0dc5c4a9a7996b875ab5d3187e2a37bcdffa217bb67af71e2847ffc15c2b402ad2edbc338f80fdafc573174103cea5ae30fdce0d61df27ac4a6b4e4fe2887c04a15e7fc0fc94e910333ac51cfdf1ad8a615b01ff11b7ec73b25174b57b47458cc1f7ee9073ef0531464fac2e11d8547631a9cf8ad360f1b6ce2c28dcb7b877cc4d299875b65633edfa6425c0fb100ae7420d7e6bd4e1983ea3ba46703d771911529f9e610cfac959fd93f2112daf1f149059503a0384eb19dbf46eff25f1cca5553607d63fb90962fc5f2deca3729907f3ac0d88c9d0baf4bcf7345879528d84e9e8b94c44eb1616566a048d8e4eddcd6c731651076dc1f6670ea6da480f618075eaf6a191bed5868fa1f7670f4348cf85177e3cb0df8278f86ab93948bba9163611133638d70357b72e8efd0ca5d7a218bf241d5d057405cb441d11f18fa5743d5c85255acae46f9ce0550ce97e3c3ed4a16b50e005d5e45c6ac0866071eb922c80dd25d83e2260736692fd237bda8e4ed21c88000224f203fd5d30312942d14a2e7b462f7d89fe93e1649ff4d80d9217af3bca7d79529b62ed04265835456cb6a1fe2d14f6efa864e9c893f593fa48e69895388b1e1aad6135ece096e040a93143650369bdb83973708091c929d3ef14643cb2c6775a7ec35b89de2c330f7f63b14a214936aa1a0bca28ec60e6ccec5df55930afb003cf588661883fec313296a284072b3a0910991e7fdf25a49e44f61898e9a0f412932a3d5c5349d2e7c226f582294866b90666b1bd09a3a3840217432ac3a3920d38c2280ba7343bd5412c0e8261a94c96769623b09adce005054c064184ad3c852b67b4d123a59d053e92560a03a96f5daf9ffba69cf0bf95161d706b9393d4b546b8b5cb577a424c47a6bb5d539003b96dc0b057e04384a7196f35e49810bcd9e2751a3fa53a8cd5cb76b8673c01a0475d728019a05ab17e7e23bbe801fe37a2dd1c672ad43772387d6cc9174a806e8f25a922020c1f4f98bbc41a669f6cb04f325df685bf52d5a33f8baf1fd0c4d784a720845b877cd4dea18f25501aaa92cedaf68345ec8add0f12e21f0f711abc5136b1bfc6fe9d78f99c0b1fb2239b52a9c32e735c1b5f1263adb3043a0fc8c5d32dfcffac08a24b949687f490eac143be3b28bcc09606773e86aae1a3eb031da5967770371285586ca8cb7c0fa9460ce72178345e280545a16eef045521239572de610de51afea4e02150eb5b5181973ce07198a43eea87c10f0c2565c69a0f2936996dda3d8eafa49a9a7a3009ce081b113859248c02e8257c3497201962a94f7836d8038ec186f83bc0dcfbb289ffd551e77fcb47d7711d581a53e4075e71327ef6bf9aca0068eac5047bbc4473335b4945cb2405c958806d097d105b3654568c7081d5b059575b3bf19d753c8a83c080d4767213a48561c10742471c95399b8c7f461a91d081ae43cbb23cb30bd98cc32758dce5730ed6776b05a1e22ad9f8c604cdae795394ed63eab2310651529ec207d6830d4f02754043dc6b5acdb06248fb6c2e0c9f1c2ce413e6418225e6e36d3c565b5b83554b567734c09519be039f284f88610459d5389f9988da207a4275d2072036351ff5ff521f089ceddbb3c2c82e5a2653cd12637f6fbfe8ff2a8dfbec1618008356fd33ad768e584e8e842bee96764f37c9705851143ee78af05b4e9825dcab473aca09e9ef92a1a16df2a420417d07023d264e2a33908a7ded70ed8c172d0e8a197e5ef4a7732a073eea7afeb09a5c7376a921eacaa8a2eaa215b3124393e1ac481ce52a3654514c328ae15ef2ca3083956e06353c40ec3c91ca63d0ebfa7e4259967ab874a1bb4af15846bb1a3982cef01ace8a5f2f18b6cf804e00cb1e8c0635c3cdac4250942442f85316bd0879f989d371046ea4aa2c9d16d3d02be1c81125115b457a92a4ade588c573d332d5c52348f01db1114c2b0a001e9565c94996dfc6aee527381d72e29ae114ce9028b30eb17c8642eb4f209d153813e3c131d31576053182958185758e24643c83e488f1d604f603ef8a6e05c79c4fb677ce544b1f4a401e1ce57ac76e9191fda60cd6404b3e7161dd5e0d223042f0b09f3ed30c50392150ec8633ff0edba0630dda9b28ec9b899b5b8cc86a8d7e8771a9c04a16d1c0761bf2809952acf64120f9872734587b6a1a17595195ca0869ebbbc465254e8631151e7c1e528dd531b03f8f4710e57c065058daea95144bdcf977951442cf422a975ab3f1ed1df952dbad055427782683f4d30ee6da62b54927a9179b0de393e50f8ad3fb65252641492cf97f1ed04010c5ecfadd1f23a05a55022a08c38e554ca8aa90390b84e3d44725915b28e22638974ebe0127d384ee5b5f3e315acbe3dcd2ade8217d1b9c5641c6e718d8666432205c097397e4db976dd3ccff0274df6c7a43083a6fee38cbae4633c05038941653b2ce98a8c1dd8faafae94e39921cccc14492fca028794df472064baa78bcdd56f2d584be405530765db2dd3df30c2831dda47854a14e7ed931008d09e7d12a2ead8984355207718c717e0ef669a335e396897593c14b3d72dcbaf4877aa2777b31803788fb75e0e467f16cc4aa85f8c994ca12265d80a06f5959e8334f1b9e0f5edf116ee548a05bc435fffbfb18ff7c3e3e9763f5a6900ffba78ff02f1f37e8fffc50be1bcad0c6267c20f4e13864a5fe1381727063c706eec34f45d159f434fb460463e302c057b10e75ba743466824381d01ddb5aeb0b6ec91e7c76aa4fda03617395091d69ade9bf040d442b140f7858a1f42a01a02247f12544565f590779d597b864562bf9ec1a92325a7c102d64698edb9264f9b02a457ac1b338bcde6f192dfcfce16c15739fdf9dc7a4527c20ae4d894596ef80c52c9659d4aeba743998a0134724298dc3254cf4e5134188915f058ac6a16d7a7dbc94598c3a4eecb1789e4c762137a4bb7a868d4e30f472d41249a23618379644f9436639b751bf37c1b1551a3d8a96c2c0635439b5a492963606039d247d122c524e75d9abd739e3c0b22ba43d22495a521c2a9bfc2478b43ce9baa2c739fac2f2aa981b229bb624f188fce56f8b49c9c87b44931e92b0883a7247a5281b4b6e2349ff91f808217949b5a83912bc65c67d7f0fc66971ea9268d29311eea138eea6fcc97ae40d99f9fb883788c61b537b9a8d3843f9bc1ba5061ba3ec10529267ab5067d7cbd61c59365b2a9656c6ecc762504a3f2ed93d4b230f1ccf4ad6822c9f694d329729294b36f301de84548e1f6d152df12a33aa4a79aaf374a93922c40e102d6800b9836e156d3f2e5241cd5b5ba885563bd2d10a96f757d6ea8005849ca20bc7639c2538fb24bd6b1a857baad8e97c558994e426685f1e5940983d213323db76a9309bda5b722cd546ed2ab53287f574b3f25c613d3ad2d191051a1306fbfa9a819cca78233670e074eae6308891bf8443662abc492606d77127973e9785dc3d00cc3f002cda018c7e67c474ae608d2f2c797cee9fa53c5efc00e669537e6b376574f67b398351b4ccb2713dbf71240c3fc0ff541178549a3befcbf538219f97339bc0163c2805342403a522ee31a01b66f0ec902d18c192ea4c89084d65f05418d8c559fcaeeed291c6b1180a3cf7e7024064d8e87c8ac61468001d14ddbb801c139f84074ac141011548533809aeaae019dc6ce624a799d3292c3610037b6a406b0eb741545f967b44ac30ea2de2fc049f750b05fd5ca9111db9cbcbf8cb2d82048ee7f5d2c5d9baaddddc9c7b6e29b22a2384fa2ceb3d2e57d390dd39e7cebe096f2a9202b512c8e1a84a96b23fce0c5a0ccb25913d056e7596e8a715ae1b9b30d4f29b2dc400ca2642c1d6ed7ffa0fed54df211b68250fd3a6c37d5a352bea95f847a17e0387e5fb91f2c01c9b07a5bad7e6cc1c0030f5baf7b2d40ec503b71075356e21ed14bd4eba5e6135f413516a0d1dcc2a0fb86d2869046afc086792ae75739a24abbdb63e0145bc9debb93071df5f774c7fd35d9235a4de4558296494d0ea78c2c27dd8f200dc6e436d16869e2331e9d0e0d29993e271c33aa0e524d912d05061e6fbc9bae4634d14283d8e634478cc20ba055db1270296645d7c0171c7b87460fe08cf1c8c879c29c17e07f28324d25708fbceb577799d39532f5e573c1a262c8f355b3e80c9911517a8a880aaf5af060b3d6bc00c5378fe9fe6327d5dd413db82b15ca34af9d9384eb67c4ff6cd2a663aa173b6c4eaaafe4274a64c07bdd8dd2fceddd9d50e515bd0988d32007c4408a37e99d6819ef41598e3822b9fb5c521652d1e1f97c1ba4a2d213c90fb626ff5c66018ac0441f80455a9e71fea08a877c8b3bd1a498740fa6f8055a5b55d99b60c7da0b43e67946cb24de4943b382e1ba838f0e416f599a01c8a40bcedd6c4b80dcb585f81bd16b466c2a2fe1b7ab291ad6ce2ac4fcc61eb007e0478f92c18f343e1069edb0268e90e780ae27f52fb7366f491be3f08d9c799051d347b8c1ef3f52f039d969a8a12d3a39e03a2ccfa7e3e1087ea1f0a7e9c62a9f3b06d57cf415ba4e87befab2420d7dfadd70b0219abf1878d341412124314d444ea0492971158158ff2b5c5f1a2f93a5482a8ec2268cbed3c1b274d4ec998dd3e848ee1cbf25102e945b679bdb381cc49b0eb4df6c32d8515522095c0998717995ee5a283d17a06aa37d6bab17210d27690f24a0c7045384ce8d1d4f9a8d1aadbeba6b60e31ef1fb0a394699813702e3ab0e615a6a719b3b3ed167e7631e33885ccf4465a930a5a3bd07932939e5f2875a9fba8dc6adf905609a0c117b57e0a632a660b4149d52e5a498da3eaa1d224d2d386240761219ca1f68812e6e6954525faba12effd1af0a82a9299a50b9820c9404452600fef7125c0c84061b7e525f0d0092e8fccc2342b0bc5bd184a66737493546e8e5da5e515e1b09e277f6a3255e2fb21a483d4e1d190357df195fe88c0699afaf5798eae746628bd12db8b17263de2c00eb565e009f97337bac8192529840ada728e947b2b7938f1c01135e3c82db5c26f80b38954f93c55d9c09ebccedc933f1bd6e9668671d1f1d2ee726f00148ecbe87a1e2f187ace32959a2e3ac6029fef8d37c482d0e0f2b04e3e82b473dbe60aaec6110d6ae98f2b9d64282d4a7039b509386edbd70e10557ec57014f5de230f30ecb7e90991ea4d98c9c779cc00d7dd4160c93c550bfbaff994ee7618c481cab73394f38b4d369119b6cc5210ef5d884957aea80a0bd43a71acbcc5230e8aad2ae2caf507893444890d07ba06e8007e0f77975206faa919b5b3d87e875fe05e7c6d2fe27bc5edaa16268d4a99b5b5f1b8601fdfa8fc39f2df6eaffe2748f718440f5ed5a87ce25846e9a4ce38d7ce5c636dcd828ee82c50060edd8d86d3124742c59a9210d7aadaeaae35143ea96093988d360a4863166814b06f7fe9163cc55df224155201098ef3f15d89a8ac85ea19788901221a438d2fde14095f23410410e6237d3a1b95597f41b205307a30c7cc548a32c03221c5d89b1249034072ce76d316671226bed809119772a40bf194878eddaec19e808705b1059c01a2fc5ea9b966012fbf4e40d708c0f2d26ea60ecec1951b2ef14f6bfd8c719cb93971a3532db4c4b1122deb1ba8062b83f6dd94110f9ea0b2eecb1941f09360fe7d954fbe3207e83d03996dba144c9de912a7603fb49f4dbb4400661382b41ec637f734989be450fbf99ce7c18086400ea1974b4b6c95168007aa8cd4d60409700e57125fd236eb4afbc9f594d9407416fe1ca09f48c2ab1b50913a4366a5d26fb3fd76bf9aeea6edfdb765ca03c04fc31184b260a2a993020c968ed0f90b574571444561e26694eff8a0839b4947e68c5ac141b92e0052271ed45dbee0b36fce784a11f4ce44a97b0f55c3703771cc721ec345d3318d1150cf81c783113acba6d48aa75b9ca932f39dfbf0c3e3e2fc8ed44cc0fcff1b83ffaeac972354b654b38c44bd63f8738c66f0bc7a458115ad7d6c3fd06fe0134d05e8369b5b26970ffe8944189fff703d1ec2f775ab515f452db6019cc1bf8ce1454b256d70068f91c83513010f204dad7a2aa7870d95f11c1f7dffc6407c9104863e970e80e5415bc47f9f0ed281346020970e3128781eafc99d7a575db7b9174306f037a8bc32879093a37b6b13b6fd21c02c2644c1c4e6a4dd8d43ab3660dd128d6579d9387924828744a97011fd369ad83b49cecd0cc62d62e629cadd3e9539a25e7a4978dfb519a671a429699d665a696e534986d0eae5594ac5b2ec1a71022daf6659794026d367c740a65b6e6f2b12d0615c86b50253bacfaa88fadc2a10f74fe1986f9b13ea6f4600384ef70d60f0cb768441853375faf1e9ae83a7f7e9d83d7f6c69e9a68054e292a47464e48104c28fe3ea98a1325913416d2dec5157b1991a99392a570629f14e1bfeb04d3f184af355c98496782fb3c58a989bb65fd883af62bd25fbc613864ce5ed3f5698f4652cb0e0c5220ddc45e6432c0aac7bc955b1db4dacbd564480fce458d46722a0f48e45175135e2f2b14817435fd1858b4016754d1ab24847fd228bae0292457d990174a864d19551c6519345ba68e9a6532cea2ce1b148070d52165df84c6551b7b8b248572eb2e83432629a65519fae81022e8b0e11f2697569680bb34887c0bb439d50d1058d473a6616dde230e245b3481b0c8a8859b3e822c8368b3a1c9c453ac6d0edcb59d4e122cc22adc10305ee25aacc51ceab20b72f5165467b4225a94da9aa599a932ae4ad6272db76f2a527a97f7db3a03bc7709fbf15a5da61def765ed21d8ae425a1b2b440c1520725b94f8bd1949539a6895df5bbbe44b2f1416f0424333c5c1bee80563494367031d9e2a6f4e618ebcb4748228e5b4e20ca8ba1593e34503f53f29be153352d05f2b24febabbe006e8ff9321eb26f9a8c9b635537568a875fc69e33db3b75fa2f9788e4e3a950eb4d39f1b07c446343d638f8675455e3ca5658448adb5e8ce8645c81772ca3925263768269581c098c1a8ce3cca51fe58a5fc5f0bfb6788d41b953adb31aeae173f33197b4b0e3cf1adf364d29ead8a3db691bc3873cd03294291e86ac28e7856674555e8a101b0be0fad1ffd62808aebfcab40d9677fe4c856fb17850d24445ceafcf902aec12462f1e1804056134817bf0f890d241b3104e9b03e573425253d6ec7cfcec8edecc27547fa4528b069afb292a810115b7e761a00372ef468be127c6b58a61180942d77638ad21fe4949c11838ab797806cce7de925b27049ef2970dc0f587242776434dc6cfa240e6b4baca99ae54f95a1ead930c1978fe39e9ae3c4c5294e985d7998a2928c807041134e37235348b212245569cce863ed09916b42850a6c7bd9385a81d22ad9dca94d9c6ee66c53279b9d46924a4b4613634b885411585461dacac5d10c94abc04ed2597499197ae0631920436a9b266e470ec0301164427d9089d5c90a9a620615d09df272fa38238508b172b20bd6462e9e6029234258d480a5cbcd10e4e892709955cbb2b801b36d32da10c9b627b67f5c5bcbda47d5b6a2b62462967886a86c12ec13b2e1354465c962989409a3299a5506e34476286db1ec32589332c069476791c298950d522b268b04e3844c30ad1119a558a664c26a89cc90c734270b5e4b2ca304b6b9cc309a2259e5d8382593c2123d0632e339d23943731473d6725cc38b869278014cd3f410ec5aa1de67f6ddd37b796eb180e95184f9eae5bb1491e471eb33125e790dfc7b4867bf060ecffdbdda42ae9d4b56e7c8fadbc3120cf61597a0d64d1b8a2d1328b13050a5f56ce785813f0595d54264b341457596605bd4ee93503ec9cfcf65e61d85e75078de37dbe233caa75358b00d6216495244945b31f30e9224994364ad4b85b2710678fa9bd158b8604e793c6eaedde7894e2a9b8709210fbe99128bd76ac705116000cd45014f5c938ec8f917473f49c09920c4eff31c1ca46377d87446bc6b1601a97956182475238a87728b663a4899c4965d1ad654d786fee2df84251cf9a7f4e6a9ee6789892a134b06bd5628b531044fd8822936c4f542720b6a3d974c0b854455cdadbea31656cba5b8b9c24e88ded751032548c277c525ce9d1bcd1766f7fd2371110282f581f95d22157a86e3be2320a5a819e64f6ffe69eb3a6deddacbfeb3631399b0f0712d5eb89ce584b5e9177a2bc3da31fc2f2c885326e930095d0891971ae662f611155350e9c6419e65b0a53bcd355dc2ab50d4fef5788eff0736e1aaec5bacd3aab2067004cbb34463e02c0a927dd8648f80c618b6da09993f730ef03cebec1452ec0414631e5da2f95fdac1f5f48d4f5b7b6a4c964e3ae7e9ad9510ba44953935a9be5223dadac266d5e42baffe61be21782a5c804ffd38818ebdb4cb3639f91b5aaa6dfacd06f98281c20efaa566d6baf8955027fbf68d96b050b40e2c54be25a15e1d17e59263c08af70db7157dcc1a00a897a79c88e66bc857fbdc61e01a74ddb106750830101b1bebe953141f85a735a5b9175aa470ff6e5b6f17ad7cf8a61c59d8aadfd5dc4eb4fc673e3501336e41f325c01d9272cad09f1e1347846a0f777864ff19ae14c2a1fc97698b83b1cfc537c003851dfec1decd4f2b5083e4f53a410613220eecb3b48dd6d22622a5b73bcb700247b79f104b8625ada4f60f07f0a95c52c27c9c5c6176f7c7c813adbf286dc204e5ace19920dd31311d417959be09921501f36a487b62662fa0efa9baa773cfc60e06f479e1aff5a9fe58c9eef9316a9c16abdeb44c854179119dbaeb8180631207bd5ccfc4ce62b8464089dc4789772e11ddf4d830d820fb208294014db5692ef7ec16f7ac1ff302fa043491c81d01f99a46fe18d608c9a11283e2bc0dac47e97100b1dd82d154346102261003f63cbe938cf48a8ecef28ee823479b8bd067f09e6ca9071dfed251e597a845ea40c298df402642841d3acbfbeea3795187770aeb04edbaebc1e3323bbd54686cd67bd9dc7289bb2285f3d16f4944819385ec0c9447be931270fb4810cc7815e83a1f484271398eff81db468c8d98bf0fb1ab7dec24ff2feca8436a36a1aa8b840658248acd4e6b96c7cd11a8ab5abbb75190afbb9a2b944912d9dc515d9f07c6c51c81bfed286d758bc1b99bd5c002012f10d64b5a16c3e097a39820e0ce76816935c60bc0f1e77fe471e5ec096d1867edd567afa107d6f82670bbd4a4ccc2b8df8326fab4745c1b8111b31d9640cc622654c10e2422a65eb2f5359a5fa1e14a3ddab69ccc0e08777ee7da3d7d0aa7ca67fb56ee4d0113083e8d403dcbfd3ed0988513f75b05b0d409dc3045269a766154b3fb9ead202618c8ebaa9625a76fabd05d46738d01101a010a498a951464bd98e677341948481364ef4ba732bf090578539fd2a436f28cc8cdcb0273c5694dc4ea667711ef6142a07b22cb7859498f0ceeaf1d2e749153436c6fbeda564911b596003a58bd363870b0a490033ccff33ccff33ccff33ccff34b8dbf657df39d597f112993791ba58cee81f76a00cf947645ca9132dd9475a0548645705c109f30032f034303fc46b8094dfc3ef2e5703ef70435a1eb7c4d083fe93eca819950777294838924127a1f26b46b1dcf418e3323c777093dc895245bbb5b5ef82ca157f6c80a2955b2987395d0bf6336cf1323db9e47096523327c2ef1f8197393d045def54772eaac99938492d581be472612ca55f5d886e78fb77290503edc6dcb78a724b17b841a2763360749539b3a4768ddf1113b2edd8fa46b84f6957d11728aca193946a811e3c5e40f1d4ece718bd0627e9d8b29c9f41da7083556f8b8263aaa973f11ba54bc8766858cf488d0c334393a07ad50b71f427deb38ca18b2cf03dd10ba58e89cee75e5471742f1a071c2926796e61042abf032251dfc69ca19849a213da173a7098f2308edce37644e192a7f6c2094f4d1999703428b49e33d550c1ed57f50dee330893dfeb1947ed063f630398af072f6f541cfd9dd420addb1c4183ee81f877596915926637b503b0e7343da2cd29ed2836e16d3697ec9e4a11f97b79010193ce8c1e59079824bb29e983b28b1394e1e6d37b1dd0ebae5f358bd79d2a6b90ea5defe28c383e9a0c869909424ab37df39684942f95ebc450efa75fbe45cf3d9c62d7150a6fcc683096f93ce02073d388f45cc926fd02d53cc9c32c5e6886e503c4e21a52ce6fa41b00dba74ba8b137fd2e78f0d9ab5e58f038f6e89dd1af410a24cdbb3479e376a504b527eb7fe0b934d1ad4d81edc3dc7710cd1a0410927a3d331cb4659cea0e64906abf6d60b9719f48f4f793feb77632a65d0a6428e2ee6729c1b1532e829dfdd4e87943f0e52c6a0e55ee630846aa9fd2862d0a31c473f68e9878887419d8ecd14c3656b488341ab710f3dbd213f9cbfa0c54919b3a36aeb388e17b4184354e6e8e358ffeb821af67a3c988f0b7a0cfab14f7aefd8bb2d2895ff15192a5cf24e0b9a25c91672ba83764d16d418f30d6231c3821a43c55fce8be46dd915341bafb82925f30e5266056d3f7667cc7d694f5605edab4e6662f6fd4246053f8c6fa1752153d0476286b7bbef775250dcc3fa5c21e4c9d06151d0e23b3445f209a7414137cdd339775546c83f417f8f99ab31cd227127a891c62b45c82e12ef262839081dc72131738b4c50be82848fb2b7103b4b50bb42f817b9c917924ad046723c5eb4ff359c11cf6dd0ce3dbbfc7fd0e037b3414d96c3dbcdd329af790d9a6d8520d3e2152fcd6ad03a4ebbfa7ce24fe634283729c761ded1e70a331af4d41272ca97f86c493e83d67e1de6866806257f94c9269f6dd85c193449493a3ef39c736ec8a0c5ef683607d924b132062d2ed9bc65e7a0b989418f36e7e85f3448ca1687410fdff4a6225c6f8e6230681db7bb7e98724c47fc05cd259f26df20193184bda09f45d2dafdf1c91ddc05fd32d7ded6077931e782fa7a29e538c7f330e62d286617412e87bdf2b016d4b20e294af4f3857016d4998a2163c77d9b5f2ce89de1ef7b77e1d75e410f4cd346cd89b9c75a41ef3cef49f72a47215305bdc23d844e7a7539e55041cbabfefb3827f3ac9d29a89fa5e3ff8fdd2e4f8e14d4af4e1bd7339a313951d0e2ce475a9ec63cea3850d03244b3df557bcafd13f49e98ef61e7bf5a77826639a836c961fc8fe726e869663c72fc2adc87094aee9cc82984c9917c96a0cca5b89c1523973a4ad0a4a4c3f7b4fd39c424283132c60ffb2141e9168d1c3ee733774750f33ce50c6e11123a23e8b7d1799b2c4db84c1114ffed3074f2ce9014226876d6e1d1663b044dc34f3a97dc614ea91582de5de1a1cb3676983608fa250f99abc4433c6481a047271641f2848fe7d81fe856b9c9dd8320fd1deb032d57fa10d37f0f9454e126d9b3d965e6815ee37357af4173bd03a5e31c3ccef1ecf6ea40f71c218e569cdacbc981d6e6514efbf2f11e1c681f9ddde3a6dc9adc1be8de2995fd2429b7d206baa68cf4611a910f823550db247534b341cba7816edf93c923c33a3d032dfa2b8ee6e0711c4f066a696d9f57762edfc440dd48de71143fa8d80a0c944ec1c4524ebd7881f639a5501b473379d40b1728b92d87860f526d8c5aa18c64bdfe302a874e92154aeaaf9cff3bbce98e5c853665c9433cdf8ff657859ee3d94bfdb1e410a742dbfee810311db772542872e1398c919f420ba12656ce9c23f1d914ca4685103f7db014bae6603f974cfc8b0f92428fcc173d5a392a3e380ab53c0e43f2a41b36e7a028f4d3cccfd8618e83f06028d49cca66ef4b0485163fb69855ba9583123fa1668c914c913e75d8a127ba1673b7b90d7642ab891f47b111173c424ea89722cf5d5b0ab45b86d566e81b3ad0e4ae62ba8def914fc71b39d045c472a49b298b0d1ce861985031c4ae36b7eb06ea97476c59c7e6259f0e6cd840cb269113c9b2873d7a60a3064721d91da50a29245288afeff61d4b92656678165990400b33a30617a5820d1a68b5f9f72bb7e5ac33bb060d185cd0b01935b8d89881b6791a34270f948112b639c71fd4f4a4fb3662a05fd6ea1c3ab23fff305bd880816ee93eb5e5da0ec3e317689ebb66cc621b2e502a576ca9f47adf137ad10aad92270d572137a1c917acd062dee53098e7f07dfd2ab41c5c5d4768872ad4983ff6844c163f0a2d15da48f86415ea6208d5f18117a8503a62e728fd454690fc2994ecc9c392d4fb3d759a427fff7cebf81996c5d3c08b52585dd219a4831c57cc9132d27ee82cf19617a45037c79178f00f33ff3e0a45b6e3934b69b4771785561fa5cc2153e7a97828d4cc88987c5f24c80c0a3d3b464839559ae09f4fa81773caf012b7e2793ca19e7e88b2cbf881bc9d50e3f3c4650d5fda2d27f4744127e34cf743bb096d42ef57f9f89ad0a33748ce25dd59e36742b3895966620cbfec3d2694ec6c1f7c49a6499bbf8496c376c8d9a93bfecc5b4291ce5c1f37e62ba17fb8d39d792724c43c2594b928f7101fe704e927a17d98f51b42c735c9e325a1c69cb93ea4dc11168f84de1fc8fe851c99f6868456562fef5929a6147e845eef1e4ccc91c71fc48ed0aadf5396b8179a831ba17c900db1119324fb30422dcdb9f9fd926e768b50ce73b039ccce57768ad0df3744329b94bf6212a1a52fe938364d12b4820875525dca779df3ac7208dd23e9b718e43b7c1443e8f93e2ab2658550cb2fce878ecdeb2b42287ef1292ac7b293d120f4ef201a6f429c1c2d083d5e9cfb0adbf11612082d58476dfd11078416fe91594447637ff81f9498ba3af8ec7e503b4e3af5697ed3e47dd02494c54cfe31dbd57c506f3ae5d80dbe1fcb7b5052497f4899e2c7f7e84199d3d1a88f1742c7e641fffe0b12d2d9785092eb84dccaf9fec8be839a41da7e3fd8765082e57b08bffc9d9bae831ab74b72946eab92a6e9a06547fde9fccc83cbf41cf4c8c3efc0c27848582d073dac7476ef95c343aae3a0661ecf317ecc7936d270503a6c9394a52c7d07e93768933ff07a0916da39da0d7adc90bc2ec2dc2a013550e0576c91450c1a0890000d2df690408b2cae700548400034fcb7860226008008d471451e57141dd400083420055ad410411631b6b8e2c0c20e0bf200ae41a38b190508400ace150900400d1a5d70800001f02cb68b2cb6582d1020001a33fc450768c4e0621310801f98022a00001a340e160410c0d6d8c6a20001d81adb249881c50100300006bc98e13046c05b83060c180a0040001670808a5163860868680103c68b0d3ca4800bbe430da76187036cd4810b192cc3651860830edae7891f6cb5c51ccb850c9e83f6651734ff7794dd2739683f16739e74b9a5d264b88c331b71d02665fc788f22779c73111c4901172cc36518192ea36cc0a160c040c0c61b2a460d2d44406361c078b1e1868a51c30431ba0b18305e6cb4410b1d87c90f12f12ac588e09048174464f80c182688d130dad9b9a091a4c616318ac616316a6811a38b0363c61136e84166d278a1fedfba820516b9b106bd2bc779b8ad249dcc73011a2dd85083ded9c7dd6c443b324b1aaaca515748086111444307217e243fd5f5e7d91d0d4aa8f41de74c6592e4e61036cea026cf3eb2edc9f4bfc38519748f25f4de639bbce46d944133addce3f14b538ae4061934b78ada5c31633a8cc7a0e59a9c9936240f2ce40d31a091c314630c2183858cc94a3bceefbaa0e17ab38d30a85517c3f38d76021258000b2c30061b60c872ccff68a6e3ca8d2f14c9ab8308d3902a4885aac83c77296b1b5e50f6e32873b7ff5ef98c1b00018c2e36baa04bf071eb92299dc86d7041b7894cf1b3e6491d3b0a6c6c418db7ca29b6e596810d2d681d720ef2f6cb33c76716f4282ac6ec40f36abfc4827ede69ee25c455baed0aea6fa4ec22493675e5b0823e412b7f2e677c69bc0acac8d44408135e3bd2840a4a8838b126858a184d7161630a7a6a8fd41e2ac74d67e51836a4a05de69cbfdc2f4ddc4914148f13317210714f9ae9c20614d4b88ebe32f9840f375bc4383248c044cc07369ea0e6b399904133e59462a4860d27e81fd678db8fb4d1043547e27bd89237449e67281658ec0c8fb1c104ad2ba5b93439a127572d41f79c3a376597cc209e12b474fed9f1e6c8e6c04f8212d9a5cc528a9ff3cf0d24685e13935d47af396f672bd838827e19c4b5ec3a8c731a166c1841bd8df815da770d1a0ec0000768a3088a47ed95db1e36cf6434a30617b941042dff45c76f7933d6575a083686a086d64c39963a85a0e6798ff36bce1342cf41d0bf73749b973432fbdd0082963b46b01c26d559d00d11367ea04e9bc6646fa2b9c4eea204be5d94400f1f682d16a642a6984c331b3d504e37bc7918492cb87e6cf040cd3379639088f4f93e1cc81da811e60b8218a8123a86812086611084411004a1f32ca431820b1204a1380e6308114ab5071240f0200ac3208681100482180441100441100421400810020441081004816bda91796edefa0da320aebebc2fca5dd36cb83c7088fcf8a008e218b91613b1415d44b0d9453b7c813e5b2ba28b22ac4dc903d601fa133b1f56470ca5618d315dd1338a6c6f6b1d4f07a1bdd98a5c15be277b87349de081d1a6b7249003a73632157698fd8ce4b612948360deabae743a2f8ec0c5957f79172794c43214123227318b2bf18c66f4ed30e0b28d39a268a814387665d30d4a04d4015fa7c4db2722ae6de4754a0a19fc668fce53abaeca8a2f73315672d76b4cad6afb3d6a2cd1d1e4cdd6e8325d8c60f39ae342682087796b40b4cecc983bc867a1ad40a2b26064cf4d516befe1e1c5d127917e2f4328f270791574d4802822608f592f3c9b5a6de10f73afd9ad659a507dae1e907845b1728324172320f8927cd18ce274be14725f01213e3ac336ea730fb4cef4dc22b7e27b30241d516ad933408095a7174bc76a9c38ba82239b7a72d3ae4c21f5816b680d5e38816e38caa8fccceff6501c140196a7ac20c21d079e54429f04151774be781dcf92913cd487bff2313a6d42dbdab63939f33d10272ec1cada69470660232544086aa58824578213b944906b263eb52954131018089a64b695f8e532c43e1e30965edc1b81364e022f7424310e4f22a31438bf3a83d715d462631ea62a984acc982ad16a0d053aacf26288190cb383da3130237af9783889669a6bd655a81ee940af4c41cd9a76e8e30571eb72f93e4e37659c51b1c4f4a563f4733074f303eb7d33966f4c5f27a7bbfd0a48178c663cb233844cac92212de306f1c48556251b5e238b12025360c08bb3529c47f75e8fbcc984de482b59cfa9f2e59640d3d7be52aab2024a2c89181df68869baae8df72c7483c218c50d50be0406fdf683404440cab8506783c0f41592764426e24a19395e6e910c7d252c59fa96052c2f6a06ecb7ce6aff364a6f6f53ad881c8283946a68b4bfde25ef9ba6e9b80f9dda6f53553d857b1bda30019fe418387b46bdd63a770edf4061ea21c1e1ca93d826bc5f355470363ca8165db2ac13ed9f9a482be70a030a00079b6ed911f823c88eba1fff12d1d8ffdd0b84c1982582840fcb5c37e85ba31aa0be91eec430e0c7040caced753c80a6e120c4868444bbf238c3ca287b80c68c43b3e5cd5a5676e65b69b1bf436a692f2243dd010e3aa6f40e0cb5985fe07610f9452b3be6e83e778887090c32476e3749b443924a733df22ceb027fe21454c3387772fa95a3ab6b57b767468b049d409a382d9a25cd6184ec8c47404ab2f4e9db5777571dbdb97979f53a73664b0b5a4a17572db3521651dd15ce25caaa558aa30ee2d5b9436feed62c02ad2c3903318be6b0bdc905458e2435154dead4c9511227444a4c3ca90255e15e3608c5d30737eead5143444bb9fef22b4757879d3d30424a9208fd8aab570fafbebbc99a59b5f448bc1337ae6eaaadb529282f8136f954b4b41ea9bc5281adf9b035cccc56d22f1f6e8694ecec29c814d2e4d76a3444b4a2ac6193cbb688fe98c460878a99c992e89ba0272294e62516d2d2fc3ea34cb028b3c743227aa969a8a525a19d10295143bac0a94230b4a2953005355acac5ef5f5cbb7675eccd719ad157abd1b2e24d7d717df3adcf14e23386fb953e4ad6113652ad76cf163167b4b5d9b5376c83c89aba14090e2195512d06ebdda1470e0f8f9e7d74d59e8232b25557ef2f5cfbed63cbf95ff6d2dd4dedcc0acf050ca6a687887611443f6b24406c1050917175cd5ed22bb7b5fecc06", + "0x3a65787472696e7369635f696e646578": "0x00000000", + "0x3a6772616e6470615f617574686f726974696573": "0x0108a51656d754113cd094458aa2944894e10fdce1808eaf5375f7be2c643bcd98c40100000000000000a9179bb73e538cd9229666f27f8d02acae88f38eff751f8c8447862c9134c85c0100000000000000", + "0x3f1467a096bcd71a5b6a0c8155e20810308ce9615de0775a82f8a94dc3d285a1": "0x01", + "0x3f1467a096bcd71a5b6a0c8155e208103f2edf3bdf381debe331ab7446addfdc": "0x000064a7b3b6e00d0000000000000000", + "0x3f1467a096bcd71a5b6a0c8155e208104e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x57f8dc2f5ab09467896f47300f0424384e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x57f8dc2f5ab09467896f47300f0424385e0621c4869aa60c02be9adcc98a0d1d": "0x08a51656d754113cd094458aa2944894e10fdce1808eaf5375f7be2c643bcd98c4a0b213eeaedf316a7487d6fbb79ca44d580e5f7277b343d2d317c74662fbb554", + "0x5c0d1176a568c1f92944340dbfed9e9c4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x5c0d1176a568c1f92944340dbfed9e9c530ebca703c85910e7164cb7d1c9e47b": "0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d", + "0x5f9cc45b7a00c5899361e1c6099678dc4e7b9012096b41c4eb3aaf947f6ea429": "0x0400", + "0x5f9cc45b7a00c5899361e1c6099678dc8a2d09463effcc78a22d75b9cb87dffc": "0x0000000000000000", + "0x5f9cc45b7a00c5899361e1c6099678dcd47cb8f5328af743ddfb361e7180e7fcbb1bdbcacd6ac9340000000000000000": "0x00000000", + "0xc2261276cc9d1f8598ea4b6a74b15c2f4e7b9012096b41c4eb3aaf947f6ea429": "0x0100", + "0xc2261276cc9d1f8598ea4b6a74b15c2f57c875e4cff74148e4628f264b974c80": "0x00000000000000c00000000000000000", + "0xf0c365c3cf59d671eb72da0e7a4113c44e7b9012096b41c4eb3aaf947f6ea429": "0x0000" + }, + "childrenDefault": {} + } + } +} \ No newline at end of file diff --git a/docs/rust-setup.md b/docs/rust-setup.md new file mode 100644 index 0000000..2755966 --- /dev/null +++ b/docs/rust-setup.md @@ -0,0 +1,225 @@ +--- +title: Installation +--- + +This guide is for reference only, please check the latest information on getting starting with Substrate +[here](https://docs.substrate.io/main-docs/install/). + +This page will guide you through the **2 steps** needed to prepare a computer for **Substrate** development. +Since Substrate is built with [the Rust programming language](https://www.rust-lang.org/), the first +thing you will need to do is prepare the computer for Rust development - these steps will vary based +on the computer's operating system. Once Rust is configured, you will use its toolchains to interact +with Rust projects; the commands for Rust's toolchains will be the same for all supported, +Unix-based operating systems. + +## Build dependencies + +Substrate development is easiest on Unix-based operating systems like macOS or Linux. The examples +in the [Substrate Docs](https://docs.substrate.io) use Unix-style terminals to demonstrate how to +interact with Substrate from the command line. + +### Ubuntu/Debian + +Use a terminal shell to execute the following commands: + +```bash +sudo apt update +# May prompt for location information +sudo apt install -y git clang curl libssl-dev llvm libudev-dev +``` + +### Arch Linux + +Run these commands from a terminal: + +```bash +pacman -Syu --needed --noconfirm curl git clang +``` + +### Fedora + +Run these commands from a terminal: + +```bash +sudo dnf update +sudo dnf install clang curl git openssl-devel +``` + +### OpenSUSE + +Run these commands from a terminal: + +```bash +sudo zypper install clang curl git openssl-devel llvm-devel libudev-devel +``` + +### macOS + +> **Apple M1 ARM** +> If you have an Apple M1 ARM system on a chip, make sure that you have Apple Rosetta 2 +> installed through `softwareupdate --install-rosetta`. This is only needed to run the +> `protoc` tool during the build. The build itself and the target binaries would remain native. + +Open the Terminal application and execute the following commands: + +```bash +# Install Homebrew if necessary https://brew.sh/ +/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)" + +# Make sure Homebrew is up-to-date, install openssl +brew update +brew install openssl +``` + +### Windows + +**_PLEASE NOTE:_** Native Windows development of Substrate is _not_ very well supported! It is _highly_ +recommend to use [Windows Subsystem Linux](https://docs.microsoft.com/en-us/windows/wsl/install-win10) +(WSL) and follow the instructions for [Ubuntu/Debian](#ubuntudebian). +Please refer to the separate +[guide for native Windows development](https://docs.substrate.io/main-docs/install/windows/). + +## Rust developer environment + +This guide uses installer and the `rustup` tool to manage the Rust toolchain. +First install and configure `rustup`: + +```bash +# Install +curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh +# Configure +source ~/.cargo/env +``` + +Configure the Rust toolchain to default to the latest stable version, add nightly and the nightly wasm target: + +```bash +rustup default stable +rustup update +rustup update nightly +rustup target add wasm32-unknown-unknown --toolchain nightly +``` + +## Test your set-up + +Now the best way to ensure that you have successfully prepared a computer for Substrate +development is to follow the steps in [our first Substrate tutorial](https://docs.substrate.io/tutorials/v3/create-your-first-substrate-chain/). + +## Troubleshooting Substrate builds + +Sometimes you can't get the Substrate node template +to compile out of the box. Here are some tips to help you work through that. + +### Rust configuration check + +To see what Rust toolchain you are presently using, run: + +```bash +rustup show +``` + +This will show something like this (Ubuntu example) output: + +```text +Default host: x86_64-unknown-linux-gnu +rustup home: /home/user/.rustup + +installed toolchains +-------------------- + +stable-x86_64-unknown-linux-gnu (default) +nightly-2020-10-06-x86_64-unknown-linux-gnu +nightly-x86_64-unknown-linux-gnu + +installed targets for active toolchain +-------------------------------------- + +wasm32-unknown-unknown +x86_64-unknown-linux-gnu + +active toolchain +---------------- + +stable-x86_64-unknown-linux-gnu (default) +rustc 1.50.0 (cb75ad5db 2021-02-10) +``` + +As you can see above, the default toolchain is stable, and the +`nightly-x86_64-unknown-linux-gnu` toolchain as well as its `wasm32-unknown-unknown` target is installed. +You also see that `nightly-2020-10-06-x86_64-unknown-linux-gnu` is installed, but is not used unless explicitly defined as illustrated in the [specify your nightly version](#specifying-nightly-version) +section. + +### WebAssembly compilation + +Substrate uses [WebAssembly](https://webassembly.org) (Wasm) to produce portable blockchain +runtimes. You will need to configure your Rust compiler to use +[`nightly` builds](https://doc.rust-lang.org/book/appendix-07-nightly-rust.html) to allow you to +compile Substrate runtime code to the Wasm target. + +> There are upstream issues in Rust that need to be resolved before all of Substrate can use the stable Rust toolchain. +> [This is our tracking issue](https://github.com/paritytech/substrate/issues/1252) if you're curious as to why and how this will be resolved. + +#### Latest nightly for Substrate `master` + +Developers who are building Substrate _itself_ should always use the latest bug-free versions of +Rust stable and nightly. This is because the Substrate codebase follows the tip of Rust nightly, +which means that changes in Substrate often depend on upstream changes in the Rust nightly compiler. +To ensure your Rust compiler is always up to date, you should run: + +```bash +rustup update +rustup update nightly +rustup target add wasm32-unknown-unknown --toolchain nightly +``` + +> NOTE: It may be necessary to occasionally rerun `rustup update` if a change in the upstream Substrate +> codebase depends on a new feature of the Rust compiler. When you do this, both your nightly +> and stable toolchains will be pulled to the most recent release, and for nightly, it is +> generally _not_ expected to compile WASM without error (although it very often does). +> Be sure to [specify your nightly version](#specifying-nightly-version) if you get WASM build errors +> from `rustup` and [downgrade nightly as needed](#downgrading-rust-nightly). + +#### Rust nightly toolchain + +If you want to guarantee that your build works on your computer as you update Rust and other +dependencies, you should use a specific Rust nightly version that is known to be +compatible with the version of Substrate they are using; this version will vary from project to +project and different projects may use different mechanisms to communicate this version to +developers. For instance, the Polkadot client specifies this information in its +[release notes](https://github.com/paritytech/polkadot/releases). + +```bash +# Specify the specific nightly toolchain in the date below: +rustup install nightly- +``` + +#### Wasm toolchain + +Now, configure the nightly version to work with the Wasm compilation target: + +```bash +rustup target add wasm32-unknown-unknown --toolchain nightly- +``` + +### Specifying nightly version + +Use the `WASM_BUILD_TOOLCHAIN` environment variable to specify the Rust nightly version a Substrate +project should use for Wasm compilation: + +```bash +WASM_BUILD_TOOLCHAIN=nightly- cargo build --release +``` + +> Note that this only builds _the runtime_ with the specified nightly. The rest of project will be +> compiled with **your default toolchain**, i.e. the latest installed stable toolchain. + +### Downgrading Rust nightly + +If your computer is configured to use the latest Rust nightly and you would like to downgrade to a +specific nightly version, follow these steps: + +```bash +rustup uninstall nightly +rustup install nightly- +rustup target add wasm32-unknown-unknown --toolchain nightly- +``` diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..60819f6 --- /dev/null +++ b/flake.lock @@ -0,0 +1,43 @@ +{ + "nodes": { + "flake-utils": { + "locked": { + "lastModified": 1678901627, + "narHash": "sha256-U02riOqrKKzwjsxc/400XnElV+UtPUQWpANPlyazjH0=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "93a2b84fc4b70d9e089d029deacc3583435c2ed6", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1679262748, + "narHash": "sha256-DQCrrAFrkxijC6haUzOC5ZoFqpcv/tg2WxnyW3np1Cc=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "60c1d71f2ba4c80178ec84523c2ca0801522e0a6", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "flake-utils": "flake-utils", + "nixpkgs": "nixpkgs" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..428efd0 --- /dev/null +++ b/flake.nix @@ -0,0 +1,22 @@ +{ + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; + flake-utils.url = "github:numtide/flake-utils"; + }; + + outputs = { self, nixpkgs, flake-utils, ... }: flake-utils.lib.eachDefaultSystem (system: + let + pkgs = import nixpkgs { inherit system; }; + in + { + devShells.default = pkgs.mkShell { + packages = with pkgs; [ + rustup + clang + protobuf + ]; + + LIBCLANG_PATH = "${pkgs.libclang.lib}/lib"; + }; + }); +} diff --git a/node/Cargo.toml b/node/Cargo.toml new file mode 100644 index 0000000..01ff221 --- /dev/null +++ b/node/Cargo.toml @@ -0,0 +1,80 @@ +[package] +name = "node-template" +version = "4.0.0-dev" +description = "A fresh FRAME-based Substrate node, ready for hacking." +authors = ["Substrate DevHub "] +homepage = "https://substrate.io/" +edition = "2021" +license = "MIT-0" +publish = false +repository = "https://github.com/substrate-developer-hub/substrate-node-template/" +build = "build.rs" + +[package.metadata.docs.rs] +targets = ["x86_64-unknown-linux-gnu"] + +[[bin]] +name = "node-template" + +[dependencies] +clap = { version = "4.4.2", features = ["derive"] } +futures = { version = "0.3.21", features = ["thread-pool"]} + +sc-cli = { version = "0.10.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } +sp-core = { version = "21.0.0", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } +sc-executor = { version = "0.10.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } +sc-network = { version = "0.10.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } +sc-service = { version = "0.10.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } +sc-telemetry = { version = "4.0.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } +sc-transaction-pool = { version = "4.0.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } +sc-transaction-pool-api = { version = "4.0.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } +sc-offchain = { version = "4.0.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } +sc-statement-store = { version = "4.0.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } +sc-consensus-aura = { version = "0.10.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } +sp-consensus-aura = { version = "0.10.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } +sc-consensus = { version = "0.10.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } +sc-consensus-grandpa = { version = "0.10.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } +sp-consensus-grandpa = { version = "4.0.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } +sc-client-api = { version = "4.0.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } +sp-runtime = { version = "24.0.0", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } +sp-io = { version = "23.0.0", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } +sp-timestamp = { version = "4.0.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } +sp-inherents = { version = "4.0.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } +sp-keyring = { version = "24.0.0", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } +frame-system = { version = "4.0.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } +pallet-transaction-payment = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } + +# These dependencies are used for the node template's RPCs +jsonrpsee = { version = "0.16.2", features = ["server"] } +sp-api = { version = "4.0.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } +sc-rpc-api = { version = "0.10.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } +sp-blockchain = { version = "4.0.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } +sp-block-builder = { version = "4.0.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } +sc-basic-authorship = { version = "0.10.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } +substrate-frame-rpc-system = { version = "4.0.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } +pallet-transaction-payment-rpc = { version = "4.0.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } + +# These dependencies are used for runtime benchmarking +frame-benchmarking = { version = "4.0.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } +frame-benchmarking-cli = { version = "4.0.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } + +# Local Dependencies +node-template-runtime = { version = "4.0.0-dev", path = "../runtime" } + +# CLI-specific dependencies +try-runtime-cli = { version = "0.10.0-dev", optional = true, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } + +[build-dependencies] +substrate-build-script-utils = { version = "3.0.0", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } + +[features] +default = [] +# Dependencies that are only required if runtime benchmarking should be build. +runtime-benchmarks = [ + "node-template-runtime/runtime-benchmarks", + "frame-benchmarking/runtime-benchmarks", + "frame-benchmarking-cli/runtime-benchmarks", +] +# Enable features that allow the runtime to be tried and debugged. Name might be subject to change +# in the near future. +try-runtime = ["node-template-runtime/try-runtime", "try-runtime-cli/try-runtime"] diff --git a/node/build.rs b/node/build.rs new file mode 100644 index 0000000..e3bfe31 --- /dev/null +++ b/node/build.rs @@ -0,0 +1,7 @@ +use substrate_build_script_utils::{generate_cargo_keys, rerun_if_git_head_changed}; + +fn main() { + generate_cargo_keys(); + + rerun_if_git_head_changed(); +} diff --git a/node/src/benchmarking.rs b/node/src/benchmarking.rs new file mode 100644 index 0000000..6e29ad1 --- /dev/null +++ b/node/src/benchmarking.rs @@ -0,0 +1,161 @@ +//! Setup code for [`super::command`] which would otherwise bloat that module. +//! +//! Should only be used for benchmarking as it may break in other contexts. + +use crate::service::FullClient; + +use node_template_runtime as runtime; +use runtime::{AccountId, Balance, BalancesCall, SystemCall}; +use sc_cli::Result; +use sc_client_api::BlockBackend; +use sp_core::{Encode, Pair}; +use sp_inherents::{InherentData, InherentDataProvider}; +use sp_keyring::Sr25519Keyring; +use sp_runtime::{OpaqueExtrinsic, SaturatedConversion}; + +use std::{sync::Arc, time::Duration}; + +/// Generates extrinsics for the `benchmark overhead` command. +/// +/// Note: Should only be used for benchmarking. +pub struct RemarkBuilder { + client: Arc, +} + +impl RemarkBuilder { + /// Creates a new [`Self`] from the given client. + pub fn new(client: Arc) -> Self { + Self { client } + } +} + +impl frame_benchmarking_cli::ExtrinsicBuilder for RemarkBuilder { + fn pallet(&self) -> &str { + "system" + } + + fn extrinsic(&self) -> &str { + "remark" + } + + fn build(&self, nonce: u32) -> std::result::Result { + let acc = Sr25519Keyring::Bob.pair(); + let extrinsic: OpaqueExtrinsic = create_benchmark_extrinsic( + self.client.as_ref(), + acc, + SystemCall::remark { remark: vec![] }.into(), + nonce, + ) + .into(); + + Ok(extrinsic) + } +} + +/// Generates `Balances::TransferKeepAlive` extrinsics for the benchmarks. +/// +/// Note: Should only be used for benchmarking. +pub struct TransferKeepAliveBuilder { + client: Arc, + dest: AccountId, + value: Balance, +} + +impl TransferKeepAliveBuilder { + /// Creates a new [`Self`] from the given client. + pub fn new(client: Arc, dest: AccountId, value: Balance) -> Self { + Self { client, dest, value } + } +} + +impl frame_benchmarking_cli::ExtrinsicBuilder for TransferKeepAliveBuilder { + fn pallet(&self) -> &str { + "balances" + } + + fn extrinsic(&self) -> &str { + "transfer_keep_alive" + } + + fn build(&self, nonce: u32) -> std::result::Result { + let acc = Sr25519Keyring::Bob.pair(); + let extrinsic: OpaqueExtrinsic = create_benchmark_extrinsic( + self.client.as_ref(), + acc, + BalancesCall::transfer_keep_alive { dest: self.dest.clone().into(), value: self.value } + .into(), + nonce, + ) + .into(); + + Ok(extrinsic) + } +} + +/// Create a transaction using the given `call`. +/// +/// Note: Should only be used for benchmarking. +pub fn create_benchmark_extrinsic( + client: &FullClient, + sender: sp_core::sr25519::Pair, + call: runtime::RuntimeCall, + nonce: u32, +) -> runtime::UncheckedExtrinsic { + let genesis_hash = client.block_hash(0).ok().flatten().expect("Genesis block exists; qed"); + let best_hash = client.chain_info().best_hash; + let best_block = client.chain_info().best_number; + + let period = runtime::BlockHashCount::get() + .checked_next_power_of_two() + .map(|c| c / 2) + .unwrap_or(2) as u64; + let extra: runtime::SignedExtra = ( + frame_system::CheckNonZeroSender::::new(), + frame_system::CheckSpecVersion::::new(), + frame_system::CheckTxVersion::::new(), + frame_system::CheckGenesis::::new(), + frame_system::CheckEra::::from(sp_runtime::generic::Era::mortal( + period, + best_block.saturated_into(), + )), + frame_system::CheckNonce::::from(nonce), + frame_system::CheckWeight::::new(), + pallet_transaction_payment::ChargeTransactionPayment::::from(0), + ); + + let raw_payload = runtime::SignedPayload::from_raw( + call.clone(), + extra.clone(), + ( + (), + runtime::VERSION.spec_version, + runtime::VERSION.transaction_version, + genesis_hash, + best_hash, + (), + (), + (), + ), + ); + let signature = raw_payload.using_encoded(|e| sender.sign(e)); + + runtime::UncheckedExtrinsic::new_signed( + call, + sp_runtime::AccountId32::from(sender.public()).into(), + runtime::Signature::Sr25519(signature), + extra, + ) +} + +/// Generates inherent data for the `benchmark overhead` command. +/// +/// Note: Should only be used for benchmarking. +pub fn inherent_benchmark_data() -> Result { + let mut inherent_data = InherentData::new(); + let d = Duration::from_millis(0); + let timestamp = sp_timestamp::InherentDataProvider::new(d.into()); + + futures::executor::block_on(timestamp.provide_inherent_data(&mut inherent_data)) + .map_err(|e| format!("creating inherent data: {:?}", e))?; + Ok(inherent_data) +} diff --git a/node/src/chain_spec.rs b/node/src/chain_spec.rs new file mode 100644 index 0000000..2cd2d07 --- /dev/null +++ b/node/src/chain_spec.rs @@ -0,0 +1,158 @@ +use node_template_runtime::{ + AccountId, AuraConfig, BalancesConfig, GrandpaConfig, RuntimeGenesisConfig, Signature, + SudoConfig, SystemConfig, WASM_BINARY, +}; +use sc_service::ChainType; +use sp_consensus_aura::sr25519::AuthorityId as AuraId; +use sp_consensus_grandpa::AuthorityId as GrandpaId; +use sp_core::{sr25519, Pair, Public}; +use sp_runtime::traits::{IdentifyAccount, Verify}; + +// The URL for the telemetry server. +// const STAGING_TELEMETRY_URL: &str = "wss://telemetry.polkadot.io/submit/"; + +/// Specialized `ChainSpec`. This is a specialization of the general Substrate ChainSpec type. +pub type ChainSpec = sc_service::GenericChainSpec; + +/// Generate a crypto pair from seed. +pub fn get_from_seed(seed: &str) -> ::Public { + TPublic::Pair::from_string(&format!("//{}", seed), None) + .expect("static values are valid; qed") + .public() +} + +type AccountPublic = ::Signer; + +/// Generate an account ID from seed. +pub fn get_account_id_from_seed(seed: &str) -> AccountId +where + AccountPublic: From<::Public>, +{ + AccountPublic::from(get_from_seed::(seed)).into_account() +} + +/// Generate an Aura authority key. +pub fn authority_keys_from_seed(s: &str) -> (AuraId, GrandpaId) { + (get_from_seed::(s), get_from_seed::(s)) +} + +pub fn development_config() -> Result { + let wasm_binary = WASM_BINARY.ok_or_else(|| "Development wasm not available".to_string())?; + + Ok(ChainSpec::from_genesis( + // Name + "Development", + // ID + "dev", + ChainType::Development, + move || { + testnet_genesis( + wasm_binary, + // Initial PoA authorities + vec![authority_keys_from_seed("Alice")], + // Sudo account + get_account_id_from_seed::("Alice"), + // Pre-funded accounts + vec![ + get_account_id_from_seed::("Alice"), + get_account_id_from_seed::("Bob"), + get_account_id_from_seed::("Alice//stash"), + get_account_id_from_seed::("Bob//stash"), + ], + true, + ) + }, + // Bootnodes + vec![], + // Telemetry + None, + // Protocol ID + None, + None, + // Properties + None, + // Extensions + None, + )) +} + +pub fn local_testnet_config() -> Result { + let wasm_binary = WASM_BINARY.ok_or_else(|| "Development wasm not available".to_string())?; + + Ok(ChainSpec::from_genesis( + // Name + "Local Testnet", + // ID + "local_testnet", + ChainType::Local, + move || { + testnet_genesis( + wasm_binary, + // Initial PoA authorities + vec![authority_keys_from_seed("Alice"), authority_keys_from_seed("Bob")], + // Sudo account + get_account_id_from_seed::("Alice"), + // Pre-funded accounts + vec![ + get_account_id_from_seed::("Alice"), + get_account_id_from_seed::("Bob"), + get_account_id_from_seed::("Charlie"), + get_account_id_from_seed::("Dave"), + get_account_id_from_seed::("Eve"), + get_account_id_from_seed::("Ferdie"), + get_account_id_from_seed::("Alice//stash"), + get_account_id_from_seed::("Bob//stash"), + get_account_id_from_seed::("Charlie//stash"), + get_account_id_from_seed::("Dave//stash"), + get_account_id_from_seed::("Eve//stash"), + get_account_id_from_seed::("Ferdie//stash"), + ], + true, + ) + }, + // Bootnodes + vec![], + // Telemetry + None, + // Protocol ID + None, + // Properties + None, + None, + // Extensions + None, + )) +} + +/// Configure initial storage state for FRAME modules. +fn testnet_genesis( + wasm_binary: &[u8], + initial_authorities: Vec<(AuraId, GrandpaId)>, + root_key: AccountId, + endowed_accounts: Vec, + _enable_println: bool, +) -> RuntimeGenesisConfig { + RuntimeGenesisConfig { + system: SystemConfig { + // Add Wasm runtime to storage. + code: wasm_binary.to_vec(), + ..Default::default() + }, + balances: BalancesConfig { + // Configure endowed accounts with initial balance of 1 << 60. + balances: endowed_accounts.iter().cloned().map(|k| (k, 1 << 60)).collect(), + }, + aura: AuraConfig { + authorities: initial_authorities.iter().map(|x| (x.0.clone())).collect(), + }, + grandpa: GrandpaConfig { + authorities: initial_authorities.iter().map(|x| (x.1.clone(), 1)).collect(), + ..Default::default() + }, + sudo: SudoConfig { + // Assign network admin rights. + key: Some(root_key), + }, + transaction_payment: Default::default(), + } +} diff --git a/node/src/cli.rs b/node/src/cli.rs new file mode 100644 index 0000000..15ceaa0 --- /dev/null +++ b/node/src/cli.rs @@ -0,0 +1,54 @@ +use sc_cli::RunCmd; + +#[derive(Debug, clap::Parser)] +pub struct Cli { + #[command(subcommand)] + pub subcommand: Option, + + #[clap(flatten)] + pub run: RunCmd, +} + +#[derive(Debug, clap::Subcommand)] +#[allow(clippy::large_enum_variant)] +pub enum Subcommand { + /// Key management cli utilities + #[command(subcommand)] + Key(sc_cli::KeySubcommand), + + /// Build a chain specification. + BuildSpec(sc_cli::BuildSpecCmd), + + /// Validate blocks. + CheckBlock(sc_cli::CheckBlockCmd), + + /// Export blocks. + ExportBlocks(sc_cli::ExportBlocksCmd), + + /// Export the state of a given block into a chain spec. + ExportState(sc_cli::ExportStateCmd), + + /// Import blocks. + ImportBlocks(sc_cli::ImportBlocksCmd), + + /// Remove the whole chain. + PurgeChain(sc_cli::PurgeChainCmd), + + /// Revert the chain to a previous state. + Revert(sc_cli::RevertCmd), + + /// Sub-commands concerned with benchmarking. + #[command(subcommand)] + Benchmark(frame_benchmarking_cli::BenchmarkCmd), + + /// Try some command against runtime state. + #[cfg(feature = "try-runtime")] + TryRuntime(try_runtime_cli::TryRuntimeCmd), + + /// Try some command against runtime state. Note: `try-runtime` feature must be enabled. + #[cfg(not(feature = "try-runtime"))] + TryRuntime, + + /// Db meta columns information. + ChainInfo(sc_cli::ChainInfoCmd), +} diff --git a/node/src/command.rs b/node/src/command.rs new file mode 100644 index 0000000..8fc697b --- /dev/null +++ b/node/src/command.rs @@ -0,0 +1,212 @@ +use crate::{ + benchmarking::{inherent_benchmark_data, RemarkBuilder, TransferKeepAliveBuilder}, + chain_spec, + cli::{Cli, Subcommand}, + service, +}; +use frame_benchmarking_cli::{BenchmarkCmd, ExtrinsicFactory, SUBSTRATE_REFERENCE_HARDWARE}; +use node_template_runtime::{Block, EXISTENTIAL_DEPOSIT}; +use sc_cli::SubstrateCli; +use sc_service::PartialComponents; +use sp_keyring::Sr25519Keyring; + +#[cfg(feature = "try-runtime")] +use try_runtime_cli::block_building_info::timestamp_with_aura_info; + +impl SubstrateCli for Cli { + fn impl_name() -> String { + "Substrate Node".into() + } + + fn impl_version() -> String { + env!("SUBSTRATE_CLI_IMPL_VERSION").into() + } + + fn description() -> String { + env!("CARGO_PKG_DESCRIPTION").into() + } + + fn author() -> String { + env!("CARGO_PKG_AUTHORS").into() + } + + fn support_url() -> String { + "support.anonymous.an".into() + } + + fn copyright_start_year() -> i32 { + 2017 + } + + fn load_spec(&self, id: &str) -> Result, String> { + Ok(match id { + "dev" => Box::new(chain_spec::development_config()?), + "" | "local" => Box::new(chain_spec::local_testnet_config()?), + path => + Box::new(chain_spec::ChainSpec::from_json_file(std::path::PathBuf::from(path))?), + }) + } +} + +/// Parse and run command line arguments +pub fn run() -> sc_cli::Result<()> { + let cli = Cli::from_args(); + + match &cli.subcommand { + Some(Subcommand::Key(cmd)) => cmd.run(&cli), + Some(Subcommand::BuildSpec(cmd)) => { + let runner = cli.create_runner(cmd)?; + runner.sync_run(|config| cmd.run(config.chain_spec, config.network)) + }, + Some(Subcommand::CheckBlock(cmd)) => { + let runner = cli.create_runner(cmd)?; + runner.async_run(|config| { + let PartialComponents { client, task_manager, import_queue, .. } = + service::new_partial(&config)?; + Ok((cmd.run(client, import_queue), task_manager)) + }) + }, + Some(Subcommand::ExportBlocks(cmd)) => { + let runner = cli.create_runner(cmd)?; + runner.async_run(|config| { + let PartialComponents { client, task_manager, .. } = service::new_partial(&config)?; + Ok((cmd.run(client, config.database), task_manager)) + }) + }, + Some(Subcommand::ExportState(cmd)) => { + let runner = cli.create_runner(cmd)?; + runner.async_run(|config| { + let PartialComponents { client, task_manager, .. } = service::new_partial(&config)?; + Ok((cmd.run(client, config.chain_spec), task_manager)) + }) + }, + Some(Subcommand::ImportBlocks(cmd)) => { + let runner = cli.create_runner(cmd)?; + runner.async_run(|config| { + let PartialComponents { client, task_manager, import_queue, .. } = + service::new_partial(&config)?; + Ok((cmd.run(client, import_queue), task_manager)) + }) + }, + Some(Subcommand::PurgeChain(cmd)) => { + let runner = cli.create_runner(cmd)?; + runner.sync_run(|config| cmd.run(config.database)) + }, + Some(Subcommand::Revert(cmd)) => { + let runner = cli.create_runner(cmd)?; + runner.async_run(|config| { + let PartialComponents { client, task_manager, backend, .. } = + service::new_partial(&config)?; + let aux_revert = Box::new(|client, _, blocks| { + sc_consensus_grandpa::revert(client, blocks)?; + Ok(()) + }); + Ok((cmd.run(client, backend, Some(aux_revert)), task_manager)) + }) + }, + Some(Subcommand::Benchmark(cmd)) => { + let runner = cli.create_runner(cmd)?; + + runner.sync_run(|config| { + // This switch needs to be in the client, since the client decides + // which sub-commands it wants to support. + match cmd { + BenchmarkCmd::Pallet(cmd) => { + if !cfg!(feature = "runtime-benchmarks") { + return Err( + "Runtime benchmarking wasn't enabled when building the node. \ + You can enable it with `--features runtime-benchmarks`." + .into(), + ) + } + + cmd.run::(config) + }, + BenchmarkCmd::Block(cmd) => { + let PartialComponents { client, .. } = service::new_partial(&config)?; + cmd.run(client) + }, + #[cfg(not(feature = "runtime-benchmarks"))] + BenchmarkCmd::Storage(_) => Err( + "Storage benchmarking can be enabled with `--features runtime-benchmarks`." + .into(), + ), + #[cfg(feature = "runtime-benchmarks")] + BenchmarkCmd::Storage(cmd) => { + let PartialComponents { client, backend, .. } = + service::new_partial(&config)?; + let db = backend.expose_db(); + let storage = backend.expose_storage(); + + cmd.run(config, client, db, storage) + }, + BenchmarkCmd::Overhead(cmd) => { + let PartialComponents { client, .. } = service::new_partial(&config)?; + let ext_builder = RemarkBuilder::new(client.clone()); + + cmd.run( + config, + client, + inherent_benchmark_data()?, + Vec::new(), + &ext_builder, + ) + }, + BenchmarkCmd::Extrinsic(cmd) => { + let PartialComponents { client, .. } = service::new_partial(&config)?; + // Register the *Remark* and *TKA* builders. + let ext_factory = ExtrinsicFactory(vec![ + Box::new(RemarkBuilder::new(client.clone())), + Box::new(TransferKeepAliveBuilder::new( + client.clone(), + Sr25519Keyring::Alice.to_account_id(), + EXISTENTIAL_DEPOSIT, + )), + ]); + + cmd.run(client, inherent_benchmark_data()?, Vec::new(), &ext_factory) + }, + BenchmarkCmd::Machine(cmd) => + cmd.run(&config, SUBSTRATE_REFERENCE_HARDWARE.clone()), + } + }) + }, + #[cfg(feature = "try-runtime")] + Some(Subcommand::TryRuntime(cmd)) => { + use crate::service::ExecutorDispatch; + use sc_executor::{sp_wasm_interface::ExtendedHostFunctions, NativeExecutionDispatch}; + let runner = cli.create_runner(cmd)?; + runner.async_run(|config| { + // we don't need any of the components of new_partial, just a runtime, or a task + // manager to do `async_run`. + let registry = config.prometheus_config.as_ref().map(|cfg| &cfg.registry); + let task_manager = + sc_service::TaskManager::new(config.tokio_handle.clone(), registry) + .map_err(|e| sc_cli::Error::Service(sc_service::Error::Prometheus(e)))?; + let info_provider = timestamp_with_aura_info(6000); + + Ok(( + cmd.run::::ExtendHostFunctions, + >, _>(Some(info_provider)), + task_manager, + )) + }) + }, + #[cfg(not(feature = "try-runtime"))] + Some(Subcommand::TryRuntime) => Err("TryRuntime wasn't enabled when building the node. \ + You can enable it with `--features try-runtime`." + .into()), + Some(Subcommand::ChainInfo(cmd)) => { + let runner = cli.create_runner(cmd)?; + runner.sync_run(|config| cmd.run::(&config)) + }, + None => { + let runner = cli.create_runner(&cli.run)?; + runner.run_node_until_exit(|config| async move { + service::new_full(config).map_err(sc_cli::Error::Service) + }) + }, + } +} diff --git a/node/src/lib.rs b/node/src/lib.rs new file mode 100644 index 0000000..f117b8a --- /dev/null +++ b/node/src/lib.rs @@ -0,0 +1,3 @@ +pub mod chain_spec; +pub mod rpc; +pub mod service; diff --git a/node/src/main.rs b/node/src/main.rs new file mode 100644 index 0000000..426cbab --- /dev/null +++ b/node/src/main.rs @@ -0,0 +1,14 @@ +//! Substrate Node Template CLI library. +#![warn(missing_docs)] + +mod chain_spec; +#[macro_use] +mod service; +mod benchmarking; +mod cli; +mod command; +mod rpc; + +fn main() -> sc_cli::Result<()> { + command::run() +} diff --git a/node/src/rpc.rs b/node/src/rpc.rs new file mode 100644 index 0000000..f4f1540 --- /dev/null +++ b/node/src/rpc.rs @@ -0,0 +1,57 @@ +//! A collection of node-specific RPC methods. +//! Substrate provides the `sc-rpc` crate, which defines the core RPC layer +//! used by Substrate nodes. This file extends those RPC definitions with +//! capabilities that are specific to this project's runtime configuration. + +#![warn(missing_docs)] + +use std::sync::Arc; + +use jsonrpsee::RpcModule; +use node_template_runtime::{opaque::Block, AccountId, Balance, Nonce}; +use sc_transaction_pool_api::TransactionPool; +use sp_api::ProvideRuntimeApi; +use sp_block_builder::BlockBuilder; +use sp_blockchain::{Error as BlockChainError, HeaderBackend, HeaderMetadata}; + +pub use sc_rpc_api::DenyUnsafe; + +/// Full client dependencies. +pub struct FullDeps { + /// The client instance to use. + pub client: Arc, + /// Transaction pool instance. + pub pool: Arc

, + /// Whether to deny unsafe calls + pub deny_unsafe: DenyUnsafe, +} + +/// Instantiate all full RPC extensions. +pub fn create_full( + deps: FullDeps, +) -> Result, Box> +where + C: ProvideRuntimeApi, + C: HeaderBackend + HeaderMetadata + 'static, + C: Send + Sync + 'static, + C::Api: substrate_frame_rpc_system::AccountNonceApi, + C::Api: pallet_transaction_payment_rpc::TransactionPaymentRuntimeApi, + C::Api: BlockBuilder, + P: TransactionPool + 'static, +{ + use pallet_transaction_payment_rpc::{TransactionPayment, TransactionPaymentApiServer}; + use substrate_frame_rpc_system::{System, SystemApiServer}; + + let mut module = RpcModule::new(()); + let FullDeps { client, pool, deny_unsafe } = deps; + + module.merge(System::new(client.clone(), pool, deny_unsafe).into_rpc())?; + module.merge(TransactionPayment::new(client).into_rpc())?; + + // Extend this RPC with a custom API by using the following syntax. + // `YourRpcStruct` should have a reference to a client, which is needed + // to call into the runtime. + // `module.merge(YourRpcTrait::into_rpc(YourRpcStruct::new(ReferenceToClient, ...)))?;` + + Ok(module) +} diff --git a/node/src/service.rs b/node/src/service.rs new file mode 100644 index 0000000..355e24c --- /dev/null +++ b/node/src/service.rs @@ -0,0 +1,331 @@ +//! Service and ServiceFactory implementation. Specialized wrapper over substrate service. + +use futures::FutureExt; +use node_template_runtime::{self, opaque::Block, RuntimeApi}; +use sc_client_api::{Backend, BlockBackend}; +use sc_consensus_aura::{ImportQueueParams, SlotProportion, StartAuraParams}; +use sc_consensus_grandpa::SharedVoterState; +pub use sc_executor::NativeElseWasmExecutor; +use sc_service::{error::Error as ServiceError, Configuration, TaskManager, WarpSyncParams}; +use sc_telemetry::{Telemetry, TelemetryWorker}; +use sc_transaction_pool_api::OffchainTransactionPoolFactory; +use sp_consensus_aura::sr25519::AuthorityPair as AuraPair; +use std::{sync::Arc, time::Duration}; + +// Our native executor instance. +pub struct ExecutorDispatch; + +impl sc_executor::NativeExecutionDispatch for ExecutorDispatch { + /// Only enable the benchmarking host functions when we actually want to benchmark. + #[cfg(feature = "runtime-benchmarks")] + type ExtendHostFunctions = frame_benchmarking::benchmarking::HostFunctions; + /// Otherwise we only use the default Substrate host functions. + #[cfg(not(feature = "runtime-benchmarks"))] + type ExtendHostFunctions = (); + + fn dispatch(method: &str, data: &[u8]) -> Option> { + node_template_runtime::api::dispatch(method, data) + } + + fn native_version() -> sc_executor::NativeVersion { + node_template_runtime::native_version() + } +} + +pub(crate) type FullClient = + sc_service::TFullClient>; +type FullBackend = sc_service::TFullBackend; +type FullSelectChain = sc_consensus::LongestChain; + +#[allow(clippy::type_complexity)] +pub fn new_partial( + config: &Configuration, +) -> Result< + sc_service::PartialComponents< + FullClient, + FullBackend, + FullSelectChain, + sc_consensus::DefaultImportQueue, + sc_transaction_pool::FullPool, + ( + sc_consensus_grandpa::GrandpaBlockImport< + FullBackend, + Block, + FullClient, + FullSelectChain, + >, + sc_consensus_grandpa::LinkHalf, + Option, + ), + >, + ServiceError, +> { + let telemetry = config + .telemetry_endpoints + .clone() + .filter(|x| !x.is_empty()) + .map(|endpoints| -> Result<_, sc_telemetry::Error> { + let worker = TelemetryWorker::new(16)?; + let telemetry = worker.handle().new_telemetry(endpoints); + Ok((worker, telemetry)) + }) + .transpose()?; + + let executor = sc_service::new_native_or_wasm_executor(config); + let (client, backend, keystore_container, task_manager) = + sc_service::new_full_parts::( + config, + telemetry.as_ref().map(|(_, telemetry)| telemetry.handle()), + executor, + )?; + let client = Arc::new(client); + + let telemetry = telemetry.map(|(worker, telemetry)| { + task_manager.spawn_handle().spawn("telemetry", None, worker.run()); + telemetry + }); + + let select_chain = sc_consensus::LongestChain::new(backend.clone()); + + let transaction_pool = sc_transaction_pool::BasicPool::new_full( + config.transaction_pool.clone(), + config.role.is_authority().into(), + config.prometheus_registry(), + task_manager.spawn_essential_handle(), + client.clone(), + ); + + let (grandpa_block_import, grandpa_link) = sc_consensus_grandpa::block_import( + client.clone(), + &client, + select_chain.clone(), + telemetry.as_ref().map(|x| x.handle()), + )?; + + let slot_duration = sc_consensus_aura::slot_duration(&*client)?; + + let import_queue = + sc_consensus_aura::import_queue::(ImportQueueParams { + block_import: grandpa_block_import.clone(), + justification_import: Some(Box::new(grandpa_block_import.clone())), + client: client.clone(), + create_inherent_data_providers: move |_, ()| async move { + let timestamp = sp_timestamp::InherentDataProvider::from_system_time(); + + let slot = + sp_consensus_aura::inherents::InherentDataProvider::from_timestamp_and_slot_duration( + *timestamp, + slot_duration, + ); + + Ok((slot, timestamp)) + }, + spawner: &task_manager.spawn_essential_handle(), + registry: config.prometheus_registry(), + check_for_equivocation: Default::default(), + telemetry: telemetry.as_ref().map(|x| x.handle()), + compatibility_mode: Default::default(), + })?; + + Ok(sc_service::PartialComponents { + client, + backend, + task_manager, + import_queue, + keystore_container, + select_chain, + transaction_pool, + other: (grandpa_block_import, grandpa_link, telemetry), + }) +} + +/// Builds a new service for a full client. +pub fn new_full(config: Configuration) -> Result { + let sc_service::PartialComponents { + client, + backend, + mut task_manager, + import_queue, + keystore_container, + select_chain, + transaction_pool, + other: (block_import, grandpa_link, mut telemetry), + } = new_partial(&config)?; + + let mut net_config = sc_network::config::FullNetworkConfiguration::new(&config.network); + + let grandpa_protocol_name = sc_consensus_grandpa::protocol_standard_name( + &client.block_hash(0).ok().flatten().expect("Genesis block exists; qed"), + &config.chain_spec, + ); + net_config.add_notification_protocol(sc_consensus_grandpa::grandpa_peers_set_config( + grandpa_protocol_name.clone(), + )); + + let warp_sync = Arc::new(sc_consensus_grandpa::warp_proof::NetworkProvider::new( + backend.clone(), + grandpa_link.shared_authority_set().clone(), + Vec::default(), + )); + + let (network, system_rpc_tx, tx_handler_controller, network_starter, sync_service) = + sc_service::build_network(sc_service::BuildNetworkParams { + config: &config, + net_config, + client: client.clone(), + transaction_pool: transaction_pool.clone(), + spawn_handle: task_manager.spawn_handle(), + import_queue, + block_announce_validator_builder: None, + warp_sync_params: Some(WarpSyncParams::WithProvider(warp_sync)), + })?; + + if config.offchain_worker.enabled { + task_manager.spawn_handle().spawn( + "offchain-workers-runner", + "offchain-worker", + sc_offchain::OffchainWorkers::new(sc_offchain::OffchainWorkerOptions { + runtime_api_provider: client.clone(), + is_validator: config.role.is_authority(), + keystore: Some(keystore_container.keystore()), + offchain_db: backend.offchain_storage(), + transaction_pool: Some(OffchainTransactionPoolFactory::new( + transaction_pool.clone(), + )), + network_provider: network.clone(), + enable_http_requests: true, + custom_extensions: |_| vec![], + }) + .run(client.clone(), task_manager.spawn_handle()) + .boxed(), + ); + } + + let role = config.role.clone(); + let force_authoring = config.force_authoring; + let backoff_authoring_blocks: Option<()> = None; + let name = config.network.node_name.clone(); + let enable_grandpa = !config.disable_grandpa; + let prometheus_registry = config.prometheus_registry().cloned(); + + let rpc_extensions_builder = { + let client = client.clone(); + let pool = transaction_pool.clone(); + + Box::new(move |deny_unsafe, _| { + let deps = + crate::rpc::FullDeps { client: client.clone(), pool: pool.clone(), deny_unsafe }; + crate::rpc::create_full(deps).map_err(Into::into) + }) + }; + + let _rpc_handlers = sc_service::spawn_tasks(sc_service::SpawnTasksParams { + network: network.clone(), + client: client.clone(), + keystore: keystore_container.keystore(), + task_manager: &mut task_manager, + transaction_pool: transaction_pool.clone(), + rpc_builder: rpc_extensions_builder, + backend, + system_rpc_tx, + tx_handler_controller, + sync_service: sync_service.clone(), + config, + telemetry: telemetry.as_mut(), + })?; + + if role.is_authority() { + let proposer_factory = sc_basic_authorship::ProposerFactory::new( + task_manager.spawn_handle(), + client.clone(), + transaction_pool.clone(), + prometheus_registry.as_ref(), + telemetry.as_ref().map(|x| x.handle()), + ); + + let slot_duration = sc_consensus_aura::slot_duration(&*client)?; + + let aura = sc_consensus_aura::start_aura::( + StartAuraParams { + slot_duration, + client, + select_chain, + block_import, + proposer_factory, + create_inherent_data_providers: move |_, ()| async move { + let timestamp = sp_timestamp::InherentDataProvider::from_system_time(); + + let slot = + sp_consensus_aura::inherents::InherentDataProvider::from_timestamp_and_slot_duration( + *timestamp, + slot_duration, + ); + + Ok((slot, timestamp)) + }, + force_authoring, + backoff_authoring_blocks, + keystore: keystore_container.keystore(), + sync_oracle: sync_service.clone(), + justification_sync_link: sync_service.clone(), + block_proposal_slot_portion: SlotProportion::new(2f32 / 3f32), + max_block_proposal_slot_portion: None, + telemetry: telemetry.as_ref().map(|x| x.handle()), + compatibility_mode: Default::default(), + }, + )?; + + // the AURA authoring task is considered essential, i.e. if it + // fails we take down the service with it. + task_manager + .spawn_essential_handle() + .spawn_blocking("aura", Some("block-authoring"), aura); + } + + if enable_grandpa { + // if the node isn't actively participating in consensus then it doesn't + // need a keystore, regardless of which protocol we use below. + let keystore = if role.is_authority() { Some(keystore_container.keystore()) } else { None }; + + let grandpa_config = sc_consensus_grandpa::Config { + // FIXME #1578 make this available through chainspec + gossip_duration: Duration::from_millis(333), + justification_period: 512, + name: Some(name), + observer_enabled: false, + keystore, + local_role: role, + telemetry: telemetry.as_ref().map(|x| x.handle()), + protocol_name: grandpa_protocol_name, + }; + + // start the full GRANDPA voter + // NOTE: non-authorities could run the GRANDPA observer protocol, but at + // this point the full voter should provide better guarantees of block + // and vote data availability than the observer. The observer has not + // been tested extensively yet and having most nodes in a network run it + // could lead to finality stalls. + let grandpa_config = sc_consensus_grandpa::GrandpaParams { + config: grandpa_config, + link: grandpa_link, + network, + sync: Arc::new(sync_service), + voting_rule: sc_consensus_grandpa::VotingRulesBuilder::default().build(), + prometheus_registry, + shared_voter_state: SharedVoterState::empty(), + telemetry: telemetry.as_ref().map(|x| x.handle()), + offchain_tx_pool_factory: OffchainTransactionPoolFactory::new(transaction_pool), + }; + + // the GRANDPA voter task is considered infallible, i.e. + // if it fails we take down the service with it. + task_manager.spawn_essential_handle().spawn_blocking( + "grandpa-voter", + None, + sc_consensus_grandpa::run_grandpa_voter(grandpa_config)?, + ); + } + + network_starter.start_network(); + Ok(task_manager) +} diff --git a/pallets/template/Cargo.toml b/pallets/template/Cargo.toml new file mode 100644 index 0000000..8fbd2c7 --- /dev/null +++ b/pallets/template/Cargo.toml @@ -0,0 +1,40 @@ +[package] +name = "pallet-template" +version = "4.0.0-dev" +description = "FRAME pallet template for defining custom runtime logic." +authors = ["Substrate DevHub "] +homepage = "https://substrate.io" +edition = "2021" +license = "MIT-0" +publish = false +repository = "https://github.com/substrate-developer-hub/substrate-node-template/" + +[package.metadata.docs.rs] +targets = ["x86_64-unknown-linux-gnu"] + +[dependencies] +codec = { package = "parity-scale-codec", version = "3.6.5", default-features = false, features = [ + "derive", +] } +sp-std = { default-features = false, version = '2.0.0' } +scale-info = { version = "2.5.0", default-features = false, features = ["derive"] } +frame-benchmarking = { version = "4.0.0-dev", default-features = false, optional = true, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } +frame-support = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } +frame-system = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } + +[dev-dependencies] +sp-core = { version = "21.0.0", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } +sp-io = { version = "23.0.0", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } +sp-runtime = { version = "24.0.0", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } + +[features] +default = ["std"] +std = [ + "codec/std", + "frame-benchmarking?/std", + "frame-support/std", + "frame-system/std", + "scale-info/std", +] +runtime-benchmarks = ["frame-benchmarking/runtime-benchmarks"] +try-runtime = ["frame-support/try-runtime"] diff --git a/pallets/template/README.md b/pallets/template/README.md new file mode 100644 index 0000000..d0d5953 --- /dev/null +++ b/pallets/template/README.md @@ -0,0 +1 @@ +License: MIT-0 \ No newline at end of file diff --git a/pallets/template/src/benchmarking.rs b/pallets/template/src/benchmarking.rs new file mode 100644 index 0000000..5a26241 --- /dev/null +++ b/pallets/template/src/benchmarking.rs @@ -0,0 +1,35 @@ +//! Benchmarking setup for pallet-template +#![cfg(feature = "runtime-benchmarks")] +use super::*; + +#[allow(unused)] +use crate::Pallet as Template; +use frame_benchmarking::v2::*; +use frame_system::RawOrigin; + +#[benchmarks] +mod benchmarks { + use super::*; + + #[benchmark] + fn do_something() { + let value = 100u32.into(); + let caller: T::AccountId = whitelisted_caller(); + #[extrinsic_call] + do_something(RawOrigin::Signed(caller), value); + + assert_eq!(Something::::get(), Some(value)); + } + + #[benchmark] + fn cause_error() { + Something::::put(100u32); + let caller: T::AccountId = whitelisted_caller(); + #[extrinsic_call] + cause_error(RawOrigin::Signed(caller)); + + assert_eq!(Something::::get(), Some(101u32)); + } + + impl_benchmark_test_suite!(Template, crate::mock::new_test_ext(), crate::mock::Test); +} diff --git a/pallets/template/src/lib.rs b/pallets/template/src/lib.rs new file mode 100644 index 0000000..3c7234d --- /dev/null +++ b/pallets/template/src/lib.rs @@ -0,0 +1,141 @@ +#![cfg_attr(not(feature = "std"), no_std)] + +/// Edit this file to define custom logic or remove it if it is not needed. +/// Learn more about FRAME and the core library of Substrate FRAME pallets: +/// +pub use pallet::*; +use sp_std::prelude::*; + +#[cfg(test)] +mod mock; + +#[cfg(test)] +mod tests; + +#[cfg(feature = "runtime-benchmarks")] +mod benchmarking; +pub mod weights; +pub use weights::*; + + + +#[frame_support::pallet] +pub mod pallet { + use super::*; + use frame_support::pallet_prelude::*; + use frame_system::pallet_prelude::*; + + + #[pallet::pallet] + // #[pallet::generate_store(pub(super) trait Store)] + #[pallet::without_storage_info] + pub struct Pallet(_); + + /// Configure the pallet by specifying the parameters and types on which it depends. + #[pallet::config] + pub trait Config: frame_system::Config { + /// Because this pallet emits events, it depends on the runtime's definition of an event. + type RuntimeEvent: From> + IsType<::RuntimeEvent>; + /// Type representing the weight of this pallet + type WeightInfo: WeightInfo; + } + + + // //add 8 Nov 2023 + #[derive(Encode, Decode, Clone, PartialEq, TypeInfo, MaxEncodedLen)] + pub struct UserInfo{ + pub username: [u8; 256], + pub id: i64, + //About me + pub about_me: [u8; 256] + } + + + // The pallet's runtime storage items. + // https://docs.substrate.io/main-docs/build/runtime-storage/ + + #[pallet::storage] + #[pallet::getter(fn info)] + pub type AccountToUserInfo = StorageMap<_, Blake2_128Concat, T::AccountId, UserInfo, OptionQuery>; + + // Learn more about declaring storage items: + // https://docs.substrate.io/main-docs/build/runtime-storage/#declaring-storage-items + // pub type Something = StorageValue<_, u32>; + + // Pallets use events to inform users when important changes are made. + // https://docs.substrate.io/main-docs/build/events-errors/ + #[pallet::event] + #[pallet::generate_deposit(pub(super) fn deposit_event)] + pub enum Event { + /// Event documentation should end with an array that provides descriptive names for event + /// parameters. [something, who] + UserCreated { user: T::AccountId} + } + + // Errors inform users that something went wrong. + #[pallet::error] + pub enum Error { + /// Error names should be descriptive. + NoneValue, + /// Errors should have helpful documentation associated with them. + StorageOverflow, + } + + // Dispatchable functions allows users to interact with the pallet and invoke state changes. + // These functions materialize as "extrinsics", which are often compared to transactions. + // Dispatchable functions must be annotated with a weight and must return a DispatchResult. + #[pallet::call] + impl Pallet { + /// An example dispatchable that takes a singles value as a parameter, writes the value to + /// storage and emits an event. This function must be dispatched by a signed extrinsic. + #[pallet::call_index(0)] + #[pallet::weight(T::WeightInfo::do_something())] + pub fn do_something(origin: OriginFor, something: u32) -> DispatchResult { + // Check that the extrinsic was signed and get the signer. + // This function will return an error if the extrinsic is not signed. + // https://docs.substrate.io/main-docs/build/origins/ + let who = ensure_signed(origin)?; + + // Update storage. + // >::put(something); + + // Emit an event. add by X + // Self::deposit_event(Event::SomethingStored { something, who }); + // Return a successful DispatchResultWithPostInfo + Ok(()) + } + + /// An example dispatchable that may throw a custom error. + // #[pallet::call_index(1)] + // #[pallet::weight(T::WeightInfo::cause_error())] + // pub fn cause_error(origin: OriginFor) -> DispatchResult { + // let _who = ensure_signed(origin)?; + + // // Read a value from storage. + // match >::get() { + // // Return an error if the value has not been set. + // None => return Err(Error::::NoneValue.into()), + // Some(old) => { + // // Increment the value read from storage; will error in the event of overflow. + // let new = old.checked_add(1).ok_or(Error::::StorageOverflow)?; + // // Update the value in storage with the incremented result. + // >::put(new); + // Ok(()) + // }, + // } + // } + #[pallet::call_index(1)] + #[pallet::weight(10_000 + T::DbWeight::get().writes(1).ref_time())] + pub fn register_user(origin: OriginFor, username: [u8; 256], id: i64, about_me: [u8; 256]) -> DispatchResult{ + let sender = ensure_signed(origin)?; + //Define new user + let new_user = UserInfo{ username, id, about_me}; + // change state of storage mapping by adding user + >::insert(&sender, new_user); + //emit an event + Self::deposit_event(Event::::UserCreated{user: sender}); + Ok(()) + } + + } +} diff --git a/pallets/template/src/mock.rs b/pallets/template/src/mock.rs new file mode 100644 index 0000000..244ae1b --- /dev/null +++ b/pallets/template/src/mock.rs @@ -0,0 +1,54 @@ +use crate as pallet_template; +use frame_support::traits::{ConstU16, ConstU64}; +use sp_core::H256; +use sp_runtime::{ + traits::{BlakeTwo256, IdentityLookup}, + BuildStorage, +}; + +type Block = frame_system::mocking::MockBlock; + +// Configure a mock runtime to test the pallet. +frame_support::construct_runtime!( + pub enum Test + { + System: frame_system, + TemplateModule: pallet_template, + } +); + +impl frame_system::Config for Test { + type BaseCallFilter = frame_support::traits::Everything; + type BlockWeights = (); + type BlockLength = (); + type DbWeight = (); + type RuntimeOrigin = RuntimeOrigin; + type RuntimeCall = RuntimeCall; + type Nonce = u64; + type Hash = H256; + type Hashing = BlakeTwo256; + type AccountId = u64; + type Lookup = IdentityLookup; + type Block = Block; + type RuntimeEvent = RuntimeEvent; + type BlockHashCount = ConstU64<250>; + type Version = (); + type PalletInfo = PalletInfo; + type AccountData = (); + type OnNewAccount = (); + type OnKilledAccount = (); + type SystemWeightInfo = (); + type SS58Prefix = ConstU16<42>; + type OnSetCode = (); + type MaxConsumers = frame_support::traits::ConstU32<16>; +} + +impl pallet_template::Config for Test { + type RuntimeEvent = RuntimeEvent; + type WeightInfo = (); +} + +// Build genesis storage according to the mock runtime. +pub fn new_test_ext() -> sp_io::TestExternalities { + frame_system::GenesisConfig::::default().build_storage().unwrap().into() +} diff --git a/pallets/template/src/tests.rs b/pallets/template/src/tests.rs new file mode 100644 index 0000000..7c2b853 --- /dev/null +++ b/pallets/template/src/tests.rs @@ -0,0 +1,27 @@ +use crate::{mock::*, Error, Event}; +use frame_support::{assert_noop, assert_ok}; + +#[test] +fn it_works_for_default_value() { + new_test_ext().execute_with(|| { + // Go past genesis block so events get deposited + System::set_block_number(1); + // Dispatch a signed extrinsic. + assert_ok!(TemplateModule::do_something(RuntimeOrigin::signed(1), 42)); + // Read pallet storage and assert an expected result. + assert_eq!(TemplateModule::something(), Some(42)); + // Assert that the correct event was deposited + System::assert_last_event(Event::SomethingStored { something: 42, who: 1 }.into()); + }); +} + +#[test] +fn correct_error_for_none_value() { + new_test_ext().execute_with(|| { + // Ensure the expected error is thrown when no value is present. + assert_noop!( + TemplateModule::cause_error(RuntimeOrigin::signed(1)), + Error::::NoneValue + ); + }); +} diff --git a/pallets/template/src/weights.rs b/pallets/template/src/weights.rs new file mode 100644 index 0000000..7c42936 --- /dev/null +++ b/pallets/template/src/weights.rs @@ -0,0 +1,90 @@ + +//! Autogenerated weights for pallet_template +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev +//! DATE: 2023-04-06, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `Alexs-MacBook-Pro-2.local`, CPU: `` +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 + +// Executed Command: +// ../../target/release/node-template +// benchmark +// pallet +// --chain +// dev +// --pallet +// pallet_template +// --extrinsic +// * +// --steps=50 +// --repeat=20 +// --wasm-execution=compiled +// --output +// pallets/template/src/weights.rs +// --template +// ../../.maintain/frame-weight-template.hbs + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_parens)] +#![allow(unused_imports)] + +use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; +use core::marker::PhantomData; + +/// Weight functions needed for pallet_template. +pub trait WeightInfo { + fn do_something() -> Weight; + fn cause_error() -> Weight; +} + +/// Weights for pallet_template using the Substrate node and recommended hardware. +pub struct SubstrateWeight(PhantomData); +impl WeightInfo for SubstrateWeight { + /// Storage: TemplateModule Something (r:0 w:1) + /// Proof: TemplateModule Something (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + fn do_something() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 8_000_000 picoseconds. + Weight::from_parts(9_000_000, 0) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: TemplateModule Something (r:1 w:1) + /// Proof: TemplateModule Something (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + fn cause_error() -> Weight { + // Proof Size summary in bytes: + // Measured: `32` + // Estimated: `1489` + // Minimum execution time: 6_000_000 picoseconds. + Weight::from_parts(6_000_000, 1489) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } +} + +// For backwards compatibility and tests +impl WeightInfo for () { + /// Storage: TemplateModule Something (r:0 w:1) + /// Proof: TemplateModule Something (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + fn do_something() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 8_000_000 picoseconds. + Weight::from_parts(9_000_000, 0) + .saturating_add(RocksDbWeight::get().writes(1_u64)) + } + /// Storage: TemplateModule Something (r:1 w:1) + /// Proof: TemplateModule Something (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + fn cause_error() -> Weight { + // Proof Size summary in bytes: + // Measured: `32` + // Estimated: `1489` + // Minimum execution time: 6_000_000 picoseconds. + Weight::from_parts(6_000_000, 1489) + .saturating_add(RocksDbWeight::get().reads(1_u64)) + .saturating_add(RocksDbWeight::get().writes(1_u64)) + } +} diff --git a/runtime/Cargo.toml b/runtime/Cargo.toml new file mode 100644 index 0000000..33ae788 --- /dev/null +++ b/runtime/Cargo.toml @@ -0,0 +1,116 @@ +[package] +name = "node-template-runtime" +version = "4.0.0-dev" +description = "A fresh FRAME-based Substrate node, ready for hacking." +authors = ["Substrate DevHub "] +homepage = "https://substrate.io/" +edition = "2021" +license = "MIT-0" +publish = false +repository = "https://github.com/substrate-developer-hub/substrate-node-template/" + +[package.metadata.docs.rs] +targets = ["x86_64-unknown-linux-gnu"] + +[dependencies] +codec = { package = "parity-scale-codec", version = "3.6.1", default-features = false, features = ["derive"] } +scale-info = { version = "2.5.0", default-features = false, features = ["derive"] } +pallet-nicks = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } +pallet-aura = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } +pallet-balances = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } +frame-support = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } +pallet-grandpa = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } +pallet-sudo = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } +frame-system = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } +frame-try-runtime = { version = "0.10.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", optional = true , branch = "polkadot-v1.0.0" } +pallet-timestamp = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } +pallet-transaction-payment = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } +frame-executive = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } +sp-api = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } +sp-block-builder = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } +sp-consensus-aura = { version = "0.10.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } +sp-consensus-grandpa = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } +sp-core = { version = "21.0.0", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } +sp-inherents = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } +sp-offchain = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } +sp-runtime = { version = "24.0.0", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } +sp-session = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } +sp-std = { version = "8.0.0", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } +sp-transaction-pool = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } +sp-version = { version = "22.0.0", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } + +# Used for the node template's RPCs +frame-system-rpc-runtime-api = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } +pallet-transaction-payment-rpc-runtime-api = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } + +# Used for runtime benchmarking +frame-benchmarking = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", optional = true , branch = "polkadot-v1.0.0" } +frame-system-benchmarking = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", optional = true , branch = "polkadot-v1.0.0" } + +# Local Dependencies +pallet-template = { version = "4.0.0-dev", default-features = false, path = "../pallets/template" } + +[build-dependencies] +substrate-wasm-builder = { version = "5.0.0-dev", git = "https://github.com/paritytech/substrate.git", optional = true , branch = "polkadot-v1.0.0" } + +[features] +default = ["std"] +std = [ + "frame-try-runtime?/std", + "frame-system-benchmarking?/std", + "frame-benchmarking?/std", + "codec/std", + "scale-info/std", + "frame-executive/std", + "frame-support/std", + "frame-system-rpc-runtime-api/std", + "frame-system/std", + "frame-try-runtime/std", + "pallet-nicks/std", + "pallet-aura/std", + "pallet-balances/std", + "pallet-grandpa/std", + "pallet-sudo/std", + "pallet-template/std", + "pallet-timestamp/std", + "pallet-transaction-payment-rpc-runtime-api/std", + "pallet-transaction-payment/std", + "sp-api/std", + "sp-block-builder/std", + "sp-consensus-aura/std", + "sp-consensus-grandpa/std", + "sp-core/std", + "sp-inherents/std", + "sp-offchain/std", + "sp-runtime/std", + "sp-session/std", + "sp-std/std", + "sp-transaction-pool/std", + "sp-version/std", + "substrate-wasm-builder", +] +runtime-benchmarks = [ + "frame-benchmarking/runtime-benchmarks", + "frame-support/runtime-benchmarks", + "frame-system-benchmarking/runtime-benchmarks", + "frame-system/runtime-benchmarks", + "pallet-balances/runtime-benchmarks", + "pallet-grandpa/runtime-benchmarks", + "pallet-sudo/runtime-benchmarks", + "pallet-template/runtime-benchmarks", + "pallet-timestamp/runtime-benchmarks", + "sp-runtime/runtime-benchmarks", +] +try-runtime = [ + "frame-try-runtime/try-runtime", + "frame-executive/try-runtime", + "frame-system/try-runtime", + "frame-support/try-runtime", + "pallet-aura/try-runtime", + "pallet-balances/try-runtime", + "pallet-grandpa/try-runtime", + "pallet-sudo/try-runtime", + "pallet-template/try-runtime", + "pallet-timestamp/try-runtime", + "pallet-transaction-payment/try-runtime", +] diff --git a/runtime/build.rs b/runtime/build.rs new file mode 100644 index 0000000..c03d618 --- /dev/null +++ b/runtime/build.rs @@ -0,0 +1,10 @@ +fn main() { + #[cfg(feature = "std")] + { + substrate_wasm_builder::WasmBuilder::new() + .with_current_project() + .export_heap_base() + .import_memory() + .build(); + } +} diff --git a/runtime/src/lib.rs b/runtime/src/lib.rs new file mode 100644 index 0000000..8c50faa --- /dev/null +++ b/runtime/src/lib.rs @@ -0,0 +1,583 @@ +#![cfg_attr(not(feature = "std"), no_std)] +// `construct_runtime!` does a lot of recursion and requires us to increase the limit to 256. +#![recursion_limit = "256"] + +// Make the WASM binary available. +#[cfg(feature = "std")] +include!(concat!(env!("OUT_DIR"), "/wasm_binary.rs")); + +use pallet_grandpa::AuthorityId as GrandpaId; +use sp_api::impl_runtime_apis; +use sp_consensus_aura::sr25519::AuthorityId as AuraId; +use sp_core::{crypto::KeyTypeId, OpaqueMetadata}; +use sp_runtime::{ + create_runtime_str, generic, impl_opaque_keys, + traits::{ + AccountIdLookup, BlakeTwo256, Block as BlockT, IdentifyAccount, NumberFor, One, Verify, + }, + transaction_validity::{TransactionSource, TransactionValidity}, + ApplyExtrinsicResult, MultiSignature, +}; +use sp_std::prelude::*; +#[cfg(feature = "std")] +use sp_version::NativeVersion; +use sp_version::RuntimeVersion; + +// A few exports that help ease life for downstream crates. +pub use frame_support::{ + construct_runtime, parameter_types, + traits::{ + ConstBool, ConstU128, ConstU32, ConstU64, ConstU8, KeyOwnerProofSystem, Randomness, + StorageInfo, + }, + weights::{ + constants::{ + BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight, WEIGHT_REF_TIME_PER_SECOND, + }, + IdentityFee, Weight, + }, + StorageValue, +}; +pub use frame_system::Call as SystemCall; +pub use pallet_balances::Call as BalancesCall; +pub use pallet_timestamp::Call as TimestampCall; +use pallet_transaction_payment::{ConstFeeMultiplier, CurrencyAdapter, Multiplier}; +#[cfg(any(feature = "std", test))] +pub use sp_runtime::BuildStorage; +pub use sp_runtime::{Perbill, Permill}; + +/// Import the template pallet. +pub use pallet_template; + +/// An index to a block. +pub type BlockNumber = u32; + +/// Alias to 512-bit hash when used in the context of a transaction signature on the chain. +pub type Signature = MultiSignature; + +/// Some way of identifying an account on the chain. We intentionally make it equivalent +/// to the public key of our transaction signing scheme. +pub type AccountId = <::Signer as IdentifyAccount>::AccountId; + +/// Balance of an account. +pub type Balance = u128; + +/// Index of a transaction in the chain. +pub type Nonce = u32; + +/// A hash of some data used by the chain. +pub type Hash = sp_core::H256; + +/// Opaque types. These are used by the CLI to instantiate machinery that don't need to know +/// the specifics of the runtime. They can then be made to be agnostic over specific formats +/// of data like extrinsics, allowing for them to continue syncing the network through upgrades +/// to even the core data structures. +pub mod opaque { + use super::*; + + pub use sp_runtime::OpaqueExtrinsic as UncheckedExtrinsic; + + /// Opaque block header type. + pub type Header = generic::Header; + /// Opaque block type. + pub type Block = generic::Block; + /// Opaque block identifier type. + pub type BlockId = generic::BlockId; + + impl_opaque_keys! { + pub struct SessionKeys { + pub aura: Aura, + pub grandpa: Grandpa, + } + } +} + +// To learn more about runtime versioning, see: +// https://docs.substrate.io/main-docs/build/upgrade#runtime-versioning +#[sp_version::runtime_version] +pub const VERSION: RuntimeVersion = RuntimeVersion { + spec_name: create_runtime_str!("node-template"), + impl_name: create_runtime_str!("node-template"), + authoring_version: 1, + // The version of the runtime specification. A full node will not attempt to use its native + // runtime in substitute for the on-chain Wasm runtime unless all of `spec_name`, + // `spec_version`, and `authoring_version` are the same between Wasm and native. + // This value is set to 100 to notify Polkadot-JS App (https://polkadot.js.org/apps) to use + // the compatible custom types. + spec_version: 100, + impl_version: 1, + apis: RUNTIME_API_VERSIONS, + transaction_version: 1, + state_version: 1, +}; + +/// This determines the average expected block time that we are targeting. +/// Blocks will be produced at a minimum duration defined by `SLOT_DURATION`. +/// `SLOT_DURATION` is picked up by `pallet_timestamp` which is in turn picked +/// up by `pallet_aura` to implement `fn slot_duration()`. +/// +/// Change this to adjust the block time. +pub const MILLISECS_PER_BLOCK: u64 = 6000; + +// NOTE: Currently it is not possible to change the slot duration after the chain has started. +// Attempting to do so will brick block production. +pub const SLOT_DURATION: u64 = MILLISECS_PER_BLOCK; + +// Time is measured by number of blocks. +pub const MINUTES: BlockNumber = 60_000 / (MILLISECS_PER_BLOCK as BlockNumber); +pub const HOURS: BlockNumber = MINUTES * 60; +pub const DAYS: BlockNumber = HOURS * 24; + +/// The version information used to identify this runtime when compiled natively. +#[cfg(feature = "std")] +pub fn native_version() -> NativeVersion { + NativeVersion { runtime_version: VERSION, can_author_with: Default::default() } +} + +const NORMAL_DISPATCH_RATIO: Perbill = Perbill::from_percent(75); + +parameter_types! { + pub const BlockHashCount: BlockNumber = 2400; + pub const Version: RuntimeVersion = VERSION; + /// We allow for 2 seconds of compute with a 6 second average block time. + pub BlockWeights: frame_system::limits::BlockWeights = + frame_system::limits::BlockWeights::with_sensible_defaults( + Weight::from_parts(2u64 * WEIGHT_REF_TIME_PER_SECOND, u64::MAX), + NORMAL_DISPATCH_RATIO, + ); + pub BlockLength: frame_system::limits::BlockLength = frame_system::limits::BlockLength + ::max_with_normal_ratio(5 * 1024 * 1024, NORMAL_DISPATCH_RATIO); + pub const SS58Prefix: u8 = 42; +} + +// Configure FRAME pallets to include in runtime. + +impl frame_system::Config for Runtime { + /// The basic call filter to use in dispatchable. + type BaseCallFilter = frame_support::traits::Everything; + /// The block type for the runtime. + type Block = Block; + /// Block & extrinsics weights: base values and limits. + type BlockWeights = BlockWeights; + /// The maximum length of a block (in bytes). + type BlockLength = BlockLength; + /// The identifier used to distinguish between accounts. + type AccountId = AccountId; + /// The aggregated dispatch type that is available for extrinsics. + type RuntimeCall = RuntimeCall; + /// The lookup mechanism to get account ID from whatever is passed in dispatchers. + type Lookup = AccountIdLookup; + /// The type for storing how many extrinsics an account has signed. + type Nonce = Nonce; + /// The type for hashing blocks and tries. + type Hash = Hash; + /// The hashing algorithm used. + type Hashing = BlakeTwo256; + /// The ubiquitous event type. + type RuntimeEvent = RuntimeEvent; + /// The ubiquitous origin type. + type RuntimeOrigin = RuntimeOrigin; + /// Maximum number of block number to block hash mappings to keep (oldest pruned first). + type BlockHashCount = BlockHashCount; + /// The weight of database operations that the runtime can invoke. + type DbWeight = RocksDbWeight; + /// Version of the runtime. + type Version = Version; + /// Converts a module to the index of the module in `construct_runtime!`. + /// + /// This type is being generated by `construct_runtime!`. + type PalletInfo = PalletInfo; + /// What to do if a new account is created. + type OnNewAccount = (); + /// What to do if an account is fully reaped from the system. + type OnKilledAccount = (); + /// The data to be stored in an account. + type AccountData = pallet_balances::AccountData; + /// Weight information for the extrinsics of this pallet. + type SystemWeightInfo = (); + /// This is used as an identifier of the chain. 42 is the generic substrate prefix. + type SS58Prefix = SS58Prefix; + /// The set code logic, just the default since we're not a parachain. + type OnSetCode = (); + type MaxConsumers = frame_support::traits::ConstU32<16>; +} + +impl pallet_aura::Config for Runtime { + type AuthorityId = AuraId; + type DisabledValidators = (); + type MaxAuthorities = ConstU32<32>; + type AllowMultipleBlocksPerSlot = ConstBool; +} + +impl pallet_grandpa::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + + type WeightInfo = (); + type MaxAuthorities = ConstU32<32>; + type MaxSetIdSessionEntries = ConstU64<0>; + + type KeyOwnerProof = sp_core::Void; + type EquivocationReportSystem = (); +} + +impl pallet_timestamp::Config for Runtime { + /// A timestamp: milliseconds since the unix epoch. + type Moment = u64; + type OnTimestampSet = Aura; + type MinimumPeriod = ConstU64<{ SLOT_DURATION / 2 }>; + type WeightInfo = (); +} + +/// Existential deposit. +pub const EXISTENTIAL_DEPOSIT: u128 = 500; + +impl pallet_balances::Config for Runtime { + type MaxLocks = ConstU32<50>; + type MaxReserves = (); + type ReserveIdentifier = [u8; 8]; + /// The type for recording an account's balance. + type Balance = Balance; + /// The ubiquitous event type. + type RuntimeEvent = RuntimeEvent; + type DustRemoval = (); + type ExistentialDeposit = ConstU128; + type AccountStore = System; + type WeightInfo = pallet_balances::weights::SubstrateWeight; + type FreezeIdentifier = (); + type MaxFreezes = (); + type RuntimeHoldReason = (); + type MaxHolds = (); +} + +impl pallet_nicks::Config for Runtime { + type Currency = Balances; + type ReservationFee = ConstU128<100>; + type Slashed = (); + type ForceOrigin = frame_system::EnsureRoot; + type MinLength = ConstU32<8>; + type MaxLength = ConstU32<32>; + // type Event = Event; + type RuntimeEvent = RuntimeEvent; + +} + +parameter_types! { + pub FeeMultiplier: Multiplier = Multiplier::one(); +} + +impl pallet_transaction_payment::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type OnChargeTransaction = CurrencyAdapter; + type OperationalFeeMultiplier = ConstU8<5>; + type WeightToFee = IdentityFee; + type LengthToFee = IdentityFee; + type FeeMultiplierUpdate = ConstFeeMultiplier; +} + +impl pallet_sudo::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type RuntimeCall = RuntimeCall; + type WeightInfo = pallet_sudo::weights::SubstrateWeight; +} + +/// Configure the pallet-template in pallets/template. +impl pallet_template::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type WeightInfo = pallet_template::weights::SubstrateWeight; +} + +// Create the runtime by composing the FRAME pallets that were previously configured. +construct_runtime!( + pub struct Runtime { + System: frame_system, + Timestamp: pallet_timestamp, + Aura: pallet_aura, + Grandpa: pallet_grandpa, + Balances: pallet_balances, + Nicks: pallet_nicks, + TransactionPayment: pallet_transaction_payment, + Sudo: pallet_sudo, + // Include the custom logic from the pallet-template in the runtime. + TemplateModule: pallet_template, + } +); + +/// The address format for describing accounts. +pub type Address = sp_runtime::MultiAddress; +/// Block header type as expected by this runtime. +pub type Header = generic::Header; +/// Block type as expected by this runtime. +pub type Block = generic::Block; +/// The SignedExtension to the basic transaction logic. +pub type SignedExtra = ( + frame_system::CheckNonZeroSender, + frame_system::CheckSpecVersion, + frame_system::CheckTxVersion, + frame_system::CheckGenesis, + frame_system::CheckEra, + frame_system::CheckNonce, + frame_system::CheckWeight, + pallet_transaction_payment::ChargeTransactionPayment, +); + +/// Unchecked extrinsic type as expected by this runtime. +pub type UncheckedExtrinsic = + generic::UncheckedExtrinsic; +/// The payload being signed in transactions. +pub type SignedPayload = generic::SignedPayload; +/// Executive: handles dispatch to the various modules. +pub type Executive = frame_executive::Executive< + Runtime, + Block, + frame_system::ChainContext, + Runtime, + AllPalletsWithSystem, +>; + +#[cfg(feature = "runtime-benchmarks")] +#[macro_use] +extern crate frame_benchmarking; + +#[cfg(feature = "runtime-benchmarks")] +mod benches { + define_benchmarks!( + [frame_benchmarking, BaselineBench::] + [frame_system, SystemBench::] + [pallet_balances, Balances] + [pallet_timestamp, Timestamp] + [pallet_sudo, Sudo] + [pallet_template, TemplateModule] + ); +} + +impl_runtime_apis! { + impl sp_api::Core for Runtime { + fn version() -> RuntimeVersion { + VERSION + } + + fn execute_block(block: Block) { + Executive::execute_block(block); + } + + fn initialize_block(header: &::Header) { + Executive::initialize_block(header) + } + } + + impl sp_api::Metadata for Runtime { + fn metadata() -> OpaqueMetadata { + OpaqueMetadata::new(Runtime::metadata().into()) + } + + fn metadata_at_version(version: u32) -> Option { + Runtime::metadata_at_version(version) + } + + fn metadata_versions() -> sp_std::vec::Vec { + Runtime::metadata_versions() + } + } + + impl sp_block_builder::BlockBuilder for Runtime { + fn apply_extrinsic(extrinsic: ::Extrinsic) -> ApplyExtrinsicResult { + Executive::apply_extrinsic(extrinsic) + } + + fn finalize_block() -> ::Header { + Executive::finalize_block() + } + + fn inherent_extrinsics(data: sp_inherents::InherentData) -> Vec<::Extrinsic> { + data.create_extrinsics() + } + + fn check_inherents( + block: Block, + data: sp_inherents::InherentData, + ) -> sp_inherents::CheckInherentsResult { + data.check_extrinsics(&block) + } + } + + impl sp_transaction_pool::runtime_api::TaggedTransactionQueue for Runtime { + fn validate_transaction( + source: TransactionSource, + tx: ::Extrinsic, + block_hash: ::Hash, + ) -> TransactionValidity { + Executive::validate_transaction(source, tx, block_hash) + } + } + + impl sp_offchain::OffchainWorkerApi for Runtime { + fn offchain_worker(header: &::Header) { + Executive::offchain_worker(header) + } + } + + impl sp_consensus_aura::AuraApi for Runtime { + fn slot_duration() -> sp_consensus_aura::SlotDuration { + sp_consensus_aura::SlotDuration::from_millis(Aura::slot_duration()) + } + + fn authorities() -> Vec { + Aura::authorities().into_inner() + } + } + + impl sp_session::SessionKeys for Runtime { + fn generate_session_keys(seed: Option>) -> Vec { + opaque::SessionKeys::generate(seed) + } + + fn decode_session_keys( + encoded: Vec, + ) -> Option, KeyTypeId)>> { + opaque::SessionKeys::decode_into_raw_public_keys(&encoded) + } + } + + impl sp_consensus_grandpa::GrandpaApi for Runtime { + fn grandpa_authorities() -> sp_consensus_grandpa::AuthorityList { + Grandpa::grandpa_authorities() + } + + fn current_set_id() -> sp_consensus_grandpa::SetId { + Grandpa::current_set_id() + } + + fn submit_report_equivocation_unsigned_extrinsic( + _equivocation_proof: sp_consensus_grandpa::EquivocationProof< + ::Hash, + NumberFor, + >, + _key_owner_proof: sp_consensus_grandpa::OpaqueKeyOwnershipProof, + ) -> Option<()> { + None + } + + fn generate_key_ownership_proof( + _set_id: sp_consensus_grandpa::SetId, + _authority_id: GrandpaId, + ) -> Option { + // NOTE: this is the only implementation possible since we've + // defined our key owner proof type as a bottom type (i.e. a type + // with no values). + None + } + } + + impl frame_system_rpc_runtime_api::AccountNonceApi for Runtime { + fn account_nonce(account: AccountId) -> Nonce { + System::account_nonce(account) + } + } + + impl pallet_transaction_payment_rpc_runtime_api::TransactionPaymentApi for Runtime { + fn query_info( + uxt: ::Extrinsic, + len: u32, + ) -> pallet_transaction_payment_rpc_runtime_api::RuntimeDispatchInfo { + TransactionPayment::query_info(uxt, len) + } + fn query_fee_details( + uxt: ::Extrinsic, + len: u32, + ) -> pallet_transaction_payment::FeeDetails { + TransactionPayment::query_fee_details(uxt, len) + } + fn query_weight_to_fee(weight: Weight) -> Balance { + TransactionPayment::weight_to_fee(weight) + } + fn query_length_to_fee(length: u32) -> Balance { + TransactionPayment::length_to_fee(length) + } + } + + impl pallet_transaction_payment_rpc_runtime_api::TransactionPaymentCallApi + for Runtime + { + fn query_call_info( + call: RuntimeCall, + len: u32, + ) -> pallet_transaction_payment::RuntimeDispatchInfo { + TransactionPayment::query_call_info(call, len) + } + fn query_call_fee_details( + call: RuntimeCall, + len: u32, + ) -> pallet_transaction_payment::FeeDetails { + TransactionPayment::query_call_fee_details(call, len) + } + fn query_weight_to_fee(weight: Weight) -> Balance { + TransactionPayment::weight_to_fee(weight) + } + fn query_length_to_fee(length: u32) -> Balance { + TransactionPayment::length_to_fee(length) + } + } + + #[cfg(feature = "runtime-benchmarks")] + impl frame_benchmarking::Benchmark for Runtime { + fn benchmark_metadata(extra: bool) -> ( + Vec, + Vec, + ) { + use frame_benchmarking::{baseline, Benchmarking, BenchmarkList}; + use frame_support::traits::StorageInfoTrait; + use frame_system_benchmarking::Pallet as SystemBench; + use baseline::Pallet as BaselineBench; + + let mut list = Vec::::new(); + list_benchmarks!(list, extra); + + let storage_info = AllPalletsWithSystem::storage_info(); + + (list, storage_info) + } + + fn dispatch_benchmark( + config: frame_benchmarking::BenchmarkConfig + ) -> Result, sp_runtime::RuntimeString> { + use frame_benchmarking::{baseline, Benchmarking, BenchmarkBatch, TrackedStorageKey}; + + use frame_system_benchmarking::Pallet as SystemBench; + use baseline::Pallet as BaselineBench; + + impl frame_system_benchmarking::Config for Runtime {} + impl baseline::Config for Runtime {} + + use frame_support::traits::WhitelistedStorageKeys; + let whitelist: Vec = AllPalletsWithSystem::whitelisted_storage_keys(); + + let mut batches = Vec::::new(); + let params = (&config, &whitelist); + add_benchmarks!(params, batches); + + Ok(batches) + } + } + + #[cfg(feature = "try-runtime")] + impl frame_try_runtime::TryRuntime for Runtime { + fn on_runtime_upgrade(checks: frame_try_runtime::UpgradeCheckSelect) -> (Weight, Weight) { + // NOTE: intentional unwrap: we don't want to propagate the error backwards, and want to + // have a backtrace here. If any of the pre/post migration checks fail, we shall stop + // right here and right now. + let weight = Executive::try_runtime_upgrade(checks).unwrap(); + (weight, BlockWeights::get().max_block) + } + + fn execute_block( + block: Block, + state_root_check: bool, + signature_check: bool, + select: frame_try_runtime::TryStateSelect + ) -> Weight { + // NOTE: intentional unwrap: we don't want to propagate the error backwards, and want to + // have a backtrace here. + Executive::try_execute_block(block, state_root_check, signature_check, select).expect("execute-block failed") + } + } +} diff --git a/rust-toolchain.toml b/rust-toolchain.toml new file mode 100644 index 0000000..64daeff --- /dev/null +++ b/rust-toolchain.toml @@ -0,0 +1,14 @@ +[toolchain] +channel = "nightly" +components = [ + "cargo", + "clippy", + "rust-analyzer", + "rust-src", + "rust-std", + "rustc-dev", + "rustc", + "rustfmt", +] +targets = [ "wasm32-unknown-unknown" ] +profile = "minimal" diff --git a/rustfmt.toml b/rustfmt.toml new file mode 100644 index 0000000..441913f --- /dev/null +++ b/rustfmt.toml @@ -0,0 +1,23 @@ +# Basic +hard_tabs = true +max_width = 100 +use_small_heuristics = "Max" +# Imports +imports_granularity = "Crate" +reorder_imports = true +# Consistency +newline_style = "Unix" +# Format comments +comment_width = 100 +wrap_comments = true +# Misc +chain_width = 80 +spaces_around_ranges = false +binop_separator = "Back" +reorder_impl_items = false +match_arm_leading_pipes = "Preserve" +match_arm_blocks = false +match_block_trailing_comma = true +trailing_comma = "Vertical" +trailing_semicolon = false +use_field_init_shorthand = true diff --git a/scripts/init.sh b/scripts/init.sh new file mode 100755 index 0000000..f976f72 --- /dev/null +++ b/scripts/init.sh @@ -0,0 +1,12 @@ +#!/usr/bin/env bash +# This script is meant to be run on Unix/Linux based systems +set -e + +echo "*** Initializing WASM build environment" + +if [ -z $CI_PROJECT_NAME ] ; then + rustup update nightly + rustup update stable +fi + +rustup target add wasm32-unknown-unknown --toolchain nightly diff --git a/shell.nix b/shell.nix new file mode 100644 index 0000000..c08005c --- /dev/null +++ b/shell.nix @@ -0,0 +1,35 @@ +let + mozillaOverlay = + import (builtins.fetchGit { + url = "https://github.com/mozilla/nixpkgs-mozilla.git"; + rev = "57c8084c7ef41366993909c20491e359bbb90f54"; + }); + pinned = builtins.fetchGit { + # Descriptive name to make the store path easier to identify + url = "https://github.com/nixos/nixpkgs/"; + # Commit hash for nixos-unstable as of 2020-04-26 + # `git ls-remote https://github.com/nixos/nixpkgs nixos-unstable` + ref = "refs/heads/nixos-unstable"; + rev = "1fe6ed37fd9beb92afe90671c0c2a662a03463dd"; + }; + nixpkgs = import pinned { overlays = [ mozillaOverlay ]; }; + toolchain = with nixpkgs; (rustChannelOf { date = "2021-09-14"; channel = "nightly"; }); + rust-wasm = toolchain.rust.override { + targets = [ "wasm32-unknown-unknown" ]; + }; +in +with nixpkgs; pkgs.mkShell { + buildInputs = [ + clang + pkg-config + rust-wasm + ] ++ stdenv.lib.optionals stdenv.isDarwin [ + darwin.apple_sdk.frameworks.Security + ]; + + LIBCLANG_PATH = "${llvmPackages.libclang}/lib"; + PROTOC = "${protobuf}/bin/protoc"; + RUST_SRC_PATH = "${toolchain.rust-src}/lib/rustlib/src/rust/library/"; + ROCKSDB_LIB_DIR = "${rocksdb}/lib"; + +}