diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 19c5f8e588..828d2caec0 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -74,6 +74,11 @@ updates: schedule: interval: "monthly" + - package-ecosystem: "cargo" + directory: "/runtime/generate-bags" + schedule: + interval: "monthly" + - package-ecosystem: "cargo" directory: "/sha3pow" schedule: diff --git a/.github/runner.bicep b/.github/runner.bicep index f1112581bd..17fb7e9a44 100644 --- a/.github/runner.bicep +++ b/.github/runner.bicep @@ -5,6 +5,8 @@ param vmName string = toLower('github-runner-${uniqueString(resourceGroup().id, @description('Username for the Virtual Machine.') param adminUsername string = 'ubuntu' +var authenticationType = 'sshPublicKey' + @description('SSH Key value for the Virtual Machine.') @secure() param adminPasswordOrKey string @@ -826,6 +828,8 @@ resource publicIP 'Microsoft.Network/publicIPAddresses@2021-05-01' = { } resource vm 'Microsoft.Compute/virtualMachines@2021-11-01' = { + // checkov:skip=CKV_AZURE_97:'Microsoft.Compute/EncryptionAtHost' feature is not enabled for this subscription. + // checkov:skip=CKV_AZURE_151:Now a Windows VM and EncryptionAtHost feature not enabled for this subscription. name: vmName location: location properties: { @@ -859,6 +863,7 @@ resource vm 'Microsoft.Compute/virtualMachines@2021-11-01' = { adminUsername: adminUsername adminPassword: adminPasswordOrKey linuxConfiguration: linuxConfiguration + allowExtensionOperations: false } } } diff --git a/.github/workflows/bench.yml b/.github/workflows/bench.yml index 18ecd9a52f..601c6a1153 100644 --- a/.github/workflows/bench.yml +++ b/.github/workflows/bench.yml @@ -20,7 +20,7 @@ jobs: outputs: needs-bench: ${{ steps.version-check.outputs.needs_bench }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: fetch-depth: 0 @@ -34,7 +34,7 @@ jobs: needs: check-if-needed if: needs.check-if-needed.outputs.needs-bench == 1 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Inspect benchmark CI config run: | @@ -57,11 +57,11 @@ jobs: - name: Configure rustc version run: | - source ci/env + RUSTC_VERSION=$(grep channel rust-toolchain.toml | tail -n1 | tr -d " " | cut -f2 -d'"') echo "RUSTC_VERSION=$RUSTC_VERSION" >> "$GITHUB_ENV" - name: Install Rust toolchain - uses: actions-rs/toolchain@v1 + uses: gluwa/toolchain@dev with: toolchain: ${{ env.RUSTC_VERSION }} target: wasm32-unknown-unknown @@ -70,13 +70,13 @@ jobs: - uses: Swatinem/rust-cache@v2 - name: Build benchmarks - uses: actions-rs/cargo@v1 + uses: gluwa/cargo@dev with: command: build args: --release --features runtime-benchmarks - name: Upload benchmark binary - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: creditcoin-node path: target/release/creditcoin-node @@ -89,7 +89,7 @@ jobs: resource_group: ${{ steps.get-env.outputs.resource_group }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Install azure-cli run: | @@ -155,7 +155,7 @@ jobs: needs: - deploy-github-runner steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: fetch-depth: 10 repository: ${{ github.event.pull_request.head.repo.full_name }} @@ -167,7 +167,7 @@ jobs: echo "HOME=/home/actions" >> "$GITHUB_ENV" - name: Download benchmark binary - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: creditcoin-node path: target/release @@ -245,7 +245,7 @@ jobs: if: ${{ always() && needs.deploy-github-runner.result != 'skipped' }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Evaluate env vars id: get-env @@ -269,7 +269,7 @@ jobs: az group delete --yes -n "${{ steps.get-env.outputs.resource_group }}" - name: Upload logs - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 if: always() with: name: "Azure resources" diff --git a/.github/workflows/check-runtime-changes.yml b/.github/workflows/check-runtime-changes.yml index 797fd386a7..0e9c186fe0 100644 --- a/.github/workflows/check-runtime-changes.yml +++ b/.github/workflows/check-runtime-changes.yml @@ -11,7 +11,7 @@ jobs: check-version: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: fetch-depth: 0 @@ -22,7 +22,7 @@ jobs: danger-will-brick-the-blockchain: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: fetch-depth: 0 diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f9c69a2cf8..bdd1113563 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -18,7 +18,7 @@ jobs: docker-build: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Build docker image run: | @@ -32,7 +32,6 @@ jobs: docker run --rm --name creditcoin-validator -d -p 9933:9933 -p 30333:30333 gluwa/creditcoin \ --validator --chain mainnet \ - --mining-key 5DkPYq8hFiCeGxFBkz6DAwnTrvKevAJfTYrzFtr9hpDsEAU1 \ --name "test-node-$GITHUB_RUN_ID-attempt-$GITHUB_RUN_ATTEMPT" \ --public-addr "/dns4/$IP_ADDRESS/tcp/30333" \ --prometheus-external \ @@ -59,9 +58,9 @@ jobs: docker rm -f creditcoin-validator sleep 10 - - name: Start docker-compose + - name: Start container via compose run: | - docker-compose up -d + docker compose up -d - name: Sanity check for persistently mounted directory run: | @@ -77,7 +76,7 @@ jobs: sanity-tests: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Check for parity between extrinsics, benchmarks and weights run: | @@ -97,12 +96,12 @@ jobs: sanity-test-cli: runs-on: ubuntu-22.04 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Install Node.js - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: - node-version: 16 + node-version: 20 - run: npm install -g yarn - name: Install creditcoin-js & creditcoin-cli @@ -119,7 +118,7 @@ jobs: name: cargo audit runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Set-Up run: | @@ -128,11 +127,11 @@ jobs: - name: Configure rustc version run: | - source ci/env + RUSTC_VERSION=$(grep channel rust-toolchain.toml | tail -n1 | tr -d " " | cut -f2 -d'"') echo "RUSTC_VERSION=$RUSTC_VERSION" >> "$GITHUB_ENV" - name: Install Rust toolchain - uses: actions-rs/toolchain@v1 + uses: gluwa/toolchain@dev with: toolchain: ${{ env.RUSTC_VERSION }} target: wasm32-unknown-unknown @@ -163,15 +162,15 @@ jobs: name: Rustfmt runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Configure rustc version run: | - source ci/env + RUSTC_VERSION=$(grep channel rust-toolchain.toml | tail -n1 | tr -d " " | cut -f2 -d'"') echo "RUSTC_VERSION=$RUSTC_VERSION" >> "$GITHUB_ENV" - name: Install Rust toolchain - uses: actions-rs/toolchain@v1 + uses: gluwa/toolchain@dev with: toolchain: ${{ env.RUSTC_VERSION }} profile: minimal @@ -179,7 +178,7 @@ jobs: components: rustfmt - name: Check formatting - uses: actions-rs/cargo@v1 + uses: gluwa/cargo@dev with: command: fmt args: -- --check @@ -188,7 +187,7 @@ jobs: name: Clippy runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Set-Up run: | @@ -197,11 +196,11 @@ jobs: - name: Configure rustc version run: | - source ci/env + RUSTC_VERSION=$(grep channel rust-toolchain.toml | tail -n1 | tr -d " " | cut -f2 -d'"') echo "RUSTC_VERSION=$RUSTC_VERSION" >> "$GITHUB_ENV" - name: Install Rust toolchain - uses: actions-rs/toolchain@v1 + uses: gluwa/toolchain@dev with: toolchain: ${{ env.RUSTC_VERSION }} target: wasm32-unknown-unknown @@ -211,7 +210,7 @@ jobs: - uses: Swatinem/rust-cache@v2 - name: Run Clippy - uses: actions-rs/cargo@v1 + uses: gluwa/cargo@dev with: command: clippy args: --all-targets --all-features -- -D warnings -A clippy::too_many_arguments -A clippy::type_complexity @@ -223,7 +222,7 @@ jobs: # 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 + - uses: actions/checkout@v4 - name: Set-Up run: | @@ -232,11 +231,11 @@ jobs: - name: Configure rustc version run: | - source ci/env + RUSTC_VERSION=$(grep channel rust-toolchain.toml | tail -n1 | tr -d " " | cut -f2 -d'"') echo "RUSTC_VERSION=$RUSTC_VERSION" >> "$GITHUB_ENV" - name: Install Rust toolchain - uses: actions-rs/toolchain@v1 + uses: gluwa/toolchain@dev with: toolchain: ${{ env.RUSTC_VERSION }} target: wasm32-unknown-unknown @@ -255,7 +254,7 @@ jobs: unit-test-creditcoin: runs-on: macos-12 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Set-Up env: @@ -267,11 +266,11 @@ jobs: - name: Configure rustc version run: | - source ci/env + RUSTC_VERSION=$(grep channel rust-toolchain.toml | tail -n1 | tr -d " " | cut -f2 -d'"') echo "RUSTC_VERSION=$RUSTC_VERSION" >> "$GITHUB_ENV" - name: Install Rust toolchain - uses: actions-rs/toolchain@v1 + uses: gluwa/toolchain@dev with: toolchain: ${{ env.RUSTC_VERSION }} target: wasm32-unknown-unknown @@ -287,7 +286,7 @@ jobs: echo "RUSTDOCFLAGS=-Zprofile -Ccodegen-units=1 -Cinline-threshold=0 -Clink-dead-code -Coverflow-checks=off -Cpanic=abort -Zpanic_abort_tests" >> "$GITHUB_ENV" - name: Run tests - uses: actions-rs/cargo@v1 + uses: gluwa/cargo@dev with: command: test args: --features=try-runtime -- --test-threads 1 @@ -295,12 +294,14 @@ jobs: CARGO_INCREMENTAL: ${{ env.CARGO_INCREMENTAL }} RUSTFLAGS: ${{ env.RUSTFLAGS }} RUSTDOCFLAGS: ${{ env.RUSTDOCFLAGS }} + - id: coverage + continue-on-error: true uses: actions-rs/grcov@v0.1 with: config: .grcov.yml - - uses: codecov/codecov-action@v3 + - uses: codecov/codecov-action@v4 with: files: ${{ steps.coverage.outputs.report }} fail_ci_if_error: false @@ -309,12 +310,12 @@ jobs: unit-test-cli: runs-on: ubuntu-22.04 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Install Node.js - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: - node-version: 16 + node-version: 20 - run: npm install -g yarn - name: Execute tests @@ -326,7 +327,7 @@ jobs: yarn test:unit popd - - uses: codecov/codecov-action@v3 + - uses: codecov/codecov-action@v4 with: files: scripts/cc-cli/coverage/lcov.info fail_ci_if_error: false @@ -335,7 +336,7 @@ jobs: build-creditcoin-node: runs-on: ubuntu-22.04 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Set-Up run: | @@ -344,11 +345,11 @@ jobs: - name: Configure rustc version run: | - source ci/env + RUSTC_VERSION=$(grep channel rust-toolchain.toml | tail -n1 | tr -d " " | cut -f2 -d'"') echo "RUSTC_VERSION=$RUSTC_VERSION" >> "$GITHUB_ENV" - name: Install Rust toolchain - uses: actions-rs/toolchain@v1 + uses: gluwa/toolchain@dev with: toolchain: ${{ env.RUSTC_VERSION }} target: wasm32-unknown-unknown @@ -357,19 +358,19 @@ jobs: - uses: Swatinem/rust-cache@v2 - name: Build SUT - uses: actions-rs/cargo@v1 + uses: gluwa/cargo@dev with: command: build args: --release --features fast-runtime - name: Upload creditcoin-node binary - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: creditcoin-node path: target/release/creditcoin-node - name: Upload WASM runtime - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: creditcoin_node_runtime.compact.compressed.wasm path: target/release/wbuild/creditcoin-node-runtime/creditcoin_node_runtime.compact.compressed.wasm @@ -379,22 +380,22 @@ jobs: - build-creditcoin-node runs-on: ubuntu-22.04 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Start local Ethereum node run: | docker run --rm -p 8545:8545 -d gluwa/hardhat-dev - name: Download creditcoin-node binary - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: creditcoin-node path: target/release - name: Install Node.js - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: - node-version: 16 + node-version: 20 - run: npm install -g yarn - name: Install creditcoin-js & creditcoin-cli @@ -417,7 +418,8 @@ jobs: --chain local \ --validator --bob --pruning archive \ --bootnodes /ip4/127.0.0.1/tcp/30333/p2p/12D3KooWKEKymnBDKfa8MkMWiLE6DYbC4aAUciqmYucm7xFKK3Au \ - --port 30335 --ws-port 9945 --rpc-port 9935 & + --port 30335 --ws-port 9945 --rpc-port 9935 \ + --base-path ./bob-data & - name: Wait for nodes to start run: | @@ -431,7 +433,7 @@ jobs: popd - name: Upload code coverage - uses: codecov/codecov-action@v3 + uses: codecov/codecov-action@v4 with: files: scripts/cc-cli/coverage/lcov.info fail_ci_if_error: false @@ -448,7 +450,6 @@ jobs: build-creditcoin-transaction-producer: runs-on: ubuntu-latest - steps: - uses: actions/checkout@v4 with: @@ -462,12 +463,12 @@ jobs: echo "RUSTC_VERSION=$RUSTC_VERSION" >> "$GITHUB_ENV" - name: Install Node.js - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: - node-version: 18 + node-version: 20 - name: Install Rust toolchain - uses: actions-rs/toolchain@v1 + uses: gluwa/toolchain@dev with: toolchain: ${{ env.RUSTC_VERSION }} target: wasm32-unknown-unknown @@ -489,7 +490,7 @@ jobs: tar -czvf creditcoin-transaction-producer.tar.gz creditcoin-transaction-producer/ - name: Upload creditcoin-transaction-producer archive - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: path: creditcoin-transaction-producer.tar.gz name: creditcoin-transaction-producer.tar.gz @@ -506,7 +507,7 @@ jobs: docker run --rm -p 8545:8545 -d gluwa/hardhat-dev - name: Download creditcoin-node binary - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: creditcoin-node path: target/release @@ -514,7 +515,7 @@ jobs: - name: Start creditcoin-node run: | chmod a+x ./target/release/creditcoin-node - ./target/release/creditcoin-node --dev --mining-key 5DkPYq8hFiCeGxFBkz6DAwnTrvKevAJfTYrzFtr9hpDsEAU1 --monitor-nonce auto >~/creditcoin-node.log 2>&1 & + ./target/release/creditcoin-node --dev --monitor-nonce auto >~/creditcoin-node.log 2>&1 & - uses: actions/checkout@v4 @@ -523,7 +524,7 @@ jobs: ./integration-tests/wait-for-creditcoin.sh - name: Download creditcoin-transaction-producer archive - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: creditcoin-transaction-producer.tar.gz @@ -547,7 +548,7 @@ jobs: ./scripts/check-transaction-producer.sh - name: Upload logs - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 if: always() with: name: transaction-producer-logs @@ -567,14 +568,14 @@ jobs: # checkov:skip=CKV2_GHA_1:We need this for creditcoin-js typedefs auto-commit permissions: write-all steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: fetch-depth: 10 repository: ${{ github.event.pull_request.head.repo.full_name }} ref: ${{ github.event.pull_request.head.ref }} - name: Download creditcoin-node binary - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: creditcoin-node path: target/release @@ -582,16 +583,16 @@ jobs: - name: Start SUT run: | chmod a+x ./target/release/creditcoin-node - ./target/release/creditcoin-node --dev --mining-key 5DkPYq8hFiCeGxFBkz6DAwnTrvKevAJfTYrzFtr9hpDsEAU1 --monitor-nonce auto >~/creditcoin-node.log 2>&1 & + ./target/release/creditcoin-node --dev --monitor-nonce auto >~/creditcoin-node.log 2>&1 & - name: Start local Ethereum node run: | docker run --rm -p 8545:8545 -d gluwa/hardhat-dev - name: Install Node.js - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: - node-version: 16 + node-version: 20 - run: npm install -g yarn - name: Prepare for integration tests @@ -648,7 +649,7 @@ jobs: github_token: ${{ secrets.CREDITCOIN_GITHUB_API_TOKEN }} - name: Upload logs - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 if: always() with: name: logs @@ -670,12 +671,12 @@ jobs: [creditcoin-js, integration-tests, scripts/js, scripts/cc-cli] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Install Node.js - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: - node-version: 16 + node-version: 20 - run: npm install -g yarn - name: Run tools @@ -696,12 +697,12 @@ jobs: [creditcoin-js, integration-tests, scripts/js, scripts/cc-cli] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Install Node.js - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: - node-version: 16 + node-version: 20 - run: npm install -g yarn - name: Run tools @@ -722,12 +723,12 @@ jobs: [creditcoin-js, integration-tests, scripts/js, scripts/cc-cli] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Install Node.js - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: - node-version: 16 + node-version: 20 - run: npm install -g yarn - name: Run tools @@ -747,7 +748,7 @@ jobs: benchmark: runs-on: ubuntu-22.04 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Inspect benchmark CI config run: | @@ -770,11 +771,11 @@ jobs: - name: Configure rustc version run: | - source ci/env + RUSTC_VERSION=$(grep channel rust-toolchain.toml | tail -n1 | tr -d " " | cut -f2 -d'"') echo "RUSTC_VERSION=$RUSTC_VERSION" >> "$GITHUB_ENV" - name: Install Rust toolchain - uses: actions-rs/toolchain@v1 + uses: gluwa/toolchain@dev with: toolchain: ${{ env.RUSTC_VERSION }} target: wasm32-unknown-unknown @@ -783,7 +784,7 @@ jobs: - uses: Swatinem/rust-cache@v2 - name: Build benchmarks - uses: actions-rs/cargo@v1 + uses: gluwa/cargo@dev with: command: build args: --release --features runtime-benchmarks @@ -801,7 +802,7 @@ jobs: # check if automatically generated weights compile - name: Rebuild SUT with newly generated weights - uses: actions-rs/cargo@v1 + uses: gluwa/cargo@dev with: command: build args: --release @@ -810,7 +811,7 @@ jobs: name: "🐚 Shellcheck" runs-on: ubuntu-22.04 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Run ShellCheck uses: ludeeus/action-shellcheck@2.0.0 env: diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 982efd8107..d14e7414c3 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -38,11 +38,11 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@v2 + uses: github/codeql-action/init@v3 with: languages: ${{ matrix.language }} # If you wish to specify custom queries, you can do so here or in a config file. @@ -55,7 +55,7 @@ jobs: # Autobuild attempts to build any compiled languages (C/C++, C#, Go, or Java). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild - uses: github/codeql-action/autobuild@v2 + uses: github/codeql-action/autobuild@v3 # ℹī¸ Command-line programs to run using the OS shell. # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun @@ -68,6 +68,6 @@ jobs: # ./location_of_script_within_repo/buildscript.sh - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v2 + uses: github/codeql-action/analyze@v3 with: category: "/language:${{matrix.language}}" diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml index 74c77ec440..b8ffb43b91 100644 --- a/.github/workflows/deploy-docs.yml +++ b/.github/workflows/deploy-docs.yml @@ -14,11 +14,11 @@ jobs: # checkov:skip=CKV2_GHA_1:We need this for the git push command below permissions: write-all steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: fetch-depth: 0 - name: Install mdbook - uses: taiki-e/install-action@v2.17.8 + uses: taiki-e/install-action@v2.42.14 with: tool: mdbook,mdbook-mermaid - name: Deploy GitHub Pages diff --git a/.github/workflows/extrinsics.yml b/.github/workflows/extrinsics.yml index d6b28b3f9c..7d7a67465f 100644 --- a/.github/workflows/extrinsics.yml +++ b/.github/workflows/extrinsics.yml @@ -18,11 +18,11 @@ jobs: name: Extrinsics runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Install Node Dependencies - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: - node-version: 16.x + node-version: 20 - run: npm install --ignore-scripts -g @polkadot/metadata-cmp - name: Set-Up @@ -32,11 +32,11 @@ jobs: - name: Configure rustc version run: | - source ci/env + RUSTC_VERSION=$(grep channel rust-toolchain.toml | tail -n1 | tr -d " " | cut -f2 -d'"') echo "RUSTC_VERSION=$RUSTC_VERSION" >> "$GITHUB_ENV" - name: Install Rust toolchain - uses: actions-rs/toolchain@v1 + uses: gluwa/toolchain@dev with: toolchain: ${{ env.RUSTC_VERSION }} target: wasm32-unknown-unknown @@ -45,7 +45,7 @@ jobs: - uses: Swatinem/rust-cache@v2 - name: Build Release - uses: actions-rs/cargo@v1 + uses: gluwa/cargo@dev with: command: build args: --release @@ -58,7 +58,7 @@ jobs: #Upload logs if nodes are not connecting. #head-node.log and release-node.log are created in ./scripts/check-extrinsics.sh - name: Upload logs - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 if: always() with: if-no-files-found: warn diff --git a/.github/workflows/llvm-cov.yml b/.github/workflows/llvm-cov.yml index a3e17d3462..8438d5fa29 100644 --- a/.github/workflows/llvm-cov.yml +++ b/.github/workflows/llvm-cov.yml @@ -13,7 +13,7 @@ jobs: permissions: pull-requests: write steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Set-Up run: | @@ -25,11 +25,11 @@ jobs: - name: Configure rustc version run: | - source ci/env + RUSTC_VERSION=$(grep channel rust-toolchain.toml | tail -n1 | tr -d " " | cut -f2 -d'"') echo "RUSTC_VERSION=$RUSTC_VERSION" >> "$GITHUB_ENV" - name: Install Rust toolchain - uses: actions-rs/toolchain@v1 + uses: gluwa/toolchain@dev with: toolchain: ${{ env.RUSTC_VERSION }} components: llvm-tools-preview @@ -39,7 +39,7 @@ jobs: - uses: Swatinem/rust-cache@v2 - name: Install cargo-llvm-cov - uses: taiki-e/install-action@v2.17.8 + uses: taiki-e/install-action@v2.42.14 with: tool: cargo-llvm-cov @@ -69,7 +69,7 @@ jobs: if: env.GITHUB_TOKEN env: GITHUB_TOKEN: ${{ secrets.CREDITCOIN_GITHUB_API_TOKEN }} - uses: azure/login@v1 + uses: azure/login@v2 with: creds: ${{ secrets.AZURE_CREDENTIALS }} allow-no-subscriptions: true @@ -96,7 +96,7 @@ jobs: allow-repeats: false - name: Upload coverage report as artifact - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: coverage-report path: target/llvm-cov/html/ diff --git a/.github/workflows/mega-linter.yml b/.github/workflows/mega-linter.yml index 90fe138fb2..4423af0ba2 100644 --- a/.github/workflows/mega-linter.yml +++ b/.github/workflows/mega-linter.yml @@ -26,7 +26,7 @@ jobs: steps: # Git Checkout - name: Checkout Code - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: token: ${{ secrets.PAT || secrets.GITHUB_TOKEN }} fetch-depth: 0 # If you use VALIDATE_ALL_CODEBASE = true, you can remove this line to improve performances @@ -45,8 +45,8 @@ jobs: # Upload MegaLinter artifacts - name: Archive production artifacts - if: ${{ success() }} || ${{ failure() }} - uses: actions/upload-artifact@v3 + if: success() || failure() + uses: actions/upload-artifact@v4 with: name: MegaLinter reports path: | @@ -57,7 +57,7 @@ jobs: - name: Create Pull Request with applied fixes id: cpr if: steps.ml.outputs.has_updated_sources == 1 && (env.APPLY_FIXES_EVENT == 'all' || env.APPLY_FIXES_EVENT == github.event_name) && env.APPLY_FIXES_MODE == 'pull_request' && (github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository) - uses: peter-evans/create-pull-request@v5 + uses: peter-evans/create-pull-request@v6 with: token: ${{ secrets.PAT || secrets.GITHUB_TOKEN }} commit-message: "[MegaLinter] Apply linters automatic fixes" @@ -75,7 +75,7 @@ jobs: run: sudo chown -Rc $UID .git/ - name: Commit and push applied linter fixes if: steps.ml.outputs.has_updated_sources == 1 && (env.APPLY_FIXES_EVENT == 'all' || env.APPLY_FIXES_EVENT == github.event_name) && env.APPLY_FIXES_MODE == 'commit' && github.ref != 'refs/heads/dev' && (github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository) - uses: stefanzweifel/git-auto-commit-action@v4 + uses: stefanzweifel/git-auto-commit-action@v5 with: branch: ${{ github.event.pull_request.head.ref || github.head_ref || github.ref }} commit_message: "[MegaLinter] Apply linters fixes" diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index bf8fa5df90..77e8507d4a 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -12,7 +12,7 @@ jobs: sanity-check: runs-on: ubuntu-22.04 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: fetch-depth: 0 @@ -29,7 +29,7 @@ jobs: runs-on: ${{ matrix.operating-system }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: fetch-depth: 0 @@ -40,18 +40,18 @@ jobs: sudo apt install -y cmake pkg-config libssl-dev git build-essential clang libclang-dev curl - name: Install protobuf - uses: arduino/setup-protoc@v2 + uses: arduino/setup-protoc@v3 with: repo-token: ${{ secrets.GITHUB_TOKEN }} - name: Configure rustc version shell: bash run: | - source ci/env + RUSTC_VERSION=$(grep channel rust-toolchain.toml | tail -n1 | tr -d " " | cut -f2 -d'"') echo "RUSTC_VERSION=$RUSTC_VERSION" >> "$GITHUB_ENV" - name: Install Rust toolchain - uses: actions-rs/toolchain@v1 + uses: gluwa/toolchain@dev with: toolchain: ${{ env.RUSTC_VERSION }} target: wasm32-unknown-unknown @@ -60,7 +60,7 @@ jobs: - name: Install MacOS aarch64 target if: matrix.operating-system == 'macos-11' - uses: actions-rs/toolchain@v1 + uses: gluwa/toolchain@dev with: toolchain: ${{ env.RUSTC_VERSION }} target: aarch64-apple-darwin @@ -87,20 +87,20 @@ jobs: echo "Tag & Platform is '${{ env.TAG_NAME }}-${{ env.PLATFORM }}'" - name: Build - uses: actions-rs/cargo@v1 + uses: gluwa/cargo@dev with: command: build args: --release - name: Build MacOS aarch64 target if: matrix.operating-system == 'macos-11' - uses: actions-rs/cargo@v1 + uses: gluwa/cargo@dev with: command: build args: --release --target aarch64-apple-darwin - name: Compress - uses: thedoctor0/zip-release@0.7.1 + uses: thedoctor0/zip-release@0.7.6 with: type: "zip" directory: "target/release/" @@ -110,7 +110,7 @@ jobs: - name: Compress MacOS aarch64 target if: matrix.operating-system == 'macos-11' - uses: thedoctor0/zip-release@0.7.1 + uses: thedoctor0/zip-release@0.7.6 with: type: "zip" directory: "target/aarch64-apple-darwin/release/" @@ -119,8 +119,10 @@ jobs: exclusions: "creditcoin-node.d" - name: Upload binary - uses: actions/upload-artifact@v3 + if: matrix.operating-system != 'windows-2022' + uses: actions/upload-artifact@v4 with: + name: binary-for-${{ matrix.operating-system }} path: "creditcoin-${{ env.TAG_NAME }}-*.zip" if-no-files-found: error @@ -128,7 +130,7 @@ jobs: needs: sanity-check runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: fetch-depth: 0 @@ -159,8 +161,9 @@ jobs: mv ${{ steps.srtool_build.outputs.wasm }} creditcoin-${{ env.TAG_NAME }}-runtime.wasm - name: Upload binary - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: + name: binary-for-wasm path: "*.wasm" if-no-files-found: error @@ -168,7 +171,7 @@ jobs: needs: sanity-check runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: fetch-depth: 0 @@ -181,25 +184,31 @@ jobs: - name: Build docker image run: | docker build -t gluwa/creditcoin:${{ env.TAG_NAME }} . - docker tag gluwa/creditcoin:${{ env.TAG_NAME }} gluwa/creditcoin:latest echo "${{ secrets.DOCKER_PUSH_PASSWORD }}" | docker login -u="${{ secrets.DOCKER_PUSH_USERNAME }}" --password-stdin docker push gluwa/creditcoin:${{ env.TAG_NAME }} - docker push gluwa/creditcoin:latest + + # only -mainnet images are tagged as :latest + # shellcheck disable=SC2046,SC2143 + if [ $(echo "${{ env.TAG_NAME}}" | grep "mainnet") ]; then + docker tag gluwa/creditcoin:${{ env.TAG_NAME }} gluwa/creditcoin:latest + docker push gluwa/creditcoin:latest + fi + docker logout build-creditcoin-js: needs: sanity-check runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: fetch-depth: 0 - name: Install Node.js - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: - node-version: 16 + node-version: 20 - run: npm install -g yarn - name: Figure out tag name @@ -221,8 +230,9 @@ jobs: popd - name: Upload binary - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: + name: binary-for-creditcoin-js path: "creditcoin-js/creditcoin-js-v${{ env.TAG_NAME }}.tgz" if-no-files-found: error @@ -235,7 +245,7 @@ jobs: - build-wasm-runtime - build-creditcoin-js steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: fetch-depth: 0 @@ -246,7 +256,11 @@ jobs: echo "TAG_NAME=$TAG_NAME" >> "$GITHUB_ENV" - name: Download binaries - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 + with: + path: artifact + pattern: binary-for-* + merge-multiple: true - name: DEBUG shell: bash @@ -254,7 +268,7 @@ jobs: ls -lR - name: Make the release - uses: softprops/action-gh-release@v1 + uses: softprops/action-gh-release@v2 with: files: "artifact/creditcoin-*${{ env.TAG_NAME }}*" fail_on_unmatched_files: true diff --git a/.github/workflows/runtime-upgrade.yml b/.github/workflows/runtime-upgrade.yml index 9732428427..c8913bcb20 100644 --- a/.github/workflows/runtime-upgrade.yml +++ b/.github/workflows/runtime-upgrade.yml @@ -20,14 +20,14 @@ jobs: target_chain: ${{ steps.testnet-env.outputs.target_chain || steps.mainnet-env.outputs.target_chain }} boot_node: ${{ steps.testnet-env.outputs.boot_node || steps.mainnet-env.outputs.boot_node }} rpc_url: ${{ steps.testnet-env.outputs.rpc_url || steps.mainnet-env.outputs.rpc_url }} - https_rpc_url: ${{ steps.testnet-env.https_rpc_url || steps.mainnet-env.outputs.https_rpc_url }} + https_rpc_url: ${{ steps.testnet-env.outputs.https_rpc_url || steps.mainnet-env.outputs.https_rpc_url }} release_tag: ${{ steps.testnet-env.outputs.release_tag || steps.mainnet-env.outputs.release_tag }} artifact_name: ${{ steps.testnet-env.outputs.artifact_name || steps.mainnet-env.outputs.artifact_name }} last_block_hash: ${{ steps.last-block-info.outputs.last_block_hash }} last_block_number: ${{ steps.last-block-info.outputs.last_block_number }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Set-Up run: | @@ -91,7 +91,7 @@ jobs: HTTPS_RPC_URL: ${{ steps.testnet-env.outputs.https_rpc_url || steps.mainnet-env.outputs.https_rpc_url }} - name: Upload last block info - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: last-block-info path: "last-block*" @@ -101,7 +101,7 @@ jobs: runs-on: ubuntu-22.04 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Set-Up run: | @@ -111,11 +111,11 @@ jobs: - name: Configure rustc version run: | - source ci/env + RUSTC_VERSION=$(grep channel rust-toolchain.toml | tail -n1 | tr -d " " | cut -f2 -d'"') echo "RUSTC_VERSION=$RUSTC_VERSION" >> "$GITHUB_ENV" - name: Install Rust toolchain - uses: actions-rs/toolchain@v1 + uses: gluwa/toolchain@dev with: toolchain: ${{ env.RUSTC_VERSION }} target: wasm32-unknown-unknown @@ -124,33 +124,46 @@ jobs: - uses: Swatinem/rust-cache@v2 - name: Build SUT - uses: actions-rs/cargo@v1 + uses: gluwa/cargo@dev with: command: build - args: --release --features "fast-runtime try-runtime" + args: --release --features "try-runtime" - name: Upload creditcoin-node binary - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: creditcoin-node path: target/release/creditcoin-node - name: Upload WASM runtime - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: creditcoin_node_runtime.compact.compressed.wasm path: target/release/wbuild/creditcoin-node-runtime/creditcoin_node_runtime.compact.compressed.wasm + setup-self-hosted: + needs: + - setup + - deploy-github-runner + runs-on: + [self-hosted, "${{ needs.deploy-github-runner.outputs.runner_vm_name }}"] + + steps: + - name: Grant everyone permissions on /mnt + run: | + sudo chmod a+rwx /mnt + fork-creditcoin: needs: - setup + - setup-self-hosted - live-sync-creditcoin - deploy-github-runner runs-on: [self-hosted, "${{ needs.deploy-github-runner.outputs.runner_vm_name }}"] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Download creditcoin-node for release ${{ needs.setup.outputs.release_tag }} uses: i3h/download-release-asset@v1 @@ -184,10 +197,10 @@ jobs: ./creditcoin-node \ --name "test-node-$GITHUB_RUN_ID-attempt-$GITHUB_RUN_ATTEMPT" \ --chain ${{ needs.setup.outputs.target_chain }} \ - --validator --mining-key 5DkPYq8hFiCeGxFBkz6DAwnTrvKevAJfTYrzFtr9hpDsEAU1 \ --bootnodes "${{ needs.setup.outputs.boot_node }}" \ --prometheus-external \ --telemetry-url "wss://telemetry.creditcoin.network/submit/ 0" \ + --base-path /mnt \ --public-addr "/dns4/$IP_ADDRESS/tcp/50555" \ --port 50555 >creditcoin-node-used-for-fork.log 2>&1 & @@ -201,7 +214,7 @@ jobs: ./creditcoin-fork --bin ./creditcoin-node --orig ${{ needs.setup.outputs.target_chain }} \ --base dev --name Development \ - -o creditcoin-fork.json --rpc ws://127.0.0.1:9944 + -o creditcoin-fork.json --rpc ws://127.0.0.1:9944 --exclude-pallets PosSwitch - name: TERM creditcoin-node continue-on-error: true @@ -216,14 +229,14 @@ jobs: sleep 120 - name: Upload logs - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 if: always() with: - name: logs + name: fork-creditcoin-logs path: "*.log" - name: Upload creditcoin-fork.json - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: creditcoin-fork.json path: creditcoin-fork.json @@ -231,12 +244,13 @@ jobs: live-sync-creditcoin: needs: - setup + - setup-self-hosted - deploy-github-runner runs-on: [self-hosted, "${{ needs.deploy-github-runner.outputs.runner_vm_name }}"] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Download creditcoin-node for release ${{ needs.setup.outputs.release_tag }} uses: i3h/download-release-asset@v1 @@ -262,11 +276,11 @@ jobs: ./creditcoin-node \ --name "test-node-$GITHUB_RUN_ID-attempt-$GITHUB_RUN_ATTEMPT" \ --chain ${{ needs.setup.outputs.target_chain }} \ - --validator --mining-key 5DkPYq8hFiCeGxFBkz6DAwnTrvKevAJfTYrzFtr9hpDsEAU1 \ --bootnodes "${{ needs.setup.outputs.boot_node }}" \ --prometheus-external --pruning archive \ --telemetry-url "wss://telemetry.creditcoin.network/submit/ 0" \ --public-addr "/dns4/$IP_ADDRESS/tcp/50555" \ + --base-path /mnt \ --port 50555 >creditcoin-node-initial-live-sync.log 2>&1 & - name: Wait for creditcoin-node to sync past block number ${{ needs.setup.outputs.last_block_number }} @@ -286,31 +300,32 @@ jobs: sleep 120 - name: Upload logs - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 if: always() with: - name: logs + name: live-sync-creditcoin-logs path: "*.log" test-against-fork: needs: - setup + - setup-self-hosted - build-sut - fork-creditcoin - deploy-github-runner runs-on: [self-hosted, "${{ needs.deploy-github-runner.outputs.runner_vm_name }}"] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Download creditcoin-node from current PR - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: creditcoin-node path: target/release - name: Download creditcoin-fork.json - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: creditcoin-fork.json @@ -320,7 +335,7 @@ jobs: ./target/release/creditcoin-node --version ./target/release/creditcoin-node --chain ./creditcoin-fork.json --validator --alice --pruning archive \ - --mining-key 5DkPYq8hFiCeGxFBkz6DAwnTrvKevAJfTYrzFtr9hpDsEAU1 \ + --base-path /mnt \ --monitor-nonce auto >creditcoin-node-with-forked-chain.log 2>&1 & - name: Wait for blockchain to start @@ -336,9 +351,9 @@ jobs: sudo docker run --name hardhat-dev --rm -p 8545:8545 -d gluwa/hardhat-dev - name: Install Node.js - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: - node-version: 16 + node-version: 20 - run: npm install -g yarn - name: Prepare for integration tests @@ -353,26 +368,26 @@ jobs: - name: Configure rustc version run: | - source ci/env + RUSTC_VERSION=$(grep channel rust-toolchain.toml | tail -n1 | tr -d " " | cut -f2 -d'"') echo "RUSTC_VERSION=$RUSTC_VERSION" >> "$GITHUB_ENV" sudo apt install -y gcc - name: Install Rust toolchain - uses: actions-rs/toolchain@v1 + uses: gluwa/toolchain@dev with: toolchain: ${{ env.RUSTC_VERSION }} profile: minimal override: true - name: Install Subwasm - uses: actions-rs/cargo@v1 + uses: gluwa/cargo@dev with: command: install args: --locked --git https://github.com/chevdor/subwasm --tag v0.17.1 - name: Download WASM runtime from current PR id: download-wasm - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: creditcoin_node_runtime.compact.compressed.wasm @@ -387,10 +402,10 @@ jobs: yarn --cwd ./integration-tests/ test --config creditcoin-fork.config.ts - name: Upload logs - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 if: always() with: - name: logs + name: test-against-fork-logs path: "*.log" - name: Kill hardhat-dev @@ -411,60 +426,20 @@ jobs: needs: - build-sut - setup + - setup-self-hosted - live-sync-creditcoin - deploy-github-runner runs-on: [self-hosted, "${{ needs.deploy-github-runner.outputs.runner_vm_name }}"] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Download creditcoin-node from current PR - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: creditcoin-node path: target/release - - name: Start creditcoin-node from current PR - run: | - # see https://opensource.com/article/18/5/how-find-ip-address-linux - IP_ADDRESS=$(curl https://ifconfig.me) - echo "INFO: IP_ADDRESS=$IP_ADDRESS" - - chmod a+x ./target/release/creditcoin-node - ./target/release/creditcoin-node --version - - ./target/release/creditcoin-node \ - --name "test-node-$GITHUB_RUN_ID-attempt-$GITHUB_RUN_ATTEMPT" \ - --chain ${{ needs.setup.outputs.target_chain }} \ - --pruning archive \ - --validator --mining-key 5DkPYq8hFiCeGxFBkz6DAwnTrvKevAJfTYrzFtr9hpDsEAU1 \ - --bootnodes "${{ needs.setup.outputs.boot_node }}" \ - --prometheus-external \ - --telemetry-url "wss://telemetry.creditcoin.network/submit/ 0" \ - --public-addr "/dns4/$IP_ADDRESS/tcp/50555" \ - --port 50555 >creditcoin-node-disconnected-paritydb-sync.log 2>&1 & - - - name: Wait for blockchain to start - run: | - ./integration-tests/wait-for-creditcoin.sh - - # wait again because of RocksDB -> ParityDB switch ! - - name: Wait for creditcoin-node to sync past block number ${{ needs.setup.outputs.last_block_number }} - run: | - ./scripts/wait-for-sync.sh ${{ needs.setup.outputs.last_block_number }} - - - name: TERM creditcoin-node - continue-on-error: true - run: | - killall -TERM creditcoin-node - sleep 30 - - - name: KILL creditcoin-node - continue-on-error: true - run: | - killall -KILL creditcoin-node - sleep 30 - - name: Start a disconnected creditcoin-node run: | chmod a+x ./target/release/creditcoin-node @@ -477,27 +452,24 @@ jobs: --name "test-node-disconnected-$GITHUB_RUN_ID-attempt-$GITHUB_RUN_ATTEMPT" \ --chain ${{ needs.setup.outputs.target_chain }} \ --validator --alice --pruning archive \ - --mining-key 5DkPYq8hFiCeGxFBkz6DAwnTrvKevAJfTYrzFtr9hpDsEAU1 \ --prometheus-external \ --telemetry-url "wss://telemetry.creditcoin.network/submit/ 0" \ + --base-path /mnt \ --monitor-nonce auto >creditcoin-node-disconnected-live-node.log 2>&1 & - name: Wait for blockchain to start run: | ./integration-tests/wait-for-creditcoin.sh - - name: Install Docker engine - run: | - ./scripts/install-docker-engine-from-upstream.sh - - - name: Start local Ethereum node + # check this eventhough it should be true unless live-sync screws up! + - name: Check if creditcoin-node is past block number ${{ needs.setup.outputs.last_block_number }} run: | - sudo docker run --name hardhat-dev --rm -p 8545:8545 -d gluwa/hardhat-dev + ./scripts/wait-for-sync.sh ${{ needs.setup.outputs.last_block_number }} - name: Install Node.js - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: - node-version: 16 + node-version: 20 - run: npm install -g yarn - name: Prepare for integration tests @@ -512,26 +484,26 @@ jobs: - name: Configure rustc version run: | - source ci/env + RUSTC_VERSION=$(grep channel rust-toolchain.toml | tail -n1 | tr -d " " | cut -f2 -d'"') echo "RUSTC_VERSION=$RUSTC_VERSION" >> "$GITHUB_ENV" sudo apt install -y gcc - name: Install Rust toolchain - uses: actions-rs/toolchain@v1 + uses: gluwa/toolchain@dev with: toolchain: ${{ env.RUSTC_VERSION }} profile: minimal override: true - name: Install Subwasm - uses: actions-rs/cargo@v1 + uses: gluwa/cargo@dev with: command: install args: --locked --git https://github.com/chevdor/subwasm --tag v0.17.1 - name: Download WASM runtime id: download-wasm - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: creditcoin_node_runtime.compact.compressed.wasm @@ -542,7 +514,7 @@ jobs: yarn --cwd ./scripts/js runtimeUpgrade ws://127.0.0.1:9944 ../../creditcoin_node_runtime.compact.compressed.wasm "${{ env.LENDER_SEED }}" 0 sleep 10 env: - LENDER_SEED: ${{ secrets.TESTNET_LENDER_SEED }} + LENDER_SEED: "${{ secrets.TESTNET_LENDER_SEED }}" # TODO: wait & confirm wasm upgrade has finished, incl. migrations - name: Execute integration tests @@ -550,6 +522,7 @@ jobs: run: | yarn --cwd ./integration-tests/ test --config testnet.config.ts env: + CREDITCOIN_API_URL: ws://127.0.0.1:9944 ETHEREUM_NODE_URL: ${{ secrets.TESTNET_ETHEREUM_NODE_URL }} LENDER_PRIVATE_KEY: ${{ secrets.TESTNET_LENDER_PRIVATE_KEY }} LENDER_SEED: "${{ secrets.TESTNET_LENDER_SEED }}" @@ -557,17 +530,12 @@ jobs: BORROWER_SEED: "${{ secrets.TESTNET_BORROWER_SEED }}" - name: Upload logs - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 if: always() with: - name: logs + name: test-against-disconnected-live-node-logs path: "*.log" - - name: Kill hardhat-dev - if: always() - run: | - sudo docker kill hardhat-dev - - name: Kill creditcoin-node run: | # if all went well kill the node. Otherwise GitHub Actions would exit on the @@ -582,7 +550,7 @@ jobs: resource_group: ${{ steps.get-env.outputs.resource_group }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Install azure-cli run: | @@ -650,18 +618,20 @@ jobs: needs: - build-sut - setup + - setup-self-hosted + - live-sync-creditcoin - deploy-github-runner steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Download creditcoin-node binary from current PR - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: creditcoin-node path: target/release - name: Download WASM runtime - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: creditcoin_node_runtime.compact.compressed.wasm path: target/release @@ -682,15 +652,18 @@ jobs: echo "INFO: IP_ADDRESS=$IP_ADDRESS" ./target/release/creditcoin-node --version + + # node should be reusing the database from the + # live-sync-creditcoin CI job listed as dependency above ./target/release/creditcoin-node \ --name "test-node-$GITHUB_RUN_ID-attempt-$GITHUB_RUN_ATTEMPT" \ --chain ${{ needs.setup.outputs.target_chain }} \ - --validator --mining-key 5DkPYq8hFiCeGxFBkz6DAwnTrvKevAJfTYrzFtr9hpDsEAU1 \ --bootnodes "${{ needs.setup.outputs.boot_node }}" \ - --rpc-max-request-size 100000 \ - --rpc-max-response-size 100000 \ - --prometheus-external \ + --rpc-max-request-size 200000 \ + --rpc-max-response-size 200000 \ + --prometheus-external --pruning archive \ --telemetry-url "wss://telemetry.creditcoin.network/submit/ 0" \ + --base-path /mnt \ --public-addr "/dns4/$IP_ADDRESS/tcp/30333" >creditcoin-node-used-for-try-runtime.log 2>&1 & - name: Wait for creditcoin-node to initialize @@ -703,6 +676,7 @@ jobs: ./target/release/creditcoin-node try-runtime \ --runtime ./target/release/creditcoin_node_runtime.compact.compressed.wasm \ --dev on-runtime-upgrade live --uri ws://127.0.0.1:9944 \ + --pallet Creditcoin \ --at ${{ needs.setup.outputs.last_block_hash }} - name: TERM creditcoin-node @@ -719,10 +693,10 @@ jobs: sleep 600 - name: Upload logs - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 if: always() with: - name: logs + name: test-migrations-via-try-runtime-logs path: "*.log" remove-github-runner: @@ -735,7 +709,7 @@ jobs: if: ${{ always() && needs.deploy-github-runner.result != 'skipped' }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Evaluate env vars id: get-env @@ -759,7 +733,7 @@ jobs: az group delete --yes -n "${{ steps.get-env.outputs.resource_group }}" - name: Upload logs - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 if: always() with: name: "Azure resources" diff --git a/.github/workflows/runtime.yml b/.github/workflows/runtime.yml index 04d1bdcfea..da5c1af5cf 100644 --- a/.github/workflows/runtime.yml +++ b/.github/workflows/runtime.yml @@ -14,7 +14,7 @@ jobs: build: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Srtool build id: srtool_build uses: chevdor/srtool-actions@v0.8.0 @@ -30,7 +30,7 @@ jobs: cat creditcoin-srtool-digest.json echo "Runtime location: ${{ steps.srtool_build.outputs.wasm }}" - name: Archive Runtime - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: creditcoin-runtime-${{ github.sha }} path: | @@ -42,23 +42,23 @@ jobs: needs: build if: github.ref == 'refs/heads/dev' steps: - - uses: actions/checkout@v3 - - uses: actions/download-artifact@v3 + - uses: actions/checkout@v4 + - uses: actions/download-artifact@v4 with: name: creditcoin-runtime-${{ github.sha }} path: wasm - name: Install JS Dependencies - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: - node-version: 16 + node-version: 20 - run: | npm install -g yarn pushd ./creditcoin-js && yarn install && yarn pack && popd yarn --cwd ./scripts/js upgrade 'creditcoin-js' - name: Install Subwasm - uses: actions-rs/cargo@v1 + uses: gluwa/cargo@dev with: command: install args: --locked --git https://github.com/chevdor/subwasm --tag v0.17.1 @@ -66,8 +66,8 @@ jobs: - name: Update WASM working-directory: scripts/js env: - CTCQA_URL: ${{ secrets.CTCQA_URL }} - QA_SUDO_KEY: ${{ secrets.QA_SUDO_KEY }} + DEVNET_URL: wss://rpc.devnet.creditcoin.network/ws + SUDO_KEY: ${{ secrets.QA_SUDO_KEY }} run: | - yarn runtimeUpgrade "$CTCQA_URL" \ - ../../wasm/runtime/target/srtool/release/wbuild/creditcoin-node-runtime/creditcoin_node_runtime.compact.compressed.wasm "$QA_SUDO_KEY" + yarn runtimeUpgrade "$DEVNET_URL" \ + ../../wasm/runtime/target/srtool/release/wbuild/creditcoin-node-runtime/creditcoin_node_runtime.compact.compressed.wasm "$SUDO_KEY" 0 diff --git a/.lycheeignore b/.lycheeignore index 98914ccc13..0d07e2ccb1 100644 --- a/.lycheeignore +++ b/.lycheeignore @@ -2,5 +2,6 @@ ws|wss://(.*) rpc\.(.*)\.creditcoin\.network/ staticsitellvmhtml.z13.web.core.windows.net -thedoctor0/zip-release@0.7.1 -ludeeus/action-shellcheck@2.0.0 +thedoctor0/zip-release@(.*) +ludeeus/action-shellcheck@(.*) +https://creditcoin.org/white-paper diff --git a/.markdown-link-check.json b/.markdown-link-check.json new file mode 100644 index 0000000000..0e84ae89ee --- /dev/null +++ b/.markdown-link-check.json @@ -0,0 +1,10 @@ +{ + "ignorePatterns": [ + { + "pattern": "https://creditcoin.org/white-paper" + } + ], + "retryOn429": true, + "retryCount": 5, + "aliveStatusCodes": [200, 203] +} diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 4704517744..749ace0339 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -3,7 +3,7 @@ --- repos: - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v4.4.0 + rev: v4.6.0 hooks: - id: end-of-file-fixer - id: mixed-line-ending diff --git a/Cargo.lock b/Cargo.lock index f54689becb..95feb85600 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -214,16 +214,15 @@ dependencies = [ [[package]] name = "anstream" -version = "0.3.2" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ca84f3628370c59db74ee214b3263d58f9aadd9b4fe7e711fd87dc452b7f163" +checksum = "2ab91ebe16eb252986481c5b62f6098f3b698a45e34b5b98200cf20dd2484a44" dependencies = [ "anstyle", "anstyle-parse", "anstyle-query", "anstyle-wincon", "colorchoice", - "is-terminal", "utf8parse", ] @@ -253,9 +252,9 @@ dependencies = [ [[package]] name = "anstyle-wincon" -version = "1.0.1" +version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "180abfa45703aebe0093f79badacc01b8fd4ea2e35118747e5811127f926e188" +checksum = "f0699d10d2f4d628a98ee7b57b289abbc98ff3bad977cb3152709d4bf2330628" dependencies = [ "anstyle", "windows-sys 0.48.0", @@ -406,7 +405,7 @@ dependencies = [ "autocfg", "cfg-if", "concurrent-queue", - "futures-lite", + "futures-lite 1.13.0", "log", "parking", "polling", @@ -433,7 +432,7 @@ checksum = "7b2d0f03b3640e3a630367e40c468cb7f309529c708ed1d88597047b0e7c6ef7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.23", + "syn 2.0.48", ] [[package]] @@ -446,7 +445,7 @@ dependencies = [ "futures-sink", "futures-util", "memchr", - "pin-project-lite 0.2.10", + "pin-project-lite 0.2.13", ] [[package]] @@ -733,9 +732,9 @@ checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" [[package]] name = "bstr" -version = "1.6.2" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c2f7349907b712260e64b0afe2f84692af14a454be26187d9df565c7f69266a" +checksum = "40723b8fb387abc38f4f4a37c09073622e41dd12327033091ef8950659e6dc0c" dependencies = [ "memchr", "serde", @@ -973,20 +972,19 @@ dependencies = [ [[package]] name = "clap" -version = "4.3.10" +version = "4.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "384e169cc618c613d5e3ca6404dda77a8685a63e08660dcc64abaf7da7cb0c7a" +checksum = "41fffed7514f420abec6d183b1d3acfd9099c79c3a10a06ade4f8203f1411272" dependencies = [ "clap_builder", "clap_derive", - "once_cell", ] [[package]] name = "clap_builder" -version = "4.3.10" +version = "4.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef137bbe35aab78bdb468ccfba75a5f4d8321ae011d34063770780545176af2d" +checksum = "63361bae7eef3771745f02d8d892bec2fee5f6e34af316ba556e7f97a7069ff1" dependencies = [ "anstream", "anstyle", @@ -996,21 +994,21 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.3.2" +version = "4.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8cd2b2a819ad6eec39e8f1d6b53001af1e5469f8c177579cdaeb313115b825f" +checksum = "cf9804afaaf59a91e75b022a30fb7229a7901f60c755489cc61c9b423b836442" dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.23", + "syn 2.0.48", ] [[package]] name = "clap_lex" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2da6da31387c7e4ef160ffab6d5e7f00c42626fe39aea70a7b0f1773f7dd6c1b" +checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1" [[package]] name = "codespan-reporting" @@ -1228,7 +1226,7 @@ dependencies = [ [[package]] name = "creditcoin-node" -version = "2.232.1" +version = "2.240.0" dependencies = [ "creditcoin-node-rpc", "creditcoin-node-runtime", @@ -1236,7 +1234,7 @@ dependencies = [ "frame-benchmarking-cli", "frame-system", "futures", - "futures-lite", + "futures-lite 2.3.0", "hex", "jsonrpc-core", "jsonrpsee", @@ -1296,7 +1294,7 @@ dependencies = [ [[package]] name = "creditcoin-node-rpc" -version = "2.232.1" +version = "2.240.0" dependencies = [ "assert_matches", "creditcoin-node-runtime", @@ -1315,7 +1313,7 @@ dependencies = [ [[package]] name = "creditcoin-node-runtime" -version = "2.232.1" +version = "2.240.0" dependencies = [ "assert_matches", "frame-benchmarking", @@ -1346,8 +1344,7 @@ dependencies = [ "pallet-rewards", "pallet-scheduler", "pallet-session", - "pallet-staking 2.232.1", - "pallet-staking 4.0.0-dev", + "pallet-staking", "pallet-staking-reward-fn", "pallet-sudo", "pallet-timestamp", @@ -1552,7 +1549,7 @@ dependencies = [ "proc-macro2", "quote", "scratch", - "syn 2.0.23", + "syn 2.0.48", ] [[package]] @@ -1569,7 +1566,7 @@ checksum = "a26acccf6f445af85ea056362561a24ef56cdc15fcc685f03aec50b9c702cb6d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.23", + "syn 2.0.48", ] [[package]] @@ -1809,7 +1806,7 @@ checksum = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.23", + "syn 2.0.48", ] [[package]] @@ -1963,7 +1960,7 @@ checksum = "5e9a1f9f7d83e59740248a6e14ecf93929ade55027844dfcea78beafccc15745" dependencies = [ "proc-macro2", "quote", - "syn 2.0.23", + "syn 2.0.48", ] [[package]] @@ -2080,7 +2077,7 @@ checksum = "311a6d2f1f9d60bff73d2c78a0af97ed27f79672f15c238192a5bbb64db56d00" dependencies = [ "proc-macro2", "quote", - "syn 2.0.23", + "syn 2.0.48", ] [[package]] @@ -2104,6 +2101,12 @@ dependencies = [ "instant", ] +[[package]] +name = "fastrand" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" + [[package]] name = "fdlimit" version = "0.2.1" @@ -2163,7 +2166,7 @@ dependencies = [ "log", "num-traits", "parity-scale-codec", - "parking_lot 0.12.1", + "parking_lot 0.12.3", "scale-info", ] @@ -2537,9 +2540,9 @@ checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" [[package]] name = "futures" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40" +checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" dependencies = [ "futures-channel", "futures-core", @@ -2552,9 +2555,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2" +checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" dependencies = [ "futures-core", "futures-sink", @@ -2562,15 +2565,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" +checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" [[package]] name = "futures-executor" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0" +checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" dependencies = [ "futures-core", "futures-task", @@ -2580,9 +2583,9 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" +checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" [[package]] name = "futures-lite" @@ -2590,24 +2593,37 @@ version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" dependencies = [ - "fastrand", + "fastrand 1.9.0", "futures-core", "futures-io", "memchr", "parking", - "pin-project-lite 0.2.10", + "pin-project-lite 0.2.13", "waker-fn", ] +[[package]] +name = "futures-lite" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52527eb5074e35e9339c6b4e8d12600c7128b68fb25dcb9fa9dec18f7c25f3a5" +dependencies = [ + "fastrand 2.0.1", + "futures-core", + "futures-io", + "parking", + "pin-project-lite 0.2.13", +] + [[package]] name = "futures-macro" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" +checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn 2.0.23", + "syn 2.0.48", ] [[package]] @@ -2623,15 +2639,15 @@ dependencies = [ [[package]] name = "futures-sink" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" +checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" [[package]] name = "futures-task" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" +checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" [[package]] name = "futures-timer" @@ -2641,9 +2657,9 @@ checksum = "e64b03909df88034c26dc1547e8970b91f98bdb65165d6a4e9110d94263dbb2c" [[package]] name = "futures-util" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" +checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" dependencies = [ "futures-channel", "futures-core", @@ -2652,7 +2668,7 @@ dependencies = [ "futures-sink", "futures-task", "memchr", - "pin-project-lite 0.2.10", + "pin-project-lite 0.2.13", "pin-utils", "slab", ] @@ -2666,6 +2682,29 @@ dependencies = [ "byteorder", ] +[[package]] +name = "generate-bags" +version = "0.1.0" +dependencies = [ + "clap", + "creditcoin-node-runtime", + "generate-bags 4.0.0-dev", +] + +[[package]] +name = "generate-bags" +version = "4.0.0-dev" +source = "git+https://github.com/gluwa/substrate.git?branch=pos-keep-history-polkadot-v0.9.41#4e22d40dc55ca0a2a7e85037bbcd73de45afcd80" +dependencies = [ + "chrono", + "frame-election-provider-support", + "frame-support", + "frame-system", + "git2", + "num-format", + "pallet-staking", +] + [[package]] name = "generic-array" version = "0.12.4" @@ -2754,6 +2793,19 @@ version = "0.27.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6c80984affa11d98d1b88b66ac8853f143217b399d3c74116778ff8fdb4ed2e" +[[package]] +name = "git2" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf7f68c2995f392c49fffb4f95ae2c873297830eb25c6bc4c114ce8f4562acc" +dependencies = [ + "bitflags 1.3.2", + "libc", + "libgit2-sys", + "log", + "url", +] + [[package]] name = "glob" version = "0.3.1" @@ -2867,9 +2919,9 @@ dependencies = [ [[package]] name = "hermit-abi" -version = "0.3.1" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" [[package]] name = "hex" @@ -2962,7 +3014,7 @@ checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" dependencies = [ "bytes", "http", - "pin-project-lite 0.2.10", + "pin-project-lite 0.2.13", ] [[package]] @@ -3005,7 +3057,7 @@ dependencies = [ "httparse", "httpdate", "itoa", - "pin-project-lite 0.2.10", + "pin-project-lite 0.2.13", "socket2 0.4.9", "tokio", "tower-service", @@ -3208,7 +3260,7 @@ version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" dependencies = [ - "hermit-abi 0.3.1", + "hermit-abi 0.3.9", "libc", "windows-sys 0.48.0", ] @@ -3225,7 +3277,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f" dependencies = [ - "socket2 0.5.3", + "socket2 0.5.5", "widestring", "windows-sys 0.48.0", "winreg", @@ -3243,7 +3295,7 @@ version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24fddda5af7e54bf7da53067d6e802dbcc381d0a8eef629df528e3ebf68755cb" dependencies = [ - "hermit-abi 0.3.1", + "hermit-abi 0.3.9", "rustix 0.38.2", "windows-sys 0.48.0", ] @@ -3348,7 +3400,7 @@ dependencies = [ "globset", "hyper", "jsonrpsee-types", - "parking_lot 0.12.1", + "parking_lot 0.12.3", "rand 0.8.5", "rustc-hash", "serde", @@ -3429,7 +3481,7 @@ dependencies = [ "cfg-if", "ecdsa", "elliptic-curve", - "sha2 0.10.7", + "sha2 0.10.8", ] [[package]] @@ -3457,7 +3509,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bf7a85fe66f9ff9cd74e169fdd2c94c6e1e74c412c99a73b4df3200b5d3760b2" dependencies = [ "kvdb", - "parking_lot 0.12.1", + "parking_lot 0.12.3", ] [[package]] @@ -3468,7 +3520,7 @@ checksum = "2182b8219fee6bd83aacaab7344e840179ae079d5216aa4e249b4d704646a844" dependencies = [ "kvdb", "num_cpus", - "parking_lot 0.12.1", + "parking_lot 0.12.3", "regex", "rocksdb", "smallvec", @@ -3488,9 +3540,21 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "libc" -version = "0.2.147" +version = "0.2.150" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3" +checksum = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c" + +[[package]] +name = "libgit2-sys" +version = "0.14.2+1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f3d95f6b51075fe9810a7ae22c7095f12b98005ab364d8544797a825ce946a4" +dependencies = [ + "cc", + "libc", + "libz-sys", + "pkg-config", +] [[package]] name = "libloading" @@ -3543,7 +3607,7 @@ dependencies = [ "libp2p-websocket", "libp2p-yamux", "multiaddr 0.16.0", - "parking_lot 0.12.1", + "parking_lot 0.12.3", "pin-project", "smallvec", ] @@ -3567,14 +3631,14 @@ dependencies = [ "multihash 0.16.3", "multistream-select", "once_cell", - "parking_lot 0.12.1", + "parking_lot 0.12.3", "pin-project", "prost", "prost-build", "rand 0.8.5", "rw-stream-sink", "sec1", - "sha2 0.10.7", + "sha2 0.10.8", "smallvec", "thiserror", "unsigned-varint", @@ -3599,7 +3663,7 @@ dependencies = [ "multihash 0.17.0", "multistream-select", "once_cell", - "parking_lot 0.12.1", + "parking_lot 0.12.3", "pin-project", "quick-protobuf", "rand 0.8.5", @@ -3619,7 +3683,7 @@ dependencies = [ "futures", "libp2p-core 0.38.0", "log", - "parking_lot 0.12.1", + "parking_lot 0.12.3", "smallvec", "trust-dns-resolver", ] @@ -3658,7 +3722,7 @@ dependencies = [ "multihash 0.17.0", "quick-protobuf", "rand 0.8.5", - "sha2 0.10.7", + "sha2 0.10.8", "thiserror", "zeroize", ] @@ -3683,7 +3747,7 @@ dependencies = [ "prost", "prost-build", "rand 0.8.5", - "sha2 0.10.7", + "sha2 0.10.8", "smallvec", "thiserror", "uint", @@ -3737,7 +3801,7 @@ dependencies = [ "libp2p-core 0.38.0", "log", "nohash-hasher", - "parking_lot 0.12.1", + "parking_lot 0.12.3", "rand 0.8.5", "smallvec", "unsigned-varint", @@ -3758,7 +3822,7 @@ dependencies = [ "prost", "prost-build", "rand 0.8.5", - "sha2 0.10.7", + "sha2 0.10.8", "snow", "static_assertions", "thiserror", @@ -3795,7 +3859,7 @@ dependencies = [ "libp2p-core 0.38.0", "libp2p-tls", "log", - "parking_lot 0.12.1", + "parking_lot 0.12.3", "quinn-proto", "rand 0.8.5", "rustls 0.20.8", @@ -3945,7 +4009,7 @@ dependencies = [ "futures-rustls", "libp2p-core 0.38.0", "log", - "parking_lot 0.12.1", + "parking_lot 0.12.3", "quicksink", "rw-stream-sink", "soketto", @@ -3962,7 +4026,7 @@ dependencies = [ "futures", "libp2p-core 0.38.0", "log", - "parking_lot 0.12.1", + "parking_lot 0.12.3", "thiserror", "yamux", ] @@ -4037,6 +4101,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56ee889ecc9568871456d42f603d6a0ce59ff328d291063a45cbdf0036baf6db" dependencies = [ "cc", + "libc", "pkg-config", "vcpkg", ] @@ -4104,9 +4169,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.20" +version = "0.4.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" +checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" [[package]] name = "lru" @@ -4206,9 +4271,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.6.2" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5486aed0026218e61b8a01d5fbd5a0a134649abb71a0e53b7bc088529dced86e" +checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" [[package]] name = "memfd" @@ -4290,13 +4355,14 @@ dependencies = [ [[package]] name = "mio" -version = "0.8.8" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2" +checksum = "4569e456d394deccd22ce1c1913e6ea0e54519f577285001215d33557431afe4" dependencies = [ + "hermit-abi 0.3.9", "libc", "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] @@ -4386,7 +4452,7 @@ dependencies = [ "core2", "digest 0.10.7", "multihash-derive", - "sha2 0.10.7", + "sha2 0.10.8", "sha3", "unsigned-varint", ] @@ -4584,9 +4650,9 @@ dependencies = [ [[package]] name = "num" -version = "0.4.0" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43db66d1170d347f9a065114077f7dccb00c1b9478c89384490a3425279a4606" +checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" dependencies = [ "num-bigint", "num-complex", @@ -4598,20 +4664,19 @@ dependencies = [ [[package]] name = "num-bigint" -version = "0.4.3" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" dependencies = [ - "autocfg", "num-integer", "num-traits", ] [[package]] name = "num-complex" -version = "0.4.3" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02e0d21255c828d6f128a1e41534206671e8c3ea0c62f32291e808dc82cff17d" +checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" dependencies = [ "num-traits", ] @@ -4628,19 +4693,18 @@ dependencies = [ [[package]] name = "num-integer" -version = "0.1.45" +version = "0.1.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" dependencies = [ - "autocfg", "num-traits", ] [[package]] name = "num-iter" -version = "0.1.43" +version = "0.1.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252" +checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" dependencies = [ "autocfg", "num-integer", @@ -4649,11 +4713,10 @@ dependencies = [ [[package]] name = "num-rational" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" +checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" dependencies = [ - "autocfg", "num-bigint", "num-integer", "num-traits", @@ -4661,9 +4724,9 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.15" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", "libm 0.2.7", @@ -4675,7 +4738,7 @@ version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" dependencies = [ - "hermit-abi 0.3.1", + "hermit-abi 0.3.9", "libc", ] @@ -4756,7 +4819,7 @@ checksum = "51f44edd08f51e2ade572f141051021c5af22677e42b7dd28a88155151c33594" dependencies = [ "ecdsa", "elliptic-curve", - "sha2 0.10.7", + "sha2 0.10.8", ] [[package]] @@ -4767,7 +4830,7 @@ checksum = "dfc8c5bf642dde52bb9e87c0ecd8ca5a76faac2eeed98dedb7c717997e1080aa" dependencies = [ "ecdsa", "elliptic-curve", - "sha2 0.10.7", + "sha2 0.10.8", ] [[package]] @@ -4855,7 +4918,7 @@ dependencies = [ [[package]] name = "pallet-creditcoin" -version = "2.232.1" +version = "2.240.0" dependencies = [ "assert_matches", "base58", @@ -4875,25 +4938,25 @@ dependencies = [ "pallet-offchain-task-scheduler", "pallet-timestamp", "parity-scale-codec", - "parking_lot 0.12.1", + "parking_lot 0.12.3", "paste", "scale-info", "serde", "serde_json", - "sha2 0.10.7", + "sha2 0.10.8", "sp-core", "sp-io", "sp-keystore", "sp-runtime", "sp-std", "sp-tracing", - "strum 0.25.0", + "strum 0.26.1", "traced-test", ] [[package]] name = "pallet-difficulty" -version = "2.232.1" +version = "2.240.0" dependencies = [ "frame-benchmarking", "frame-support", @@ -5083,7 +5146,7 @@ dependencies = [ [[package]] name = "pallet-pos-switch" -version = "2.232.1" +version = "2.240.0" dependencies = [ "frame-benchmarking", "frame-support", @@ -5117,7 +5180,7 @@ dependencies = [ [[package]] name = "pallet-rewards" -version = "2.232.1" +version = "2.240.0" dependencies = [ "frame-benchmarking", "frame-support", @@ -5172,27 +5235,6 @@ dependencies = [ "sp-trie", ] -[[package]] -name = "pallet-staking" -version = "2.232.1" -dependencies = [ - "frame-benchmarking", - "frame-election-provider-support", - "frame-support", - "frame-system", - "log", - "pallet-offchain-task-scheduler", - "pallet-session", - "pallet-staking 4.0.0-dev", - "parity-scale-codec", - "scale-info", - "serde", - "sp-arithmetic", - "sp-runtime", - "sp-staking", - "sp-std", -] - [[package]] name = "pallet-staking" version = "4.0.0-dev" @@ -5206,7 +5248,6 @@ dependencies = [ "pallet-authorship", "pallet-session", "parity-scale-codec", - "rand_chacha 0.2.2", "scale-info", "serde", "sp-application-crypto", @@ -5331,7 +5372,7 @@ dependencies = [ "log", "lz4", "memmap2", - "parking_lot 0.12.1", + "parking_lot 0.12.3", "rand 0.8.5", "siphasher", "snap", @@ -5378,9 +5419,9 @@ checksum = "e1ad0aff30c1da14b1254fcb2af73e1fa9a28670e584a626f53a369d0e157304" [[package]] name = "parking" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14f2252c834a40ed9bb5422029649578e63aa341ac401f74e719dd1afda8394e" +checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae" [[package]] name = "parking_lot" @@ -5395,9 +5436,9 @@ dependencies = [ [[package]] name = "parking_lot" -version = "0.12.1" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" dependencies = [ "lock_api", "parking_lot_core 0.9.8", @@ -5432,9 +5473,9 @@ dependencies = [ [[package]] name = "paste" -version = "1.0.14" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" [[package]] name = "pbkdf2" @@ -5514,7 +5555,7 @@ dependencies = [ "pest_meta", "proc-macro2", "quote", - "syn 2.0.23", + "syn 2.0.48", ] [[package]] @@ -5525,7 +5566,7 @@ checksum = "a01f71cb40bd8bb94232df14b946909e14660e33fc05db3e50ae2a82d7ea0ca0" dependencies = [ "once_cell", "pest", - "sha2 0.10.7", + "sha2 0.10.8", ] [[package]] @@ -5555,7 +5596,7 @@ checksum = "ec2e072ecce94ec471b13398d5402c188e76ac03cf74dd1a975161b23a3f6d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.23", + "syn 2.0.48", ] [[package]] @@ -5566,9 +5607,9 @@ checksum = "257b64915a082f7811703966789728173279bdebb956b143dbcd23f6f970a777" [[package]] name = "pin-project-lite" -version = "0.2.10" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c40d25201921e5ff0c862a505c6557ea88568a4e3ace775ab55e93f2f4f9d57" +checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" [[package]] name = "pin-utils" @@ -5616,7 +5657,7 @@ dependencies = [ "concurrent-queue", "libc", "log", - "pin-project-lite 0.2.10", + "pin-project-lite 0.2.13", "windows-sys 0.48.0", ] @@ -5717,7 +5758,7 @@ dependencies = [ [[package]] name = "primitives" -version = "2.232.1" +version = "2.240.0" dependencies = [ "merlin", "num", @@ -5773,9 +5814,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.63" +version = "1.0.78" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b368fba921b0dce7e60f5e04ec15e565b3303972b42bcfde1d0713b881959eb" +checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" dependencies = [ "unicode-ident", ] @@ -5790,7 +5831,7 @@ dependencies = [ "fnv", "lazy_static", "memchr", - "parking_lot 0.12.1", + "parking_lot 0.12.3", "thiserror", ] @@ -5802,7 +5843,7 @@ checksum = "83cd1b99916654a69008fd66b4f9397fbe08e6e51dfe23d4417acf5d3b8cb87c" dependencies = [ "dtoa", "itoa", - "parking_lot 0.12.1", + "parking_lot 0.12.3", "prometheus-client-derive-text-encode", ] @@ -5819,19 +5860,19 @@ dependencies = [ [[package]] name = "proptest" -version = "1.2.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e35c06b98bf36aba164cc17cb25f7e232f5c4aeea73baa14b8a9f0d92dbfa65" +checksum = "b4c2511913b88df1637da85cc8d96ec8e43a3f8bb8ccb71ee1ac240d6f3df58d" dependencies = [ "bit-set", - "bitflags 1.3.2", - "byteorder", + "bit-vec", + "bitflags 2.3.3", "lazy_static", "num-traits", "rand 0.8.5", "rand_chacha 0.3.1", "rand_xorshift", - "regex-syntax 0.6.29", + "regex-syntax 0.8.2", "rusty-fork", "tempfile", "unarray", @@ -5959,9 +6000,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.29" +version = "1.0.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "573015e8ab27661678357f27dc26460738fd2b6c86e46f386fde94cb5d913105" +checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" dependencies = [ "proc-macro2", ] @@ -6160,7 +6201,7 @@ checksum = "8d2275aab483050ab2a7364c1a46604865ee7d6906684e08db0f090acf74f9e7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.23", + "syn 2.0.48", ] [[package]] @@ -6207,6 +6248,12 @@ version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "436b050e76ed2903236f032a59761c1eb99e1b0aead2c257922771dab1fc8c78" +[[package]] +name = "regex-syntax" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" + [[package]] name = "region" version = "3.0.0" @@ -6662,7 +6709,7 @@ dependencies = [ "futures", "log", "parity-scale-codec", - "parking_lot 0.12.1", + "parking_lot 0.12.3", "sc-executor", "sc-transaction-pool-api", "sc-utils", @@ -6692,7 +6739,7 @@ dependencies = [ "log", "parity-db", "parity-scale-codec", - "parking_lot 0.12.1", + "parking_lot 0.12.3", "sc-client-api", "sc-state-db", "schnellru", @@ -6716,7 +6763,7 @@ dependencies = [ "libp2p", "log", "mockall", - "parking_lot 0.12.1", + "parking_lot 0.12.3", "sc-client-api", "sc-utils", "serde", @@ -6744,7 +6791,7 @@ dependencies = [ "num-rational", "num-traits", "parity-scale-codec", - "parking_lot 0.12.1", + "parking_lot 0.12.3", "sc-client-api", "sc-consensus", "sc-consensus-epochs", @@ -6798,7 +6845,7 @@ dependencies = [ "futures-timer", "log", "parity-scale-codec", - "parking_lot 0.12.1", + "parking_lot 0.12.3", "rand 0.8.5", "sc-block-builder", "sc-chain-spec", @@ -6853,7 +6900,7 @@ dependencies = [ "futures-timer", "log", "parity-scale-codec", - "parking_lot 0.12.1", + "parking_lot 0.12.3", "sc-client-api", "sc-consensus", "sp-api", @@ -6898,7 +6945,7 @@ source = "git+https://github.com/gluwa/substrate.git?branch=pos-keep-history-pol dependencies = [ "lru", "parity-scale-codec", - "parking_lot 0.12.1", + "parking_lot 0.12.3", "sc-executor-common", "sc-executor-wasmi", "sc-executor-wasmtime", @@ -6982,7 +7029,7 @@ source = "git+https://github.com/gluwa/substrate.git?branch=pos-keep-history-pol dependencies = [ "array-bytes", "async-trait", - "parking_lot 0.12.1", + "parking_lot 0.12.3", "serde_json", "sp-application-crypto", "sp-core", @@ -7011,7 +7058,7 @@ dependencies = [ "lru", "mockall", "parity-scale-codec", - "parking_lot 0.12.1", + "parking_lot 0.12.3", "pin-project", "rand 0.8.5", "sc-block-builder", @@ -7193,7 +7240,7 @@ dependencies = [ "num_cpus", "once_cell", "parity-scale-codec", - "parking_lot 0.12.1", + "parking_lot 0.12.3", "rand 0.8.5", "sc-client-api", "sc-network", @@ -7239,7 +7286,7 @@ dependencies = [ "jsonrpsee", "log", "parity-scale-codec", - "parking_lot 0.12.1", + "parking_lot 0.12.3", "sc-block-builder", "sc-chain-spec", "sc-client-api", @@ -7306,7 +7353,7 @@ dependencies = [ "jsonrpsee", "log", "parity-scale-codec", - "parking_lot 0.12.1", + "parking_lot 0.12.3", "sc-chain-spec", "sc-client-api", "sc-transaction-pool-api", @@ -7333,7 +7380,7 @@ dependencies = [ "jsonrpsee", "log", "parity-scale-codec", - "parking_lot 0.12.1", + "parking_lot 0.12.3", "pin-project", "rand 0.8.5", "sc-block-builder", @@ -7393,7 +7440,7 @@ source = "git+https://github.com/gluwa/substrate.git?branch=pos-keep-history-pol dependencies = [ "log", "parity-scale-codec", - "parking_lot 0.12.1", + "parking_lot 0.12.3", "sp-core", ] @@ -7441,7 +7488,7 @@ dependencies = [ "futures", "libp2p", "log", - "parking_lot 0.12.1", + "parking_lot 0.12.3", "pin-project", "rand 0.8.5", "sc-utils", @@ -7463,7 +7510,7 @@ dependencies = [ "libc", "log", "once_cell", - "parking_lot 0.12.1", + "parking_lot 0.12.3", "regex", "rustc-hash", "sc-client-api", @@ -7478,7 +7525,7 @@ dependencies = [ "sp-tracing", "thiserror", "tracing", - "tracing-log", + "tracing-log 0.1.3", "tracing-subscriber 0.2.25", ] @@ -7505,7 +7552,7 @@ dependencies = [ "log", "num-traits", "parity-scale-codec", - "parking_lot 0.12.1", + "parking_lot 0.12.3", "sc-client-api", "sc-transaction-pool-api", "sc-utils", @@ -7544,16 +7591,16 @@ dependencies = [ "futures-timer", "lazy_static", "log", - "parking_lot 0.12.1", + "parking_lot 0.12.3", "prometheus", "sp-arithmetic", ] [[package]] name = "scale-info" -version = "2.9.0" +version = "2.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35c0a159d0c45c12b20c5a844feb1fe4bea86e28f17b92a5f0c42193634d3782" +checksum = "7c453e59a955f81fb62ee5d596b450383d699f152d350e9d23a0db2adb78e4c0" dependencies = [ "bitvec", "cfg-if", @@ -7565,9 +7612,9 @@ dependencies = [ [[package]] name = "scale-info-derive" -version = "2.9.0" +version = "2.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "912e55f6d20e0e80d63733872b40e1227c0bce1e1ab81ba67d696339bfd7fd29" +checksum = "18cf6c6447f813ef19eb450e985bcce6705f9ce7660db221b59093d15c79c4b7" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -7747,29 +7794,29 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.165" +version = "1.0.203" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c939f902bb7d0ccc5bce4f03297e161543c2dcb30914faf032c2bd0b7a0d48fc" +checksum = "7253ab4de971e72fb7be983802300c30b5a7f0c2e56fab8abfc6a214307c0094" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.165" +version = "1.0.203" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6eaae920e25fffe4019b75ff65e7660e72091e59dd204cb5849bbd6a3fd343d7" +checksum = "500cbc0ebeb6f46627f50f3f5811ccf6bf00643be300b4c3eabc0ef55dc5b5ba" dependencies = [ "proc-macro2", "quote", - "syn 2.0.23", + "syn 2.0.48", ] [[package]] name = "serde_json" -version = "1.0.99" +version = "1.0.119" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46266871c240a00b8f503b877622fe33430b3c7d963bdc0f2adc511e54a1eae3" +checksum = "e8eddb61f0697cc3989c5d64b452f5488e2b8a60fd7d5076a3045076ffef8cb0" dependencies = [ "itoa", "ryu", @@ -7827,9 +7874,9 @@ dependencies = [ [[package]] name = "sha2" -version = "0.10.7" +version = "0.10.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "479fb9d862239e610720565ca91403019f2f00410f1864c5aa7479b950a76ed8" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" dependencies = [ "cfg-if", "cpufeatures", @@ -7848,7 +7895,7 @@ dependencies = [ [[package]] name = "sha3pow" -version = "2.232.1" +version = "2.240.0" dependencies = [ "assert_matches", "pallet-difficulty", @@ -7934,9 +7981,9 @@ checksum = "826167069c09b99d56f31e9ae5c99049e932a98c9dc2dac47645b08dbbf76ba7" [[package]] name = "smallvec" -version = "1.10.0" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "snap" @@ -7957,7 +8004,7 @@ dependencies = [ "rand_core 0.6.4", "ring", "rustc_version", - "sha2 0.10.7", + "sha2 0.10.8", "subtle", ] @@ -7973,9 +8020,9 @@ dependencies = [ [[package]] name = "socket2" -version = "0.5.3" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2538b18701741680e0322a2302176d3253a35388e2e62f172f64f4f16605f877" +checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" dependencies = [ "libc", "windows-sys 0.48.0", @@ -8078,7 +8125,7 @@ dependencies = [ "log", "lru", "parity-scale-codec", - "parking_lot 0.12.1", + "parking_lot 0.12.3", "sp-api", "sp-consensus", "sp-database", @@ -8219,7 +8266,7 @@ dependencies = [ "log", "merlin", "parity-scale-codec", - "parking_lot 0.12.1", + "parking_lot 0.12.3", "primitive-types", "rand 0.8.5", "regex", @@ -8249,7 +8296,7 @@ dependencies = [ "blake2b_simd", "byteorder", "digest 0.10.7", - "sha2 0.10.7", + "sha2 0.10.8", "sha3", "sp-std", "twox-hash", @@ -8272,7 +8319,7 @@ version = "4.0.0-dev" source = "git+https://github.com/gluwa/substrate.git?branch=pos-keep-history-polkadot-v0.9.41#4e22d40dc55ca0a2a7e85037bbcd73de45afcd80" dependencies = [ "kvdb", - "parking_lot 0.12.1", + "parking_lot 0.12.3", ] [[package]] @@ -8356,7 +8403,7 @@ dependencies = [ "futures", "merlin", "parity-scale-codec", - "parking_lot 0.12.1", + "parking_lot 0.12.3", "schnorrkel", "serde", "sp-core", @@ -8513,7 +8560,7 @@ dependencies = [ "hash-db", "log", "parity-scale-codec", - "parking_lot 0.12.1", + "parking_lot 0.12.3", "rand 0.8.5", "smallvec", "sp-core", @@ -8607,7 +8654,7 @@ dependencies = [ "memory-db", "nohash-hasher", "parity-scale-codec", - "parking_lot 0.12.1", + "parking_lot 0.12.3", "scale-info", "schnellru", "sp-core", @@ -8763,11 +8810,11 @@ dependencies = [ [[package]] name = "strum" -version = "0.25.0" +version = "0.26.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "290d54ea6f91c969195bdbcd7442c8c2a2ba87da8bf60a7ee86a235d4bc1e125" +checksum = "723b93e8addf9aa965ebe2d11da6d7540fa2283fcea14b3371ff055f7ba13f5f" dependencies = [ - "strum_macros 0.25.2", + "strum_macros 0.26.1", ] [[package]] @@ -8785,15 +8832,15 @@ dependencies = [ [[package]] name = "strum_macros" -version = "0.25.2" +version = "0.26.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad8d03b598d3d0fff69bf533ee3ef19b8eeb342729596df84bcc7e1f96ec4059" +checksum = "7a3417fc93d76740d974a01654a09777cb500428cc874ca9f45edfe0c4d4cd18" dependencies = [ "heck", "proc-macro2", "quote", "rustversion", - "syn 2.0.23", + "syn 2.0.48", ] [[package]] @@ -8952,9 +8999,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.23" +version = "2.0.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59fb7d6d8281a51045d62b8eb3a7d1ce347b76f312af50cd3dc0af39c87c1737" +checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" dependencies = [ "proc-macro2", "quote", @@ -9023,7 +9070,7 @@ checksum = "31c0432476357e58790aaa47a8efb0c5138f137343f3b5f23bd36a27e3b0a6d6" dependencies = [ "autocfg", "cfg-if", - "fastrand", + "fastrand 1.9.0", "redox_syscall 0.3.5", "rustix 0.37.22", "windows-sys 0.48.0", @@ -9046,7 +9093,7 @@ checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76" [[package]] name = "test-client" -version = "2.232.1" +version = "2.240.0" dependencies = [ "creditcoin-node-runtime", "sc-chain-spec", @@ -9060,11 +9107,11 @@ dependencies = [ [[package]] name = "test-runtime-utils" -version = "2.232.1" +version = "2.240.0" dependencies = [ "frame-support", "frame-system", - "parking_lot 0.12.1", + "parking_lot 0.12.3", "sp-arithmetic", "sp-core", "sp-io", @@ -9076,22 +9123,22 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.40" +version = "1.0.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac" +checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.40" +version = "1.0.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" +checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" dependencies = [ "proc-macro2", "quote", - "syn 2.0.23", + "syn 2.0.48", ] [[package]] @@ -9179,7 +9226,7 @@ dependencies = [ "pbkdf2 0.11.0", "rand 0.8.5", "rustc-hash", - "sha2 0.10.7", + "sha2 0.10.8", "thiserror", "unicode-normalization", "wasm-bindgen", @@ -9222,33 +9269,31 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.29.1" +version = "1.39.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "532826ff75199d5833b9d2c5fe410f29235e25704ee5f0ef599fb51c21f4a4da" +checksum = "daa4fb1bc778bd6f04cbfc4bb2d06a7396a8f299dc33ea1900cedaa316f467b1" dependencies = [ - "autocfg", "backtrace", "bytes", "libc", "mio", - "num_cpus", - "parking_lot 0.12.1", - "pin-project-lite 0.2.10", + "parking_lot 0.12.3", + "pin-project-lite 0.2.13", "signal-hook-registry", - "socket2 0.4.9", + "socket2 0.5.5", "tokio-macros", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] name = "tokio-macros" -version = "2.1.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" +checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", - "syn 2.0.23", + "syn 2.0.48", ] [[package]] @@ -9279,7 +9324,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "397c988d37662c7dda6d2208364a706264bf3d6138b11d436cbac0ad38832842" dependencies = [ "futures-core", - "pin-project-lite 0.2.10", + "pin-project-lite 0.2.13", "tokio", "tokio-util", ] @@ -9294,7 +9339,7 @@ dependencies = [ "futures-core", "futures-io", "futures-sink", - "pin-project-lite 0.2.10", + "pin-project-lite 0.2.13", "tokio", "tracing", ] @@ -9332,7 +9377,7 @@ dependencies = [ "http", "http-body", "http-range-header", - "pin-project-lite 0.2.10", + "pin-project-lite 0.2.13", "tower-layer", "tower-service", ] @@ -9355,38 +9400,37 @@ version = "0.1.0" dependencies = [ "sp-tracing", "tracing-core", - "tracing-subscriber 0.3.17", + "tracing-subscriber 0.3.18", ] [[package]] name = "tracing" -version = "0.1.37" +version = "0.1.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" dependencies = [ - "cfg-if", "log", - "pin-project-lite 0.2.10", + "pin-project-lite 0.2.13", "tracing-attributes", "tracing-core", ] [[package]] name = "tracing-attributes" -version = "0.1.26" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.23", + "syn 2.0.48", ] [[package]] name = "tracing-core" -version = "0.1.31" +version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" dependencies = [ "once_cell", "valuable", @@ -9413,6 +9457,17 @@ dependencies = [ "tracing-core", ] +[[package]] +name = "tracing-log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + [[package]] name = "tracing-serde" version = "0.1.3" @@ -9442,15 +9497,15 @@ dependencies = [ "thread_local", "tracing", "tracing-core", - "tracing-log", + "tracing-log 0.1.3", "tracing-serde", ] [[package]] name = "tracing-subscriber" -version = "0.3.17" +version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30a651bc37f915e81f087d86e62a18eec5f79550c7faff886f7090b4ea757c77" +checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" dependencies = [ "matchers 0.1.0", "nu-ansi-term", @@ -9461,7 +9516,7 @@ dependencies = [ "thread_local", "tracing", "tracing-core", - "tracing-log", + "tracing-log 0.2.0", ] [[package]] @@ -9523,7 +9578,7 @@ dependencies = [ "ipconfig", "lazy_static", "lru-cache", - "parking_lot 0.12.1", + "parking_lot 0.12.3", "resolv-conf", "smallvec", "thiserror", @@ -9845,7 +9900,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.23", + "syn 2.0.48", "wasm-bindgen-shared", ] @@ -9879,7 +9934,7 @@ checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.23", + "syn 2.0.48", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -10050,7 +10105,7 @@ dependencies = [ "log", "rustix 0.36.14", "serde", - "sha2 0.10.7", + "sha2 0.10.8", "toml", "windows-sys 0.42.0", "zstd", @@ -10246,7 +10301,7 @@ dependencies = [ "sdp", "serde", "serde_json", - "sha2 0.10.7", + "sha2 0.10.8", "stun", "thiserror", "time 0.3.22", @@ -10309,7 +10364,7 @@ dependencies = [ "sec1", "serde", "sha1", - "sha2 0.10.7", + "sha2 0.10.8", "signature", "subtle", "thiserror", @@ -10545,6 +10600,15 @@ dependencies = [ "windows-targets 0.48.1", ] +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.6", +] + [[package]] name = "windows-targets" version = "0.42.2" @@ -10575,6 +10639,22 @@ dependencies = [ "windows_x86_64_msvc 0.48.0", ] +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", +] + [[package]] name = "windows_aarch64_gnullvm" version = "0.42.2" @@ -10587,6 +10667,12 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + [[package]] name = "windows_aarch64_msvc" version = "0.34.0" @@ -10605,6 +10691,12 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + [[package]] name = "windows_i686_gnu" version = "0.34.0" @@ -10623,6 +10715,18 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + [[package]] name = "windows_i686_msvc" version = "0.34.0" @@ -10641,6 +10745,12 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + [[package]] name = "windows_x86_64_gnu" version = "0.34.0" @@ -10659,6 +10769,12 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + [[package]] name = "windows_x86_64_gnullvm" version = "0.42.2" @@ -10671,6 +10787,12 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + [[package]] name = "windows_x86_64_msvc" version = "0.34.0" @@ -10689,6 +10811,12 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + [[package]] name = "winreg" version = "0.50.0" @@ -10776,7 +10904,7 @@ dependencies = [ "futures", "log", "nohash-hasher", - "parking_lot 0.12.1", + "parking_lot 0.12.3", "rand 0.8.5", "static_assertions", ] @@ -10807,7 +10935,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.23", + "syn 2.0.48", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index e3454afb6e..2b3d676a16 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,7 +10,6 @@ members = [ 'pallets/creditcoin', 'pallets/offchain-task-scheduler/runtime-api', 'pallets/offchain-task-scheduler', - 'pallets/staking', 'pallets/pos-switch', 'runtime', "sha3pow", @@ -18,12 +17,13 @@ members = [ "test/client", "test/runtime-utils", "test/traced-test", + "runtime/generate-bags", ] resolver = "2" [workspace.package] -version = '2.232.1' +version = '2.240.0' authors = ['Gluwa Inc.', 'Nathan Whitaker '] edition = '2021' license = 'Unlicense' @@ -38,12 +38,12 @@ hex = { version = "0.4.3", default-features = false, features = ["alloc"] } hex-literal = { version = "0.3.4" } jsonrpc-core = { version = "18.0.0" } jsonrpsee = { version = "0.16.3" } -log = { version = "0.4.20" } +log = { version = "0.4.21" } parity-scale-codec = { version = "3.2.1", default-features = false, features = [ "derive", ] } serde = { version = "1.0.163", default-features = false, features = ["derive"] } -scale-info = { version = "2.7", default-features = false, features = [ +scale-info = { version = "2.11", default-features = false, features = [ "derive", ] } @@ -53,7 +53,6 @@ pallet-creditcoin = { path = "pallets/creditcoin", default-features = false } pallet-difficulty = { path = "pallets/difficulty", default-features = false } pallet-offchain-task-scheduler = { path = "pallets/offchain-task-scheduler", default-features = false } pallet-rewards = { path = "pallets/rewards", default-features = false } -pallet-staking = { path = "pallets/staking", default-features = false } primitives = { path = "primitives", default-features = false } runtime-utils = { package = "test-runtime-utils", path = "test/runtime-utils", default-features = false } task-scheduler-runtime-api = { path = "pallets/offchain-task-scheduler/runtime-api", default-features = false } @@ -152,3 +151,4 @@ pallet-proxy = { branch = "pos-keep-history-polkadot-v0.9.41", git = "https://gi pallet-fast-unstake = { branch = "pos-keep-history-polkadot-v0.9.41", git = "https://github.com/gluwa/substrate.git", default-features = false } pallet-nomination-pools = { branch = "pos-keep-history-polkadot-v0.9.41", git = "https://github.com/gluwa/substrate.git", default-features = false } pallet-identity = { branch = "pos-keep-history-polkadot-v0.9.41", git = "https://github.com/gluwa/substrate.git", default-features = false } +generate-bags = { branch = "pos-keep-history-polkadot-v0.9.41", git = "https://github.com/gluwa/substrate.git" } # Utils diff --git a/Dockerfile b/Dockerfile index 6b12edb148..8e5bba0e1d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -6,7 +6,7 @@ RUN apt-get update && \ apt-get upgrade -y && \ apt-get install -y --no-install-recommends ca-certificates curl && \ update-ca-certificates && \ - curl -fsSL https://deb.nodesource.com/setup_16.x | bash - && \ + curl -fsSL https://deb.nodesource.com/setup_20.x | bash - && \ apt-get install -y nodejs --no-install-recommends && \ npm install -g yarn @@ -30,11 +30,6 @@ RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | /bin/sh -s -- -y COPY --chown=creditcoin:creditcoin . /creditcoin-node/ # shellcheck source=/dev/null RUN source ~/.cargo/env && \ - source ./ci/env && \ - rustup default $RUSTC_VERSION && \ - rustup update $RUSTC_VERSION && \ - rustup target add wasm32-unknown-unknown --toolchain $RUSTC_VERSION && \ - source ~/.cargo/env && \ cargo build --release diff --git a/README.md b/README.md index b6e13ab64a..c1257eaacd 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,6 @@ For more information, see [creditcoin.org](https://creditcoin.org), or read the ## Getting Started -- [Miner Setup](./docs/miner-setup.md) - [Using PolkadotJs](./docs/using-polkadotjs.md) ## Developer Setup @@ -27,9 +26,11 @@ you terminate the process. After the project has been built, there are other way node. ```sh -cargo run --release -- --dev --tmp --mining-key +cargo run --release -- --dev --tmp ``` +_WARNING: running natively on Windows [is unsupported](https://github.com/gluwa/creditcoin/security/advisories/GHSA-cx5c-xwcv-vhmq)._ + ### Explore Node Options Once the project has been built, the following command can be used to explore all parameters and @@ -92,7 +93,7 @@ Devnet bootnodes: This command will start the single-node development chain with persistent state: ```bash -./target/release/creditcoin-node --dev --mining-key +./target/release/creditcoin-node --dev ``` Purge the development chain's state: @@ -104,7 +105,7 @@ Purge the development chain's state: Start the development chain with detailed logging: ```bash -RUST_BACKTRACE=1 ./target/release/creditcoin-node -ldebug --dev --mining-key +RUST_BACKTRACE=1 ./target/release/creditcoin-node -ldebug --dev ``` ### Connect with Polkadot-JS Apps Front-end @@ -124,4 +125,4 @@ If you want to see the multi-node consensus algorithm in action, refer to our - [Legacy Creditcoin 1.x Account Migration](./docs/legacy-account-migration.md) - [Legacy Creditcoin 1.x Repos](https://github.com/gluwa?q=legacy) -### Testing +Removing `collect_coins` 08.03.24 diff --git a/ci/env b/ci/env deleted file mode 100644 index 5184ee06f9..0000000000 --- a/ci/env +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh - -export RUSTC_VERSION=nightly-2023-06-06 diff --git a/creditcoin-js/creditcoin.json b/creditcoin-js/creditcoin.json index 060a6a40ee..270ae38aed 100644 --- a/creditcoin-js/creditcoin.json +++ b/creditcoin-js/creditcoin.json @@ -1 +1 @@ -{"jsonrpc":"2.0","result":"0x6d6574610e5d06000c1c73705f636f72651863727970746f2c4163636f756e7449643332000004000401205b75383b2033325d0000040000032000000008000800000503000c08306672616d655f73797374656d2c4163636f756e74496e666f0814496e64657801102c4163636f756e74446174610114001401146e6f6e6365100114496e646578000124636f6e73756d657273100120526566436f756e7400012470726f766964657273100120526566436f756e7400012c73756666696369656e7473100120526566436f756e740001106461746114012c4163636f756e7444617461000010000005050014083c70616c6c65745f62616c616e6365732c4163636f756e7444617461041c42616c616e63650118001001106672656518011c42616c616e6365000120726573657276656418011c42616c616e636500012c6d6973635f66726f7a656e18011c42616c616e63650001286665655f66726f7a656e18011c42616c616e636500001800000507001c0c346672616d655f737570706f7274206469737061746368405065724469737061746368436c6173730404540120000c01186e6f726d616c2001045400012c6f7065726174696f6e616c200104540001246d616e6461746f7279200104540000200c2873705f77656967687473247765696768745f76321857656967687400000801207265665f74696d6524010c75363400012870726f6f665f73697a6524010c75363400002400000628002800000506002c083c7072696d69746976655f74797065731048323536000004000401205b75383b2033325d000030000002080034102873705f72756e74696d651c67656e65726963186469676573741844696765737400000401106c6f677338013c5665633c4469676573744974656d3e0000380000023c003c102873705f72756e74696d651c67656e6572696318646967657374284469676573744974656d0001142850726552756e74696d650800400144436f6e73656e737573456e67696e654964000030011c5665633c75383e00060024436f6e73656e7375730800400144436f6e73656e737573456e67696e654964000030011c5665633c75383e000400105365616c0800400144436f6e73656e737573456e67696e654964000030011c5665633c75383e000500144f74686572040030011c5665633c75383e0000006452756e74696d65456e7669726f6e6d656e745570646174656400080000400000030400000008004400000248004808306672616d655f73797374656d2c4576656e745265636f7264080445014c0454012c000c01147068617365cd01011450686173650001146576656e744c010445000118746f70696373d10101185665633c543e00004c085c637265646974636f696e5f6e6f64655f72756e74696d653052756e74696d654576656e7400014c1853797374656d04005001706672616d655f73797374656d3a3a4576656e743c52756e74696d653e0000002042616c616e636573040074017c70616c6c65745f62616c616e6365733a3a4576656e743c52756e74696d653e0004001c5374616b696e6704007c01a070616c6c65745f7374616b696e675f7375627374726174653a3a4576656e743c52756e74696d653e000600204f6666656e636573040094015870616c6c65745f6f6666656e6365733a3a4576656e740007001c53657373696f6e04009c015470616c6c65745f73657373696f6e3a3a4576656e740009001c4772616e6470610400a0015470616c6c65745f6772616e6470613a3a4576656e74000a0020496d4f6e6c696e650400b4018070616c6c65745f696d5f6f6e6c696e653a3a4576656e743c52756e74696d653e000b0024566f7465724c6973740400d801f470616c6c65745f626167735f6c6973743a3a4576656e743c52756e74696d652c2070616c6c65745f626167735f6c6973743a3a496e7374616e6365313e000c00485472616e73616374696f6e5061796d656e740400dc01a870616c6c65745f7472616e73616374696f6e5f7061796d656e743a3a4576656e743c52756e74696d653e000d00105375646f0400e0016c70616c6c65745f7375646f3a3a4576656e743c52756e74696d653e000e0028437265646974636f696e0400f0018470616c6c65745f637265646974636f696e3a3a4576656e743c52756e74696d653e000f001c5265776172647304008d01017870616c6c65745f726577617264733a3a4576656e743c52756e74696d653e001100245363686564756c657204009101018070616c6c65745f7363686564756c65723a3a4576656e743c52756e74696d653e001200345461736b5363686564756c657204009d0101b870616c6c65745f6f6666636861696e5f7461736b5f7363686564756c65723a3a4576656e743c52756e74696d653e001300204964656e746974790400a101017c70616c6c65745f6964656e746974793a3a4576656e743c52756e74696d653e0014001c5574696c6974790400a501015470616c6c65745f7574696c6974793a3a4576656e740015001450726f78790400a901017070616c6c65745f70726f78793a3a4576656e743c52756e74696d653e0016002c46617374556e7374616b650400b101018c70616c6c65745f666173745f756e7374616b653a3a4576656e743c52756e74696d653e0017003c4e6f6d696e6174696f6e506f6f6c730400b901019c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c733a3a4576656e743c52756e74696d653e00180000500c306672616d655f73797374656d1870616c6c6574144576656e740404540001184045787472696e7369635375636365737304013464697370617463685f696e666f5401304469737061746368496e666f00000490416e2065787472696e73696320636f6d706c65746564207375636365737366756c6c792e3c45787472696e7369634661696c656408013864697370617463685f6572726f7260013444697370617463684572726f7200013464697370617463685f696e666f5401304469737061746368496e666f00010450416e2065787472696e736963206661696c65642e2c436f64655570646174656400020450603a636f6465602077617320757064617465642e284e65774163636f756e7404011c6163636f756e74000130543a3a4163636f756e7449640003046841206e6577206163636f756e742077617320637265617465642e344b696c6c65644163636f756e7404011c6163636f756e74000130543a3a4163636f756e74496400040458416e206163636f756e7420776173207265617065642e2052656d61726b656408011873656e646572000130543a3a4163636f756e744964000110686173682c011c543a3a48617368000504704f6e206f6e2d636861696e2072656d61726b2068617070656e65642e04704576656e7420666f72207468652053797374656d2070616c6c65742e540c346672616d655f737570706f7274206469737061746368304469737061746368496e666f00000c0118776569676874200118576569676874000114636c6173735801344469737061746368436c617373000120706179735f6665655c0110506179730000580c346672616d655f737570706f7274206469737061746368344469737061746368436c61737300010c184e6f726d616c0000002c4f7065726174696f6e616c000100244d616e6461746f7279000200005c0c346672616d655f737570706f727420646973706174636810506179730001080c596573000000084e6f0001000060082873705f72756e74696d653444697370617463684572726f72000134144f746865720000003043616e6e6f744c6f6f6b7570000100244261644f726967696e000200184d6f64756c65040064012c4d6f64756c654572726f7200030044436f6e73756d657252656d61696e696e670004002c4e6f50726f76696465727300050040546f6f4d616e79436f6e73756d65727300060014546f6b656e0400680128546f6b656e4572726f720007002841726974686d6574696304006c013c41726974686d657469634572726f72000800345472616e73616374696f6e616c04007001485472616e73616374696f6e616c4572726f7200090024457868617573746564000a0028436f7272757074696f6e000b002c556e617661696c61626c65000c000064082873705f72756e74696d652c4d6f64756c654572726f720000080114696e64657808010875380001146572726f7240018c5b75383b204d41585f4d4f44554c455f4552524f525f454e434f4445445f53495a455d000068082873705f72756e74696d6528546f6b656e4572726f7200011c1c4e6f46756e647300000020576f756c644469650001003042656c6f774d696e696d756d0002003043616e6e6f7443726561746500030030556e6b6e6f776e41737365740004001846726f7a656e0005002c556e737570706f72746564000600006c083473705f61726974686d657469633c41726974686d657469634572726f7200010c24556e646572666c6f77000000204f766572666c6f77000100384469766973696f6e42795a65726f0002000070082873705f72756e74696d65485472616e73616374696f6e616c4572726f72000108304c696d6974526561636865640000001c4e6f4c6179657200010000740c3c70616c6c65745f62616c616e6365731870616c6c6574144576656e740804540004490001281c456e646f77656408011c6163636f756e74000130543a3a4163636f756e744964000130667265655f62616c616e6365180128543a3a42616c616e6365000004b8416e206163636f756e74207761732063726561746564207769746820736f6d6520667265652062616c616e63652e20447573744c6f737408011c6163636f756e74000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650001083d01416e206163636f756e74207761732072656d6f7665642077686f73652062616c616e636520776173206e6f6e2d7a65726f206275742062656c6f77204578697374656e7469616c4465706f7369742c78726573756c74696e6720696e20616e206f75747269676874206c6f73732e205472616e736665720c011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650002044c5472616e73666572207375636365656465642e2842616c616e63655365740c010c77686f000130543a3a4163636f756e74496400011066726565180128543a3a42616c616e63650001207265736572766564180128543a3a42616c616e636500030468412062616c616e6365207761732073657420627920726f6f742e20526573657276656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000404e0536f6d652062616c616e63652077617320726573657276656420286d6f7665642066726f6d206672656520746f207265736572766564292e28556e726573657276656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000504e8536f6d652062616c616e63652077617320756e726573657276656420286d6f7665642066726f6d20726573657276656420746f2066726565292e4852657365727665526570617472696174656410011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500014864657374696e6174696f6e5f7374617475737801185374617475730006084d01536f6d652062616c616e636520776173206d6f7665642066726f6d207468652072657365727665206f6620746865206669727374206163636f756e7420746f20746865207365636f6e64206163636f756e742ed846696e616c20617267756d656e7420696e64696361746573207468652064657374696e6174696f6e2062616c616e636520747970652e1c4465706f73697408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000704d8536f6d6520616d6f756e7420776173206465706f73697465642028652e672e20666f72207472616e73616374696f6e2066656573292e20576974686472617708010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650008041d01536f6d6520616d6f756e74207761732077697468647261776e2066726f6d20746865206163636f756e742028652e672e20666f72207472616e73616374696f6e2066656573292e1c536c617368656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650009040101536f6d6520616d6f756e74207761732072656d6f7665642066726f6d20746865206163636f756e742028652e672e20666f72206d69736265686176696f72292e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a0909097814346672616d655f737570706f72741874726169747318746f6b656e73106d6973633442616c616e63655374617475730001081046726565000000205265736572766564000100007c103870616c6c65745f7374616b696e671870616c6c65741870616c6c6574144576656e7404045400013c1c457261506169640c01246572615f696e646578100120457261496e64657800014076616c696461746f725f7061796f757418013042616c616e63654f663c543e00012472656d61696e64657218013042616c616e63654f663c543e000008550154686520657261207061796f757420686173206265656e207365743b207468652066697273742062616c616e6365206973207468652076616c696461746f722d7061796f75743b20746865207365636f6e64206973c07468652072656d61696e6465722066726f6d20746865206d6178696d756d20616d6f756e74206f66207265776172642e2052657761726465640801147374617368000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e000104bc546865206e6f6d696e61746f7220686173206265656e207265776172646564206279207468697320616d6f756e742e1c536c61736865640801187374616b6572000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e0002041d0141207374616b6572202876616c696461746f72206f72206e6f6d696e61746f722920686173206265656e20736c61736865642062792074686520676976656e20616d6f756e742e34536c6173685265706f727465640c012476616c696461746f72000130543a3a4163636f756e7449640001206672616374696f6e80011c50657262696c6c000124736c6173685f657261100120457261496e64657800030859014120736c61736820666f722074686520676976656e2076616c696461746f722c20666f722074686520676976656e2070657263656e74616765206f66207468656972207374616b652c2061742074686520676976656e54657261206173206265656e207265706f727465642e684f6c64536c617368696e675265706f727444697363617264656404013473657373696f6e5f696e64657810013053657373696f6e496e6465780004081901416e206f6c6420736c617368696e67207265706f72742066726f6d2061207072696f72206572612077617320646973636172646564206265636175736520697420636f756c64446e6f742062652070726f6365737365642e385374616b657273456c65637465640005048441206e657720736574206f66207374616b6572732077617320656c65637465642e18426f6e6465640801147374617368000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e000610d0416e206163636f756e742068617320626f6e646564207468697320616d6f756e742e205c5b73746173682c20616d6f756e745c5d004d014e4f54453a2054686973206576656e74206973206f6e6c7920656d6974746564207768656e2066756e64732061726520626f6e64656420766961206120646973706174636861626c652e204e6f7461626c792c210169742077696c6c206e6f7420626520656d697474656420666f72207374616b696e672072657761726473207768656e20746865792061726520616464656420746f207374616b652e20556e626f6e6465640801147374617368000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e00070490416e206163636f756e742068617320756e626f6e646564207468697320616d6f756e742e2457697468647261776e0801147374617368000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e0008085901416e206163636f756e74206861732063616c6c6564206077697468647261775f756e626f6e6465646020616e642072656d6f76656420756e626f6e64696e67206368756e6b7320776f727468206042616c616e6365606466726f6d2074686520756e6c6f636b696e672071756575652e184b69636b65640801246e6f6d696e61746f72000130543a3a4163636f756e7449640001147374617368000130543a3a4163636f756e744964000904b441206e6f6d696e61746f7220686173206265656e206b69636b65642066726f6d20612076616c696461746f722e545374616b696e67456c656374696f6e4661696c6564000a04ac54686520656c656374696f6e206661696c65642e204e6f206e65772065726120697320706c616e6e65642e1c4368696c6c65640401147374617368000130543a3a4163636f756e744964000b042101416e206163636f756e74206861732073746f707065642070617274696369706174696e672061732065697468657220612076616c696461746f72206f72206e6f6d696e61746f722e345061796f7574537461727465640801246572615f696e646578100120457261496e64657800013c76616c696461746f725f7374617368000130543a3a4163636f756e744964000c0498546865207374616b657273272072657761726473206172652067657474696e6720706169642e4456616c696461746f7250726566735365740801147374617368000130543a3a4163636f756e744964000114707265667384013856616c696461746f725072656673000d0498412076616c696461746f72206861732073657420746865697220707265666572656e6365732e20466f7263654572610401106d6f646590011c466f7263696e67000e047441206e657720666f72636520657261206d6f646520776173207365742e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909800c3473705f61726974686d65746963287065725f7468696e67731c50657262696c6c0000040010010c753332000084083870616c6c65745f7374616b696e673856616c696461746f7250726566730000080128636f6d6d697373696f6e88011c50657262696c6c00011c626c6f636b65648c0110626f6f6c00008800000680008c000005000090083870616c6c65745f7374616b696e671c466f7263696e67000110284e6f74466f7263696e6700000020466f7263654e657700010024466f7263654e6f6e650002002c466f726365416c7761797300030000940c3c70616c6c65745f6f6666656e6365731870616c6c6574144576656e740001041c4f6666656e63650801106b696e649801104b696e6400012074696d65736c6f743001384f706171756554696d65536c6f7400000c5101546865726520697320616e206f6666656e6365207265706f72746564206f662074686520676976656e20606b696e64602068617070656e656420617420746865206073657373696f6e5f696e6465786020616e643501286b696e642d7370656369666963292074696d6520736c6f742e2054686973206576656e74206973206e6f74206465706f736974656420666f72206475706c696361746520736c61736865732e4c5c5b6b696e642c2074696d65736c6f745c5d2e04304576656e747320747970652e980000031000000008009c0c3870616c6c65745f73657373696f6e1870616c6c6574144576656e74000104284e657753657373696f6e04013473657373696f6e5f696e64657810013053657373696f6e496e64657800000839014e65772073657373696f6e206861732068617070656e65642e204e6f746520746861742074686520617267756d656e74206973207468652073657373696f6e20696e6465782c206e6f74207468659c626c6f636b206e756d626572206173207468652074797065206d6967687420737567676573742e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909a00c3870616c6c65745f6772616e6470611870616c6c6574144576656e7400010c384e6577417574686f726974696573040134617574686f726974795f736574a40134417574686f726974794c6973740000048c4e657720617574686f726974792073657420686173206265656e206170706c6965642e185061757365640001049843757272656e7420617574686f726974792073657420686173206265656e207061757365642e1c526573756d65640002049c43757272656e7420617574686f726974792073657420686173206265656e20726573756d65642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909a4000002a800a800000408ac2800ac0c5073705f636f6e73656e7375735f6772616e6470610c617070185075626c696300000400b0013c656432353531393a3a5075626c69630000b00c1c73705f636f72651c65643235353139185075626c6963000004000401205b75383b2033325d0000b40c4070616c6c65745f696d5f6f6e6c696e651870616c6c6574144576656e7404045400010c444865617274626561745265636569766564040130617574686f726974795f6964b80138543a3a417574686f726974794964000004c041206e657720686561727462656174207761732072656365697665642066726f6d2060417574686f726974794964602e1c416c6c476f6f64000104d041742074686520656e64206f66207468652073657373696f6e2c206e6f206f6666656e63652077617320636f6d6d69747465642e2c536f6d654f66666c696e6504011c6f66666c696e65c0016c5665633c4964656e74696669636174696f6e5475706c653c543e3e000204290141742074686520656e64206f66207468652073657373696f6e2c206174206c65617374206f6e652076616c696461746f722077617320666f756e6420746f206265206f66666c696e652e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909b8104070616c6c65745f696d5f6f6e6c696e651c737232353531392c6170705f73723235353139185075626c696300000400bc013c737232353531393a3a5075626c69630000bc0c1c73705f636f72651c73723235353139185075626c6963000004000401205b75383b2033325d0000c0000002c400c40000040800c800c8083870616c6c65745f7374616b696e67204578706f7375726508244163636f756e74496401001c42616c616e63650118000c0114746f74616ccc011c42616c616e636500010c6f776ecc011c42616c616e63650001186f7468657273d001ac5665633c496e646976696475616c4578706f737572653c4163636f756e7449642c2042616c616e63653e3e0000cc0000061800d0000002d400d4083870616c6c65745f7374616b696e6748496e646976696475616c4578706f7375726508244163636f756e74496401001c42616c616e636501180008010c77686f0001244163636f756e74496400011476616c7565cc011c42616c616e63650000d80c4070616c6c65745f626167735f6c6973741870616c6c6574144576656e740804540004490001082052656261676765640c010c77686f000130543a3a4163636f756e74496400011066726f6d280120543a3a53636f7265000108746f280120543a3a53636f7265000004a44d6f76656420616e206163636f756e742066726f6d206f6e652062616720746f20616e6f746865722e3053636f72655570646174656408010c77686f000130543a3a4163636f756e7449640001246e65775f73636f7265280120543a3a53636f7265000104d855706461746564207468652073636f7265206f6620736f6d65206163636f756e7420746f2074686520676976656e20616d6f756e742e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909dc0c6870616c6c65745f7472616e73616374696f6e5f7061796d656e741870616c6c6574144576656e74040454000104485472616e73616374696f6e466565506169640c010c77686f000130543a3a4163636f756e74496400012861637475616c5f66656518013042616c616e63654f663c543e00010c74697018013042616c616e63654f663c543e000008590141207472616e73616374696f6e20666565206061637475616c5f666565602c206f662077686963682060746970602077617320616464656420746f20746865206d696e696d756d20696e636c7573696f6e206665652c5c686173206265656e2070616964206279206077686f602e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909e00c2c70616c6c65745f7375646f1870616c6c6574144576656e7404045400010c14537564696404012c7375646f5f726573756c74e401384469737061746368526573756c740000048841207375646f206a75737420746f6f6b20706c6163652e205c5b726573756c745c5d284b65794368616e6765640401286f6c645f7375646f6572ec01504f7074696f6e3c543a3a4163636f756e7449643e0001043901546865205c5b7375646f65725c5d206a757374207377697463686564206964656e746974793b20746865206f6c64206b657920697320737570706c696564206966206f6e6520657869737465642e285375646f4173446f6e6504012c7375646f5f726573756c74e401384469737061746368526573756c740002048841207375646f206a75737420746f6f6b20706c6163652e205c5b726573756c745c5d04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909e40418526573756c7408045401e8044501600108084f6b0400e8000000000c4572720400600000010000e80000040000ec04184f7074696f6e04045401000108104e6f6e6500000010536f6d650400000000010000f00c4470616c6c65745f637265646974636f696e1870616c6c6574144576656e740404540001444441646472657373526567697374657265640800f401484164647265737349643c543a3a486173683e0000f80154416464726573733c543a3a4163636f756e7449643e000008d0416e2061646472657373206f6e20616e2065787465726e616c20636861696e20686173206265656e20726567697374657265642eac5b726567697374657265645f616464726573735f69642c20726567697374657265645f616464726573735d58436f6c6c656374436f696e7352656769737465726564080005010164436f6c6c6563746564436f696e7349643c543a3a486173683e00000901017c74797065733a3a556e7665726966696564436f6c6c6563746564436f696e730001082901436f6c6c656374696e6720636f696e732066726f6d20457468204552432d323020686173206265656e207265676973746572656420616e642077696c6c2062652076657269666965642eb85b636f6c6c65637465645f636f696e735f69642c20726567697374657265645f636f6c6c6563745f636f696e735d485472616e736665725265676973746572656408001d01014c5472616e7366657249643c543a3a486173683e0000210101e85472616e736665723c543a3a4163636f756e7449642c20543a3a426c6f636b4e756d6265722c20543a3a486173682c20543a3a4d6f6d656e743e000208f8416e2065787465726e616c207472616e7366657220686173206265656e207265676973746572656420616e642077696c6c2062652076657269666965642eb45b726567697374657265645f7472616e736665725f69642c20726567697374657265645f7472616e736665725d405472616e73666572566572696669656404001d01014c5472616e7366657249643c543a3a486173683e000308d0416e2065787465726e616c207472616e7366657220686173206265656e207375636365737366756c6c792076657269666965642e585b76657269666965645f7472616e736665725f69645d50436f6c6c6563746564436f696e734d696e74656408000501018074797065733a3a436f6c6c6563746564436f696e7349643c543a3a486173683e0000410101c074797065733a3a436f6c6c6563746564436f696e735374727563743c543a3a486173682c20543a3a42616c616e63653e000408dc436f6c6c656374436f696e7320686173206265656e207375636365737366756c6c7920766572696669656420616e64206d696e7465642e945b636f6c6c65637465645f636f696e735f69642c20636f6c6c65637465645f636f696e735d445472616e7366657250726f63657373656404001d01014c5472616e7366657249643c543a3a486173683e0005081501416e2065787465726e616c207472616e7366657220686173206265656e2070726f63657373656420616e64206d61726b65642061732070617274206f662061206c6f616e2e5c5b70726f6365737365645f7472616e736665725f69645d3441736b4f72646572416464656408004501018c41736b4f7264657249643c543a3a426c6f636b4e756d6265722c20543a3a486173683e0000490101bc41736b4f726465723c543a3a4163636f756e7449642c20543a3a426c6f636b4e756d6265722c20543a3a486173683e00060c4d01416e2061736b206f7264657220686173206265656e20616464656420627920612070726f7370656374697665206c656e6465722e205468697320696e64696361746573207468617420746865206c656e646572b86973206c6f6f6b696e6720746f2069737375652061206c6f616e2077697468206365727461696e207465726d732e645b61736b5f6f726465725f69642c2061736b5f6f726465725d344269644f72646572416464656408006101018c4269644f7264657249643c543a3a426c6f636b4e756d6265722c20543a3a486173683e0000650101bc4269644f726465723c543a3a4163636f756e7449642c20543a3a426c6f636b4e756d6265722c20543a3a486173683e00070c59014120626964206f7264657220686173206265656e20616464656420627920612070726f737065637469766520626f72726f7765722e205468697320696e6469636174657320746861742074686520626f72726f776572a46973206c6f6f6b696e6720666f722061206c6f616e2077697468206365727461696e207465726d732e645b6269645f6f726465725f69642c206269645f6f726465725d284f66666572416464656408006d0101804f6666657249643c543a3a426c6f636b4e756d6265722c20543a3a486173683e0000710101b04f666665723c543a3a4163636f756e7449642c20543a3a426c6f636b4e756d6265722c20543a3a486173683e00080c0d01416e206f6666657220686173206265656e2061646465642062792061206c656e6465722e205468697320696e64696361746573207468617420746865206c656e6465720501697320696e746572657374656420696e20656e746572696e672061206c6f616e207769746820746865206f776e6572206f662074686520626964206f726465722e445b6f666665725f69642c206f666665725d384465616c4f72646572416464656408002d0101904465616c4f7264657249643c543a3a426c6f636b4e756d6265722c20543a3a486173683e0000750101ec4465616c4f726465723c543a3a4163636f756e7449642c20543a3a426c6f636b4e756d6265722c20543a3a486173682c20543a3a4d6f6d656e743e00090c2d0141206465616c206f7264657220686173206265656e206164646564206279206120626f72726f7765722e205468697320696e6469636174657320746861742074686520626f72726f776572f06861732061636365707465642061206c656e6465722773206f6666657220616e6420696e74656e647320746f20656e74657220746865206c6f616e2e6c5b6465616c5f6f726465725f69642c206465616c5f6f726465725d3c4465616c4f7264657246756e64656404002d0101904465616c4f7264657249643c543a3a426c6f636b4e756d6265722c20543a3a486173683e000a10210141206465616c206f7264657220686173206265656e2066756e6465642062792061206c656e6465722e205468697320696e64696361746573207468617420746865206c656e646572350168617320696e69746961746564207468652061637475616c206c6f616e206279207472616e7366657272696e6720746865206c6f616e20616d6f756e7420746f2074686520626f72726f776572546f6e20616e2065787465726e616c20636861696e2e585b66756e6465645f6465616c5f6f726465725f69645d3c4465616c4f726465724c6f636b656404002d0101904465616c4f7264657249643c543a3a426c6f636b4e756d6265722c20543a3a486173683e000b10310141206465616c206f7264657220686173206265656e206c6f636b6564206279206120626f72726f7765722e205468697320696e6469636174657320746861742074686520626f72726f7765724901697320707265706172696e6720746f206d616b6520612072657061796d656e7420616e64206c6f636b7320746865206c6f616e2066726f6d206265696e6720736f6c64206f72207472616e7366657272656444746f20616e6f746865722070617274792e3c5b6465616c5f6f726465725f69645d3c4465616c4f72646572436c6f73656404002d0101904465616c4f7264657249643c543a3a426c6f636b4e756d6265722c20543a3a486173683e000c0c310141206465616c206f7264657220686173206265656e20636c6f736564206279206120626f72726f7765722e205468697320696e6469636174657320746861742074686520626f72726f776572f06861732072657061696420746865206c6f616e20696e2066756c6c20616e64206973206e6f7720636c6f73696e67206f757420746865206c6f616e2e585b636c6f7365645f6465616c5f6f726465725f69645d304c6f616e4578656d7074656404002d0101904465616c4f7264657249643c543a3a426c6f636b4e756d6265722c20543a3a486173683e000d10350141206c6f616e206578656d7074696f6e20686173206265656e206772616e7465642062792061206c656e6465722e205468697320696e64696361746573207468617420746865206c656e646572090169732072656c656173696e6720616c6c206f6620746865206f75747374616e64696e672064656274206f6e20746865206c6f616e2e2054686520626f72726f776572c46973206e6f206c6f6e67657220726573706f6e7369626c6520666f72207265706179696e672074686520616d6f756e742e605b6578656d707465645f6465616c5f6f726465725f69645d4c4c656761637957616c6c6574436c61696d65640c00000130543a3a4163636f756e7449640000810101344c6567616379536967686173680000180128543a3a42616c616e6365000e0c590141206c65676163792077616c6c65742066726f6d20437265646974636f696e20312e5820686173206265656e20636c61696d65642e205468652062616c616e6365206f6620746865206c65676163792077616c6c6574ec686173206265656e207472616e7366657272656420746f20746865206f776e6572277320437265646974636f696e20322e30206163636f756e742e15015b6c65676163795f77616c6c65745f636c61696d65722c206c65676163795f77616c6c65745f736967686173682c206c65676163795f77616c6c65745f62616c616e63655d685472616e736665724661696c6564566572696669636174696f6e08001d01014c5472616e7366657249643c543a3a486173683e000089010160566572696669636174696f6e4661696c7572654361757365000f0078436f6c6c656374436f696e734661696c6564566572696669636174696f6e080005010164436f6c6c6563746564436f696e7349643c543a3a486173683e000089010160566572696669636174696f6e4661696c7572654361757365001008c465786368616e67696e6720766573746564204552432d323020434320666f72206e6174697665204343206661696c65642e6c5b636f6c6c65637465645f636f696e735f69642c2063617573655d04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909f40c4470616c6c65745f637265646974636f696e14747970657324416464726573734964041048617368012c0004002c0110486173680000f80c4470616c6c65745f637265646974636f696e1474797065731c4164647265737304244163636f756e7449640100000c0128626c6f636b636861696efc0128426c6f636b636861696e00011476616c75650101013c45787465726e616c416464726573730001146f776e65720001244163636f756e7449640000fc0c4470616c6c65745f637265646974636f696e14747970657328426c6f636b636861696e00011420457468657265756d0000001c52696e6b656279000100244c756e6976657273650002001c426974636f696e000300144f746865720400010101284f74686572436861696e0004000001010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e00000501104470616c6c65745f637265646974636f696e14747970657334636f6c6c6563745f636f696e7340436f6c6c6563746564436f696e734964041048617368012c0004002c01104861736800000901104470616c6c65745f637265646974636f696e14747970657334636f6c6c6563745f636f696e7360556e7665726966696564436f6c6c6563746564436f696e730000100108746f0101013c45787465726e616c4164647265737300011474785f69640101013045787465726e616c54784964000120636f6e74726163740d0101404465706c6f796564436f6e7472616374000134636f6e74726163745f7479706519010130436f6e74726163745479706500000d01144470616c6c65745f637265646974636f696e0c6f6377147461736b7334636f6c6c6563745f636f696e73404465706c6f796564436f6e7472616374000008011c616464726573731101013473705f636f72653a3a48313630000114636861696efc0128426c6f636b636861696e00001101083c7072696d69746976655f7479706573104831363000000400150101205b75383b2032305d000015010000031400000008001901104470616c6c65745f637265646974636f696e14747970657334636f6c6c6563745f636f696e7330436f6e74726163745479706500010810474352450000001047415445000100001d01104470616c6c65745f637265646974636f696e147479706573207472616e73666572285472616e736665724964041048617368012c0004002c01104861736800002101104470616c6c65745f637265646974636f696e147479706573207472616e73666572205472616e7366657210244163636f756e744964010020426c6f636b4e756d01101048617368012c184d6f6d656e740128002c0128626c6f636b636861696efc0128426c6f636b636861696e0001106b696e64250101305472616e736665724b696e6400011066726f6df4013c4164647265737349643c486173683e000108746ff4013c4164647265737349643c486173683e0001206f726465725f69642901015c4f7264657249643c426c6f636b4e756d2c20486173683e000118616d6f756e743501013845787465726e616c416d6f756e7400011474785f69640101013045787465726e616c54784964000114626c6f636b100120426c6f636b4e756d00013069735f70726f6365737365648c0110626f6f6c0001286163636f756e745f69640001244163636f756e74496400012474696d657374616d703d0101384f7074696f6e3c4d6f6d656e743e000025010c4470616c6c65745f637265646974636f696e147479706573305472616e736665724b696e6400011014457263323004000101013c45787465726e616c416464726573730000001c4574686c65737304000101013c45787465726e616c41646472657373000100184e6174697665000200144f746865720400010101444f746865725472616e736665724b696e640003000029010c4470616c6c65745f637265646974636f696e1474797065731c4f7264657249640820426c6f636b4e756d01101048617368012c0108104465616c04002d01016c4465616c4f7264657249643c426c6f636b4e756d2c20486173683e0000002452657061796d656e7404003101018052657061796d656e744f7264657249643c426c6f636b4e756d2c20486173683e000100002d010c4470616c6c65745f637265646974636f696e1474797065732c4465616c4f7264657249640820426c6f636b4e756d01101048617368012c000800100120426c6f636b4e756d00002c011048617368000031010c4470616c6c65745f637265646974636f696e1474797065734052657061796d656e744f7264657249640820426c6f636b4e756d01101048617368012c000800100120426c6f636b4e756d00002c01104861736800003501083c7072696d69746976655f7479706573105532353600000400390101205b7536343b20345d000039010000030400000028003d0104184f7074696f6e04045401280108104e6f6e6500000010536f6d6504002800000100004101104470616c6c65745f637265646974636f696e14747970657334636f6c6c6563745f636f696e7338436f6c6c6563746564436f696e73081048617368012c1c42616c616e6365011800100108746ff4013c4164647265737349643c486173683e000118616d6f756e7418011c42616c616e636500011474785f69640101013045787465726e616c54784964000134636f6e74726163745f7479706519010130436f6e747261637454797065000045010c4470616c6c65745f637265646974636f696e1474797065732841736b4f7264657249640820426c6f636b4e756d01101048617368012c000800100120426c6f636b4e756d00002c011048617368000049010c4470616c6c65745f637265646974636f696e1474797065732041736b4f726465720c244163636f756e744964010020426c6f636b4e756d01101048617368012c00180128626c6f636b636861696efc0128426c6f636b636861696e0001446c656e6465725f616464726573735f6964f4013c4164647265737349643c486173683e0001147465726d734d01012041736b5465726d7300014065787069726174696f6e5f626c6f636b100120426c6f636b4e756d000114626c6f636b100120426c6f636b4e756d0001186c656e6465720001244163636f756e74496400004d01104470616c6c65745f637265646974636f696e147479706573286c6f616e5f7465726d732041736b5465726d7300000400510101244c6f616e5465726d7300005101104470616c6c65745f637265646974636f696e147479706573286c6f616e5f7465726d73244c6f616e5465726d7300000c0118616d6f756e743501013845787465726e616c416d6f756e74000134696e7465726573745f7261746555010130496e7465726573745261746500012c7465726d5f6c656e677468590101204475726174696f6e00005501104470616c6c65745f637265646974636f696e147479706573286c6f616e5f7465726d7330496e74657265737452617465000010013c726174655f7065725f706572696f6428013452617465506572506572696f64000120646563696d616c73280120446563696d616c73000118706572696f64590101204475726174696f6e000134696e7465726573745f747970655d010130496e7465726573745479706500005901104470616c6c65745f637265646974636f696e147479706573286c6f616e5f7465726d73204475726174696f6e00000801107365637328010c7536340001146e616e6f7310010c75333200005d01104470616c6c65745f637265646974636f696e147479706573286c6f616e5f7465726d7330496e746572657374547970650001081853696d706c6500000020436f6d706f756e640001000061010c4470616c6c65745f637265646974636f696e147479706573284269644f7264657249640820426c6f636b4e756d01101048617368012c000800100120426c6f636b4e756d00002c011048617368000065010c4470616c6c65745f637265646974636f696e147479706573204269644f726465720c244163636f756e744964010020426c6f636b4e756d01101048617368012c00180128626c6f636b636861696efc0128426c6f636b636861696e00014c626f72726f7765725f616464726573735f6964f4013c4164647265737349643c486173683e0001147465726d73690101204269645465726d7300014065787069726174696f6e5f626c6f636b100120426c6f636b4e756d000114626c6f636b100120426c6f636b4e756d000120626f72726f7765720001244163636f756e74496400006901104470616c6c65745f637265646974636f696e147479706573286c6f616e5f7465726d73204269645465726d7300000400510101244c6f616e5465726d7300006d010c4470616c6c65745f637265646974636f696e1474797065731c4f6666657249640820426c6f636b4e756d01101048617368012c000800100120426c6f636b4e756d00002c011048617368000071010c4470616c6c65745f637265646974636f696e147479706573144f666665720c244163636f756e744964010020426c6f636b4e756d01101048617368012c00180128626c6f636b636861696efc0128426c6f636b636861696e00011861736b5f69644501016841736b4f7264657249643c426c6f636b4e756d2c20486173683e0001186269645f6964610101684269644f7264657249643c426c6f636b4e756d2c20486173683e00014065787069726174696f6e5f626c6f636b100120426c6f636b4e756d000114626c6f636b100120426c6f636b4e756d0001186c656e6465720001244163636f756e744964000075010c4470616c6c65745f637265646974636f696e147479706573244465616c4f7264657210244163636f756e744964010020426c6f636b4e756d01101048617368012c184d6f6d656e74012800300128626c6f636b636861696efc0128426c6f636b636861696e0001206f666665725f69646d01015c4f6666657249643c426c6f636b4e756d2c20486173683e0001446c656e6465725f616464726573735f6964f4013c4164647265737349643c486173683e00014c626f72726f7765725f616464726573735f6964f4013c4164647265737349643c486173683e0001147465726d73510101244c6f616e5465726d7300014065787069726174696f6e5f626c6f636b100120426c6f636b4e756d00012474696d657374616d702801184d6f6d656e74000114626c6f636b790101404f7074696f6e3c426c6f636b4e756d3e00014c66756e64696e675f7472616e736665725f69647d0101604f7074696f6e3c5472616e7366657249643c486173683e3e00015472657061796d656e745f7472616e736665725f69647d0101604f7074696f6e3c5472616e7366657249643c486173683e3e0001106c6f636bec01444f7074696f6e3c4163636f756e7449643e000120626f72726f7765720001244163636f756e7449640000790104184f7074696f6e04045401100108104e6f6e6500000010536f6d6504001000000100007d0104184f7074696f6e040454011d010108104e6f6e6500000010536f6d6504001d01000001000081010c4470616c6c65745f637265646974636f696e147479706573344c65676163795369676861736800000400850101205b75383b2036305d000085010000033c00000008008901104470616c6c65745f637265646974636f696e0c6f6377186572726f727360566572696669636174696f6e4661696c75726543617573650001503c5461736b4e6f6e6578697374656e74000000285461736b4661696c65640001002c5461736b50656e64696e670002003c5461736b556e636f6e6669726d6564000300305461736b496e46757475726500040044496e636f7272656374436f6e74726163740005003c4d697373696e675265636569766572000600344d697373696e6753656e6465720007002c4162694d69736d6174636800080050496e636f7272656374496e7075744c656e67746800090028456d707479496e707574000a0048496e636f7272656374496e70757454797065000b003c496e636f7272656374416d6f756e74000c0038496e636f72726563744e6f6e6365000d0044496e636f72726563745265636569766572000e003c496e636f727265637453656e646572000f0038496e76616c69644164647265737300100044556e737570706f727465644d6574686f640011004c5472616e73616374696f6e4e6f74466f756e6400120064496e73756666696369656e7446617563657442616c616e6365001300008d010c3870616c6c65745f726577617264731870616c6c6574144576656e740404540001043052657761726449737375656408000001384163636f756e7449644f663c543e000018013042616c616e63654f663c543e000004a452657761726420776173206973737565642e205b626c6f636b5f617574686f722c20616d6f756e745d04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a09090991010c4070616c6c65745f7363686564756c65721870616c6c6574144576656e74040454000118245363686564756c65640801107768656e100138543a3a426c6f636b4e756d626572000114696e64657810010c753332000004505363686564756c656420736f6d65207461736b2e2043616e63656c65640801107768656e100138543a3a426c6f636b4e756d626572000114696e64657810010c7533320001044c43616e63656c656420736f6d65207461736b2e28446973706174636865640c01107461736b9501016c5461736b416464726573733c543a3a426c6f636b4e756d6265723e0001086964990101404f7074696f6e3c5461736b4e616d653e000118726573756c74e401384469737061746368526573756c74000204544469737061746368656420736f6d65207461736b2e3c43616c6c556e617661696c61626c650801107461736b9501016c5461736b416464726573733c543a3a426c6f636b4e756d6265723e0001086964990101404f7074696f6e3c5461736b4e616d653e00030429015468652063616c6c20666f72207468652070726f7669646564206861736820776173206e6f7420666f756e6420736f20746865207461736b20686173206265656e2061626f727465642e38506572696f6469634661696c65640801107461736b9501016c5461736b416464726573733c543a3a426c6f636b4e756d6265723e0001086964990101404f7074696f6e3c5461736b4e616d653e0004043d0154686520676976656e207461736b2077617320756e61626c6520746f2062652072656e657765642073696e636520746865206167656e64612069732066756c6c206174207468617420626c6f636b2e545065726d616e656e746c794f7665727765696768740801107461736b9501016c5461736b416464726573733c543a3a426c6f636b4e756d6265723e0001086964990101404f7074696f6e3c5461736b4e616d653e000504f054686520676976656e207461736b2063616e206e657665722062652065786563757465642073696e6365206974206973206f7665727765696768742e04304576656e747320747970652e950100000408101000990104184f7074696f6e04045401040108104e6f6e6500000010536f6d6504000400000100009d010c7870616c6c65745f6f6666636861696e5f7461736b5f7363686564756c65721870616c6c6574144576656e7404045400010004a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909a1010c3c70616c6c65745f6964656e746974791870616c6c6574144576656e740404540001282c4964656e7469747953657404010c77686f000130543a3a4163636f756e744964000004ec41206e616d652077617320736574206f72207265736574202877686963682077696c6c2072656d6f766520616c6c206a756467656d656e7473292e3c4964656e74697479436c656172656408010c77686f000130543a3a4163636f756e74496400011c6465706f73697418013042616c616e63654f663c543e000104cc41206e616d652077617320636c65617265642c20616e642074686520676976656e2062616c616e63652072657475726e65642e384964656e746974794b696c6c656408010c77686f000130543a3a4163636f756e74496400011c6465706f73697418013042616c616e63654f663c543e000204c441206e616d65207761732072656d6f76656420616e642074686520676976656e2062616c616e636520736c61736865642e484a756467656d656e7452657175657374656408010c77686f000130543a3a4163636f756e74496400013c7265676973747261725f696e646578100138526567697374726172496e6465780003049c41206a756467656d656e74207761732061736b65642066726f6d2061207265676973747261722e504a756467656d656e74556e72657175657374656408010c77686f000130543a3a4163636f756e74496400013c7265676973747261725f696e646578100138526567697374726172496e6465780004048841206a756467656d656e74207265717565737420776173207265747261637465642e384a756467656d656e74476976656e080118746172676574000130543a3a4163636f756e74496400013c7265676973747261725f696e646578100138526567697374726172496e6465780005049441206a756467656d656e742077617320676976656e2062792061207265676973747261722e38526567697374726172416464656404013c7265676973747261725f696e646578100138526567697374726172496e646578000604584120726567697374726172207761732061646465642e405375624964656e7469747941646465640c010c737562000130543a3a4163636f756e7449640001106d61696e000130543a3a4163636f756e74496400011c6465706f73697418013042616c616e63654f663c543e000704f441207375622d6964656e746974792077617320616464656420746f20616e206964656e7469747920616e6420746865206465706f73697420706169642e485375624964656e7469747952656d6f7665640c010c737562000130543a3a4163636f756e7449640001106d61696e000130543a3a4163636f756e74496400011c6465706f73697418013042616c616e63654f663c543e000804090141207375622d6964656e74697479207761732072656d6f7665642066726f6d20616e206964656e7469747920616e6420746865206465706f7369742066726565642e485375624964656e746974795265766f6b65640c010c737562000130543a3a4163636f756e7449640001106d61696e000130543a3a4163636f756e74496400011c6465706f73697418013042616c616e63654f663c543e000908190141207375622d6964656e746974792077617320636c65617265642c20616e642074686520676976656e206465706f7369742072657061747269617465642066726f6d20746865c86d61696e206964656e74697479206163636f756e7420746f20746865207375622d6964656e74697479206163636f756e742e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909a5010c3870616c6c65745f7574696c6974791870616c6c6574144576656e74000118404261746368496e746572727570746564080114696e64657810010c7533320001146572726f7260013444697370617463684572726f7200000855014261746368206f66206469737061746368657320646964206e6f7420636f6d706c6574652066756c6c792e20496e646578206f66206669727374206661696c696e6720646973706174636820676976656e2c2061734877656c6c20617320746865206572726f722e384261746368436f6d706c65746564000104c84261746368206f66206469737061746368657320636f6d706c657465642066756c6c792077697468206e6f206572726f722e604261746368436f6d706c65746564576974684572726f7273000204b44261746368206f66206469737061746368657320636f6d706c657465642062757420686173206572726f72732e344974656d436f6d706c657465640003041d01412073696e676c65206974656d2077697468696e2061204261746368206f6620646973706174636865732068617320636f6d706c657465642077697468206e6f206572726f722e284974656d4661696c65640401146572726f7260013444697370617463684572726f720004041101412073696e676c65206974656d2077697468696e2061204261746368206f6620646973706174636865732068617320636f6d706c657465642077697468206572726f722e30446973706174636865644173040118726573756c74e401384469737061746368526573756c7400050458412063616c6c2077617320646973706174636865642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909a9010c3070616c6c65745f70726f78791870616c6c6574144576656e740404540001143450726f78794578656375746564040118726573756c74e401384469737061746368526573756c74000004bc412070726f78792077617320657865637574656420636f72726563746c792c20776974682074686520676976656e2e2c507572654372656174656410011070757265000130543a3a4163636f756e74496400010c77686f000130543a3a4163636f756e74496400012870726f78795f74797065e80130543a3a50726f787954797065000150646973616d626967756174696f6e5f696e646578ad01010c753136000108dc412070757265206163636f756e7420686173206265656e2063726561746564206279206e65772070726f7879207769746820676976656e90646973616d626967756174696f6e20696e64657820616e642070726f787920747970652e24416e6e6f756e6365640c01107265616c000130543a3a4163636f756e74496400011470726f7879000130543a3a4163636f756e74496400012463616c6c5f686173682c013443616c6c486173684f663c543e000204e0416e20616e6e6f756e63656d656e742077617320706c6163656420746f206d616b6520612063616c6c20696e20746865206675747572652e2850726f7879416464656410012464656c656761746f72000130543a3a4163636f756e74496400012464656c656761746565000130543a3a4163636f756e74496400012870726f78795f74797065e80130543a3a50726f78795479706500011464656c6179100138543a3a426c6f636b4e756d62657200030448412070726f7879207761732061646465642e3050726f787952656d6f76656410012464656c656761746f72000130543a3a4163636f756e74496400012464656c656761746565000130543a3a4163636f756e74496400012870726f78795f74797065e80130543a3a50726f78795479706500011464656c6179100138543a3a426c6f636b4e756d62657200040450412070726f7879207761732072656d6f7665642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909ad010000050400b1010c4c70616c6c65745f666173745f756e7374616b651870616c6c6574144576656e7404045400011420556e7374616b65640801147374617368000130543a3a4163636f756e744964000118726573756c74e401384469737061746368526573756c740000045841207374616b65722077617320756e7374616b65642e1c536c61736865640801147374617368000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e000104190141207374616b65722077617320736c617368656420666f722072657175657374696e6720666173742d756e7374616b65207768696c7374206265696e67206578706f7365642e34496e7465726e616c4572726f72000204e8416e20696e7465726e616c206572726f722068617070656e65642e204f7065726174696f6e732077696c6c20626520706175736564206e6f772e304261746368436865636b656404011065726173b50101345665633c457261496e6465783e00030445014120626174636820776173207061727469616c6c7920636865636b656420666f722074686520676976656e20657261732c20627574207468652070726f6365737320646964206e6f742066696e6973682e34426174636846696e697368656404011073697a6510010c7533320004109c41206261746368206f66206120676976656e2073697a6520776173207465726d696e617465642e0055015468697320697320616c7761797320666f6c6c6f77732062792061206e756d626572206f662060556e7374616b656460206f722060536c617368656460206576656e74732c206d61726b696e672074686520656e64e86f66207468652062617463682e2041206e65772062617463682077696c6c20626520637265617465642075706f6e206e65787420626c6f636b2e0468546865206576656e7473206f6620746869732070616c6c65742eb5010000021000b9010c5c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c731870616c6c6574144576656e7404045400013c1c437265617465640801246465706f7369746f72000130543a3a4163636f756e74496400011c706f6f6c5f6964100118506f6f6c4964000004604120706f6f6c20686173206265656e20637265617465642e18426f6e6465641001186d656d626572000130543a3a4163636f756e74496400011c706f6f6c5f6964100118506f6f6c4964000118626f6e64656418013042616c616e63654f663c543e0001186a6f696e65648c0110626f6f6c0001049441206d656d6265722068617320626563616d6520626f6e64656420696e206120706f6f6c2e1c506169644f75740c01186d656d626572000130543a3a4163636f756e74496400011c706f6f6c5f6964100118506f6f6c49640001187061796f757418013042616c616e63654f663c543e0002048c41207061796f757420686173206265656e206d61646520746f2061206d656d6265722e20556e626f6e6465641401186d656d626572000130543a3a4163636f756e74496400011c706f6f6c5f6964100118506f6f6c496400011c62616c616e636518013042616c616e63654f663c543e000118706f696e747318013042616c616e63654f663c543e00010c657261100120457261496e64657800032c9841206d656d6265722068617320756e626f6e6465642066726f6d20746865697220706f6f6c2e0039012d206062616c616e6365602069732074686520636f72726573706f6e64696e672062616c616e6365206f6620746865206e756d626572206f6620706f696e7473207468617420686173206265656e5501202072657175657374656420746f20626520756e626f6e646564202874686520617267756d656e74206f66207468652060756e626f6e6460207472616e73616374696f6e292066726f6d2074686520626f6e6465641c2020706f6f6c2e45012d2060706f696e74736020697320746865206e756d626572206f6620706f696e747320746861742061726520697373756564206173206120726573756c74206f66206062616c616e636560206265696e67c0646973736f6c76656420696e746f2074686520636f72726573706f6e64696e6720756e626f6e64696e6720706f6f6c2ee42d206065726160206973207468652065726120696e207768696368207468652062616c616e63652077696c6c20626520756e626f6e6465642e5501496e2074686520616273656e6365206f6620736c617368696e672c2074686573652076616c7565732077696c6c206d617463682e20496e207468652070726573656e6365206f6620736c617368696e672c207468654d016e756d626572206f6620706f696e74732074686174206172652069737375656420696e2074686520756e626f6e64696e6720706f6f6c2077696c6c206265206c657373207468616e2074686520616d6f756e746472657175657374656420746f20626520756e626f6e6465642e2457697468647261776e1001186d656d626572000130543a3a4163636f756e74496400011c706f6f6c5f6964100118506f6f6c496400011c62616c616e636518013042616c616e63654f663c543e000118706f696e747318013042616c616e63654f663c543e0004189c41206d656d626572206861732077697468647261776e2066726f6d20746865697220706f6f6c2e00210154686520676976656e206e756d626572206f662060706f696e7473602068617665206265656e20646973736f6c76656420696e2072657475726e206f66206062616c616e6365602e00590153696d696c617220746f2060556e626f6e64656460206576656e742c20696e2074686520616273656e6365206f6620736c617368696e672c2074686520726174696f206f6620706f696e7420746f2062616c616e63652877696c6c20626520312e2444657374726f79656404011c706f6f6c5f6964100118506f6f6c4964000504684120706f6f6c20686173206265656e2064657374726f7965642e3053746174654368616e67656408011c706f6f6c5f6964100118506f6f6c49640001246e65775f7374617465bd010124506f6f6c53746174650006047c546865207374617465206f66206120706f6f6c20686173206368616e676564344d656d62657252656d6f76656408011c706f6f6c5f6964100118506f6f6c49640001186d656d626572000130543a3a4163636f756e74496400070c9841206d656d62657220686173206265656e2072656d6f7665642066726f6d206120706f6f6c2e0051015468652072656d6f76616c2063616e20626520766f6c756e74617279202877697468647261776e20616c6c20756e626f6e6465642066756e647329206f7220696e766f6c756e7461727920286b69636b6564292e30526f6c6573557064617465640c0110726f6f74ec01504f7074696f6e3c543a3a4163636f756e7449643e00011c626f756e636572ec01504f7074696f6e3c543a3a4163636f756e7449643e0001246e6f6d696e61746f72ec01504f7074696f6e3c543a3a4163636f756e7449643e000808550154686520726f6c6573206f66206120706f6f6c2068617665206265656e207570646174656420746f2074686520676976656e206e657720726f6c65732e204e6f7465207468617420746865206465706f7369746f724463616e206e65766572206368616e67652e2c506f6f6c536c617368656408011c706f6f6c5f6964100118506f6f6c496400011c62616c616e636518013042616c616e63654f663c543e0009040d01546865206163746976652062616c616e6365206f6620706f6f6c2060706f6f6c5f69646020686173206265656e20736c617368656420746f206062616c616e6365602e50556e626f6e64696e67506f6f6c536c61736865640c011c706f6f6c5f6964100118506f6f6c496400010c657261100120457261496e64657800011c62616c616e636518013042616c616e63654f663c543e000a04250154686520756e626f6e6420706f6f6c206174206065726160206f6620706f6f6c2060706f6f6c5f69646020686173206265656e20736c617368656420746f206062616c616e6365602e54506f6f6c436f6d6d697373696f6e5570646174656408011c706f6f6c5f6964100118506f6f6c496400011c63757272656e74c101017c4f7074696f6e3c2850657262696c6c2c20543a3a4163636f756e744964293e000b04b44120706f6f6c277320636f6d6d697373696f6e2073657474696e6720686173206265656e206368616e6765642e60506f6f6c4d6178436f6d6d697373696f6e5570646174656408011c706f6f6c5f6964100118506f6f6c49640001386d61785f636f6d6d697373696f6e80011c50657262696c6c000c04d44120706f6f6c2773206d6178696d756d20636f6d6d697373696f6e2073657474696e6720686173206265656e206368616e6765642e7c506f6f6c436f6d6d697373696f6e4368616e6765526174655570646174656408011c706f6f6c5f6964100118506f6f6c496400012c6368616e67655f72617465c9010190436f6d6d697373696f6e4368616e6765526174653c543a3a426c6f636b4e756d6265723e000d04cc4120706f6f6c277320636f6d6d697373696f6e20606368616e67655f726174656020686173206265656e206368616e6765642e54506f6f6c436f6d6d697373696f6e436c61696d656408011c706f6f6c5f6964100118506f6f6c4964000128636f6d6d697373696f6e18013042616c616e63654f663c543e000e0484506f6f6c20636f6d6d697373696f6e20686173206265656e20636c61696d65642e04584576656e7473206f6620746869732070616c6c65742ebd01085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7324506f6f6c537461746500010c104f70656e0000001c426c6f636b65640001002844657374726f79696e6700020000c10104184f7074696f6e04045401c5010108104e6f6e6500000010536f6d650400c5010000010000c50100000408800000c901085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7350436f6d6d697373696f6e4368616e676552617465042c426c6f636b4e756d6265720110000801306d61785f696e63726561736580011c50657262696c6c0001246d696e5f64656c617910012c426c6f636b4e756d6265720000cd0108306672616d655f73797374656d14506861736500010c384170706c7945787472696e736963040010010c7533320000003046696e616c697a6174696f6e00010038496e697469616c697a6174696f6e00020000d1010000022c00d501000002950100d90108306672616d655f73797374656d584c61737452756e74696d6555706772616465496e666f0000080130737065635f76657273696f6edd01014c636f6465633a3a436f6d706163743c7533323e000124737065635f6e616d65e101016473705f72756e74696d653a3a52756e74696d65537472696e670000dd010000061000e1010000050200e5010c306672616d655f73797374656d1870616c6c65741043616c6c0404540001201872656d61726b04011872656d61726b30011c5665633c75383e000010684d616b6520736f6d65206f6e2d636861696e2072656d61726b2e0034232320436f6d706c6578697479202d20604f28312960387365745f686561705f7061676573040114706167657328010c753634000104f853657420746865206e756d626572206f6620706167657320696e2074686520576562417373656d626c7920656e7669726f6e6d656e74277320686561702e207365745f636f6465040110636f646530011c5665633c75383e0002106453657420746865206e65772072756e74696d6520636f64652e0034232320436f6d706c657869747931012d20604f2843202b2053296020776865726520604360206c656e677468206f662060636f64656020616e642060536020636f6d706c6578697479206f66206063616e5f7365745f636f6465605c7365745f636f64655f776974686f75745f636865636b73040110636f646530011c5665633c75383e000310190153657420746865206e65772072756e74696d6520636f646520776974686f757420646f696e6720616e7920636865636b73206f662074686520676976656e2060636f6465602e0034232320436f6d706c65786974798c2d20604f2843296020776865726520604360206c656e677468206f662060636f6465602c7365745f73746f726167650401146974656d73e90101345665633c4b657956616c75653e0004046853657420736f6d65206974656d73206f662073746f726167652e306b696c6c5f73746f726167650401106b657973f10101205665633c4b65793e000504744b696c6c20736f6d65206974656d732066726f6d2073746f726167652e2c6b696c6c5f70726566697808011870726566697830010c4b657900011c7375626b65797310010c75333200061011014b696c6c20616c6c2073746f72616765206974656d7320776974682061206b657920746861742073746172747320776974682074686520676976656e207072656669782e0039012a2a4e4f54453a2a2a2057652072656c79206f6e2074686520526f6f74206f726967696e20746f2070726f7669646520757320746865206e756d626572206f66207375626b65797320756e6465723d0174686520707265666978207765206172652072656d6f76696e6720746f2061636375726174656c792063616c63756c6174652074686520776569676874206f6620746869732066756e6374696f6e2e4472656d61726b5f776974685f6576656e7404011872656d61726b30011c5665633c75383e000704a44d616b6520736f6d65206f6e2d636861696e2072656d61726b20616e6420656d6974206576656e742e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ee901000002ed0100ed0100000408303000f1010000023000f5010c306672616d655f73797374656d186c696d69747330426c6f636b5765696768747300000c0128626173655f626c6f636b2001185765696768740001246d61785f626c6f636b2001185765696768740001247065725f636c617373f90101845065724469737061746368436c6173733c57656967687473506572436c6173733e0000f9010c346672616d655f737570706f7274206469737061746368405065724469737061746368436c61737304045401fd01000c01186e6f726d616cfd0101045400012c6f7065726174696f6e616cfd010104540001246d616e6461746f7279fd010104540000fd010c306672616d655f73797374656d186c696d6974733c57656967687473506572436c6173730000100138626173655f65787472696e7369632001185765696768740001346d61785f65787472696e736963010201384f7074696f6e3c5765696768743e0001246d61785f746f74616c010201384f7074696f6e3c5765696768743e0001207265736572766564010201384f7074696f6e3c5765696768743e0000010204184f7074696f6e04045401200108104e6f6e6500000010536f6d65040020000001000005020c306672616d655f73797374656d186c696d6974732c426c6f636b4c656e677468000004010c6d6178090201545065724469737061746368436c6173733c7533323e000009020c346672616d655f737570706f7274206469737061746368405065724469737061746368436c6173730404540110000c01186e6f726d616c1001045400012c6f7065726174696f6e616c100104540001246d616e6461746f72791001045400000d02082873705f776569676874733c52756e74696d65446257656967687400000801107265616428010c753634000114777269746528010c75363400001102082873705f76657273696f6e3852756e74696d6556657273696f6e0000200124737065635f6e616d65e101013452756e74696d65537472696e67000124696d706c5f6e616d65e101013452756e74696d65537472696e67000144617574686f72696e675f76657273696f6e10010c753332000130737065635f76657273696f6e10010c753332000130696d706c5f76657273696f6e10010c753332000110617069731502011c4170697356656300014c7472616e73616374696f6e5f76657273696f6e10010c75333200013473746174655f76657273696f6e080108753800001502040c436f77040454011902000400190200000019020000021d02001d020000040821021000210200000308000000080025020c306672616d655f73797374656d1870616c6c6574144572726f720404540001183c496e76616c6964537065634e616d650000081101546865206e616d65206f662073706563696669636174696f6e20646f6573206e6f74206d61746368206265747765656e207468652063757272656e742072756e74696d6550616e6420746865206e65772072756e74696d652e685370656356657273696f6e4e65656473546f496e63726561736500010841015468652073706563696669636174696f6e2076657273696f6e206973206e6f7420616c6c6f77656420746f206465637265617365206265747765656e207468652063757272656e742072756e74696d6550616e6420746865206e65772072756e74696d652e744661696c6564546f4578747261637452756e74696d6556657273696f6e00020cec4661696c656420746f2065787472616374207468652072756e74696d652076657273696f6e2066726f6d20746865206e65772072756e74696d652e0009014569746865722063616c6c696e672060436f72655f76657273696f6e60206f72206465636f64696e67206052756e74696d6556657273696f6e60206661696c65642e4c4e6f6e44656661756c74436f6d706f73697465000304fc537569636964652063616c6c6564207768656e20746865206163636f756e7420686173206e6f6e2d64656661756c7420636f6d706f7369746520646174612e3c4e6f6e5a65726f526566436f756e74000404350154686572652069732061206e6f6e2d7a65726f207265666572656e636520636f756e742070726576656e74696e6720746865206163636f756e742066726f6d206265696e67207075726765642e3043616c6c46696c7465726564000504d0546865206f726967696e2066696c7465722070726576656e74207468652063616c6c20746f20626520646973706174636865642e046c4572726f7220666f72207468652053797374656d2070616c6c657429020c4070616c6c65745f74696d657374616d701870616c6c65741043616c6c0404540001040c73657404010c6e6f77240124543a3a4d6f6d656e7400003c54536574207468652063757272656e742074696d652e005501546869732063616c6c2073686f756c6420626520696e766f6b65642065786163746c79206f6e63652070657220626c6f636b2e2049742077696c6c2070616e6963206174207468652066696e616c697a6174696f6ed470686173652c20696620746869732063616c6c206861736e2774206265656e20696e766f6b656420627920746861742074696d652e0041015468652074696d657374616d702073686f756c642062652067726561746572207468616e207468652070726576696f7573206f6e652062792074686520616d6f756e742073706563696669656420627940604d696e696d756d506572696f64602e00d4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d7573742062652060496e686572656e74602e0034232320436f6d706c657869747931012d20604f2831296020284e6f7465207468617420696d706c656d656e746174696f6e73206f6620604f6e54696d657374616d7053657460206d75737420616c736f20626520604f283129602961012d20312073746f72616765207265616420616e6420312073746f72616765206d75746174696f6e2028636f64656320604f28312960292e202862656361757365206f6620604469645570646174653a3a74616b656020696e402020606f6e5f66696e616c697a656029d42d2031206576656e742068616e646c657220606f6e5f74696d657374616d705f736574602e204d75737420626520604f283129602e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e2d020c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e646564566563080454013102045300000400390201185665633c543e00003102000004083502280035020c4473705f636f6e73656e7375735f626162650c617070185075626c696300000400bc013c737232353531393a3a5075626c6963000039020000023102003d02084873705f636f6e73656e7375735f736c6f747310536c6f740000040028010c753634000041020c4473705f636f6e73656e7375735f626162651c64696765737473504e657874436f6e66696744657363726970746f720001040856310801046345020128287536342c2075363429000134616c6c6f7765645f736c6f747349020130416c6c6f776564536c6f7473000100004502000004082828004902084473705f636f6e73656e7375735f6261626530416c6c6f776564536c6f747300010c305072696d617279536c6f7473000000745072696d617279416e645365636f6e64617279506c61696e536c6f74730001006c5072696d617279416e645365636f6e64617279565246536c6f7473000200004d020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540104045300000400510201185665633c543e000051020000020400550204184f7074696f6e0404540159020108104e6f6e6500000010536f6d6504005902000001000059020c4473705f636f6e73656e7375735f626162651c646967657374732450726544696765737400010c1c5072696d61727904005d0201405072696d617279507265446967657374000100385365636f6e64617279506c61696e04006502015c5365636f6e64617279506c61696e507265446967657374000200305365636f6e646172795652460400690201545365636f6e64617279565246507265446967657374000300005d020c4473705f636f6e73656e7375735f626162651c64696765737473405072696d617279507265446967657374000010013c617574686f726974795f696e64657810015473757065723a3a417574686f72697479496e646578000110736c6f743d020110536c6f740001287672665f6f75747075740401245652464f75747075740001247672665f70726f6f666102012056524650726f6f660000610200000340000000080065020c4473705f636f6e73656e7375735f626162651c646967657374735c5365636f6e64617279506c61696e507265446967657374000008013c617574686f726974795f696e64657810015473757065723a3a417574686f72697479496e646578000110736c6f743d020110536c6f74000069020c4473705f636f6e73656e7375735f626162651c64696765737473545365636f6e64617279565246507265446967657374000010013c617574686f726974795f696e64657810015473757065723a3a417574686f72697479496e646578000110736c6f743d020110536c6f740001287672665f6f75747075740401245652464f75747075740001247672665f70726f6f666102012056524650726f6f6600006d02084473705f636f6e73656e7375735f62616265584261626545706f6368436f6e66696775726174696f6e00000801046345020128287536342c2075363429000134616c6c6f7765645f736c6f747349020130416c6c6f776564536c6f7473000071020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454017502045300000400790201185665633c543e000075020000040828100079020000027502007d020c2c70616c6c65745f626162651870616c6c65741043616c6c04045400010c4c7265706f72745f65717569766f636174696f6e08014865717569766f636174696f6e5f70726f6f6681020184426f783c45717569766f636174696f6e50726f6f663c543a3a4865616465723e3e00013c6b65795f6f776e65725f70726f6f668d020140543a3a4b65794f776e657250726f6f6600001009015265706f727420617574686f726974792065717569766f636174696f6e2f6d69736265686176696f722e2054686973206d6574686f642077696c6c2076657269667905017468652065717569766f636174696f6e2070726f6f6620616e642076616c69646174652074686520676976656e206b6579206f776e6572736869702070726f6f660d01616761696e73742074686520657874726163746564206f6666656e6465722e20496620626f7468206172652076616c69642c20746865206f6666656e63652077696c6c306265207265706f727465642e707265706f72745f65717569766f636174696f6e5f756e7369676e656408014865717569766f636174696f6e5f70726f6f6681020184426f783c45717569766f636174696f6e50726f6f663c543a3a4865616465723e3e00013c6b65795f6f776e65725f70726f6f668d020140543a3a4b65794f776e657250726f6f6600012009015265706f727420617574686f726974792065717569766f636174696f6e2f6d69736265686176696f722e2054686973206d6574686f642077696c6c2076657269667905017468652065717569766f636174696f6e2070726f6f6620616e642076616c69646174652074686520676976656e206b6579206f776e6572736869702070726f6f660d01616761696e73742074686520657874726163746564206f6666656e6465722e20496620626f7468206172652076616c69642c20746865206f6666656e63652077696c6c306265207265706f727465642e0d01546869732065787472696e736963206d7573742062652063616c6c656420756e7369676e656420616e642069742069732065787065637465642074686174206f6e6c791501626c6f636b20617574686f72732077696c6c2063616c6c206974202876616c69646174656420696e206056616c6964617465556e7369676e656460292c2061732073756368150169662074686520626c6f636b20617574686f7220697320646566696e65642069742077696c6c20626520646566696e6564206173207468652065717569766f636174696f6e247265706f727465722e48706c616e5f636f6e6669675f6368616e6765040118636f6e666967410201504e657874436f6e66696744657363726970746f720002105d01506c616e20616e2065706f636820636f6e666967206368616e67652e205468652065706f636820636f6e666967206368616e6765206973207265636f7264656420616e642077696c6c20626520656e6163746564206f6e5101746865206e6578742063616c6c20746f2060656e6163745f65706f63685f6368616e6765602e2054686520636f6e6669672077696c6c20626520616374697661746564206f6e652065706f63682061667465722e59014d756c7469706c652063616c6c7320746f2074686973206d6574686f642077696c6c207265706c61636520616e79206578697374696e6720706c616e6e656420636f6e666967206368616e6765207468617420686164546e6f74206265656e20656e6163746564207965742e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e8102084873705f636f6e73656e7375735f736c6f74734445717569766f636174696f6e50726f6f660818486561646572018502084964013502001001206f6666656e646572350201084964000110736c6f743d020110536c6f7400013066697273745f686561646572850201184865616465720001347365636f6e645f6865616465728502011848656164657200008502102873705f72756e74696d651c67656e65726963186865616465721848656164657208184e756d626572011010486173680189020014012c706172656e745f686173682c0130486173683a3a4f75747075740001186e756d626572dd0101184e756d62657200012873746174655f726f6f742c0130486173683a3a4f757470757400013c65787472696e736963735f726f6f742c0130486173683a3a4f7574707574000118646967657374340118446967657374000089020c2873705f72756e74696d65187472616974732c426c616b6554776f323536000000008d02082873705f73657373696f6e3c4d656d6265727368697050726f6f6600000c011c73657373696f6e10013053657373696f6e496e646578000128747269655f6e6f646573f10101305665633c5665633c75383e3e00013c76616c696461746f725f636f756e7410013856616c696461746f72436f756e74000091020c2c70616c6c65745f626162651870616c6c6574144572726f7204045400011060496e76616c696445717569766f636174696f6e50726f6f660000043101416e2065717569766f636174696f6e2070726f6f662070726f76696465642061732070617274206f6620616e2065717569766f636174696f6e207265706f727420697320696e76616c69642e60496e76616c69644b65794f776e65727368697050726f6f66000104310141206b6579206f776e6572736869702070726f6f662070726f76696465642061732070617274206f6620616e2065717569766f636174696f6e207265706f727420697320696e76616c69642e584475706c69636174654f6666656e63655265706f727400020415014120676976656e2065717569766f636174696f6e207265706f72742069732076616c69642062757420616c72656164792070726576696f75736c79207265706f727465642e50496e76616c6964436f6e66696775726174696f6e0003048c5375626d697474656420636f6e66696775726174696f6e20697320696e76616c69642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a09090995020c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e646564566563080454019902045300000400a10201185665633c543e00009902083c70616c6c65745f62616c616e6365732c42616c616e63654c6f636b041c42616c616e63650118000c01086964210201384c6f636b4964656e746966696572000118616d6f756e7418011c42616c616e636500011c726561736f6e739d02011c526561736f6e7300009d02083c70616c6c65745f62616c616e6365731c526561736f6e7300010c0c466565000000104d6973630001000c416c6c00020000a102000002990200a5020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401a902045300000400ad0201185665633c543e0000a902083c70616c6c65745f62616c616e6365732c52657365727665446174610844526573657276654964656e7469666965720121021c42616c616e6365011800080108696421020144526573657276654964656e746966696572000118616d6f756e7418011c42616c616e63650000ad02000002a90200b1020c3c70616c6c65745f62616c616e6365731870616c6c65741043616c6c080454000449000118207472616e7366657208011064657374b50201504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565cc0128543a3a42616c616e6365000058d45472616e7366657220736f6d65206c697175696420667265652062616c616e636520746f20616e6f74686572206163636f756e742e000501607472616e73666572602077696c6c207365742074686520604672656542616c616e636560206f66207468652073656e64657220616e642072656365697665722e11014966207468652073656e6465722773206163636f756e742069732062656c6f7720746865206578697374656e7469616c206465706f736974206173206120726573756c74b06f6620746865207472616e736665722c20746865206163636f756e742077696c6c206265207265617065642e001501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d75737420626520605369676e65646020627920746865207472616e736163746f722e0034232320436f6d706c657869747961012d20446570656e64656e74206f6e20617267756d656e747320627574206e6f7420637269746963616c2c20676976656e2070726f70657220696d706c656d656e746174696f6e7320666f7220696e70757420636f6e66696794202074797065732e205365652072656c617465642066756e6374696f6e732062656c6f772e31012d20497420636f6e7461696e732061206c696d69746564206e756d626572206f6620726561647320616e642077726974657320696e7465726e616c6c7920616e64206e6f20636f6d706c6578382020636f6d7075746174696f6e2e004852656c617465642066756e6374696f6e733a004d0120202d2060656e737572655f63616e5f77697468647261776020697320616c776179732063616c6c656420696e7465726e616c6c792062757420686173206120626f756e64656420636f6d706c65786974792e290120202d205472616e7366657272696e672062616c616e63657320746f206163636f756e7473207468617420646964206e6f74206578697374206265666f72652077696c6c206361757365cc2020202060543a3a4f6e4e65774163636f756e743a3a6f6e5f6e65775f6163636f756e746020746f2062652063616c6c65642e5d0120202d2052656d6f76696e6720656e6f7567682066756e64732066726f6d20616e206163636f756e742077696c6c20747269676765722060543a3a4475737452656d6f76616c3a3a6f6e5f756e62616c616e636564602e5d0120202d20607472616e736665725f6b6565705f616c6976656020776f726b73207468652073616d652077617920617320607472616e73666572602c206275742068617320616e206164646974696f6e616c20636865636bdc202020207468617420746865207472616e736665722077696c6c206e6f74206b696c6c20746865206f726967696e206163636f756e742e2c7365745f62616c616e63650c010c77686fb50201504163636f756e7449644c6f6f6b75704f663c543e0001206e65775f66726565cc0128543a3a42616c616e63650001306e65775f7265736572766564cc0128543a3a42616c616e636500012090536574207468652062616c616e636573206f66206120676976656e206163636f756e742e001d01546869732077696c6c20616c74657220604672656542616c616e63656020616e642060526573657276656442616c616e63656020696e2073746f726167652e2069742077696c6c3101616c736f20616c7465722074686520746f74616c2069737375616e6365206f66207468652073797374656d202860546f74616c49737375616e6365602920617070726f7072696174656c792e1501496620746865206e65772066726565206f722072657365727665642062616c616e63652069732062656c6f7720746865206578697374656e7469616c206465706f7369742cfc69742077696c6c20726573657420746865206163636f756e74206e6f6e63652028606672616d655f73797374656d3a3a4163636f756e744e6f6e636560292e00b0546865206469737061746368206f726967696e20666f7220746869732063616c6c2069732060726f6f74602e38666f7263655f7472616e736665720c0118736f75726365b50201504163636f756e7449644c6f6f6b75704f663c543e00011064657374b50201504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565cc0128543a3a42616c616e63650002144d0145786163746c7920617320607472616e73666572602c2065786365707420746865206f726967696e206d75737420626520726f6f7420616e642074686520736f75726365206163636f756e74206d6179206265287370656369666965642e34232320436f6d706c65786974794d012d2053616d65206173207472616e736665722c20627574206164646974696f6e616c207265616420616e6420777269746520626563617573652074686520736f75726365206163636f756e74206973206e6f747c2020617373756d656420746f20626520696e20746865206f7665726c61792e4c7472616e736665725f6b6565705f616c69766508011064657374b50201504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565cc0128543a3a42616c616e63650003184d0153616d6520617320746865205b607472616e73666572605d2063616c6c2c206275742077697468206120636865636b207468617420746865207472616e736665722077696c6c206e6f74206b696c6c207468653c6f726967696e206163636f756e742e00b8393925206f66207468652074696d6520796f752077616e74205b607472616e73666572605d20696e73746561642e00c05b607472616e73666572605d3a207374727563742e50616c6c65742e68746d6c236d6574686f642e7472616e73666572307472616e736665725f616c6c08011064657374b50201504163636f756e7449644c6f6f6b75704f663c543e0001286b6565705f616c6976658c0110626f6f6c00044005015472616e736665722074686520656e74697265207472616e7366657261626c652062616c616e63652066726f6d207468652063616c6c6572206163636f756e742e0059014e4f54453a20546869732066756e6374696f6e206f6e6c7920617474656d70747320746f207472616e73666572205f7472616e7366657261626c655f2062616c616e6365732e2054686973206d65616e7320746861746101616e79206c6f636b65642c2072657365727665642c206f72206578697374656e7469616c206465706f7369747320287768656e20606b6565705f616c6976656020697320607472756560292c2077696c6c206e6f742062655d017472616e7366657272656420627920746869732066756e6374696f6e2e20546f20656e73757265207468617420746869732066756e6374696f6e20726573756c747320696e2061206b696c6c6564206163636f756e742c4501796f75206d69676874206e65656420746f207072657061726520746865206163636f756e742062792072656d6f76696e6720616e79207265666572656e636520636f756e746572732c2073746f72616765406465706f736974732c206574632e2e2e00c0546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205369676e65642e00a02d206064657374603a2054686520726563697069656e74206f6620746865207472616e736665722e59012d20606b6565705f616c697665603a204120626f6f6c65616e20746f2064657465726d696e652069662074686520607472616e736665725f616c6c60206f7065726174696f6e2073686f756c642073656e6420616c6c4d0120206f66207468652066756e647320746865206163636f756e74206861732c2063617573696e67207468652073656e646572206163636f756e7420746f206265206b696c6c6564202866616c7365292c206f72590120207472616e736665722065766572797468696e6720657863657074206174206c6561737420746865206578697374656e7469616c206465706f7369742c2077686963682077696c6c2067756172616e74656520746fd420206b656570207468652073656e646572206163636f756e7420616c697665202874727565292e20232320436f6d706c657869747939012d204f2831292e204a757374206c696b65207472616e736665722c206275742072656164696e672074686520757365722773207472616e7366657261626c652062616c616e63652066697273742e3c666f7263655f756e7265736572766508010c77686fb50201504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e74180128543a3a42616c616e636500050cb0556e7265736572766520736f6d652062616c616e63652066726f6d2061207573657220627920666f7263652e006c43616e206f6e6c792062652063616c6c656420627920524f4f542e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632eb5020c2873705f72756e74696d65306d756c746961646472657373304d756c74694164647265737308244163636f756e7449640100304163636f756e74496e64657801e8011408496404000001244163636f756e74496400000014496e6465780400b90201304163636f756e74496e6465780001000c526177040030011c5665633c75383e0002002441646472657373333204000401205b75383b2033325d000300244164647265737332300400150101205b75383b2032305d00040000b902000006e800bd020c3c70616c6c65745f62616c616e6365731870616c6c6574144572726f720804540004490001203856657374696e6742616c616e63650000049856657374696e672062616c616e636520746f6f206869676820746f2073656e642076616c7565544c69717569646974795265737472696374696f6e73000104c44163636f756e74206c6971756964697479207265737472696374696f6e732070726576656e74207769746864726177616c4c496e73756666696369656e7442616c616e63650002047842616c616e636520746f6f206c6f7720746f2073656e642076616c75652e484578697374656e7469616c4465706f736974000304e856616c756520746f6f206c6f7720746f20637265617465206163636f756e742064756520746f206578697374656e7469616c206465706f736974244b656570416c6976650004048c5472616e736665722f7061796d656e7420776f756c64206b696c6c206163636f756e745c4578697374696e6756657374696e675363686564756c65000504c8412076657374696e67207363686564756c6520616c72656164792065786973747320666f722074686973206163636f756e742c446561644163636f756e740006048842656e6566696369617279206163636f756e74206d757374207072652d65786973743c546f6f4d616e795265736572766573000704ac4e756d626572206f66206e616d656420726573657276657320657863656564204d6178526573657276657304b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909c1020000020000c502083870616c6c65745f7374616b696e67345374616b696e674c656467657204045400001401147374617368000130543a3a4163636f756e744964000114746f74616ccc013042616c616e63654f663c543e000118616374697665cc013042616c616e63654f663c543e000124756e6c6f636b696e67c90201f0426f756e6465645665633c556e6c6f636b4368756e6b3c42616c616e63654f663c543e3e2c20543a3a4d6178556e6c6f636b696e674368756e6b733e00013c636c61696d65645f72657761726473d5020194426f756e6465645665633c457261496e6465782c20543a3a486973746f727944657074683e0000c9020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401cd02045300000400d10201185665633c543e0000cd02083870616c6c65745f7374616b696e672c556e6c6f636b4368756e6b041c42616c616e636501180008011476616c7565cc011c42616c616e636500010c657261dd010120457261496e6465780000d102000002cd0200d5020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540110045300000400b50101185665633c543e0000d902083870616c6c65745f7374616b696e674452657761726444657374696e6174696f6e04244163636f756e74496401000114185374616b656400000014537461736800010028436f6e74726f6c6c65720002001c4163636f756e7404000001244163636f756e744964000300104e6f6e6500040000dd02083870616c6c65745f7374616b696e672c4e6f6d696e6174696f6e7304045400000c011c74617267657473e10201ac426f756e6465645665633c543a3a4163636f756e7449642c20543a3a4d61784e6f6d696e6174696f6e733e0001307375626d69747465645f696e100120457261496e646578000128737570707265737365648c0110626f6f6c0000e1020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400c10201185665633c543e0000e502083870616c6c65745f7374616b696e6734416374697665457261496e666f0000080114696e646578100120457261496e64657800011473746172743d01012c4f7074696f6e3c7536343e0000e90200000408100000ed02083870616c6c65745f7374616b696e673c457261526577617264506f696e747304244163636f756e744964010000080114746f74616c10012c526577617264506f696e74000128696e646976696475616cf102018042547265654d61703c4163636f756e7449642c20526577617264506f696e743e0000f102042042547265654d617008044b010004560110000400f502000000f502000002f90200f90200000408001000fd020000020103000103083870616c6c65745f7374616b696e6738556e6170706c696564536c61736808244163636f756e74496401001c42616c616e636501180014012476616c696461746f720001244163636f756e74496400010c6f776e18011c42616c616e63650001186f7468657273050301645665633c284163636f756e7449642c2042616c616e6365293e0001247265706f7274657273c10201385665633c4163636f756e7449643e0001187061796f757418011c42616c616e6365000005030000020903000903000004080018000d030000040880180011030c3870616c6c65745f7374616b696e6720736c617368696e6734536c617368696e675370616e7300001001287370616e5f696e6465781001245370616e496e6465780001286c6173745f7374617274100120457261496e6465780001486c6173745f6e6f6e7a65726f5f736c617368100120457261496e6465780001147072696f72b50101345665633c457261496e6465783e000015030c3870616c6c65745f7374616b696e6720736c617368696e67285370616e5265636f7264041c42616c616e636501180008011c736c617368656418011c42616c616e6365000120706169645f6f757418011c42616c616e6365000019030000021d03001d0300000408108c0021030c3473705f61726974686d65746963287065725f7468696e67731c50657263656e7400000400080108753800002503103870616c6c65745f7374616b696e671870616c6c65741870616c6c65741043616c6c04045400016810626f6e640c0128636f6e74726f6c6c6572b50201504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565cc013042616c616e63654f663c543e0001147061796565d902017c52657761726444657374696e6174696f6e3c543a3a4163636f756e7449643e00003c610154616b6520746865206f726967696e206163636f756e74206173206120737461736820616e64206c6f636b207570206076616c756560206f66206974732062616c616e63652e2060636f6e74726f6c6c6572602077696c6c80626520746865206163636f756e74207468617420636f6e74726f6c732069742e002d016076616c756560206d757374206265206d6f7265207468616e2074686520606d696e696d756d5f62616c616e636560207370656369666965642062792060543a3a43757272656e6379602e002101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20627920746865207374617368206163636f756e742e003c456d6974732060426f6e646564602e34232320436f6d706c6578697479d02d20496e646570656e64656e74206f662074686520617267756d656e74732e204d6f64657261746520636f6d706c65786974792e1c2d204f2831292e642d20546872656520657874726120444220656e74726965732e004d014e4f54453a2054776f206f66207468652073746f726167652077726974657320286053656c663a3a626f6e646564602c206053656c663a3a7061796565602920617265205f6e657665725f20636c65616e65643d01756e6c6573732074686520606f726967696e602066616c6c732062656c6f77205f6578697374656e7469616c206465706f7369745f20616e6420676574732072656d6f76656420617320647573742e28626f6e645f65787472610401386d61785f6164646974696f6e616ccc013042616c616e63654f663c543e000138610141646420736f6d6520657874726120616d6f756e742074686174206861766520617070656172656420696e207468652073746173682060667265655f62616c616e63656020696e746f207468652062616c616e636520757030666f72207374616b696e672e005101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f206279207468652073746173682c206e6f742074686520636f6e74726f6c6c65722e004d01557365207468697320696620746865726520617265206164646974696f6e616c2066756e647320696e20796f7572207374617368206163636f756e74207468617420796f75207769736820746f20626f6e642e5501556e6c696b65205b60626f6e64605d2853656c663a3a626f6e6429206f72205b60756e626f6e64605d2853656c663a3a756e626f6e642920746869732066756e6374696f6e20646f6573206e6f7420696d706f7365bc616e79206c696d69746174696f6e206f6e2074686520616d6f756e7420746861742063616e2062652061646465642e003c456d6974732060426f6e646564602e0034232320436f6d706c6578697479e42d20496e646570656e64656e74206f662074686520617267756d656e74732e20496e7369676e69666963616e7420636f6d706c65786974792e1c2d204f2831292e18756e626f6e6404011476616c7565cc013042616c616e63654f663c543e00024c51015363686564756c65206120706f7274696f6e206f662074686520737461736820746f20626520756e6c6f636b656420726561647920666f72207472616e73666572206f75742061667465722074686520626f6e64fc706572696f6420656e64732e2049662074686973206c656176657320616e20616d6f756e74206163746976656c7920626f6e646564206c657373207468616e2101543a3a43757272656e63793a3a6d696e696d756d5f62616c616e636528292c207468656e20697420697320696e6372656173656420746f207468652066756c6c20616d6f756e742e005101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2062792074686520636f6e74726f6c6c65722c206e6f74207468652073746173682e0045014f6e63652074686520756e6c6f636b20706572696f6420697320646f6e652c20796f752063616e2063616c6c206077697468647261775f756e626f6e6465646020746f2061637475616c6c79206d6f7665bc7468652066756e6473206f7574206f66206d616e6167656d656e7420726561647920666f72207472616e736665722e0031014e6f206d6f7265207468616e2061206c696d69746564206e756d626572206f6620756e6c6f636b696e67206368756e6b73202873656520604d6178556e6c6f636b696e674368756e6b736029410163616e20636f2d657869737473206174207468652073616d652074696d652e20496620746865726520617265206e6f20756e6c6f636b696e67206368756e6b7320736c6f747320617661696c61626c6545015b6043616c6c3a3a77697468647261775f756e626f6e646564605d2069732063616c6c656420746f2072656d6f766520736f6d65206f6620746865206368756e6b732028696620706f737369626c65292e00390149662061207573657220656e636f756e74657273207468652060496e73756666696369656e74426f6e6460206572726f72207768656e2063616c6c696e6720746869732065787472696e7369632c1901746865792073686f756c642063616c6c20606368696c6c6020666972737420696e206f7264657220746f206672656520757020746865697220626f6e6465642066756e64732e0044456d6974732060556e626f6e646564602e009453656520616c736f205b6043616c6c3a3a77697468647261775f756e626f6e646564605d2e4477697468647261775f756e626f6e6465640401486e756d5f736c617368696e675f7370616e7310010c753332000338290152656d6f766520616e7920756e6c6f636b6564206368756e6b732066726f6d207468652060756e6c6f636b696e67602071756575652066726f6d206f7572206d616e6167656d656e742e0031015468697320657373656e7469616c6c7920667265657320757020746861742062616c616e636520746f206265207573656420627920746865207374617368206163636f756e7420746f20646f4877686174657665722069742077616e74732e001501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2062792074686520636f6e74726f6c6c65722e0048456d697473206057697468647261776e602e006853656520616c736f205b6043616c6c3a3a756e626f6e64605d2e0034232320436f6d706c6578697479d84f285329207768657265205320697320746865206e756d626572206f6620736c617368696e67207370616e7320746f2072656d6f766509014e4f54453a2057656967687420616e6e6f746174696f6e20697320746865206b696c6c207363656e6172696f2c20776520726566756e64206f74686572776973652e2076616c6964617465040114707265667384013856616c696461746f725072656673000414e44465636c617265207468652064657369726520746f2076616c696461746520666f7220746865206f726967696e20636f6e74726f6c6c65722e00d8456666656374732077696c6c2062652066656c742061742074686520626567696e6e696e67206f6620746865206e657874206572612e005101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2062792074686520636f6e74726f6c6c65722c206e6f74207468652073746173682e206e6f6d696e61746504011c74617267657473290301645665633c4163636f756e7449644c6f6f6b75704f663c543e3e0005280d014465636c617265207468652064657369726520746f206e6f6d696e6174652060746172676574736020666f7220746865206f726967696e20636f6e74726f6c6c65722e00d8456666656374732077696c6c2062652066656c742061742074686520626567696e6e696e67206f6620746865206e657874206572612e005101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2062792074686520636f6e74726f6c6c65722c206e6f74207468652073746173682e0034232320436f6d706c65786974792d012d20546865207472616e73616374696f6e277320636f6d706c65786974792069732070726f706f7274696f6e616c20746f207468652073697a65206f662060746172676574736020284e29050177686963682069732063617070656420617420436f6d7061637441737369676e6d656e74733a3a4c494d49542028543a3a4d61784e6f6d696e6174696f6e73292ed42d20426f74682074686520726561647320616e642077726974657320666f6c6c6f7720612073696d696c6172207061747465726e2e146368696c6c000628c44465636c617265206e6f2064657369726520746f206569746865722076616c6964617465206f72206e6f6d696e6174652e00d8456666656374732077696c6c2062652066656c742061742074686520626567696e6e696e67206f6620746865206e657874206572612e005101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2062792074686520636f6e74726f6c6c65722c206e6f74207468652073746173682e0034232320436f6d706c6578697479e42d20496e646570656e64656e74206f662074686520617267756d656e74732e20496e7369676e69666963616e7420636f6d706c65786974792e502d20436f6e7461696e73206f6e6520726561642ec42d2057726974657320617265206c696d6974656420746f2074686520606f726967696e60206163636f756e74206b65792e247365745f70617965650401147061796565d902017c52657761726444657374696e6174696f6e3c543a3a4163636f756e7449643e000730b42852652d2973657420746865207061796d656e742074617267657420666f72206120636f6e74726f6c6c65722e005101456666656374732077696c6c2062652066656c7420696e7374616e746c792028617320736f6f6e20617320746869732066756e6374696f6e20697320636f6d706c65746564207375636365737366756c6c79292e005101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2062792074686520636f6e74726f6c6c65722c206e6f74207468652073746173682e0034232320436f6d706c6578697479182d204f283129e42d20496e646570656e64656e74206f662074686520617267756d656e74732e20496e7369676e69666963616e7420636f6d706c65786974792e942d20436f6e7461696e732061206c696d69746564206e756d626572206f662072656164732ec42d2057726974657320617265206c696d6974656420746f2074686520606f726967696e60206163636f756e74206b65792e242d2d2d2d2d2d2d2d2d387365745f636f6e74726f6c6c6572040128636f6e74726f6c6c6572b50201504163636f756e7449644c6f6f6b75704f663c543e00082c8c2852652d297365742074686520636f6e74726f6c6c6572206f6620612073746173682e005101456666656374732077696c6c2062652066656c7420696e7374616e746c792028617320736f6f6e20617320746869732066756e6374696f6e20697320636f6d706c65746564207375636365737366756c6c79292e005101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f206279207468652073746173682c206e6f742074686520636f6e74726f6c6c65722e0034232320436f6d706c6578697479104f283129e42d20496e646570656e64656e74206f662074686520617267756d656e74732e20496e7369676e69666963616e7420636f6d706c65786974792e942d20436f6e7461696e732061206c696d69746564206e756d626572206f662072656164732ec42d2057726974657320617265206c696d6974656420746f2074686520606f726967696e60206163636f756e74206b65792e4c7365745f76616c696461746f725f636f756e7404010c6e6577dd01010c75333200091890536574732074686520696465616c206e756d626572206f662076616c696461746f72732e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e0034232320436f6d706c6578697479104f28312960696e6372656173655f76616c696461746f725f636f756e740401286164646974696f6e616cdd01010c753332000a1ce4496e6372656d656e74732074686520696465616c206e756d626572206f662076616c696461746f7273207570746f206d6178696d756d206f668c60456c656374696f6e50726f7669646572426173653a3a4d617857696e6e657273602e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e0034232320436f6d706c65786974799853616d65206173205b6053656c663a3a7365745f76616c696461746f725f636f756e74605d2e547363616c655f76616c696461746f725f636f756e74040118666163746f722103011c50657263656e74000b1c0d015363616c652075702074686520696465616c206e756d626572206f662076616c696461746f7273206279206120666163746f72207570746f206d6178696d756d206f668c60456c656374696f6e50726f7669646572426173653a3a4d617857696e6e657273602e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e0034232320436f6d706c65786974799853616d65206173205b6053656c663a3a7365745f76616c696461746f725f636f756e74605d2e34666f7263655f6e6f5f65726173000c34ac466f72636520746865726520746f206265206e6f206e6577206572617320696e646566696e6974656c792e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e002423205761726e696e6700190154686520656c656374696f6e2070726f6365737320737461727473206d756c7469706c6520626c6f636b73206265666f72652074686520656e64206f6620746865206572612e3901546875732074686520656c656374696f6e2070726f63657373206d6179206265206f6e676f696e67207768656e20746869732069732063616c6c65642e20496e2074686973206361736520746865dc656c656374696f6e2077696c6c20636f6e74696e756520756e74696c20746865206e65787420657261206973207472696767657265642e0034232320436f6d706c65786974793c2d204e6f20617267756d656e74732e382d205765696768743a204f28312934666f7263655f6e65775f657261000d384901466f72636520746865726520746f2062652061206e6577206572612061742074686520656e64206f6620746865206e6578742073657373696f6e2e20416674657220746869732c2069742077696c6c2062659c726573657420746f206e6f726d616c20286e6f6e2d666f7263656429206265686176696f75722e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e002423205761726e696e6700190154686520656c656374696f6e2070726f6365737320737461727473206d756c7469706c6520626c6f636b73206265666f72652074686520656e64206f6620746865206572612e4901496620746869732069732063616c6c6564206a757374206265666f72652061206e657720657261206973207472696767657265642c2074686520656c656374696f6e2070726f63657373206d6179206e6f748c6861766520656e6f75676820626c6f636b7320746f20676574206120726573756c742e0034232320436f6d706c65786974793c2d204e6f20617267756d656e74732e382d205765696768743a204f283129447365745f696e76756c6e657261626c6573040134696e76756c6e657261626c6573c10201445665633c543a3a4163636f756e7449643e000e0cc8536574207468652076616c696461746f72732077686f2063616e6e6f7420626520736c61736865642028696620616e79292e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e34666f7263655f756e7374616b650801147374617368000130543a3a4163636f756e7449640001486e756d5f736c617368696e675f7370616e7310010c753332000f0c0901466f72636520612063757272656e74207374616b657220746f206265636f6d6520636f6d706c6574656c7920756e7374616b65642c20696d6d6564696174656c792e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e50666f7263655f6e65775f6572615f616c776179730010240101466f72636520746865726520746f2062652061206e6577206572612061742074686520656e64206f662073657373696f6e7320696e646566696e6974656c792e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e002423205761726e696e6700190154686520656c656374696f6e2070726f6365737320737461727473206d756c7469706c6520626c6f636b73206265666f72652074686520656e64206f6620746865206572612e4901496620746869732069732063616c6c6564206a757374206265666f72652061206e657720657261206973207472696767657265642c2074686520656c656374696f6e2070726f63657373206d6179206e6f748c6861766520656e6f75676820626c6f636b7320746f20676574206120726573756c742e5463616e63656c5f64656665727265645f736c61736808010c657261100120457261496e646578000134736c6173685f696e6469636573b50101205665633c7533323e0011149443616e63656c20656e6163746d656e74206f66206120646566657272656420736c6173682e009843616e2062652063616c6c6564206279207468652060543a3a41646d696e4f726967696e602e000101506172616d65746572733a2065726120616e6420696e6469636573206f662074686520736c617368657320666f7220746861742065726120746f206b696c6c2e387061796f75745f7374616b65727308013c76616c696461746f725f7374617368000130543a3a4163636f756e74496400010c657261100120457261496e64657800122c0d01506179206f757420616c6c20746865207374616b65727320626568696e6420612073696e676c652076616c696461746f7220666f7220612073696e676c65206572612e0049012d206076616c696461746f725f73746173686020697320746865207374617368206163636f756e74206f66207468652076616c696461746f722e205468656972206e6f6d696e61746f72732c20757020746f2501202060543a3a4d61784e6f6d696e61746f72526577617264656450657256616c696461746f72602c2077696c6c20616c736f207265636569766520746865697220726577617264732e31012d206065726160206d617920626520616e7920657261206265747765656e20605b63757272656e745f657261202d20686973746f72795f64657074683b2063757272656e745f6572615d602e005501546865206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2e20416e79206163636f756e742063616e2063616c6c20746869732066756e6374696f6e2c206576656e206966746974206973206e6f74206f6e65206f6620746865207374616b6572732e0034232320436f6d706c6578697479b82d204174206d6f7374204f284d61784e6f6d696e61746f72526577617264656450657256616c696461746f72292e187265626f6e6404011476616c7565cc013042616c616e63654f663c543e00131cdc5265626f6e64206120706f7274696f6e206f6620746865207374617368207363686564756c656420746f20626520756e6c6f636b65642e00d4546865206469737061746368206f726967696e206d757374206265207369676e65642062792074686520636f6e74726f6c6c65722e0034232320436f6d706c6578697479d02d2054696d6520636f6d706c65786974793a204f284c292c207768657265204c20697320756e6c6f636b696e67206368756e6b73882d20426f756e64656420627920604d6178556e6c6f636b696e674368756e6b73602e28726561705f73746173680801147374617368000130543a3a4163636f756e7449640001486e756d5f736c617368696e675f7370616e7310010c7533320014305d0152656d6f766520616c6c2064617461207374727563747572657320636f6e6365726e696e672061207374616b65722f7374617368206f6e636520697420697320617420612073746174652077686572652069742063616e0501626520636f6e736964657265642060647573746020696e20746865207374616b696e672073797374656d2e2054686520726571756972656d656e7473206172653a000501312e207468652060746f74616c5f62616c616e636560206f66207468652073746173682069732062656c6f77206578697374656e7469616c206465706f7369742e1101322e206f722c2074686520606c65646765722e746f74616c60206f66207468652073746173682069732062656c6f77206578697374656e7469616c206465706f7369742e00550154686520666f726d65722063616e2068617070656e20696e206361736573206c696b65206120736c6173683b20746865206c6174746572207768656e20612066756c6c7920756e626f6e646564206163636f756e7409016973207374696c6c20726563656976696e67207374616b696e67207265776172647320696e206052657761726444657374696e6174696f6e3a3a5374616b6564602e00310149742063616e2062652063616c6c656420627920616e796f6e652c206173206c6f6e672061732060737461736860206d65657473207468652061626f766520726571756972656d656e74732e00dc526566756e647320746865207472616e73616374696f6e20666565732075706f6e207375636365737366756c20657865637574696f6e2e106b69636b04010c77686f290301645665633c4163636f756e7449644c6f6f6b75704f663c543e3e00152ce052656d6f76652074686520676976656e206e6f6d696e6174696f6e732066726f6d207468652063616c6c696e672076616c696461746f722e00d8456666656374732077696c6c2062652066656c742061742074686520626567696e6e696e67206f6620746865206e657874206572612e005101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2062792074686520636f6e74726f6c6c65722c206e6f74207468652073746173682e004d012d206077686f603a2041206c697374206f66206e6f6d696e61746f72207374617368206163636f756e74732077686f20617265206e6f6d696e6174696e6720746869732076616c696461746f72207768696368c0202073686f756c64206e6f206c6f6e676572206265206e6f6d696e6174696e6720746869732076616c696461746f722e0055014e6f74653a204d616b696e6720746869732063616c6c206f6e6c79206d616b65732073656e736520696620796f7520666972737420736574207468652076616c696461746f7220707265666572656e63657320746f78626c6f636b20616e792066757274686572206e6f6d696e6174696f6e732e4c7365745f7374616b696e675f636f6e666967731801486d696e5f6e6f6d696e61746f725f626f6e642d030158436f6e6669674f703c42616c616e63654f663c543e3e0001486d696e5f76616c696461746f725f626f6e642d030158436f6e6669674f703c42616c616e63654f663c543e3e00014c6d61785f6e6f6d696e61746f725f636f756e7431030134436f6e6669674f703c7533323e00014c6d61785f76616c696461746f725f636f756e7431030134436f6e6669674f703c7533323e00013c6368696c6c5f7468726573686f6c6435030144436f6e6669674f703c50657263656e743e0001386d696e5f636f6d6d697373696f6e39030144436f6e6669674f703c50657262696c6c3e001644ac5570646174652074686520766172696f7573207374616b696e6720636f6e66696775726174696f6e73202e0025012a20606d696e5f6e6f6d696e61746f725f626f6e64603a20546865206d696e696d756d2061637469766520626f6e64206e656564656420746f2062652061206e6f6d696e61746f722e25012a20606d696e5f76616c696461746f725f626f6e64603a20546865206d696e696d756d2061637469766520626f6e64206e656564656420746f20626520612076616c696461746f722e55012a20606d61785f6e6f6d696e61746f725f636f756e74603a20546865206d6178206e756d626572206f662075736572732077686f2063616e2062652061206e6f6d696e61746f72206174206f6e63652e205768656e98202073657420746f20604e6f6e65602c206e6f206c696d697420697320656e666f726365642e55012a20606d61785f76616c696461746f725f636f756e74603a20546865206d6178206e756d626572206f662075736572732077686f2063616e20626520612076616c696461746f72206174206f6e63652e205768656e98202073657420746f20604e6f6e65602c206e6f206c696d697420697320656e666f726365642e59012a20606368696c6c5f7468726573686f6c64603a2054686520726174696f206f6620606d61785f6e6f6d696e61746f725f636f756e7460206f7220606d61785f76616c696461746f725f636f756e74602077686963681901202073686f756c642062652066696c6c656420696e206f7264657220666f722074686520606368696c6c5f6f7468657260207472616e73616374696f6e20746f20776f726b2e61012a20606d696e5f636f6d6d697373696f6e603a20546865206d696e696d756d20616d6f756e74206f6620636f6d6d697373696f6e207468617420656163682076616c696461746f7273206d757374206d61696e7461696e2e550120205468697320697320636865636b6564206f6e6c792075706f6e2063616c6c696e67206076616c6964617465602e204578697374696e672076616c696461746f727320617265206e6f742061666665637465642e00c452756e74696d654f726967696e206d75737420626520526f6f7420746f2063616c6c20746869732066756e6374696f6e2e0035014e4f54453a204578697374696e67206e6f6d696e61746f727320616e642076616c696461746f72732077696c6c206e6f742062652061666665637465642062792074686973207570646174652e1101746f206b69636b2070656f706c6520756e64657220746865206e6577206c696d6974732c20606368696c6c5f6f74686572602073686f756c642062652063616c6c65642e2c6368696c6c5f6f74686572040128636f6e74726f6c6c6572000130543a3a4163636f756e74496400176841014465636c61726520612060636f6e74726f6c6c65726020746f2073746f702070617274696369706174696e672061732065697468657220612076616c696461746f72206f72206e6f6d696e61746f722e00d8456666656374732077696c6c2062652066656c742061742074686520626567696e6e696e67206f6620746865206e657874206572612e004101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2c206275742063616e2062652063616c6c656420627920616e796f6e652e0059014966207468652063616c6c6572206973207468652073616d652061732074686520636f6e74726f6c6c6572206265696e672074617267657465642c207468656e206e6f206675727468657220636865636b7320617265d8656e666f726365642c20616e6420746869732066756e6374696f6e2062656861766573206a757374206c696b6520606368696c6c602e005d014966207468652063616c6c657220697320646966666572656e74207468616e2074686520636f6e74726f6c6c6572206265696e672074617267657465642c2074686520666f6c6c6f77696e6720636f6e646974696f6e73306d757374206265206d65743a001d012a2060636f6e74726f6c6c657260206d7573742062656c6f6e6720746f2061206e6f6d696e61746f722077686f20686173206265636f6d65206e6f6e2d6465636f6461626c652c000c4f723a003d012a204120604368696c6c5468726573686f6c6460206d7573742062652073657420616e6420636865636b656420776869636820646566696e657320686f7720636c6f736520746f20746865206d6178550120206e6f6d696e61746f7273206f722076616c696461746f7273207765206d757374207265616368206265666f72652075736572732063616e207374617274206368696c6c696e67206f6e652d616e6f746865722e59012a204120604d61784e6f6d696e61746f72436f756e746020616e6420604d617856616c696461746f72436f756e7460206d75737420626520736574207768696368206973207573656420746f2064657465726d696e65902020686f7720636c6f73652077652061726520746f20746865207468726573686f6c642e5d012a204120604d696e4e6f6d696e61746f72426f6e646020616e6420604d696e56616c696461746f72426f6e6460206d7573742062652073657420616e6420636865636b65642c2077686963682064657465726d696e65735101202069662074686973206973206120706572736f6e20746861742073686f756c64206265206368696c6c6564206265636175736520746865792068617665206e6f74206d657420746865207468726573686f6c64402020626f6e642072657175697265642e005501546869732063616e2062652068656c7066756c20696620626f6e6420726571756972656d656e74732061726520757064617465642c20616e64207765206e65656420746f2072656d6f7665206f6c642075736572739877686f20646f206e6f74207361746973667920746865736520726571756972656d656e74732e68666f7263655f6170706c795f6d696e5f636f6d6d697373696f6e04013c76616c696461746f725f7374617368000130543a3a4163636f756e74496400180c4501466f72636520612076616c696461746f7220746f2068617665206174206c6561737420746865206d696e696d756d20636f6d6d697373696f6e2e20546869732077696c6c206e6f74206166666563742061610176616c696461746f722077686f20616c726561647920686173206120636f6d6d697373696f6e2067726561746572207468616e206f7220657175616c20746f20746865206d696e696d756d2e20416e79206163636f756e743863616e2063616c6c20746869732e487365745f6d696e5f636f6d6d697373696f6e04010c6e657780011c50657262696c6c00191025015365747320746865206d696e696d756d20616d6f756e74206f6620636f6d6d697373696f6e207468617420656163682076616c696461746f7273206d757374206d61696e7461696e2e005901546869732063616c6c20686173206c6f7765722070726976696c65676520726571756972656d656e7473207468616e20607365745f7374616b696e675f636f6e6669676020616e642063616e2062652063616c6c6564cc6279207468652060543a3a41646d696e4f726967696e602e20526f6f742063616e20616c776179732063616c6c20746869732e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e2903000002b502002d03103870616c6c65745f7374616b696e671870616c6c65741870616c6c657420436f6e6669674f700404540118010c104e6f6f700000000c5365740400180104540001001852656d6f7665000200003103103870616c6c65745f7374616b696e671870616c6c65741870616c6c657420436f6e6669674f700404540110010c104e6f6f700000000c5365740400100104540001001852656d6f7665000200003503103870616c6c65745f7374616b696e671870616c6c65741870616c6c657420436f6e6669674f70040454012103010c104e6f6f700000000c536574040021030104540001001852656d6f7665000200003903103870616c6c65745f7374616b696e671870616c6c65741870616c6c657420436f6e6669674f700404540180010c104e6f6f700000000c5365740400800104540001001852656d6f7665000200003d03103870616c6c65745f7374616b696e671870616c6c65741870616c6c6574144572726f72040454000164344e6f74436f6e74726f6c6c6572000004644e6f74206120636f6e74726f6c6c6572206163636f756e742e204e6f745374617368000104504e6f742061207374617368206163636f756e742e34416c7265616479426f6e64656400020460537461736820697320616c726561647920626f6e6465642e34416c726561647950616972656400030474436f6e74726f6c6c657220697320616c7265616479207061697265642e30456d7074795461726765747300040460546172676574732063616e6e6f7420626520656d7074792e384475706c6963617465496e646578000504404475706c696361746520696e6465782e44496e76616c6964536c617368496e64657800060484536c617368207265636f726420696e646578206f7574206f6620626f756e64732e40496e73756666696369656e74426f6e6400070c590143616e6e6f74206861766520612076616c696461746f72206f72206e6f6d696e61746f7220726f6c652c20776974682076616c7565206c657373207468616e20746865206d696e696d756d20646566696e65642062793d01676f7665726e616e6365202873656520604d696e56616c696461746f72426f6e646020616e6420604d696e4e6f6d696e61746f72426f6e6460292e20496620756e626f6e64696e67206973207468651501696e74656e74696f6e2c20606368696c6c6020666972737420746f2072656d6f7665206f6e65277320726f6c652061732076616c696461746f722f6e6f6d696e61746f722e304e6f4d6f72654368756e6b730008049043616e206e6f74207363686564756c65206d6f726520756e6c6f636b206368756e6b732e344e6f556e6c6f636b4368756e6b000904a043616e206e6f74207265626f6e6420776974686f757420756e6c6f636b696e67206368756e6b732e3046756e646564546172676574000a04c8417474656d7074696e6720746f2074617267657420612073746173682074686174207374696c6c206861732066756e64732e48496e76616c6964457261546f526577617264000b0458496e76616c69642065726120746f207265776172642e68496e76616c69644e756d6265724f664e6f6d696e6174696f6e73000c0478496e76616c6964206e756d626572206f66206e6f6d696e6174696f6e732e484e6f74536f72746564416e64556e69717565000d04804974656d7320617265206e6f7420736f7274656420616e6420756e697175652e38416c7265616479436c61696d6564000e0409015265776172647320666f72207468697320657261206861766520616c7265616479206265656e20636c61696d656420666f7220746869732076616c696461746f722e54496e636f7272656374486973746f72794465707468000f04c0496e636f72726563742070726576696f757320686973746f727920646570746820696e7075742070726f76696465642e58496e636f7272656374536c617368696e675370616e73001004b0496e636f7272656374206e756d626572206f6620736c617368696e67207370616e732070726f76696465642e2042616453746174650011043901496e7465726e616c20737461746520686173206265636f6d6520736f6d65686f7720636f7272757074656420616e6420746865206f7065726174696f6e2063616e6e6f7420636f6e74696e75652e38546f6f4d616e795461726765747300120494546f6f206d616e79206e6f6d696e6174696f6e207461726765747320737570706c6965642e244261645461726765740013043d0141206e6f6d696e6174696f6e207461726765742077617320737570706c69656420746861742077617320626c6f636b6564206f72206f7468657277697365206e6f7420612076616c696461746f722e4043616e6e6f744368696c6c4f74686572001404550154686520757365722068617320656e6f75676820626f6e6420616e6420746875732063616e6e6f74206265206368696c6c656420666f72636566756c6c7920627920616e2065787465726e616c20706572736f6e2e44546f6f4d616e794e6f6d696e61746f72730015084d0154686572652061726520746f6f206d616e79206e6f6d696e61746f727320696e207468652073797374656d2e20476f7665726e616e6365206e6565647320746f2061646a75737420746865207374616b696e67b473657474696e677320746f206b656570207468696e6773207361666520666f72207468652072756e74696d652e44546f6f4d616e7956616c696461746f7273001608550154686572652061726520746f6f206d616e792076616c696461746f722063616e6469646174657320696e207468652073797374656d2e20476f7665726e616e6365206e6565647320746f2061646a75737420746865d47374616b696e672073657474696e677320746f206b656570207468696e6773207361666520666f72207468652072756e74696d652e40436f6d6d697373696f6e546f6f4c6f77001704e0436f6d6d697373696f6e20697320746f6f206c6f772e204d757374206265206174206c6561737420604d696e436f6d6d697373696f6e602e2c426f756e644e6f744d657400180458536f6d6520626f756e64206973206e6f74206d65742e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a09090941030c2873705f7374616b696e671c6f6666656e6365384f6666656e636544657461696c7308205265706f727465720100204f6666656e64657201c4000801206f6666656e646572c401204f6666656e6465720001247265706f7274657273c10201345665633c5265706f727465723e00004503000004089830004903000004082c10004d030000025103005103000004080055030055030c5c637265646974636f696e5f6e6f64655f72756e74696d65186f70617175652c53657373696f6e4b65797300000c011c6772616e647061ac01d03c4772616e647061206173202463726174653a3a426f756e64546f52756e74696d654170705075626c69633e3a3a5075626c696300011062616265350201c43c42616265206173202463726174653a3a426f756e64546f52756e74696d654170705075626c69633e3a3a5075626c6963000124696d5f6f6e6c696e65b801d43c496d4f6e6c696e65206173202463726174653a3a426f756e64546f52756e74696d654170705075626c69633e3a3a5075626c696300005903000004085d0330005d030c1c73705f636f72651863727970746f244b65795479706549640000040040011c5b75383b20345d000061030c3870616c6c65745f73657373696f6e1870616c6c65741043616c6c040454000108207365745f6b6579730801106b6579735503011c543a3a4b65797300011470726f6f6630011c5665633c75383e000024e453657473207468652073657373696f6e206b6579287329206f66207468652066756e6374696f6e2063616c6c657220746f20606b657973602e1d01416c6c6f777320616e206163636f756e7420746f20736574206974732073657373696f6e206b6579207072696f7220746f206265636f6d696e6720612076616c696461746f722ec05468697320646f65736e27742074616b652065666665637420756e74696c20746865206e6578742073657373696f6e2e00d0546865206469737061746368206f726967696e206f6620746869732066756e6374696f6e206d757374206265207369676e65642e0034232320436f6d706c657869747959012d20604f283129602e2041637475616c20636f737420646570656e6473206f6e20746865206e756d626572206f66206c656e677468206f662060543a3a4b6579733a3a6b65795f69647328296020776869636820697320202066697865642e2870757267655f6b657973000130c852656d6f76657320616e792073657373696f6e206b6579287329206f66207468652066756e6374696f6e2063616c6c65722e00c05468697320646f65736e27742074616b652065666665637420756e74696c20746865206e6578742073657373696f6e2e005501546865206469737061746368206f726967696e206f6620746869732066756e6374696f6e206d757374206265205369676e656420616e6420746865206163636f756e74206d757374206265206569746865722062655d01636f6e7665727469626c6520746f20612076616c696461746f72204944207573696e672074686520636861696e2773207479706963616c2061646472657373696e672073797374656d20287468697320757375616c6c7951016d65616e73206265696e67206120636f6e74726f6c6c6572206163636f756e7429206f72206469726563746c7920636f6e7665727469626c6520696e746f20612076616c696461746f722049442028776869636894757375616c6c79206d65616e73206265696e672061207374617368206163636f756e74292e0034232320436f6d706c65786974793d012d20604f2831296020696e206e756d626572206f66206b65792074797065732e2041637475616c20636f737420646570656e6473206f6e20746865206e756d626572206f66206c656e677468206f6698202060543a3a4b6579733a3a6b65795f6964732829602077686963682069732066697865642e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e65030c3870616c6c65745f73657373696f6e1870616c6c6574144572726f7204045400011430496e76616c696450726f6f6600000460496e76616c6964206f776e6572736869702070726f6f662e5c4e6f4173736f63696174656456616c696461746f7249640001049c4e6f206173736f6369617465642076616c696461746f7220494420666f72206163636f756e742e344475706c6963617465644b65790002046452656769737465726564206475706c6963617465206b65792e184e6f4b657973000304a44e6f206b65797320617265206173736f63696174656420776974682074686973206163636f756e742e244e6f4163636f756e7400040419014b65792073657474696e67206163636f756e74206973206e6f74206c6976652c20736f206974277320696d706f737369626c6520746f206173736f6369617465206b6579732e04744572726f7220666f72207468652073657373696f6e2070616c6c65742e6903083870616c6c65745f6772616e6470612c53746f726564537461746504044e01100110104c6976650000003050656e64696e6750617573650801307363686564756c65645f61741001044e00011464656c61791001044e000100185061757365640002003450656e64696e67526573756d650801307363686564756c65645f61741001044e00011464656c61791001044e000300006d03083870616c6c65745f6772616e6470614c53746f72656450656e64696e674368616e676508044e0110144c696d697400001001307363686564756c65645f61741001044e00011464656c61791001044e0001406e6578745f617574686f7269746965737103016c426f756e646564417574686f726974794c6973743c4c696d69743e000118666f72636564790101244f7074696f6e3c4e3e000071030c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401a8045300000400a401185665633c543e000075030c3870616c6c65745f6772616e6470611870616c6c65741043616c6c04045400010c4c7265706f72745f65717569766f636174696f6e08014865717569766f636174696f6e5f70726f6f66790301bc426f783c45717569766f636174696f6e50726f6f663c543a3a486173682c20543a3a426c6f636b4e756d6265723e3e00013c6b65795f6f776e65725f70726f6f668d020140543a3a4b65794f776e657250726f6f6600001009015265706f727420766f7465722065717569766f636174696f6e2f6d69736265686176696f722e2054686973206d6574686f642077696c6c2076657269667920746865f465717569766f636174696f6e2070726f6f6620616e642076616c69646174652074686520676976656e206b6579206f776e6572736869702070726f6f66f8616761696e73742074686520657874726163746564206f6666656e6465722e20496620626f7468206172652076616c69642c20746865206f6666656e63654477696c6c206265207265706f727465642e707265706f72745f65717569766f636174696f6e5f756e7369676e656408014865717569766f636174696f6e5f70726f6f66790301bc426f783c45717569766f636174696f6e50726f6f663c543a3a486173682c20543a3a426c6f636b4e756d6265723e3e00013c6b65795f6f776e65725f70726f6f668d020140543a3a4b65794f776e657250726f6f6600012409015265706f727420766f7465722065717569766f636174696f6e2f6d69736265686176696f722e2054686973206d6574686f642077696c6c2076657269667920746865f465717569766f636174696f6e2070726f6f6620616e642076616c69646174652074686520676976656e206b6579206f776e6572736869702070726f6f66f8616761696e73742074686520657874726163746564206f6666656e6465722e20496620626f7468206172652076616c69642c20746865206f6666656e63654477696c6c206265207265706f727465642e000d01546869732065787472696e736963206d7573742062652063616c6c656420756e7369676e656420616e642069742069732065787065637465642074686174206f6e6c791501626c6f636b20617574686f72732077696c6c2063616c6c206974202876616c69646174656420696e206056616c6964617465556e7369676e656460292c2061732073756368150169662074686520626c6f636b20617574686f7220697320646566696e65642069742077696c6c20626520646566696e6564206173207468652065717569766f636174696f6e247265706f727465722e306e6f74655f7374616c6c656408011464656c6179100138543a3a426c6f636b4e756d62657200016c626573745f66696e616c697a65645f626c6f636b5f6e756d626572100138543a3a426c6f636b4e756d6265720002303d014e6f74652074686174207468652063757272656e7420617574686f7269747920736574206f6620746865204752414e4450412066696e616c6974792067616467657420686173207374616c6c65642e006101546869732077696c6c2074726967676572206120666f7263656420617574686f7269747920736574206368616e67652061742074686520626567696e6e696e67206f6620746865206e6578742073657373696f6e2c20746f6101626520656e6163746564206064656c61796020626c6f636b7320616674657220746861742e20546865206064656c6179602073686f756c64206265206869676820656e6f75676820746f20736166656c7920617373756d654901746861742074686520626c6f636b207369676e616c6c696e672074686520666f72636564206368616e67652077696c6c206e6f742062652072652d6f7267656420652e672e203130303020626c6f636b732e5d0154686520626c6f636b2070726f64756374696f6e207261746520287768696368206d617920626520736c6f77656420646f776e2062656361757365206f662066696e616c697479206c616767696e67292073686f756c64510162652074616b656e20696e746f206163636f756e74207768656e2063686f6f73696e6720746865206064656c6179602e20546865204752414e44504120766f74657273206261736564206f6e20746865206e65775501617574686f726974792077696c6c20737461727420766f74696e67206f6e20746f70206f662060626573745f66696e616c697a65645f626c6f636b5f6e756d6265726020666f72206e65772066696e616c697a65644d01626c6f636b732e2060626573745f66696e616c697a65645f626c6f636b5f6e756d626572602073686f756c64206265207468652068696768657374206f6620746865206c61746573742066696e616c697a6564c4626c6f636b206f6620616c6c2076616c696461746f7273206f6620746865206e657720617574686f72697479207365742e00584f6e6c792063616c6c61626c6520627920726f6f742e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e7903085073705f636f6e73656e7375735f6772616e6470614445717569766f636174696f6e50726f6f66080448012c044e0110000801187365745f6964280114536574496400013065717569766f636174696f6e7d03014845717569766f636174696f6e3c482c204e3e00007d03085073705f636f6e73656e7375735f6772616e6470613045717569766f636174696f6e080448012c044e011001081c507265766f7465040081030139016772616e6470613a3a45717569766f636174696f6e3c417574686f7269747949642c206772616e6470613a3a507265766f74653c482c204e3e2c0a417574686f726974795369676e61747572653e00000024507265636f6d6d6974040095030141016772616e6470613a3a45717569766f636174696f6e3c417574686f7269747949642c206772616e6470613a3a507265636f6d6d69743c482c204e3e2c0a417574686f726974795369676e61747572653e000100008103084066696e616c6974795f6772616e6470613045717569766f636174696f6e0c08496401ac0456018503045301890300100130726f756e645f6e756d62657228010c7536340001206964656e74697479ac0108496400011466697273749103011828562c2053290001187365636f6e649103011828562c20532900008503084066696e616c6974795f6772616e6470611c507265766f7465080448012c044e01100008012c7461726765745f686173682c0104480001347461726765745f6e756d6265721001044e000089030c5073705f636f6e73656e7375735f6772616e6470610c617070245369676e6174757265000004008d030148656432353531393a3a5369676e617475726500008d030c1c73705f636f72651c65643235353139245369676e617475726500000400610201205b75383b2036345d000091030000040885038903009503084066696e616c6974795f6772616e6470613045717569766f636174696f6e0c08496401ac0456019903045301890300100130726f756e645f6e756d62657228010c7536340001206964656e74697479ac0108496400011466697273749d03011828562c2053290001187365636f6e649d03011828562c20532900009903084066696e616c6974795f6772616e64706124507265636f6d6d6974080448012c044e01100008012c7461726765745f686173682c0104480001347461726765745f6e756d6265721001044e00009d03000004089903890300a1030c3870616c6c65745f6772616e6470611870616c6c6574144572726f7204045400011c2c50617573654661696c65640000080501417474656d707420746f207369676e616c204752414e445041207061757365207768656e2074686520617574686f72697479207365742069736e2774206c697665a42865697468657220706175736564206f7220616c72656164792070656e64696e67207061757365292e30526573756d654661696c65640001081101417474656d707420746f207369676e616c204752414e44504120726573756d65207768656e2074686520617574686f72697479207365742069736e277420706175736564a028656974686572206c697665206f7220616c72656164792070656e64696e6720726573756d65292e344368616e676550656e64696e67000204e8417474656d707420746f207369676e616c204752414e445041206368616e67652077697468206f6e6520616c72656164792070656e64696e672e1c546f6f536f6f6e000304bc43616e6e6f74207369676e616c20666f72636564206368616e676520736f20736f6f6e206166746572206c6173742e60496e76616c69644b65794f776e65727368697050726f6f66000404310141206b6579206f776e6572736869702070726f6f662070726f76696465642061732070617274206f6620616e2065717569766f636174696f6e207265706f727420697320696e76616c69642e60496e76616c696445717569766f636174696f6e50726f6f660005043101416e2065717569766f636174696f6e2070726f6f662070726f76696465642061732070617274206f6620616e2065717569766f636174696f6e207265706f727420697320696e76616c69642e584475706c69636174654f6666656e63655265706f727400060415014120676976656e2065717569766f636174696f6e207265706f72742069732076616c69642062757420616c72656164792070726576696f75736c79207265706f727465642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909a5030c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401b8045300000400a90301185665633c543e0000a903000002b800ad0310346672616d655f737570706f727418747261697473106d69736334577261707065724f706171756504045401b103000800dd01000000b1030104540000b103084070616c6c65745f696d5f6f6e6c696e6564426f756e6465644f70617175654e6574776f726b53746174650c4c506565724964456e636f64696e674c696d697400584d756c746941646472456e636f64696e674c696d697400384164647265737365734c696d6974000008011c706565725f6964b503019c5765616b426f756e6465645665633c75382c20506565724964456e636f64696e674c696d69743e00014865787465726e616c5f616464726573736573b903012d015765616b426f756e6465645665633c5765616b426f756e6465645665633c75382c204d756c746941646472456e636f64696e674c696d69743e2c204164647265737365734c696d69740a3e0000b5030c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401080453000004003001185665633c543e0000b9030c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401b503045300000400bd0301185665633c543e0000bd03000002b50300c1030c4070616c6c65745f696d5f6f6e6c696e651870616c6c65741043616c6c04045400010424686561727462656174080124686561727462656174c50301644865617274626561743c543a3a426c6f636b4e756d6265723e0001247369676e6174757265d90301bc3c543a3a417574686f7269747949642061732052756e74696d654170705075626c69633e3a3a5369676e617475726500001438232320436f6d706c65786974793a59012d20604f284b202b20452960207768657265204b206973206c656e677468206f6620604b6579736020286865617274626561742e76616c696461746f72735f6c656e2920616e642045206973206c656e677468206f66b02020606865617274626561742e6e6574776f726b5f73746174652e65787465726e616c5f61646472657373608820202d20604f284b29603a206465636f64696e67206f66206c656e67746820604b60ac20202d20604f284529603a206465636f64696e672f656e636f64696e67206f66206c656e67746820604560042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ec503084070616c6c65745f696d5f6f6e6c696e6524486561727462656174042c426c6f636b4e756d626572011000140130626c6f636b5f6e756d62657210012c426c6f636b4e756d6265720001346e6574776f726b5f7374617465c90301484f70617175654e6574776f726b537461746500013473657373696f6e5f696e64657810013053657373696f6e496e64657800013c617574686f726974795f696e64657810012441757468496e64657800013876616c696461746f72735f6c656e10010c7533320000c9030c1c73705f636f7265206f6666636861696e484f70617175654e6574776f726b5374617465000008011c706565725f6964cd0301304f706171756550656572496400014865787465726e616c5f616464726573736573d10301505665633c4f70617175654d756c7469616464723e0000cd03081c73705f636f7265304f70617175655065657249640000040030011c5665633c75383e0000d103000002d50300d5030c1c73705f636f7265206f6666636861696e3c4f70617175654d756c7469616464720000040030011c5665633c75383e0000d903104070616c6c65745f696d5f6f6e6c696e651c737232353531392c6170705f73723235353139245369676e617475726500000400dd030148737232353531393a3a5369676e61747572650000dd030c1c73705f636f72651c73723235353139245369676e617475726500000400610201205b75383b2036345d0000e1030c4070616c6c65745f696d5f6f6e6c696e651870616c6c6574144572726f7204045400010828496e76616c69644b6579000004604e6f6e206578697374656e74207075626c6963206b65792e4c4475706c696361746564486561727462656174000104544475706c696361746564206865617274626561742e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909e5030c4070616c6c65745f626167735f6c697374106c697374104e6f646508045400044900001401086964000130543a3a4163636f756e74496400011070726576ec01504f7074696f6e3c543a3a4163636f756e7449643e0001106e657874ec01504f7074696f6e3c543a3a4163636f756e7449643e0001246261675f7570706572280120543a3a53636f726500011473636f7265280120543a3a53636f72650000e9030c4070616c6c65745f626167735f6c697374106c6973740c426167080454000449000008011068656164ec01504f7074696f6e3c543a3a4163636f756e7449643e0001107461696cec01504f7074696f6e3c543a3a4163636f756e7449643e0000ed030c4070616c6c65745f626167735f6c6973741870616c6c65741043616c6c0804540004490001081472656261670401286469736c6f6361746564b50201504163636f756e7449644c6f6f6b75704f663c543e00002859014465636c617265207468617420736f6d6520606469736c6f636174656460206163636f756e74206861732c207468726f7567682072657761726473206f722070656e616c746965732c2073756666696369656e746c7951016368616e676564206974732073636f726520746861742069742073686f756c642070726f7065726c792066616c6c20696e746f206120646966666572656e7420626167207468616e206974732063757272656e74106f6e652e001d01416e796f6e652063616e2063616c6c20746869732066756e6374696f6e2061626f757420616e7920706f74656e7469616c6c79206469736c6f6361746564206163636f756e742e00490157696c6c20616c7761797320757064617465207468652073746f7265642073636f7265206f6620606469736c6f63617465646020746f2074686520636f72726563742073636f72652c206261736564206f6e406053636f726550726f7669646572602e00d4496620606469736c6f63617465646020646f6573206e6f74206578697374732c2069742072657475726e7320616e206572726f722e3c7075745f696e5f66726f6e745f6f6604011c6c696768746572b50201504163636f756e7449644c6f6f6b75704f663c543e000120d04d6f7665207468652063616c6c65722773204964206469726563746c7920696e2066726f6e74206f6620606c696768746572602e005901546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e642063616e206f6e6c792062652063616c6c656420627920746865204964206f66a0746865206163636f756e7420676f696e6720696e2066726f6e74206f6620606c696768746572602e00344f6e6c7920776f726b73206966942d20626f7468206e6f646573206172652077697468696e207468652073616d65206261672cd02d20616e6420606f726967696e602068617320612067726561746572206053636f726560207468616e20606c696768746572602e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ef1030000022800f5030c4070616c6c65745f626167735f6c6973741870616c6c6574144572726f72080454000449000104104c6973740400f90301244c6973744572726f72000004b441206572726f7220696e20746865206c69737420696e7465726661636520696d706c656d656e746174696f6e2e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909f9030c4070616c6c65745f626167735f6c697374106c697374244c6973744572726f72000110244475706c6963617465000000284e6f7448656176696572000100304e6f74496e53616d65426167000200304e6f64654e6f74466f756e6400030000fd030c3473705f61726974686d657469632c66697865645f706f696e7424466978656455313238000004001801107531323800000104086870616c6c65745f7472616e73616374696f6e5f7061796d656e742052656c6561736573000108245631416e6369656e740000000856320001000005040c2c70616c6c65745f7375646f1870616c6c65741043616c6c040454000110107375646f04011063616c6c0904017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000018350141757468656e7469636174657320746865207375646f206b657920616e64206469737061746368657320612066756e6374696f6e2063616c6c20776974682060526f6f7460206f726967696e2e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0034232320436f6d706c65786974791c2d204f2831292e547375646f5f756e636865636b65645f77656967687408011063616c6c0904017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000118776569676874200118576569676874000120350141757468656e7469636174657320746865207375646f206b657920616e64206469737061746368657320612066756e6374696f6e2063616c6c20776974682060526f6f7460206f726967696e2e2d01546869732066756e6374696f6e20646f6573206e6f7420636865636b2074686520776569676874206f66207468652063616c6c2c20616e6420696e737465616420616c6c6f777320746865b05375646f207573657220746f20737065636966792074686520776569676874206f66207468652063616c6c2e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0034232320436f6d706c65786974791c2d204f2831292e1c7365745f6b657904010c6e6577b50201504163636f756e7449644c6f6f6b75704f663c543e00021c5d0141757468656e74696361746573207468652063757272656e74207375646f206b657920616e6420736574732074686520676976656e204163636f756e7449642028606e6577602920617320746865206e6577207375646f106b65792e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0034232320436f6d706c65786974791c2d204f2831292e1c7375646f5f617308010c77686fb50201504163636f756e7449644c6f6f6b75704f663c543e00011063616c6c0904017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00031c4d0141757468656e7469636174657320746865207375646f206b657920616e64206469737061746368657320612066756e6374696f6e2063616c6c207769746820605369676e656460206f726967696e2066726f6d406120676976656e206163636f756e742e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0034232320436f6d706c65786974791c2d204f2831292e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e0904085c637265646974636f696e5f6e6f64655f72756e74696d652c52756e74696d6543616c6c0001441853797374656d0400e50101ad0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c53797374656d2c2052756e74696d653e0000002454696d657374616d700400290201b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c54696d657374616d702c2052756e74696d653e000100104261626504007d0201a50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c426162652c2052756e74696d653e0003002042616c616e6365730400b10201b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c42616c616e6365732c2052756e74696d653e0004001c5374616b696e670400250301b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5374616b696e672c2052756e74696d653e0006001c53657373696f6e0400610301b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c53657373696f6e2c2052756e74696d653e0009001c4772616e6470610400750301b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4772616e6470612c2052756e74696d653e000a0020496d4f6e6c696e650400c10301b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c496d4f6e6c696e652c2052756e74696d653e000b0024566f7465724c6973740400ed0301b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c566f7465724c6973742c2052756e74696d653e000c00105375646f0400050401a50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5375646f2c2052756e74696d653e000e0028437265646974636f696e04000d0401bd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c437265646974636f696e2c2052756e74696d653e000f00245363686564756c65720400390401b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5363686564756c65722c2052756e74696d653e001200204964656e746974790400410401b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4964656e746974792c2052756e74696d653e0014001c5574696c6974790400e10401b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5574696c6974792c2052756e74696d653e0015001450726f78790400f50401a90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50726f78792c2052756e74696d653e0016002c46617374556e7374616b650400fd0401c10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c46617374556e7374616b652c2052756e74696d653e0017003c4e6f6d696e6174696f6e506f6f6c730400010501d10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4e6f6d696e6174696f6e506f6f6c732c2052756e74696d653e001800000d040c4470616c6c65745f637265646974636f696e1870616c6c65741043616c6c04045400015c4c636c61696d5f6c65676163795f77616c6c65740401287075626c69635f6b65791104015873705f636f72653a3a65636473613a3a5075626c69630000041d01436c61696d73206c65676163792077616c6c657420616e64207472616e7366657273207468652062616c616e636520746f207468652073656e6465722773206163636f756e742e4072656769737465725f616464726573730c0128626c6f636b636861696efc0128426c6f636b636861696e00011c616464726573730101013c45787465726e616c4164647265737300013c6f776e6572736869705f70726f6f661904016473705f636f72653a3a65636473613a3a5369676e6174757265000104410152656769737465727320616e2065787465726e616c2061646472657373206f6e2060626c6f636b636861696e6020616e6420606e6574776f726b6020776974682076616c756520606164647265737360346164645f61736b5f6f72646572100128616464726573735f6964f401484164647265737349643c543a3a486173683e0001147465726d73510101244c6f616e5465726d7300014065787069726174696f6e5f626c6f636b100144426c6f636b4e756d626572466f723c543e000110677569640101011047756964000200346164645f6269645f6f72646572100128616464726573735f6964f401484164647265737349643c543a3a486173683e0001147465726d73510101244c6f616e5465726d7300014065787069726174696f6e5f626c6f636b100144426c6f636b4e756d626572466f723c543e000110677569640101011047756964000300246164645f6f666665720c013061736b5f6f726465725f69644501018c41736b4f7264657249643c543a3a426c6f636b4e756d6265722c20543a3a486173683e0001306269645f6f726465725f69646101018c4269644f7264657249643c543a3a426c6f636b4e756d6265722c20543a3a486173683e00014065787069726174696f6e5f626c6f636b100144426c6f636b4e756d626572466f723c543e000400386164645f6465616c5f6f726465720801206f666665725f69646d0101804f6666657249643c543a3a426c6f636b4e756d6265722c20543a3a486173683e00014065787069726174696f6e5f626c6f636b100144426c6f636b4e756d626572466f723c543e0005003c6c6f636b5f6465616c5f6f726465720401346465616c5f6f726465725f69642d0101904465616c4f7264657249643c543a3a426c6f636b4e756d6265722c20543a3a486173683e0006003c66756e645f6465616c5f6f726465720801346465616c5f6f726465725f69642d0101904465616c4f7264657249643c543a3a426c6f636b4e756d6265722c20543a3a486173683e00012c7472616e736665725f69641d01014c5472616e7366657249643c543a3a486173683e0007004c72656769737465725f6465616c5f6f726465722001446c656e6465725f616464726573735f6964f401484164647265737349643c543a3a486173683e00014c626f72726f7765725f616464726573735f6964f401484164647265737349643c543a3a486173683e0001147465726d73510101244c6f616e5465726d7300014065787069726174696f6e5f626c6f636b100144426c6f636b4e756d626572466f723c543e00012061736b5f6775696401010110477569640001206269645f677569640101011047756964000130626f72726f7765725f6b657921040124543a3a5369676e6572000148626f72726f7765725f7369676e617475726525040148543a3a5369676e65725369676e617475726500080040636c6f73655f6465616c5f6f726465720801346465616c5f6f726465725f69642d0101904465616c4f7264657249643c543a3a426c6f636b4e756d6265722c20543a3a486173683e00012c7472616e736665725f69641d01014c5472616e7366657249643c543a3a486173683e00090054726571756573745f636f6c6c6563745f636f696e7308012c65766d5f616464726573730101013c45787465726e616c4164647265737300011474785f69640101013045787465726e616c54784964000a006472656769737465725f66756e64696e675f7472616e736665720c01347472616e736665725f6b696e64250101305472616e736665724b696e640001346465616c5f6f726465725f69642d0101904465616c4f7264657249643c543a3a426c6f636b4e756d6265722c20543a3a486173683e000140626c6f636b636861696e5f74785f69640101013045787465726e616c54784964000b006c72656769737465725f72657061796d656e745f7472616e736665721001347472616e736665725f6b696e64250101305472616e736665724b696e6400014072657061796d656e745f616d6f756e743501013845787465726e616c416d6f756e740001346465616c5f6f726465725f69642d0101904465616c4f7264657249643c543a3a426c6f636b4e756d6265722c20543a3a486173683e000140626c6f636b636861696e5f74785f69640101013045787465726e616c54784964000c00186578656d70740401346465616c5f6f726465725f69642d0101904465616c4f7264657249643c543a3a426c6f636b4e756d6265722c20543a3a486173683e000d004c706572736973745f7461736b5f6f7574707574080120646561646c696e65100138543a3a426c6f636b4e756d62657200012c7461736b5f6f757470757429040125015461736b4f75747075743c543a3a4163636f756e7449642c20543a3a42616c616e63652c20543a3a426c6f636b4e756d6265722c20543a3a486173682c20543a3a0a4d6f6d656e743e001000246661696c5f7461736b0c0120646561646c696e65100138543a3a426c6f636b4e756d62657200011c7461736b5f69642d04013c5461736b49643c543a3a486173683e000114636175736589010160566572696669636174696f6e4661696c7572654361757365001100346164645f617574686f7269747904010c77686f000130543a3a4163636f756e744964001200687365745f636f6c6c6563745f636f696e735f636f6e7472616374040120636f6e74726163740d0101404465706c6f796564436f6e74726163740014004072656d6f76655f617574686f7269747904010c77686f000130543a3a4163636f756e7449640015004c72656769737465725f616464726573735f76320c0128626c6f636b636861696efc0128426c6f636b636861696e00011c616464726573730101013c45787465726e616c4164647265737300013c6f776e6572736869705f70726f6f66310401384f776e65727368697050726f6f6600160c550152656769737465727320616e2061646472657373206f6e20616e2065787465726e616c20626c6f636b636861696e206173207468652070726f7065727479206f6620616e206f6e636861696e20616464726573732e0103546f2070726f7665206f776e6572736869702c2061207369676e61747572652069732070726f76696465642e20546f2063726561746520746865207369676e61747572652c20746865207075626c6963206b6579206f66207468652065787465726e616c2061646472657373206973207573656420746f207369676e20612068617368206f6620746865206163636f756e745f6964206f662077686f65766572206973207375626d697474696e672074686973207472616e73616374696f6e2e7103546865207369676e6174757265207479706520616c6c6f7773207468652063616c6c657220746f20737065636966792069662074686973206164647265737320776173207369676e6564207573696e6720746865206f6c64657220616e20696e736563757265204574685369676e206d6574686f64206f7220746865206e657720506572736f6e616c5369676e206d6574686f642e20536565206865726520666f722064657461696c732068747470733a2f2f646f63732e6d6574616d61736b2e696f2f77616c6c65742f686f772d746f2f7369676e2d646174612f447365745f676174655f636f6e7472616374040120636f6e74726163740d0101404465706c6f796564436f6e7472616374001708cd0153657420746865206f6e636861696e2064657461696c7320666f722074686520476c757761204741544520436f6e74726163742c20696e636c7564696e6720697473206164647265737320616e642074686520626c6f636b636861696e207768657265206974206973206465706c6f7965642eec546869732065787472696e7369632065787065637473207468652063616c6c657220746f206861766520726f6f74207065726d697373696f6e732e3c7365745f676174655f66617563657404011c61646472657373000130543a3a4163636f756e74496400180060726571756573745f636f6c6c6563745f636f696e735f7632040120636f6e74726163743504012c4275726e44657461696c73001900042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e11040c1c73705f636f7265146563647361185075626c696300000400150401205b75383b2033335d0000150400000321000000080019040c1c73705f636f7265146563647361245369676e6174757265000004001d0401205b75383b2036355d00001d040000034100000008002104082873705f72756e74696d652c4d756c74695369676e657200010c1c456432353531390400b0013c656432353531393a3a5075626c69630000001c537232353531390400bc013c737232353531393a3a5075626c696300010014456364736104001104013465636473613a3a5075626c6963000200002504082873705f72756e74696d65384d756c74695369676e617475726500010c1c4564323535313904008d030148656432353531393a3a5369676e61747572650000001c537232353531390400dd030148737232353531393a3a5369676e617475726500010014456364736104001904014065636473613a3a5369676e61747572650002000029040c4470616c6c65745f637265646974636f696e147479706573285461736b4f757470757414244163636f756e74496401001c42616c616e6365011820426c6f636b4e756d01101048617368012c184d6f6d656e7401280108385665726966795472616e7366657208001d0101405472616e7366657249643c486173683e0000210101ac5472616e736665723c4163636f756e7449642c20426c6f636b4e756d2c20486173682c204d6f6d656e743e00000030436f6c6c656374436f696e73080005010158436f6c6c6563746564436f696e7349643c486173683e00004101018c436f6c6c6563746564436f696e735374727563743c486173682c2042616c616e63653e000100002d040c4470616c6c65745f637265646974636f696e147479706573185461736b4964041048617368012c0108385665726966795472616e7366657204001d0101405472616e7366657249643c486173683e00000030436f6c6c656374436f696e73040005010158436f6c6c6563746564436f696e7349643c486173683e0001000031040c4470616c6c65745f637265646974636f696e147479706573384f776e65727368697050726f6f6600010830506572736f6e616c5369676e04001904016473705f636f72653a3a65636473613a3a5369676e61747572650000001c4574685369676e04001904016473705f636f72653a3a65636473613a3a5369676e6174757265000100003504104470616c6c65745f637265646974636f696e14747970657334636f6c6c6563745f636f696e732c4275726e44657461696c73000108104743524508000101013c45787465726e616c4164647265737300000101013045787465726e616c54784964000000104741544508000101013c45787465726e616c4164647265737300000101013045787465726e616c547849640001000039040c4070616c6c65745f7363686564756c65721870616c6c65741043616c6c040454000118207363686564756c651001107768656e100138543a3a426c6f636b4e756d6265720001386d617962655f706572696f6469633d0401a04f7074696f6e3c7363686564756c653a3a506572696f643c543a3a426c6f636b4e756d6265723e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6c0904017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00000470416e6f6e796d6f75736c79207363686564756c652061207461736b2e1863616e63656c0801107768656e100138543a3a426c6f636b4e756d626572000114696e64657810010c7533320001049443616e63656c20616e20616e6f6e796d6f75736c79207363686564756c6564207461736b2e387363686564756c655f6e616d656414010869640401205461736b4e616d650001107768656e100138543a3a426c6f636b4e756d6265720001386d617962655f706572696f6469633d0401a04f7074696f6e3c7363686564756c653a3a506572696f643c543a3a426c6f636b4e756d6265723e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6c0904017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000204585363686564756c652061206e616d6564207461736b2e3063616e63656c5f6e616d656404010869640401205461736b4e616d650003047843616e63656c2061206e616d6564207363686564756c6564207461736b2e387363686564756c655f61667465721001146166746572100138543a3a426c6f636b4e756d6265720001386d617962655f706572696f6469633d0401a04f7074696f6e3c7363686564756c653a3a506572696f643c543a3a426c6f636b4e756d6265723e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6c0904017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000404a8416e6f6e796d6f75736c79207363686564756c652061207461736b20616674657220612064656c61792e507363686564756c655f6e616d65645f616674657214010869640401205461736b4e616d650001146166746572100138543a3a426c6f636b4e756d6265720001386d617962655f706572696f6469633d0401a04f7074696f6e3c7363686564756c653a3a506572696f643c543a3a426c6f636b4e756d6265723e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6c0904017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000504905363686564756c652061206e616d6564207461736b20616674657220612064656c61792e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e3d0404184f7074696f6e0404540195010108104e6f6e6500000010536f6d6504009501000001000041040c3c70616c6c65745f6964656e746974791870616c6c65741043616c6c04045400013c346164645f72656769737472617204011c6163636f756e74b50201504163636f756e7449644c6f6f6b75704f663c543e0000287841646420612072656769737472617220746f207468652073797374656d2e00fc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d7573742062652060543a3a5265676973747261724f726967696e602e00a82d20606163636f756e74603a20746865206163636f756e74206f6620746865207265676973747261722e0094456d6974732060526567697374726172416464656460206966207375636365737366756c2e0034232320436f6d706c657869747925012d20604f2852296020776865726520605260207265676973747261722d636f756e742028676f7665726e616e63652d626f756e64656420616e6420636f64652d626f756e646564292e307365745f6964656e74697479040110696e666f450401a4426f783c4964656e74697479496e666f3c543a3a4d61784164646974696f6e616c4669656c64733e3e00013c290153657420616e206163636f756e742773206964656e7469747920696e666f726d6174696f6e20616e6420726573657276652074686520617070726f707269617465206465706f7369742e005501496620746865206163636f756e7420616c726561647920686173206964656e7469747920696e666f726d6174696f6e2c20746865206465706f7369742069732074616b656e2061732070617274207061796d656e7450666f7220746865206e6577206465706f7369742e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e008c2d2060696e666f603a20546865206964656e7469747920696e666f726d6174696f6e2e0088456d69747320604964656e7469747953657460206966207375636365737366756c2e0034232320436f6d706c6578697479442d20604f2858202b205827202b205229601d0120202d20776865726520605860206164646974696f6e616c2d6669656c642d636f756e7420286465706f7369742d626f756e64656420616e6420636f64652d626f756e64656429e020202d20776865726520605260206a756467656d656e74732d636f756e7420287265676973747261722d636f756e742d626f756e64656429207365745f7375627304011073756273cd0401645665633c28543a3a4163636f756e7449642c2044617461293e0002388c53657420746865207375622d6163636f756e7473206f66207468652073656e6465722e0055015061796d656e743a20416e79206167677265676174652062616c616e63652072657365727665642062792070726576696f757320607365745f73756273602063616c6c732077696c6c2062652072657475726e65642d01616e6420616e20616d6f756e7420605375624163636f756e744465706f736974602077696c6c20626520726573657276656420666f722065616368206974656d20696e206073756273602e006101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d757374206861766520612072656769737465726564246964656e746974792e00b02d206073756273603a20546865206964656e74697479277320286e657729207375622d6163636f756e74732e0034232320436f6d706c6578697479302d20604f2850202b20532960e420202d20776865726520605060206f6c642d737562732d636f756e742028686172642d20616e64206465706f7369742d626f756e646564292ed420202d2077686572652060536020737562732d636f756e742028686172642d20616e64206465706f7369742d626f756e646564292e38636c6561725f6964656e746974790003383901436c65617220616e206163636f756e742773206964656e7469747920696e666f20616e6420616c6c207375622d6163636f756e747320616e642072657475726e20616c6c206465706f736974732e00ec5061796d656e743a20416c6c2072657365727665642062616c616e636573206f6e20746865206163636f756e74206172652072657475726e65642e006101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d757374206861766520612072656769737465726564246964656e746974792e0098456d69747320604964656e74697479436c656172656460206966207375636365737366756c2e0034232320436f6d706c6578697479402d20604f2852202b2053202b20582960cc20202d20776865726520605260207265676973747261722d636f756e742028676f7665726e616e63652d626f756e646564292ed420202d2077686572652060536020737562732d636f756e742028686172642d20616e64206465706f7369742d626f756e646564292e210120202d20776865726520605860206164646974696f6e616c2d6669656c642d636f756e7420286465706f7369742d626f756e64656420616e6420636f64652d626f756e646564292e44726571756573745f6a756467656d656e740801247265675f696e646578dd010138526567697374726172496e64657800011c6d61785f666565cc013042616c616e63654f663c543e00045494526571756573742061206a756467656d656e742066726f6d2061207265676973747261722e0055015061796d656e743a204174206d6f737420606d61785f666565602077696c6c20626520726573657276656420666f72207061796d656e7420746f2074686520726567697374726172206966206a756467656d656e7418676976656e2e003501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d757374206861766520615072656769737465726564206964656e746974792e001d012d20607265675f696e646578603a2054686520696e646578206f6620746865207265676973747261722077686f7365206a756467656d656e74206973207265717565737465642e55012d20606d61785f666565603a20546865206d6178696d756d206665652074686174206d617920626520706169642e20546869732073686f756c64206a757374206265206175746f2d706f70756c617465642061733a00306060606e6f636f6d70696c65b853656c663a3a7265676973747261727328292e676574287265675f696e646578292e756e7772617028292e6665650c60606000a4456d69747320604a756467656d656e7452657175657374656460206966207375636365737366756c2e0034232320436f6d706c6578697479342d20604f2852202b205829602ecc20202d20776865726520605260207265676973747261722d636f756e742028676f7665726e616e63652d626f756e646564292e210120202d20776865726520605860206164646974696f6e616c2d6669656c642d636f756e7420286465706f7369742d626f756e64656420616e6420636f64652d626f756e646564292e3863616e63656c5f726571756573740401247265675f696e646578100138526567697374726172496e64657800053c6843616e63656c20612070726576696f757320726571756573742e00f85061796d656e743a20412070726576696f75736c79207265736572766564206465706f7369742069732072657475726e6564206f6e20737563636573732e003501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d757374206861766520615072656769737465726564206964656e746974792e0045012d20607265675f696e646578603a2054686520696e646578206f6620746865207265676973747261722077686f7365206a756467656d656e74206973206e6f206c6f6e676572207265717565737465642e00ac456d69747320604a756467656d656e74556e72657175657374656460206966207375636365737366756c2e0034232320436f6d706c6578697479342d20604f2852202b205829602ecc20202d20776865726520605260207265676973747261722d636f756e742028676f7665726e616e63652d626f756e646564292e210120202d20776865726520605860206164646974696f6e616c2d6669656c642d636f756e7420286465706f7369742d626f756e64656420616e6420636f64652d626f756e646564292e1c7365745f666565080114696e646578dd010138526567697374726172496e64657800010c666565cc013042616c616e63654f663c543e00062c1901536574207468652066656520726571756972656420666f722061206a756467656d656e7420746f206265207265717565737465642066726f6d2061207265676973747261722e005501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420626520746865206163636f756e74a06f6620746865207265676973747261722077686f736520696e6465782069732060696e646578602e00f42d2060696e646578603a2074686520696e646578206f6620746865207265676973747261722077686f73652066656520697320746f206265207365742e542d2060666565603a20746865206e6577206665652e0034232320436f6d706c6578697479242d20604f285229602ecc20202d20776865726520605260207265676973747261722d636f756e742028676f7665726e616e63652d626f756e646564292e387365745f6163636f756e745f6964080114696e646578dd010138526567697374726172496e64657800010c6e6577b50201504163636f756e7449644c6f6f6b75704f663c543e00072cbc4368616e676520746865206163636f756e74206173736f63696174656420776974682061207265676973747261722e005501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420626520746865206163636f756e74a06f6620746865207265676973747261722077686f736520696e6465782069732060696e646578602e00f42d2060696e646578603a2074686520696e646578206f6620746865207265676973747261722077686f73652066656520697320746f206265207365742e702d20606e6577603a20746865206e6577206163636f756e742049442e0034232320436f6d706c6578697479242d20604f285229602ecc20202d20776865726520605260207265676973747261722d636f756e742028676f7665726e616e63652d626f756e646564292e287365745f6669656c6473080114696e646578dd010138526567697374726172496e6465780001186669656c6473d50401384964656e746974794669656c647300082ca853657420746865206669656c6420696e666f726d6174696f6e20666f722061207265676973747261722e005501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420626520746865206163636f756e74a06f6620746865207265676973747261722077686f736520696e6465782069732060696e646578602e00f42d2060696e646578603a2074686520696e646578206f6620746865207265676973747261722077686f73652066656520697320746f206265207365742e0d012d20606669656c6473603a20746865206669656c64732074686174207468652072656769737472617220636f6e6365726e73207468656d73656c76657320776974682e0034232320436f6d706c6578697479242d20604f285229602ecc20202d20776865726520605260207265676973747261722d636f756e742028676f7665726e616e63652d626f756e646564292e4470726f766964655f6a756467656d656e741001247265675f696e646578dd010138526567697374726172496e646578000118746172676574b50201504163636f756e7449644c6f6f6b75704f663c543e0001246a756467656d656e74dd04015c4a756467656d656e743c42616c616e63654f663c543e3e0001206964656e746974792c011c543a3a48617368000944b850726f766964652061206a756467656d656e7420666f7220616e206163636f756e742773206964656e746974792e005501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420626520746865206163636f756e74b06f6620746865207265676973747261722077686f736520696e64657820697320607265675f696e646578602e0021012d20607265675f696e646578603a2074686520696e646578206f6620746865207265676973747261722077686f7365206a756467656d656e74206973206265696e67206d6164652e55012d2060746172676574603a20746865206163636f756e742077686f7365206964656e7469747920746865206a756467656d656e742069732075706f6e2e2054686973206d75737420626520616e206163636f756e747420207769746820612072656769737465726564206964656e746974792e49012d20606a756467656d656e74603a20746865206a756467656d656e74206f662074686520726567697374726172206f6620696e64657820607265675f696e646578602061626f75742060746172676574602e49012d20606964656e74697479603a205468652068617368206f6620746865205b604964656e74697479496e666f605d20666f72207468617420746865206a756467656d656e742069732070726f76696465642e0094456d69747320604a756467656d656e74476976656e60206966207375636365737366756c2e0034232320436f6d706c6578697479342d20604f2852202b205829602ecc20202d20776865726520605260207265676973747261722d636f756e742028676f7665726e616e63652d626f756e646564292e210120202d20776865726520605860206164646974696f6e616c2d6669656c642d636f756e7420286465706f7369742d626f756e64656420616e6420636f64652d626f756e646564292e346b696c6c5f6964656e74697479040118746172676574b50201504163636f756e7449644c6f6f6b75704f663c543e000a48410152656d6f766520616e206163636f756e742773206964656e7469747920616e64207375622d6163636f756e7420696e666f726d6174696f6e20616e6420736c61736820746865206465706f736974732e0061015061796d656e743a2052657365727665642062616c616e6365732066726f6d20607365745f737562736020616e6420607365745f6964656e74697479602061726520736c617368656420616e642068616e646c6564206279450160536c617368602e20566572696669636174696f6e2072657175657374206465706f7369747320617265206e6f742072657475726e65643b20746865792073686f756c642062652063616e63656c6c6564806d616e75616c6c79207573696e67206063616e63656c5f72657175657374602e00f8546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206d617463682060543a3a466f7263654f726967696e602e0055012d2060746172676574603a20746865206163636f756e742077686f7365206964656e7469747920746865206a756467656d656e742069732075706f6e2e2054686973206d75737420626520616e206163636f756e747420207769746820612072656769737465726564206964656e746974792e0094456d69747320604964656e746974794b696c6c656460206966207375636365737366756c2e0034232320436f6d706c6578697479402d20604f2852202b2053202b20582960cc20202d20776865726520605260207265676973747261722d636f756e742028676f7665726e616e63652d626f756e646564292ed420202d2077686572652060536020737562732d636f756e742028686172642d20616e64206465706f7369742d626f756e646564292e210120202d20776865726520605860206164646974696f6e616c2d6669656c642d636f756e7420286465706f7369742d626f756e64656420616e6420636f64652d626f756e646564292e1c6164645f73756208010c737562b50201504163636f756e7449644c6f6f6b75704f663c543e000110646174615104011044617461000b1cac4164642074686520676976656e206163636f756e7420746f207468652073656e646572277320737562732e005d015061796d656e743a2042616c616e636520726573657276656420627920612070726576696f757320607365745f73756273602063616c6c20666f72206f6e65207375622077696c6c20626520726570617472696174656438746f207468652073656e6465722e006101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420686176652061207265676973746572656458737562206964656e74697479206f662060737562602e2872656e616d655f73756208010c737562b50201504163636f756e7449644c6f6f6b75704f663c543e000110646174615104011044617461000c10cc416c74657220746865206173736f636961746564206e616d65206f662074686520676976656e207375622d6163636f756e742e006101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420686176652061207265676973746572656458737562206964656e74697479206f662060737562602e2872656d6f76655f73756204010c737562b50201504163636f756e7449644c6f6f6b75704f663c543e000d1cc052656d6f76652074686520676976656e206163636f756e742066726f6d207468652073656e646572277320737562732e005d015061796d656e743a2042616c616e636520726573657276656420627920612070726576696f757320607365745f73756273602063616c6c20666f72206f6e65207375622077696c6c20626520726570617472696174656438746f207468652073656e6465722e006101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420686176652061207265676973746572656458737562206964656e74697479206f662060737562602e20717569745f737562000e288c52656d6f7665207468652073656e6465722061732061207375622d6163636f756e742e005d015061796d656e743a2042616c616e636520726573657276656420627920612070726576696f757320607365745f73756273602063616c6c20666f72206f6e65207375622077696c6c206265207265706174726961746564b4746f207468652073656e64657220282a6e6f742a20746865206f726967696e616c206465706f7369746f72292e006101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d7573742068617665206120726567697374657265643c73757065722d6964656e746974792e0045014e4f54453a20546869732073686f756c64206e6f74206e6f726d616c6c7920626520757365642c206275742069732070726f766964656420696e207468652063617365207468617420746865206e6f6e2d1101636f6e74726f6c6c6572206f6620616e206163636f756e74206973206d616c6963696f75736c7920726567697374657265642061732061207375622d6163636f756e742e04704964656e746974792070616c6c6574206465636c61726174696f6e2e45040c3c70616c6c65745f6964656e74697479147479706573304964656e74697479496e666f04284669656c644c696d697400002401286164646974696f6e616c49040190426f756e6465645665633c28446174612c2044617461292c204669656c644c696d69743e00011c646973706c617951040110446174610001146c6567616c510401104461746100010c776562510401104461746100011072696f745104011044617461000114656d61696c510401104461746100013c7067705f66696e6765727072696e74c90401404f7074696f6e3c5b75383b2032305d3e000114696d616765510401104461746100011c747769747465725104011044617461000049040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454014d04045300000400c50401185665633c543e00004d0400000408510451040051040c3c70616c6c65745f6964656e746974791474797065731044617461000198104e6f6e650000001052617730040055040000010010526177310400590400000200105261773204005d0400000300105261773304006104000004001052617734040040000005001052617735040065040000060010526177360400690400000700105261773704006d04000008001052617738040021020000090010526177390400710400000a001452617731300400750400000b001452617731310400790400000c0014526177313204007d0400000d001452617731330400810400000e001452617731340400850400000f0014526177313504008904000010001452617731360400980000110014526177313704008d0400001200145261773138040091040000130014526177313904009504000014001452617732300400150100001500145261773231040099040000160014526177323204009d04000017001452617732330400a104000018001452617732340400a504000019001452617732350400a90400001a001452617732360400ad0400001b001452617732370400b10400001c001452617732380400b50400001d001452617732390400b90400001e001452617733300400bd0400001f001452617733310400c10400002000145261773332040004000021002c426c616b6554776f323536040004000022001853686132353604000400002300244b656363616b323536040004000024002c53686154687265653235360400040000250000550400000300000000080059040000030100000008005d040000030200000008006104000003030000000800650400000305000000080069040000030600000008006d04000003070000000800710400000309000000080075040000030a000000080079040000030b00000008007d040000030c000000080081040000030d000000080085040000030e000000080089040000030f00000008008d040000031100000008009104000003120000000800950400000313000000080099040000031500000008009d04000003160000000800a104000003170000000800a504000003180000000800a904000003190000000800ad040000031a0000000800b1040000031b0000000800b5040000031c0000000800b9040000031d0000000800bd040000031e0000000800c1040000031f0000000800c5040000024d0400c90404184f7074696f6e0404540115010108104e6f6e6500000010536f6d65040015010000010000cd04000002d10400d1040000040800510400d5040c3c70616c6c65745f6964656e7469747914747970657320426974466c61677304045401d9040004002801344964656e746974794669656c640000d9040c3c70616c6c65745f6964656e74697479147479706573344964656e746974794669656c640001201c446973706c6179000100144c6567616c0002000c5765620004001052696f7400080014456d61696c0010003850677046696e6765727072696e7400200014496d6167650040001c5477697474657200800000dd040c3c70616c6c65745f6964656e74697479147479706573244a756467656d656e74041c42616c616e63650118011c1c556e6b6e6f776e0000001c46656550616964040018011c42616c616e636500010028526561736f6e61626c65000200244b6e6f776e476f6f64000300244f75744f6644617465000400284c6f775175616c697479000500244572726f6e656f757300060000e1040c3870616c6c65745f7574696c6974791870616c6c65741043616c6c04045400011814626174636804011463616c6c73e504017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0000487c53656e642061206261746368206f662064697370617463682063616c6c732e00b04d61792062652063616c6c65642066726f6d20616e79206f726967696e2065786365707420604e6f6e65602e005d012d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e20546865206e756d626572206f662063616c6c206d757374206e6f74390120206578636565642074686520636f6e7374616e743a2060626174636865645f63616c6c735f6c696d6974602028617661696c61626c6520696e20636f6e7374616e74206d65746164617461292e0055014966206f726967696e20697320726f6f74207468656e207468652063616c6c7320617265206469737061746368656420776974686f757420636865636b696e67206f726967696e2066696c7465722e202854686973ec696e636c7564657320627970617373696e6720606672616d655f73797374656d3a3a436f6e6669673a3a4261736543616c6c46696c74657260292e0034232320436f6d706c6578697479d02d204f284329207768657265204320697320746865206e756d626572206f662063616c6c7320746f20626520626174636865642e005501546869732077696c6c2072657475726e20604f6b6020696e20616c6c2063697263756d7374616e6365732e20546f2064657465726d696e65207468652073756363657373206f66207468652062617463682c20616e31016576656e74206973206465706f73697465642e20496620612063616c6c206661696c656420616e64207468652062617463682077617320696e7465727275707465642c207468656e207468655501604261746368496e74657272757074656460206576656e74206973206465706f73697465642c20616c6f6e67207769746820746865206e756d626572206f66207375636365737366756c2063616c6c73206d6164654d01616e6420746865206572726f72206f6620746865206661696c65642063616c6c2e20496620616c6c2077657265207375636365737366756c2c207468656e2074686520604261746368436f6d706c65746564604c6576656e74206973206465706f73697465642e3461735f64657269766174697665080114696e646578ad01010c75313600011063616c6c0904017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000134dc53656e6420612063616c6c207468726f75676820616e20696e64657865642070736575646f6e796d206f66207468652073656e6465722e00550146696c7465722066726f6d206f726967696e206172652070617373656420616c6f6e672e205468652063616c6c2077696c6c2062652064697370617463686564207769746820616e206f726967696e207768696368bc757365207468652073616d652066696c74657220617320746865206f726967696e206f6620746869732063616c6c2e0045014e4f54453a20496620796f75206e65656420746f20656e73757265207468617420616e79206163636f756e742d62617365642066696c746572696e67206973206e6f7420686f6e6f7265642028692e652e61016265636175736520796f7520657870656374206070726f78796020746f2068617665206265656e2075736564207072696f7220696e207468652063616c6c20737461636b20616e6420796f7520646f206e6f742077616e7451017468652063616c6c207265737472696374696f6e7320746f206170706c7920746f20616e79207375622d6163636f756e7473292c207468656e20757365206061735f6d756c74695f7468726573686f6c645f31607c696e20746865204d756c74697369672070616c6c657420696e73746561642e00f44e4f54453a205072696f7220746f2076657273696f6e202a31322c2074686973207761732063616c6c6564206061735f6c696d697465645f737562602e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e2462617463685f616c6c04011463616c6c73e504017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000234ec53656e642061206261746368206f662064697370617463682063616c6c7320616e642061746f6d6963616c6c792065786563757465207468656d2e21015468652077686f6c65207472616e73616374696f6e2077696c6c20726f6c6c6261636b20616e64206661696c20696620616e79206f66207468652063616c6c73206661696c65642e00b04d61792062652063616c6c65642066726f6d20616e79206f726967696e2065786365707420604e6f6e65602e005d012d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e20546865206e756d626572206f662063616c6c206d757374206e6f74390120206578636565642074686520636f6e7374616e743a2060626174636865645f63616c6c735f6c696d6974602028617661696c61626c6520696e20636f6e7374616e74206d65746164617461292e0055014966206f726967696e20697320726f6f74207468656e207468652063616c6c7320617265206469737061746368656420776974686f757420636865636b696e67206f726967696e2066696c7465722e202854686973ec696e636c7564657320627970617373696e6720606672616d655f73797374656d3a3a436f6e6669673a3a4261736543616c6c46696c74657260292e0034232320436f6d706c6578697479d02d204f284329207768657265204320697320746865206e756d626572206f662063616c6c7320746f20626520626174636865642e2c64697370617463685f617308012461735f6f726967696ee9040154426f783c543a3a50616c6c6574734f726967696e3e00011063616c6c0904017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000318c84469737061746368657320612066756e6374696f6e2063616c6c207769746820612070726f7669646564206f726967696e2e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e0034232320436f6d706c65786974791c2d204f2831292e2c666f7263655f626174636804011463616c6c73e504017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0004347c53656e642061206261746368206f662064697370617463682063616c6c732ed4556e6c696b6520606261746368602c20697420616c6c6f7773206572726f727320616e6420776f6e277420696e746572727570742e00b04d61792062652063616c6c65642066726f6d20616e79206f726967696e2065786365707420604e6f6e65602e005d012d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e20546865206e756d626572206f662063616c6c206d757374206e6f74390120206578636565642074686520636f6e7374616e743a2060626174636865645f63616c6c735f6c696d6974602028617661696c61626c6520696e20636f6e7374616e74206d65746164617461292e004d014966206f726967696e20697320726f6f74207468656e207468652063616c6c732061726520646973706174636820776974686f757420636865636b696e67206f726967696e2066696c7465722e202854686973ec696e636c7564657320627970617373696e6720606672616d655f73797374656d3a3a436f6e6669673a3a4261736543616c6c46696c74657260292e0034232320436f6d706c6578697479d02d204f284329207768657265204320697320746865206e756d626572206f662063616c6c7320746f20626520626174636865642e2c776974685f77656967687408011063616c6c0904017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000118776569676874200118576569676874000518c4446973706174636820612066756e6374696f6e2063616c6c2077697468206120737065636966696564207765696768742e002d01546869732066756e6374696f6e20646f6573206e6f7420636865636b2074686520776569676874206f66207468652063616c6c2c20616e6420696e737465616420616c6c6f777320746865b8526f6f74206f726967696e20746f20737065636966792074686520776569676874206f66207468652063616c6c2e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ee504000002090400e904085c637265646974636f696e5f6e6f64655f72756e74696d65304f726967696e43616c6c65720001081873797374656d0400ed0401746672616d655f73797374656d3a3a4f726967696e3c52756e74696d653e00000010566f69640400f10401110173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a566f696400010000ed040c346672616d655f737570706f7274206469737061746368245261774f726967696e04244163636f756e7449640100010c10526f6f74000000185369676e656404000001244163636f756e744964000100104e6f6e6500020000f104081c73705f636f726510566f696400010000f5040c3070616c6c65745f70726f78791870616c6c65741043616c6c0404540001281470726f78790c01107265616cb50201504163636f756e7449644c6f6f6b75704f663c543e000140666f7263655f70726f78795f74797065f90401504f7074696f6e3c543a3a50726f7879547970653e00011063616c6c0904017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0000244d0144697370617463682074686520676976656e206063616c6c602066726f6d20616e206163636f756e742074686174207468652073656e64657220697320617574686f726973656420666f72207468726f75676830606164645f70726f7879602e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a0d012d20607265616c603a20546865206163636f756e742074686174207468652070726f78792077696c6c206d616b6520612063616c6c206f6e20626568616c66206f662e61012d2060666f7263655f70726f78795f74797065603a2053706563696679207468652065786163742070726f7879207479706520746f206265207573656420616e6420636865636b656420666f7220746869732063616c6c2ed02d206063616c6c603a205468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e246164645f70726f78790c012064656c6567617465b50201504163636f756e7449644c6f6f6b75704f663c543e00012870726f78795f74797065e80130543a3a50726f78795479706500011464656c6179100138543a3a426c6f636b4e756d6265720001244501526567697374657220612070726f7879206163636f756e7420666f72207468652073656e64657220746861742069732061626c6520746f206d616b652063616c6c73206f6e2069747320626568616c662e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a11012d206070726f7879603a20546865206163636f756e74207468617420746865206063616c6c65726020776f756c64206c696b6520746f206d616b6520612070726f78792efc2d206070726f78795f74797065603a20546865207065726d697373696f6e7320616c6c6f77656420666f7220746869732070726f7879206163636f756e742e4d012d206064656c6179603a2054686520616e6e6f756e63656d656e7420706572696f64207265717569726564206f662074686520696e697469616c2070726f78792e2057696c6c2067656e6572616c6c79206265147a65726f2e3072656d6f76655f70726f78790c012064656c6567617465b50201504163636f756e7449644c6f6f6b75704f663c543e00012870726f78795f74797065e80130543a3a50726f78795479706500011464656c6179100138543a3a426c6f636b4e756d62657200021ca8556e726567697374657220612070726f7879206163636f756e7420666f72207468652073656e6465722e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a25012d206070726f7879603a20546865206163636f756e74207468617420746865206063616c6c65726020776f756c64206c696b6520746f2072656d6f766520617320612070726f78792e41012d206070726f78795f74797065603a20546865207065726d697373696f6e732063757272656e746c7920656e61626c656420666f72207468652072656d6f7665642070726f7879206163636f756e742e3872656d6f76655f70726f78696573000318b4556e726567697374657220616c6c2070726f7879206163636f756e747320666f72207468652073656e6465722e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0041015741524e494e473a2054686973206d61792062652063616c6c6564206f6e206163636f756e74732063726561746564206279206070757265602c20686f776576657220696620646f6e652c207468656e590174686520756e726573657276656420666565732077696c6c20626520696e61636365737369626c652e202a2a416c6c2061636365737320746f2074686973206163636f756e742077696c6c206265206c6f73742e2a2a2c6372656174655f707572650c012870726f78795f74797065e80130543a3a50726f78795479706500011464656c6179100138543a3a426c6f636b4e756d626572000114696e646578ad01010c7531360004483901537061776e2061206672657368206e6577206163636f756e7420746861742069732067756172616e7465656420746f206265206f746865727769736520696e61636365737369626c652c20616e64fc696e697469616c697a65206974207769746820612070726f7879206f66206070726f78795f747970656020666f7220606f726967696e602073656e6465722e006c5265717569726573206120605369676e656460206f726967696e2e0051012d206070726f78795f74797065603a205468652074797065206f66207468652070726f78792074686174207468652073656e6465722077696c6c2062652072656769737465726564206173206f766572207468654d016e6577206163636f756e742e20546869732077696c6c20616c6d6f737420616c7761797320626520746865206d6f7374207065726d697373697665206050726f7879547970656020706f737369626c6520746f78616c6c6f7720666f72206d6178696d756d20666c65786962696c6974792e51012d2060696e646578603a204120646973616d626967756174696f6e20696e6465782c20696e206361736520746869732069732063616c6c6564206d756c7469706c652074696d657320696e207468652073616d655d017472616e73616374696f6e2028652e672e207769746820607574696c6974793a3a626174636860292e20556e6c65737320796f75277265207573696e67206062617463686020796f752070726f6261626c79206a7573744077616e7420746f20757365206030602e4d012d206064656c6179603a2054686520616e6e6f756e63656d656e7420706572696f64207265717569726564206f662074686520696e697469616c2070726f78792e2057696c6c2067656e6572616c6c79206265147a65726f2e0051014661696c73207769746820604475706c69636174656020696620746869732068617320616c7265616479206265656e2063616c6c656420696e2074686973207472616e73616374696f6e2c2066726f6d207468659873616d652073656e6465722c2077697468207468652073616d6520706172616d65746572732e00e44661696c732069662074686572652061726520696e73756666696369656e742066756e647320746f2070617920666f72206465706f7369742e246b696c6c5f7075726514011c737061776e6572b50201504163636f756e7449644c6f6f6b75704f663c543e00012870726f78795f74797065e80130543a3a50726f787954797065000114696e646578ad01010c753136000118686569676874dd010138543a3a426c6f636b4e756d6265720001246578745f696e646578dd01010c753332000540a052656d6f76657320612070726576696f75736c7920737061776e656420707572652070726f78792e0049015741524e494e473a202a2a416c6c2061636365737320746f2074686973206163636f756e742077696c6c206265206c6f73742e2a2a20416e792066756e64732068656c6420696e2069742077696c6c20626534696e61636365737369626c652e0059015265717569726573206120605369676e656460206f726967696e2c20616e64207468652073656e646572206163636f756e74206d7573742068617665206265656e206372656174656420627920612063616c6c20746f94607075726560207769746820636f72726573706f6e64696e6720706172616d65746572732e0039012d2060737061776e6572603a20546865206163636f756e742074686174206f726967696e616c6c792063616c6c65642060707572656020746f206372656174652074686973206163636f756e742e39012d2060696e646578603a2054686520646973616d626967756174696f6e20696e646578206f726967696e616c6c792070617373656420746f206070757265602e2050726f6261626c79206030602eec2d206070726f78795f74797065603a205468652070726f78792074797065206f726967696e616c6c792070617373656420746f206070757265602e29012d2060686569676874603a2054686520686569676874206f662074686520636861696e207768656e207468652063616c6c20746f20607075726560207761732070726f6365737365642e35012d20606578745f696e646578603a205468652065787472696e73696320696e64657820696e207768696368207468652063616c6c20746f20607075726560207761732070726f6365737365642e0035014661696c73207769746820604e6f5065726d697373696f6e6020696e2063617365207468652063616c6c6572206973206e6f7420612070726576696f75736c7920637265617465642070757265dc6163636f756e742077686f7365206070757265602063616c6c2068617320636f72726573706f6e64696e6720706172616d65746572732e20616e6e6f756e63650801107265616cb50201504163636f756e7449644c6f6f6b75704f663c543e00012463616c6c5f686173682c013443616c6c486173684f663c543e00063c05015075626c697368207468652068617368206f6620612070726f78792d63616c6c20746861742077696c6c206265206d61646520696e20746865206675747572652e005d0154686973206d7573742062652063616c6c656420736f6d65206e756d626572206f6620626c6f636b73206265666f72652074686520636f72726573706f6e64696e67206070726f78796020697320617474656d7074656425016966207468652064656c6179206173736f6369617465642077697468207468652070726f78792072656c6174696f6e736869702069732067726561746572207468616e207a65726f2e0011014e6f206d6f7265207468616e20604d617850656e64696e676020616e6e6f756e63656d656e7473206d6179206265206d61646520617420616e79206f6e652074696d652e000901546869732077696c6c2074616b652061206465706f736974206f662060416e6e6f756e63656d656e744465706f736974466163746f72602061732077656c6c206173190160416e6e6f756e63656d656e744465706f736974426173656020696620746865726520617265206e6f206f746865722070656e64696e6720616e6e6f756e63656d656e74732e002501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e6420612070726f7879206f6620607265616c602e002c506172616d65746572733a0d012d20607265616c603a20546865206163636f756e742074686174207468652070726f78792077696c6c206d616b6520612063616c6c206f6e20626568616c66206f662e15012d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e4c72656d6f76655f616e6e6f756e63656d656e740801107265616cb50201504163636f756e7449644c6f6f6b75704f663c543e00012463616c6c5f686173682c013443616c6c486173684f663c543e0007287052656d6f7665206120676976656e20616e6e6f756e63656d656e742e0059014d61792062652063616c6c656420627920612070726f7879206163636f756e7420746f2072656d6f766520612063616c6c20746865792070726576696f75736c7920616e6e6f756e63656420616e642072657475726e30746865206465706f7369742e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a0d012d20607265616c603a20546865206163636f756e742074686174207468652070726f78792077696c6c206d616b6520612063616c6c206f6e20626568616c66206f662e15012d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e4c72656a6563745f616e6e6f756e63656d656e7408012064656c6567617465b50201504163636f756e7449644c6f6f6b75704f663c543e00012463616c6c5f686173682c013443616c6c486173684f663c543e000828b052656d6f76652074686520676976656e20616e6e6f756e63656d656e74206f6620612064656c65676174652e0061014d61792062652063616c6c6564206279206120746172676574202870726f7869656429206163636f756e7420746f2072656d6f766520612063616c6c2074686174206f6e65206f662074686569722064656c6567617465732501286064656c656761746560292068617320616e6e6f756e63656420746865792077616e7420746f20657865637574652e20546865206465706f7369742069732072657475726e65642e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733af42d206064656c6567617465603a20546865206163636f756e7420746861742070726576696f75736c7920616e6e6f756e636564207468652063616c6c2ebc2d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f206265206d6164652e3c70726f78795f616e6e6f756e63656410012064656c6567617465b50201504163636f756e7449644c6f6f6b75704f663c543e0001107265616cb50201504163636f756e7449644c6f6f6b75704f663c543e000140666f7263655f70726f78795f74797065f90401504f7074696f6e3c543a3a50726f7879547970653e00011063616c6c0904017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00092c4d0144697370617463682074686520676976656e206063616c6c602066726f6d20616e206163636f756e742074686174207468652073656e64657220697320617574686f72697a656420666f72207468726f75676830606164645f70726f7879602e00a852656d6f76657320616e7920636f72726573706f6e64696e6720616e6e6f756e63656d656e742873292e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a0d012d20607265616c603a20546865206163636f756e742074686174207468652070726f78792077696c6c206d616b6520612063616c6c206f6e20626568616c66206f662e61012d2060666f7263655f70726f78795f74797065603a2053706563696679207468652065786163742070726f7879207479706520746f206265207573656420616e6420636865636b656420666f7220746869732063616c6c2ed02d206063616c6c603a205468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ef90404184f7074696f6e04045401e80108104e6f6e6500000010536f6d650400e80000010000fd040c4c70616c6c65745f666173745f756e7374616b651870616c6c65741043616c6c04045400010c5472656769737465725f666173745f756e7374616b65000048885265676973746572206f6e6573656c6620666f7220666173742d756e7374616b652e005501546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265207369676e65642062792074686520636f6e74726f6c6c6572206163636f756e742c2073696d696c617220746f48607374616b696e673a3a756e626f6e64602e003901546865207374617368206173736f636961746564207769746820746865206f726967696e206d7573742068617665206e6f206f6e676f696e6720756e6c6f636b696e67206368756e6b732e2049665d017375636365737366756c2c20746869732077696c6c2066756c6c7920756e626f6e6420616e64206368696c6c207468652073746173682e205468656e2c2069742077696c6c20656e71756575652074686520737461736880746f20626520636865636b656420696e206675727468657220626c6f636b732e0051014966206279207468652074696d6520746869732069732063616c6c65642c207468652073746173682069732061637475616c6c7920656c696769626c6520666f7220666173742d756e7374616b652c207468656e450174686579206172652067756172616e7465656420746f2072656d61696e20656c696769626c652c2062656361757365207468652063616c6c2077696c6c206368696c6c207468656d2061732077656c6c2e003d0149662074686520636865636b20776f726b732c2074686520656e74697265207374616b696e6720646174612069732072656d6f7665642c20692e652e207468652073746173682069732066756c6c7924756e7374616b65642e005d0149662074686520636865636b206661696c732c207468652073746173682072656d61696e73206368696c6c656420616e642077616974696e6720666f72206265696e6720756e626f6e64656420617320696e20776974686101746865206e6f726d616c207374616b696e672073797374656d2c206275742074686579206c6f73652070617274206f6620746865697220756e626f6e64696e67206368756e6b732064756520746f20636f6e73756d696e675874686520636861696e2773207265736f75726365732e286465726567697374657200011ca444657265676973746572206f6e6573656c662066726f6d2074686520666173742d756e7374616b652e006101546869732069732075736566756c206966206f6e6520697320726567697374657265642c207468657920617265207374696c6c2077616974696e672c20616e642074686579206368616e6765207468656972206d696e642e0059014e6f7465207468617420746865206173736f636961746564207374617368206973207374696c6c2066756c6c7920756e626f6e64656420616e64206368696c6c6564206173206120636f6e73657175656e6365206f66390163616c6c696e67206072656769737465725f666173745f756e7374616b65602e20546869732073686f756c642070726f6261626c7920626520666f6c6c6f77656420627920612063616c6c20746f48605374616b696e673a3a7265626f6e64602e1c636f6e74726f6c040134657261735f746f5f636865636b100120457261496e64657800020c94436f6e74726f6c20746865206f7065726174696f6e206f6620746869732070616c6c65742e0001014469737061746368206f726967696e206d757374206265207369676e656420627920746865205b60436f6e6669673a3a436f6e74726f6c4f726967696e605d2e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e01050c5c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c731870616c6c65741043616c6c040454000154106a6f696e080118616d6f756e74cc013042616c616e63654f663c543e00011c706f6f6c5f6964100118506f6f6c496400002845015374616b652066756e64732077697468206120706f6f6c2e2054686520616d6f756e7420746f20626f6e64206973207472616e736665727265642066726f6d20746865206d656d62657220746f20746865dc706f6f6c73206163636f756e7420616e6420696d6d6564696174656c7920696e637265617365732074686520706f6f6c7320626f6e642e001823204e6f746500cc2a20416e206163636f756e742063616e206f6e6c792062652061206d656d626572206f6620612073696e676c6520706f6f6c2ed82a20416e206163636f756e742063616e6e6f74206a6f696e207468652073616d6520706f6f6c206d756c7469706c652074696d65732e41012a20546869732063616c6c2077696c6c202a6e6f742a206475737420746865206d656d626572206163636f756e742c20736f20746865206d656d626572206d7573742068617665206174206c65617374c82020606578697374656e7469616c206465706f736974202b20616d6f756e746020696e207468656972206163636f756e742ed02a204f6e6c79206120706f6f6c2077697468205b60506f6f6c53746174653a3a4f70656e605d2063616e206265206a6f696e656428626f6e645f657874726104011465787472610505015c426f6e6445787472613c42616c616e63654f663c543e3e00011c4501426f6e642060657874726160206d6f72652066756e64732066726f6d20606f726967696e6020696e746f2074686520706f6f6c20746f207768696368207468657920616c72656164792062656c6f6e672e0049014164646974696f6e616c2066756e64732063616e20636f6d652066726f6d206569746865722074686520667265652062616c616e6365206f6620746865206163636f756e742c206f662066726f6d207468659c616363756d756c6174656420726577617264732c20736565205b60426f6e644578747261605d2e003d01426f6e64696e672065787472612066756e647320696d706c69657320616e206175746f6d61746963207061796f7574206f6620616c6c2070656e64696e6720726577617264732061732077656c6c2e09015365652060626f6e645f65787472615f6f746865726020746f20626f6e642070656e64696e672072657761726473206f6620606f7468657260206d656d626572732e30636c61696d5f7061796f757400022055014120626f6e646564206d656d6265722063616e20757365207468697320746f20636c61696d207468656972207061796f7574206261736564206f6e20746865207265776172647320746861742074686520706f6f6c610168617320616363756d756c617465642073696e6365207468656972206c61737420636c61696d6564207061796f757420284f522073696e6365206a6f696e696e6720696620746869732069732074686569722066697273743d0174696d6520636c61696d696e672072657761726473292e20546865207061796f75742077696c6c206265207472616e7366657272656420746f20746865206d656d6265722773206163636f756e742e004901546865206d656d6265722077696c6c206561726e20726577617264732070726f2072617461206261736564206f6e20746865206d656d62657273207374616b65207673207468652073756d206f6620746865d06d656d6265727320696e2074686520706f6f6c73207374616b652e205265776172647320646f206e6f742022657870697265222e003d015365652060636c61696d5f7061796f75745f6f746865726020746f206361696d2072657761726473206f6e20626168616c66206f6620736f6d6520606f746865726020706f6f6c206d656d6265722e18756e626f6e640801386d656d6265725f6163636f756e74b50201504163636f756e7449644c6f6f6b75704f663c543e000140756e626f6e64696e675f706f696e7473cc013042616c616e63654f663c543e00037c4501556e626f6e6420757020746f2060756e626f6e64696e675f706f696e747360206f662074686520606d656d6265725f6163636f756e746027732066756e64732066726f6d2074686520706f6f6c2e2049744501696d706c696369746c7920636f6c6c65637473207468652072657761726473206f6e65206c6173742074696d652c2073696e6365206e6f7420646f696e6720736f20776f756c64206d65616e20736f6d656c7265776172647320776f756c6420626520666f726665697465642e004d01556e646572206365727461696e20636f6e646974696f6e732c20746869732063616c6c2063616e2062652064697370617463686564207065726d697373696f6e6c6573736c792028692e652e20627920616e79246163636f756e74292e00ac2320436f6e646974696f6e7320666f722061207065726d697373696f6e6c6573732064697370617463682e005d012a2054686520706f6f6c20697320626c6f636b656420616e64207468652063616c6c6572206973206569746865722074686520726f6f74206f7220626f756e6365722e205468697320697320726566657265656420746f30202061732061206b69636b2ef42a2054686520706f6f6c2069732064657374726f79696e6720616e6420746865206d656d626572206973206e6f7420746865206465706f7369746f722e55012a2054686520706f6f6c2069732064657374726f79696e672c20746865206d656d62657220697320746865206465706f7369746f7220616e64206e6f206f74686572206d656d626572732061726520696e207468651c2020706f6f6c2e001101232320436f6e646974696f6e7320666f72207065726d697373696f6e65642064697370617463682028692e652e207468652063616c6c657220697320616c736f2074686548606d656d6265725f6163636f756e7460293a00882a205468652063616c6c6572206973206e6f7420746865206465706f7369746f722e55012a205468652063616c6c657220697320746865206465706f7369746f722c2074686520706f6f6c2069732064657374726f79696e6720616e64206e6f206f74686572206d656d626572732061726520696e207468651c2020706f6f6c2e001823204e6f7465001d0149662074686572652061726520746f6f206d616e7920756e6c6f636b696e67206368756e6b7320746f20756e626f6e6420776974682074686520706f6f6c206163636f756e742c51015b6043616c6c3a3a706f6f6c5f77697468647261775f756e626f6e646564605d2063616e2062652063616c6c656420746f2074727920616e64206d696e696d697a6520756e6c6f636b696e67206368756e6b732e5901546865205b605374616b696e67496e746572666163653a3a756e626f6e64605d2077696c6c20696d706c696369746c792063616c6c205b6043616c6c3a3a706f6f6c5f77697468647261775f756e626f6e646564605d5501746f2074727920746f2066726565206368756e6b73206966206e6563657373617279202869652e20696620756e626f756e64207761732063616c6c656420616e64206e6f20756e6c6f636b696e67206368756e6b73610161726520617661696c61626c65292e20486f77657665722c206974206d6179206e6f7420626520706f737369626c6520746f2072656c65617365207468652063757272656e7420756e6c6f636b696e67206368756e6b732c5d01696e20776869636820636173652c2074686520726573756c74206f6620746869732063616c6c2077696c6c206c696b656c792062652074686520604e6f4d6f72654368756e6b7360206572726f722066726f6d207468653c7374616b696e672073797374656d2e58706f6f6c5f77697468647261775f756e626f6e64656408011c706f6f6c5f6964100118506f6f6c49640001486e756d5f736c617368696e675f7370616e7310010c753332000418550143616c6c206077697468647261775f756e626f6e6465646020666f722074686520706f6f6c73206163636f756e742e20546869732063616c6c2063616e206265206d61646520627920616e79206163636f756e742e004101546869732069732075736566756c2069662074686569722061726520746f6f206d616e7920756e6c6f636b696e67206368756e6b7320746f2063616c6c2060756e626f6e64602c20616e6420736f6d65610163616e20626520636c6561726564206279207769746864726177696e672e20496e2074686520636173652074686572652061726520746f6f206d616e7920756e6c6f636b696e67206368756e6b732c2074686520757365725101776f756c642070726f6261626c792073656520616e206572726f72206c696b6520604e6f4d6f72654368756e6b736020656d69747465642066726f6d20746865207374616b696e672073797374656d207768656e5c7468657920617474656d707420746f20756e626f6e642e4477697468647261775f756e626f6e6465640801386d656d6265725f6163636f756e74b50201504163636f756e7449644c6f6f6b75704f663c543e0001486e756d5f736c617368696e675f7370616e7310010c75333200054c5501576974686472617720756e626f6e6465642066756e64732066726f6d20606d656d6265725f6163636f756e74602e204966206e6f20626f6e6465642066756e64732063616e20626520756e626f6e6465642c20616e486572726f722069732072657475726e65642e004d01556e646572206365727461696e20636f6e646974696f6e732c20746869732063616c6c2063616e2062652064697370617463686564207065726d697373696f6e6c6573736c792028692e652e20627920616e79246163636f756e74292e00a82320436f6e646974696f6e7320666f722061207065726d697373696f6e6c6573732064697370617463680009012a2054686520706f6f6c20697320696e2064657374726f79206d6f646520616e642074686520746172676574206973206e6f7420746865206465706f7369746f722e31012a205468652074617267657420697320746865206465706f7369746f7220616e6420746865792061726520746865206f6e6c79206d656d62657220696e207468652073756220706f6f6c732e0d012a2054686520706f6f6c20697320626c6f636b656420616e64207468652063616c6c6572206973206569746865722074686520726f6f74206f7220626f756e6365722e00982320436f6e646974696f6e7320666f72207065726d697373696f6e656420646973706174636800e82a205468652063616c6c6572206973207468652074617267657420616e64207468657920617265206e6f7420746865206465706f7369746f722e001823204e6f746500ec4966207468652074617267657420697320746865206465706f7369746f722c2074686520706f6f6c2077696c6c2062652064657374726f7965642e18637265617465100118616d6f756e74cc013042616c616e63654f663c543e000110726f6f74b50201504163636f756e7449644c6f6f6b75704f663c543e0001246e6f6d696e61746f72b50201504163636f756e7449644c6f6f6b75704f663c543e00011c626f756e636572b50201504163636f756e7449644c6f6f6b75704f663c543e000644744372656174652061206e65772064656c65676174696f6e20706f6f6c2e002c2320417267756d656e74730055012a2060616d6f756e7460202d2054686520616d6f756e74206f662066756e647320746f2064656c656761746520746f2074686520706f6f6c2e205468697320616c736f2061637473206f66206120736f7274206f664d0120206465706f7369742073696e63652074686520706f6f6c732063726561746f722063616e6e6f742066756c6c7920756e626f6e642066756e647320756e74696c2074686520706f6f6c206973206265696e6730202064657374726f7965642e51012a2060696e64657860202d204120646973616d626967756174696f6e20696e64657820666f72206372656174696e6720746865206163636f756e742e204c696b656c79206f6e6c792075736566756c207768656ec020206372656174696e67206d756c7469706c6520706f6f6c7320696e207468652073616d652065787472696e7369632ed42a2060726f6f7460202d20546865206163636f756e7420746f20736574206173205b60506f6f6c526f6c65733a3a726f6f74605d2e0d012a20606e6f6d696e61746f7260202d20546865206163636f756e7420746f2073657420617320746865205b60506f6f6c526f6c65733a3a6e6f6d696e61746f72605d2efc2a2060626f756e63657260202d20546865206163636f756e7420746f2073657420617320746865205b60506f6f6c526f6c65733a3a626f756e636572605d2e001823204e6f7465006101496e206164646974696f6e20746f2060616d6f756e74602c207468652063616c6c65722077696c6c207472616e7366657220746865206578697374656e7469616c206465706f7369743b20736f207468652063616c6c657211016e656564732061742068617665206174206c656173742060616d6f756e74202b206578697374656e7469616c5f6465706f73697460207472616e736665727261626c652e4c6372656174655f776974685f706f6f6c5f6964140118616d6f756e74cc013042616c616e63654f663c543e000110726f6f74b50201504163636f756e7449644c6f6f6b75704f663c543e0001246e6f6d696e61746f72b50201504163636f756e7449644c6f6f6b75704f663c543e00011c626f756e636572b50201504163636f756e7449644c6f6f6b75704f663c543e00011c706f6f6c5f6964100118506f6f6c4964000718ec4372656174652061206e65772064656c65676174696f6e20706f6f6c207769746820612070726576696f75736c79207573656420706f6f6c206964002c2320417267756d656e7473009873616d6520617320606372656174656020776974682074686520696e636c7573696f6e206f66782a2060706f6f6c5f696460202d2060412076616c696420506f6f6c49642e206e6f6d696e61746508011c706f6f6c5f6964100118506f6f6c496400012876616c696461746f7273c10201445665633c543a3a4163636f756e7449643e00081c7c4e6f6d696e617465206f6e20626568616c66206f662074686520706f6f6c2e004501546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265207369676e65642062792074686520706f6f6c206e6f6d696e61746f72206f722074686520706f6f6c28726f6f7420726f6c652e00490154686973206469726563746c7920666f7277617264207468652063616c6c20746f20746865207374616b696e672070616c6c65742c206f6e20626568616c66206f662074686520706f6f6c20626f6e646564206163636f756e742e247365745f737461746508011c706f6f6c5f6964100118506f6f6c49640001147374617465bd010124506f6f6c5374617465000928745365742061206e657720737461746520666f722074686520706f6f6c2e0055014966206120706f6f6c20697320616c726561647920696e20746865206044657374726f79696e67602073746174652c207468656e20756e646572206e6f20636f6e646974696f6e2063616e20697473207374617465346368616e676520616761696e2e00c0546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265206569746865723a00dc312e207369676e65642062792074686520626f756e6365722c206f722074686520726f6f7420726f6c65206f662074686520706f6f6c2c5d01322e2069662074686520706f6f6c20636f6e646974696f6e7320746f206265206f70656e20617265204e4f54206d6574202861732064657363726962656420627920606f6b5f746f5f62655f6f70656e60292c20616e6439012020207468656e20746865207374617465206f662074686520706f6f6c2063616e206265207065726d697373696f6e6c6573736c79206368616e67656420746f206044657374726f79696e67602e307365745f6d6574616461746108011c706f6f6c5f6964100118506f6f6c49640001206d6574616461746130011c5665633c75383e000a10805365742061206e6577206d6574616461746120666f722074686520706f6f6c2e005d01546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265207369676e65642062792074686520626f756e6365722c206f722074686520726f6f7420726f6c65206f662074686514706f6f6c2e2c7365745f636f6e666967731801346d696e5f6a6f696e5f626f6e6409050158436f6e6669674f703c42616c616e63654f663c543e3e00013c6d696e5f6372656174655f626f6e6409050158436f6e6669674f703c42616c616e63654f663c543e3e0001246d61785f706f6f6c730d050134436f6e6669674f703c7533323e00012c6d61785f6d656d626572730d050134436f6e6669674f703c7533323e0001506d61785f6d656d626572735f7065725f706f6f6c0d050134436f6e6669674f703c7533323e000154676c6f62616c5f6d61785f636f6d6d697373696f6e11050144436f6e6669674f703c50657262696c6c3e000b2c410155706461746520636f6e66696775726174696f6e7320666f7220746865206e6f6d696e6174696f6e20706f6f6c732e20546865206f726967696e20666f7220746869732063616c6c206d75737420626514526f6f742e002c2320417267756d656e747300a02a20606d696e5f6a6f696e5f626f6e6460202d20536574205b604d696e4a6f696e426f6e64605d2eb02a20606d696e5f6372656174655f626f6e6460202d20536574205b604d696e437265617465426f6e64605d2e842a20606d61785f706f6f6c7360202d20536574205b604d6178506f6f6c73605d2ea42a20606d61785f6d656d6265727360202d20536574205b604d6178506f6f6c4d656d62657273605d2ee42a20606d61785f6d656d626572735f7065725f706f6f6c60202d20536574205b604d6178506f6f6c4d656d62657273506572506f6f6c605d2ee02a2060676c6f62616c5f6d61785f636f6d6d697373696f6e60202d20536574205b60476c6f62616c4d6178436f6d6d697373696f6e605d2e307570646174655f726f6c657310011c706f6f6c5f6964100118506f6f6c49640001206e65775f726f6f7415050158436f6e6669674f703c543a3a4163636f756e7449643e0001346e65775f6e6f6d696e61746f7215050158436f6e6669674f703c543a3a4163636f756e7449643e00012c6e65775f626f756e63657215050158436f6e6669674f703c543a3a4163636f756e7449643e000c1c745570646174652074686520726f6c6573206f662074686520706f6f6c2e003d0154686520726f6f7420697320746865206f6e6c7920656e7469747920746861742063616e206368616e676520616e79206f662074686520726f6c65732c20696e636c7564696e6720697473656c662cb86578636c7564696e6720746865206465706f7369746f722c2077686f2063616e206e65766572206368616e67652e005101497420656d69747320616e206576656e742c206e6f74696679696e6720554973206f662074686520726f6c65206368616e67652e2054686973206576656e742069732071756974652072656c6576616e7420746f1d016d6f737420706f6f6c206d656d6265727320616e6420746865792073686f756c6420626520696e666f726d6564206f66206368616e67657320746f20706f6f6c20726f6c65732e146368696c6c04011c706f6f6c5f6964100118506f6f6c4964000d1c704368696c6c206f6e20626568616c66206f662074686520706f6f6c2e004501546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265207369676e65642062792074686520706f6f6c206e6f6d696e61746f72206f722074686520706f6f6ca0726f6f7420726f6c652c2073616d65206173205b6050616c6c65743a3a6e6f6d696e617465605d2e00490154686973206469726563746c7920666f7277617264207468652063616c6c20746f20746865207374616b696e672070616c6c65742c206f6e20626568616c66206f662074686520706f6f6c20626f6e646564206163636f756e742e40626f6e645f65787472615f6f746865720801186d656d626572b50201504163636f756e7449644c6f6f6b75704f663c543e00011465787472610505015c426f6e6445787472613c42616c616e63654f663c543e3e000e245501606f726967696e6020626f6e64732066756e64732066726f6d206065787472616020666f7220736f6d6520706f6f6c206d656d62657220606d656d6265726020696e746f207468656972207265737065637469766518706f6f6c732e004901606f726967696e602063616e20626f6e642065787472612066756e64732066726f6d20667265652062616c616e6365206f722070656e64696e672072657761726473207768656e20606f726967696e203d3d1c6f74686572602e004501496e207468652063617365206f6620606f726967696e20213d206f74686572602c20606f726967696e602063616e206f6e6c7920626f6e642065787472612070656e64696e672072657761726473206f661501606f7468657260206d656d6265727320617373756d696e67207365745f636c61696d5f7065726d697373696f6e20666f722074686520676976656e206d656d626572206973c0605065726d697373696f6e6c657373416c6c60206f7220605065726d697373696f6e6c657373436f6d706f756e64602e507365745f636c61696d5f7065726d697373696f6e0401287065726d697373696f6e1905013c436c61696d5065726d697373696f6e000f304901416c6c6f7773206120706f6f6c206d656d62657220746f20736574206120636c61696d207065726d697373696f6e20746f20616c6c6f77206f7220646973616c6c6f77207065726d697373696f6e6c65737360626f6e64696e6720616e64207769746864726177696e672e00550142792064656661756c742c207468697320697320605065726d697373696f6e6564602c20776869636820696d706c696573206f6e6c792074686520706f6f6c206d656d626572207468656d73656c7665732063616e3501636c61696d2074686569722070656e64696e6720726577617264732e204966206120706f6f6c206d656d6265722077697368657320736f2c20746865792063616e20736574207468697320746f5501605065726d697373696f6e6c657373416c6c6020746f20616c6c6f7720616e79206163636f756e7420746f20636c61696d207468656972207265776172647320616e6420626f6e6420657874726120746f2074686514706f6f6c2e002c2320417267756d656e747300782a20606f726967696e60202d204d656d626572206f66206120706f6f6c2ed02a20606163746f7260202d204163636f756e7420746f20636c61696d207265776172642e202f2f20696d70726f7665207468697348636c61696d5f7061796f75745f6f746865720401146f74686572000130543a3a4163636f756e7449640010100101606f726967696e602063616e20636c61696d207061796f757473206f6e20736f6d6520706f6f6c206d656d62657220606f7468657260277320626568616c662e006101506f6f6c206d656d62657220606f7468657260206d7573742068617665206120605065726d697373696f6e6c657373416c6c60206f7220605065726d697373696f6e6c65737357697468647261776020696e206f726465727c666f7220746869732063616c6c20746f206265207375636365737366756c2e387365745f636f6d6d697373696f6e08011c706f6f6c5f6964100118506f6f6c49640001386e65775f636f6d6d697373696f6ec101017c4f7074696f6e3c2850657262696c6c2c20543a3a4163636f756e744964293e001114745365742074686520636f6d6d697373696f6e206f66206120706f6f6c2e5501426f7468206120636f6d6d697373696f6e2070657263656e7461676520616e64206120636f6d6d697373696f6e207061796565206d7573742062652070726f766964656420696e20746865206063757272656e74605d017475706c652e2057686572652061206063757272656e7460206f6620604e6f6e65602069732070726f76696465642c20616e792063757272656e7420636f6d6d697373696f6e2077696c6c2062652072656d6f7665642e004d012d204966206120604e6f6e656020697320737570706c69656420746f20606e65775f636f6d6d697373696f6e602c206578697374696e6720636f6d6d697373696f6e2077696c6c2062652072656d6f7665642e487365745f636f6d6d697373696f6e5f6d617808011c706f6f6c5f6964100118506f6f6c49640001386d61785f636f6d6d697373696f6e80011c50657262696c6c0012149453657420746865206d6178696d756d20636f6d6d697373696f6e206f66206120706f6f6c2e0039012d20496e697469616c206d61782063616e2062652073657420746f20616e79206050657262696c6c602c20616e64206f6e6c7920736d616c6c65722076616c75657320746865726561667465722e35012d2043757272656e7420636f6d6d697373696f6e2077696c6c206265206c6f776572656420696e20746865206576656e7420697420697320686967686572207468616e2061206e6577206d6178342020636f6d6d697373696f6e2e687365745f636f6d6d697373696f6e5f6368616e67655f7261746508011c706f6f6c5f6964100118506f6f6c496400012c6368616e67655f72617465c9010190436f6d6d697373696f6e4368616e6765526174653c543a3a426c6f636b4e756d6265723e001310a85365742074686520636f6d6d697373696f6e206368616e6765207261746520666f72206120706f6f6c2e003d01496e697469616c206368616e67652072617465206973206e6f7420626f756e6465642c20776865726561732073756273657175656e7420757064617465732063616e206f6e6c79206265206d6f7265747265737472696374697665207468616e207468652063757272656e742e40636c61696d5f636f6d6d697373696f6e04011c706f6f6c5f6964100118506f6f6c496400141464436c61696d2070656e64696e6720636f6d6d697373696f6e2e005d01546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265207369676e6564206279207468652060726f6f746020726f6c65206f662074686520706f6f6c2e2050656e64696e675d01636f6d6d697373696f6e2069732070616964206f757420616e6420616464656420746f20746f74616c20636c61696d656420636f6d6d697373696f6e602e20546f74616c2070656e64696e6720636f6d6d697373696f6e78697320726573657420746f207a65726f2e207468652063757272656e742e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e0505085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7324426f6e644578747261041c42616c616e6365011801082c4672656542616c616e6365040018011c42616c616e63650000001c52657761726473000100000905085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7320436f6e6669674f700404540118010c104e6f6f700000000c5365740400180104540001001852656d6f7665000200000d05085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7320436f6e6669674f700404540110010c104e6f6f700000000c5365740400100104540001001852656d6f7665000200001105085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7320436f6e6669674f700404540180010c104e6f6f700000000c5365740400800104540001001852656d6f7665000200001505085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7320436f6e6669674f700404540100010c104e6f6f700000000c5365740400000104540001001852656d6f7665000200001905085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c733c436c61696d5065726d697373696f6e000110305065726d697373696f6e6564000000585065726d697373696f6e6c657373436f6d706f756e64000100585065726d697373696f6e6c6573735769746864726177000200445065726d697373696f6e6c657373416c6c000300001d050c2c70616c6c65745f7375646f1870616c6c6574144572726f720404540001042c526571756972655375646f0000047c53656e646572206d75737420626520746865205375646f206163636f756e7404644572726f7220666f7220746865205375646f2070616c6c6574210500000408102c002505104470616c6c65745f637265646974636f696e1474797065731c636c65616e75704c53746f72616765436c65616e75705374617465042c426c6f636b4e756d6265720110000c012861736b5f6f72646572732905019053746f726167654974656d436c65616e757053746174653c426c6f636b4e756d6265723e0001286269645f6f72646572732905019053746f726167654974656d436c65616e757053746174653c426c6f636b4e756d6265723e0001186f66666572732905019053746f726167654974656d436c65616e757053746174653c426c6f636b4e756d6265723e00002905104470616c6c65745f637265646974636f696e1474797065731c636c65616e75705c53746f726167654974656d436c65616e75705374617465042c426c6f636b4e756d6265720110000801206f6e5f626c6f636b10012c426c6f636b4e756d626572000118637572736f722d0501d04f7074696f6e3c5765616b426f756e6465645665633c75382c20436f6e73745533323c4d41585f435552534f525f4c454e3e3e3e00002d0504184f7074696f6e0404540131050108104e6f6e6500000010536f6d6504003105000001000031050c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401080453000004003001185665633c543e000035050c4470616c6c65745f637265646974636f696e1870616c6c6574144572726f720404540001f06041646472657373416c72656164795265676973746572656400000415015468652073706563696669656420616464726573732068617320616c7265616479206265656e207265676973746572656420746f20616e6f74686572206163636f756e742e8041646472657373416c726561647952656769737465726564427943616c6c657200010409015468652073706563696669656420616464726573732068617320616c7265616479206265656e207265676973746572656420746f2074686973206163636f756e742e484e6f6e4578697374656e74416464726573730002049454686520737065636966696564206164647265737320646f6573206e6f742065786973742e504e6f6e4578697374656e744465616c4f72646572000304a054686520737065636966696564206465616c206f7264657220646f6573206e6f742065786973742e4c4e6f6e4578697374656e7441736b4f726465720004049c546865207370656369666965642061736b206f7264657220646f6573206e6f742065786973742e4c4e6f6e4578697374656e744269644f726465720005049c5468652073706563696669656420626964206f7264657220646f6573206e6f742065786973742e404e6f6e4578697374656e744f666665720006048c54686520737065636966696564206f6666657220646f6573206e6f742065786973742e4c4e6f6e4578697374656e745472616e736665720007049854686520737065636966696564207472616e7366657220646f6573206e6f742065786973742e645472616e73666572416c726561647952656769737465726564000804a4546865207472616e736665722068617320616c7265616479206265656e20726567697374657265642e74436f6c6c656374436f696e73416c726561647952656769737465726564000904c054686520636f696e20636f6c6c656374696f6e2068617320616c7265616479206265656e20726567697374657265642e5c5472616e736665724163636f756e744d69736d61746368000a08b4546865206163636f756e742074686174207265676973746572656420746865207472616e7366657220646f6573d46e6f74206d6174636820746865206163636f756e7420617474656d7074696e6720746f2075736520746865207472616e736665722e645472616e736665724465616c4f726465724d69736d61746368000b04190154686520737065636966696564206465616c206f7264657220494420646f6573206e6f74206d6174636820746865207472616e73666572206465616c206f726465722049442e585472616e73666572416d6f756e744d69736d61746368000c04010154686520616d6f756e74206f6e20746865206465616c206f7264657220646f6573206e6f74206d6174636820746865207472616e7366657220616d6f756e742e605472616e73666572416c726561647950726f636573736564000d04ec546865207472616e736665722068617320616c7265616479206265656e2070726f63657373656420616e642063616e6e6f7420626520757365642e685472616e73666572416d6f756e74496e73756666696369656e74000e04f8546865207472616e7366657220616d6f756e74206973206c657373207468616e2074686520616d6f756e7420696e20746865206c6f616e207465726d732e444d616c666f726d65645472616e73666572000f080501546865207472616e73666572206973206d616c666f726d656420616e6420686173206120626c6f636b206e756d6265722067726561746572207468616e207468657c7469702e205468697320697320616e20696e7465726e616c206572726f722e5c556e737570706f727465645472616e736665724b696e64001008e454686520737065636966696564207472616e736665722074797065206973206e6f742063757272656e746c7920737570706f727465642062799c74686520626c6f636b636861696e20746865206c6f616e206973206578656375746564206f6e2e54496e73756666696369656e74417574686f726974790011040501546865206e6f646520646f6573206e6f7420686176652073756666696369656e7420617574686f7269747920746f207665726966792061207472616e736665722e2c4475706c696361746549640012049c546865207370656369666965642049442068617320616c7265616479206265656e20757365642e3c4e6f74416464726573734f776e6572001304f054686520616464726573732063616e6e6f742062652075736564206265636175736520746865207573657220646f6573206e6f74206f776e2069742e584f6666636861696e5369676e656454784661696c6564001408fc4661696c656420746f2073656e6420616e206f6666636861696e2063616c6c6261636b207472616e73616374696f6e2e2054686973206973206c696b656c7948616e20696e7465726e616c206572726f722e584e6f4c6f63616c41636374466f725369676e65645478001508f0546865206e6f646520697320616e20617574686f7269747920627574207468657265206973206e6f206163636f756e7420746f206372656174652061dc63616c6c6261636b207472616e73616374696f6e2e2054686973206973206c696b656c7920616e20696e7465726e616c206572726f722e6452657061796d656e744f726465724e6f6e5a65726f4761696e0016006441646472657373426c6f636b636861696e4d69736d61746368001704f8546865206164647265737365732073706563696669656420617265206e6f74206f6e20636f6d70617469626c652065787465726e616c20636861696e732e40416c7265616479417574686f7269747900180490546865206163636f756e7420697320616c726561647920616e20617574686f726974792e384e6f74416e417574686f72697479001904e8546865206163636f756e7420796f752061726520747279696e6720746f2072656d6f7665206973206e6f742020616e20617574686f726974792e384475706c69636174654f66666572001a0480546865206f666665722068617320616c7265616479206265656e206d6164652e344465616c4e6f7446756e646564001b04dc546865206465616c2063616e6e6f74206265206c6f636b65642062656361757365206974206973206e6f742066756e646564207965742e584465616c4f72646572416c726561647946756e646564001c04f0546865206465616c206f7264657220697320616c72656164792066756e64656420616e642063616e6e6f742062652066756e64656420616761696e2e584465616c4f72646572416c7265616479436c6f736564001d04f0546865206465616c206f7264657220697320616c726561647920636c6f73656420616e642063616e6e6f7420626520636c6f73656420616761696e2e584465616c4f72646572416c72656164794c6f636b6564001e04f0546865206465616c206f7264657220697320616c7265616479206c6f636b656420616e642063616e6e6f74206265206c6f636b656420616761696e2e544465616c4f726465724d75737442654c6f636b6564001f04d8546865206465616c206f72646572206d757374206265206c6f636b6564206265666f72652069742063616e20626520636c6f7365642e484475706c69636174654465616c4f7264657200200478546865206465616c206f7264657220616c7265616479206578697374732e404465616c4f7264657245787069726564002104c8546865206465616c206f7264657220686173206578706972656420616e64206973206e6f206c6f6e6765722076616c69642e3c41736b4f7264657245787069726564002204c45468652061736b206f7264657220686173206578706972656420616e64206973206e6f206c6f6e6765722076616c69642e3c4269644f7264657245787069726564002304c454686520626964206f7264657220686173206578706972656420616e64206973206e6f206c6f6e6765722076616c69642e304f6666657245787069726564002404cc546865206f66666572206f7264657220686173206578706972656420616e64206973206e6f206c6f6e6765722076616c69642e3841736b4269644d69736d61746368002504c0546865207465726d73206f66207468652061736b20616e6420626964206f7264657220646f206e6f742061677265652e2453616d654f776e65720026040d0154686520626964206f72646572206973206f776e65642062792074686520757365722c206120757365722063616e6e6f74206c656e6420746f207468656d73656c662e40496e76616c69645369676e6174757265002704e0546865207369676e617475726520646f6573206e6f74206d6174636820746865207075626c6963206b657920616e64206d6573736167652e2c4e6f74426f72726f776572002804a44f6e6c792074686520626f72726f7765722063616e20706572666f726d2074686520616374696f6e2e484d616c666f726d65644465616c4f726465720029080d01546865206465616c206f72646572206973206d616c666f726d656420616e6420686173206120626c6f636b206e756d6265722067726561746572207468616e207468657c7469702e205468697320697320616e20696e7465726e616c206572726f722e244e6f744c656e646572002a049c4f6e6c7920746865206c656e6465722063616e20706572666f726d2074686520616374696f6e2e6452657061796d656e744f72646572556e737570706f72746564002b04b452657061796d656e74206f726465727320617265206e6f742063757272656e746c7920737570706f727465642e504e6f744c656761637957616c6c65744f776e6572002c04ac546865206c65676163792077616c6c6574206973206e6f74206f776e65642062792074686520757365722e504c656761637957616c6c65744e6f74466f756e64002d04e85468657265206973206e6f206c65676163792077616c6c657420636f72726573706f6e64696e6720746f20746865207075626c6963206b65792e684c656761637942616c616e63654b65657065724d697373696e67002e081d015468657265206973206e6f206c65676163792062616c616e6365206b65657065722c20736f206e6f206c65676163792077616c6c6574732063616e20626520636c61696d65642e350154686973206973206120636f6e66696775726174696f6e206572726f7220616e642073686f756c64206f6e6c79206f6363757220647572696e67206c6f63616c20646576656c6f706d656e742e3c47756964416c726561647955736564002f04fc5468652073706563696669656420677569642068617320616c7265616479206265656e207573656420616e642063616e6e6f742062652072652d757365642e44496e76616c69645465726d4c656e6774680030040d015468652076616c7565206f6620746865206c6f616e207465726d2773207465726d206c656e677468206973207a65726f2c20776869636820697320696e76616c69642e604d616c666f726d656445787465726e616c4164647265737300310421015468652065787465726e616c2061646472657373206973206d616c666f726d6564206f72206f746865727769736520696e76616c696420666f722074686520706c6174666f726d2e6441646472657373466f726d61744e6f74537570706f727465640032045101546865206164647265737320666f726d617420776173206e6f74207265636f676e697a656420666f722074686520676976656e20626c6f636b636861696e20616e642065787465726e616c20616464726573732e544f776e6572736869704e6f74536174697366696564003304c1015468652061646472657373207265747269657665642066726f6d207468652070726f6f662d6f662d6f776e657273686970207369676e617475726520646964206e6f74206d61746368207468652065787465726e616c2061646472657373206265696e6720726567697374657265642e6443757272656e6379416c726561647952656769737465726564003404a45468652063757272656e63792068617320616c7265616479206265656e20726567697374657265642e984574685369676e45787465726e616c4164647265737347656e65726174696f6e4661696c65640035049501412076616c69642065787465726e616c206164647265737320636f756c64206e6f742062652067656e65726174656420666f72207468652073706563696669656420626c6f636b636861696e20616e64207265636f7665726564207075626c6963206b6579784574685369676e5075626c69634b65795265636f766572794661696c656400360415014543445341207075626c6963206b6579207265636f76657279206661696c656420666f7220616e206f776e6572736869702070726f6f66207573696e67204574685369676eac506572736f6e616c5369676e45787465726e616c4164647265737347656e65726174696f6e4661696c65640037049501412076616c69642065787465726e616c206164647265737320636f756c64206e6f742062652067656e65726174656420666f72207468652073706563696669656420626c6f636b636861696e20616e64207265636f7665726564207075626c6963206b65798c506572736f6e616c5369676e5075626c69634b65795265636f766572794661696c656400380429014543445341207075626c6963206b6579207265636f76657279206661696c656420666f7220616e206f776e6572736869702070726f6f66207573696e6720506572736f6e616c5369676e54556e737570706f72746564426c6f636b636861696e003904f8416e20756e737570706f7274656420626c6f636b636861696e207761732073706563696669656420746f2072656769737465725f616464726573735f7632504275726e474154454661756365744e6f74536574003a04cd01546865206f6e636861696e20666175636574206164647265737320666f722074686520474154452073776170206d656368616e69736d20686173206e6f74206265656e20736574207573696e6720746865207365745f676174655f6661756365745f616464726573732065787472696e736963844275726e47415445496e73756666696369656e7446617563657442616c616e6365003b049d01546865206661756365742068617320696e73756666696369656e742066756e647320746f20636f6d706c657465207468697320737761702c20706c65617365207265747279207768656e207468652066617563657420686173206265656e2072656c6f6164656404b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a09090939050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454013d05045300000400410501185665633c543e00003d05084470616c6c65745f646966666963756c747958446966666963756c7479416e6454696d657374616d7004184d6f6d656e74012800080128646966666963756c747935010128446966666963756c747900012474696d657374616d702801184d6f6d656e74000041050000023d050045050000050c0049050c4470616c6c65745f646966666963756c74791870616c6c6574144572726f7204045400010c385a65726f54617267657454696d65000000505a65726f41646a7573746d656e74506572696f64000100604e6567617469766541646a7573746d656e74506572696f6400020004b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909094d050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454015105045300000400610501185665633c543e0000510504184f7074696f6e0404540155050108104e6f6e6500000010536f6d650400550500000100005505084070616c6c65745f7363686564756c6572245363686564756c656414104e616d6501041043616c6c0159052c426c6f636b4e756d62657201103450616c6c6574734f726967696e01e904244163636f756e7449640100001401206d617962655f6964990101304f7074696f6e3c4e616d653e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6c5905011043616c6c0001386d617962655f706572696f6469633d0401944f7074696f6e3c7363686564756c653a3a506572696f643c426c6f636b4e756d6265723e3e0001186f726967696ee904013450616c6c6574734f726967696e0000590510346672616d655f737570706f72741874726169747324707265696d616765731c426f756e646564040454010904010c184c6567616379040110686173682c01104861736800000018496e6c696e6504005d050134426f756e646564496e6c696e65000100184c6f6f6b7570080110686173682c01104861736800010c6c656e10010c753332000200005d050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e0000610500000251050065050c4070616c6c65745f7363686564756c65721870616c6c6574144572726f72040454000114404661696c6564546f5363686564756c65000004644661696c656420746f207363686564756c6520612063616c6c204e6f74466f756e640001047c43616e6e6f742066696e6420746865207363686564756c65642063616c6c2e5c546172676574426c6f636b4e756d626572496e50617374000204a4476976656e2074617267657420626c6f636b206e756d62657220697320696e2074686520706173742e4852657363686564756c654e6f4368616e6765000304f052657363686564756c65206661696c6564206265636175736520697420646f6573206e6f74206368616e6765207363686564756c65642074696d652e144e616d6564000404d0417474656d707420746f207573652061206e6f6e2d6e616d65642066756e6374696f6e206f6e2061206e616d6564207461736b2e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a09090969050c4470616c6c65745f637265646974636f696e147479706573105461736b10244163636f756e744964010020426c6f636b4e756d01101048617368012c184d6f6d656e7401280108385665726966795472616e7366657204006d0501d4556e76657269666965645472616e736665723c4163636f756e7449642c20426c6f636b4e756d2c20486173682c204d6f6d656e743e00000030436f6c6c656374436f696e73040009010160556e7665726966696564436f6c6c6563746564436f696e73000100006d05104470616c6c65745f637265646974636f696e147479706573207472616e7366657248556e76657269666965645472616e7366657210244163636f756e744964010020426c6f636b4e756d01101048617368012c184d6f6d656e740128001001207472616e73666572210101ac5472616e736665723c4163636f756e7449642c20426c6f636b4e756d2c20486173682c204d6f6d656e743e00013466726f6d5f65787465726e616c0101013c45787465726e616c4164647265737300012c746f5f65787465726e616c0101013c45787465726e616c41646472657373000120646561646c696e65100120426c6f636b4e756d000071050c7870616c6c65745f6f6666636861696e5f7461736b5f7363686564756c65721870616c6c6574144572726f72040454000108584f6666636861696e5369676e656454784661696c6564000008fc4661696c656420746f2073656e6420616e206f6666636861696e2063616c6c6261636b207472616e73616374696f6e2e2054686973206973206c696b656c7948616e20696e7465726e616c206572726f722e584e6f4c6f63616c41636374466f725369676e65645478000108f0546865206e6f646520697320616e20617574686f7269747920627574207468657265206973206e6f206163636f756e7420746f206372656174652061dc63616c6c6261636b207472616e73616374696f6e2e2054686973206973206c696b656c7920616e20696e7465726e616c206572726f722e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a09090975050c3c70616c6c65745f6964656e7469747914747970657330526567697374726174696f6e0c1c42616c616e63650118344d61784a756467656d656e7473004c4d61784164646974696f6e616c4669656c647300000c01286a756467656d656e7473790501fc426f756e6465645665633c28526567697374726172496e6465782c204a756467656d656e743c42616c616e63653e292c204d61784a756467656d656e74733e00011c6465706f73697418011c42616c616e6365000110696e666f450401844964656e74697479496e666f3c4d61784164646974696f6e616c4669656c64733e000079050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454017d05045300000400810501185665633c543e00007d050000040810dd040081050000027d05008505000004081889050089050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400c10201185665633c543e00008d050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454019105045300000400990501185665633c543e0000910504184f7074696f6e0404540195050108104e6f6e6500000010536f6d6504009505000001000095050c3c70616c6c65745f6964656e7469747914747970657334526567697374726172496e666f081c42616c616e63650118244163636f756e7449640100000c011c6163636f756e740001244163636f756e74496400010c66656518011c42616c616e63650001186669656c6473d50401384964656e746974794669656c6473000099050000029105009d050c3c70616c6c65745f6964656e746974791870616c6c6574144572726f7204045400014848546f6f4d616e795375624163636f756e74730000045c546f6f206d616e7920737562732d6163636f756e74732e204e6f74466f756e64000104504163636f756e742069736e277420666f756e642e204e6f744e616d6564000204504163636f756e742069736e2774206e616d65642e28456d707479496e64657800030430456d70747920696e6465782e284665654368616e6765640004043c466565206973206368616e6765642e284e6f4964656e74697479000504484e6f206964656e7469747920666f756e642e3c537469636b794a756467656d656e7400060444537469636b79206a756467656d656e742e384a756467656d656e74476976656e000704404a756467656d656e7420676976656e2e40496e76616c69644a756467656d656e7400080448496e76616c6964206a756467656d656e742e30496e76616c6964496e6465780009045454686520696e64657820697320696e76616c69642e34496e76616c6964546172676574000a04585468652074617267657420697320696e76616c69642e34546f6f4d616e794669656c6473000b046c546f6f206d616e79206164646974696f6e616c206669656c64732e44546f6f4d616e7952656769737472617273000c04e84d6178696d756d20616d6f756e74206f66207265676973747261727320726561636865642e2043616e6e6f742061646420616e79206d6f72652e38416c7265616479436c61696d6564000d04704163636f756e7420494420697320616c7265616479206e616d65642e184e6f74537562000e047053656e646572206973206e6f742061207375622d6163636f756e742e204e6f744f776e6564000f04885375622d6163636f756e742069736e2774206f776e65642062792073656e6465722e744a756467656d656e74466f72446966666572656e744964656e74697479001004d05468652070726f7669646564206a756467656d656e742077617320666f72206120646966666572656e74206964656e746974792e584a756467656d656e745061796d656e744661696c6564001104f84572726f722074686174206f6363757273207768656e20746865726520697320616e20697373756520706179696e6720666f72206a756467656d656e742e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909a1050c3870616c6c65745f7574696c6974791870616c6c6574144572726f7204045400010430546f6f4d616e7943616c6c730000045c546f6f206d616e792063616c6c7320626174636865642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909a50500000408a9051800a9050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401ad05045300000400b10501185665633c543e0000ad05083070616c6c65745f70726f78793c50726f7879446566696e6974696f6e0c244163636f756e74496401002450726f78795479706501e82c426c6f636b4e756d6265720110000c012064656c65676174650001244163636f756e74496400012870726f78795f74797065e8012450726f78795479706500011464656c617910012c426c6f636b4e756d6265720000b105000002ad0500b50500000408b9051800b9050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401bd05045300000400c10501185665633c543e0000bd05083070616c6c65745f70726f787930416e6e6f756e63656d656e740c244163636f756e74496401001048617368012c2c426c6f636b4e756d6265720110000c01107265616c0001244163636f756e74496400012463616c6c5f686173682c01104861736800011868656967687410012c426c6f636b4e756d6265720000c105000002bd0500c5050c3070616c6c65745f70726f78791870616c6c6574144572726f720404540001201c546f6f4d616e79000004210154686572652061726520746f6f206d616e792070726f786965732072656769737465726564206f7220746f6f206d616e7920616e6e6f756e63656d656e74732070656e64696e672e204e6f74466f756e640001047450726f787920726567697374726174696f6e206e6f7420666f756e642e204e6f7450726f7879000204cc53656e646572206973206e6f7420612070726f7879206f6620746865206163636f756e7420746f2062652070726f786965642e2c556e70726f787961626c650003042101412063616c6c20776869636820697320696e636f6d70617469626c652077697468207468652070726f7879207479706527732066696c7465722077617320617474656d707465642e244475706c69636174650004046c4163636f756e7420697320616c726561647920612070726f78792e304e6f5065726d697373696f6e000504150143616c6c206d6179206e6f74206265206d6164652062792070726f78792062656361757365206974206d617920657363616c617465206974732070726976696c656765732e2c556e616e6e6f756e636564000604d0416e6e6f756e63656d656e742c206966206d61646520617420616c6c2c20776173206d61646520746f6f20726563656e746c792e2c4e6f53656c6650726f78790007046443616e6e6f74206164642073656c662061732070726f78792e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909c9050c4c70616c6c65745f666173745f756e7374616b6514747970657338556e7374616b6552657175657374040454000008011c73746173686573cd0501d8426f756e6465645665633c28543a3a4163636f756e7449642c2042616c616e63654f663c543e292c20543a3a426174636853697a653e00011c636865636b6564d1050190426f756e6465645665633c457261496e6465782c204d6178436865636b696e673c543e3e0000cd050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454010903045300000400050301185665633c543e0000d1050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540110045300000400b50101185665633c543e0000d5050c4c70616c6c65745f666173745f756e7374616b651870616c6c6574144572726f72040454000118344e6f74436f6e74726f6c6c657200000cb85468652070726f766964656420436f6e74726f6c6c6572206163636f756e7420776173206e6f7420666f756e642e00c054686973206d65616e7320746861742074686520676976656e206163636f756e74206973206e6f7420626f6e6465642e34416c7265616479517565756564000104ac54686520626f6e646564206163636f756e742068617320616c7265616479206265656e207175657565642e384e6f7446756c6c79426f6e646564000204bc54686520626f6e646564206163636f756e74206861732061637469766520756e6c6f636b696e67206368756e6b732e244e6f74517565756564000304b45468652070726f766964656420756e2d7374616b6572206973206e6f7420696e2074686520605175657565602e2c416c72656164794865616400040405015468652070726f766964656420756e2d7374616b657220697320616c726561647920696e20486561642c20616e642063616e6e6f7420646572656769737465722e3843616c6c4e6f74416c6c6f7765640005041d015468652063616c6c206973206e6f7420616c6c6f776564206174207468697320706f696e742062656361757365207468652070616c6c6574206973206e6f74206163746976652e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909d905085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7328506f6f6c4d656d626572040454000010011c706f6f6c5f6964100118506f6f6c4964000118706f696e747318013042616c616e63654f663c543e0001706c6173745f7265636f726465645f7265776172645f636f756e746572fd030140543a3a526577617264436f756e746572000138756e626f6e64696e675f65726173dd0501e0426f756e64656442547265654d61703c457261496e6465782c2042616c616e63654f663c543e2c20543a3a4d6178556e626f6e64696e673e0000dd050c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b011004560118045300000400e105013842547265654d61703c4b2c20563e0000e105042042547265654d617008044b011004560118000400e505000000e505000002e90500e90500000408101800ed05085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c733c426f6e646564506f6f6c496e6e65720404540000140128636f6d6d697373696f6ef1050134436f6d6d697373696f6e3c543e0001386d656d6265725f636f756e74657210010c753332000118706f696e747318013042616c616e63654f663c543e000114726f6c6573fd05015c506f6f6c526f6c65733c543a3a4163636f756e7449643e0001147374617465bd010124506f6f6c53746174650000f105085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7328436f6d6d697373696f6e040454000010011c63757272656e74c101017c4f7074696f6e3c2850657262696c6c2c20543a3a4163636f756e744964293e00010c6d6178f505013c4f7074696f6e3c50657262696c6c3e00012c6368616e67655f72617465f90501b04f7074696f6e3c436f6d6d697373696f6e4368616e6765526174653c543a3a426c6f636b4e756d6265723e3e0001347468726f74746c655f66726f6d790101584f7074696f6e3c543a3a426c6f636b4e756d6265723e0000f50504184f7074696f6e04045401800108104e6f6e6500000010536f6d650400800000010000f90504184f7074696f6e04045401c9010108104e6f6e6500000010536f6d650400c9010000010000fd05085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7324506f6f6c526f6c657304244163636f756e7449640100001001246465706f7369746f720001244163636f756e744964000110726f6f74ec01444f7074696f6e3c4163636f756e7449643e0001246e6f6d696e61746f72ec01444f7074696f6e3c4163636f756e7449643e00011c626f756e636572ec01444f7074696f6e3c4163636f756e7449643e00000106085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7328526577617264506f6f6c04045400001401706c6173745f7265636f726465645f7265776172645f636f756e746572fd030140543a3a526577617264436f756e74657200016c6c6173745f7265636f726465645f746f74616c5f7061796f75747318013042616c616e63654f663c543e000154746f74616c5f726577617264735f636c61696d656418013042616c616e63654f663c543e000160746f74616c5f636f6d6d697373696f6e5f70656e64696e6718013042616c616e63654f663c543e000160746f74616c5f636f6d6d697373696f6e5f636c61696d656418013042616c616e63654f663c543e00000506085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7320537562506f6f6c7304045400000801186e6f5f65726109060134556e626f6e64506f6f6c3c543e000120776974685f6572610d06010101426f756e64656442547265654d61703c457261496e6465782c20556e626f6e64506f6f6c3c543e2c20546f74616c556e626f6e64696e67506f6f6c733c543e3e00000906085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7328556e626f6e64506f6f6c0404540000080118706f696e747318013042616c616e63654f663c543e00011c62616c616e636518013042616c616e63654f663c543e00000d060c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b011004560109060453000004001106013842547265654d61703c4b2c20563e00001106042042547265654d617008044b0110045601090600040015060000001506000002190600190600000408100906001d060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e0000210608346672616d655f737570706f72742050616c6c65744964000004002102011c5b75383b20385d000025060c5c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c731870616c6c6574144572726f7204045400017830506f6f6c4e6f74466f756e6400000488412028626f6e6465642920706f6f6c20696420646f6573206e6f742065786973742e48506f6f6c4d656d6265724e6f74466f756e640001046c416e206163636f756e74206973206e6f742061206d656d6265722e48526577617264506f6f6c4e6f74466f756e640002042101412072657761726420706f6f6c20646f6573206e6f742065786973742e20496e20616c6c206361736573207468697320697320612073797374656d206c6f676963206572726f722e40537562506f6f6c734e6f74466f756e6400030468412073756220706f6f6c20646f6573206e6f742065786973742e644163636f756e7442656c6f6e6773546f4f74686572506f6f6c0004084d01416e206163636f756e7420697320616c72656164792064656c65676174696e6720696e20616e6f7468657220706f6f6c2e20416e206163636f756e74206d6179206f6e6c792062656c6f6e6720746f206f6e653c706f6f6c20617420612074696d652e3846756c6c79556e626f6e64696e670005083d01546865206d656d6265722069732066756c6c7920756e626f6e6465642028616e6420746875732063616e6e6f74206163636573732074686520626f6e64656420616e642072657761726420706f6f6ca8616e796d6f726520746f2c20666f72206578616d706c652c20636f6c6c6563742072657761726473292e444d6178556e626f6e64696e674c696d69740006040901546865206d656d6265722063616e6e6f7420756e626f6e642066757274686572206368756e6b732064756520746f207265616368696e6720746865206c696d69742e4443616e6e6f745769746864726177416e790007044d014e6f6e65206f66207468652066756e64732063616e2062652077697468647261776e2079657420626563617573652074686520626f6e64696e67206475726174696f6e20686173206e6f74207061737365642e444d696e696d756d426f6e644e6f744d6574000814290154686520616d6f756e7420646f6573206e6f74206d65657420746865206d696e696d756d20626f6e6420746f20656974686572206a6f696e206f7220637265617465206120706f6f6c2e00cc546865206465706f7369746f722063616e206e6576657220756e626f6e6420746f20612076616c7565206c657373207468616e05016050616c6c65743a3a6465706f7369746f725f6d696e5f626f6e64602e205468652063616c6c657220646f6573206e6f742068617665206e6f6d696e6174696e6749017065726d697373696f6e7320666f722074686520706f6f6c2e204d656d626572732063616e206e6576657220756e626f6e6420746f20612076616c75652062656c6f7720604d696e4a6f696e426f6e64602e304f766572666c6f775269736b0009042101546865207472616e73616374696f6e20636f756c64206e6f742062652065786563757465642064756520746f206f766572666c6f77207269736b20666f722074686520706f6f6c2e344e6f7444657374726f79696e67000a085d014120706f6f6c206d75737420626520696e205b60506f6f6c53746174653a3a44657374726f79696e67605d20696e206f7264657220666f7220746865206465706f7369746f7220746f20756e626f6e64206f7220666f72b86f74686572206d656d6265727320746f206265207065726d697373696f6e6c6573736c7920756e626f6e6465642e304e6f744e6f6d696e61746f72000b04f45468652063616c6c657220646f6573206e6f742068617665206e6f6d696e6174696e67207065726d697373696f6e7320666f722074686520706f6f6c2e544e6f744b69636b65724f7244657374726f79696e67000c043d01456974686572206129207468652063616c6c65722063616e6e6f74206d616b6520612076616c6964206b69636b206f722062292074686520706f6f6c206973206e6f742064657374726f79696e672e1c4e6f744f70656e000d047054686520706f6f6c206973206e6f74206f70656e20746f206a6f696e204d6178506f6f6c73000e04845468652073797374656d206973206d61786564206f7574206f6e20706f6f6c732e384d6178506f6f6c4d656d62657273000f049c546f6f206d616e79206d656d6265727320696e2074686520706f6f6c206f722073797374656d2e4443616e4e6f744368616e676553746174650010048854686520706f6f6c732073746174652063616e6e6f74206265206368616e6765642e54446f65734e6f74486176655065726d697373696f6e001104b85468652063616c6c657220646f6573206e6f742068617665206164657175617465207065726d697373696f6e732e544d65746164617461457863656564734d61784c656e001204ac4d657461646174612065786365656473205b60436f6e6669673a3a4d61784d657461646174614c656e605d24446566656e73697665040029060138446566656e736976654572726f720013083101536f6d65206572726f72206f6363757272656420746861742073686f756c64206e657665722068617070656e2e20546869732073686f756c64206265207265706f7274656420746f20746865306d61696e7461696e6572732e9c5061727469616c556e626f6e644e6f74416c6c6f7765645065726d697373696f6e6c6573736c79001404bc5061727469616c20756e626f6e64696e67206e6f7720616c6c6f776564207065726d697373696f6e6c6573736c792e5c4d6178436f6d6d697373696f6e526573747269637465640015041d0154686520706f6f6c2773206d617820636f6d6d697373696f6e2063616e6e6f742062652073657420686967686572207468616e20746865206578697374696e672076616c75652e60436f6d6d697373696f6e457863656564734d6178696d756d001604ec54686520737570706c69656420636f6d6d697373696f6e206578636565647320746865206d617820616c6c6f77656420636f6d6d697373696f6e2e64436f6d6d697373696f6e4368616e67655468726f74746c656400170409014e6f7420656e6f75676820626c6f636b732068617665207375727061737365642073696e636520746865206c61737420636f6d6d697373696f6e207570646174652e78436f6d6d697373696f6e4368616e6765526174654e6f74416c6c6f7765640018040101546865207375626d6974746564206368616e67657320746f20636f6d6d697373696f6e206368616e6765207261746520617265206e6f7420616c6c6f7765642e4c4e6f50656e64696e67436f6d6d697373696f6e001904a05468657265206973206e6f2070656e64696e6720636f6d6d697373696f6e20746f20636c61696d2e584e6f436f6d6d697373696f6e43757272656e74536574001a048c4e6f20636f6d6d697373696f6e2063757272656e7420686173206265656e207365742e2c506f6f6c4964496e557365001b0464506f6f6c2069642063757272656e746c7920696e207573652e34496e76616c6964506f6f6c4964001c049c506f6f6c2069642070726f7669646564206973206e6f7420636f72726563742f757361626c652e4c426f6e64457874726152657374726963746564001d04fc426f6e64696e67206578747261206973207265737472696374656420746f207468652065786163742070656e64696e672072657761726420616d6f756e742e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a09090929060c5c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c731870616c6c657438446566656e736976654572726f72000114684e6f74456e6f7567685370616365496e556e626f6e64506f6f6c00000030506f6f6c4e6f74466f756e6400010048526577617264506f6f6c4e6f74466f756e6400020040537562506f6f6c734e6f74466f756e6400030070426f6e64656453746173684b696c6c65645072656d61747572656c79000400002d06102873705f72756e74696d651c67656e657269634c756e636865636b65645f65787472696e73696348556e636865636b656445787472696e736963101c4164647265737301b5021043616c6c010904245369676e617475726501250414457874726101310600040030000000310600000420350639063d06410645064d065106550600350610306672616d655f73797374656d28657874656e73696f6e7354636865636b5f6e6f6e5f7a65726f5f73656e64657248436865636b4e6f6e5a65726f53656e64657204045400000000390610306672616d655f73797374656d28657874656e73696f6e7348636865636b5f737065635f76657273696f6e40436865636b5370656356657273696f6e040454000000003d0610306672616d655f73797374656d28657874656e73696f6e7340636865636b5f74785f76657273696f6e38436865636b547856657273696f6e04045400000000410610306672616d655f73797374656d28657874656e73696f6e7334636865636b5f67656e6573697330436865636b47656e6573697304045400000000450610306672616d655f73797374656d28657874656e73696f6e733c636865636b5f6d6f7274616c69747938436865636b4d6f7274616c697479040454000004004906010c45726100004906102873705f72756e74696d651c67656e657269630c6572610c4572610001010420496d6d6f7274616c0000001c4d6f7274616c31040008000001001c4d6f7274616c32040008000002001c4d6f7274616c33040008000003001c4d6f7274616c34040008000004001c4d6f7274616c35040008000005001c4d6f7274616c36040008000006001c4d6f7274616c37040008000007001c4d6f7274616c38040008000008001c4d6f7274616c3904000800000900204d6f7274616c313004000800000a00204d6f7274616c313104000800000b00204d6f7274616c313204000800000c00204d6f7274616c313304000800000d00204d6f7274616c313404000800000e00204d6f7274616c313504000800000f00204d6f7274616c313604000800001000204d6f7274616c313704000800001100204d6f7274616c313804000800001200204d6f7274616c313904000800001300204d6f7274616c323004000800001400204d6f7274616c323104000800001500204d6f7274616c323204000800001600204d6f7274616c323304000800001700204d6f7274616c323404000800001800204d6f7274616c323504000800001900204d6f7274616c323604000800001a00204d6f7274616c323704000800001b00204d6f7274616c323804000800001c00204d6f7274616c323904000800001d00204d6f7274616c333004000800001e00204d6f7274616c333104000800001f00204d6f7274616c333204000800002000204d6f7274616c333304000800002100204d6f7274616c333404000800002200204d6f7274616c333504000800002300204d6f7274616c333604000800002400204d6f7274616c333704000800002500204d6f7274616c333804000800002600204d6f7274616c333904000800002700204d6f7274616c343004000800002800204d6f7274616c343104000800002900204d6f7274616c343204000800002a00204d6f7274616c343304000800002b00204d6f7274616c343404000800002c00204d6f7274616c343504000800002d00204d6f7274616c343604000800002e00204d6f7274616c343704000800002f00204d6f7274616c343804000800003000204d6f7274616c343904000800003100204d6f7274616c353004000800003200204d6f7274616c353104000800003300204d6f7274616c353204000800003400204d6f7274616c353304000800003500204d6f7274616c353404000800003600204d6f7274616c353504000800003700204d6f7274616c353604000800003800204d6f7274616c353704000800003900204d6f7274616c353804000800003a00204d6f7274616c353904000800003b00204d6f7274616c363004000800003c00204d6f7274616c363104000800003d00204d6f7274616c363204000800003e00204d6f7274616c363304000800003f00204d6f7274616c363404000800004000204d6f7274616c363504000800004100204d6f7274616c363604000800004200204d6f7274616c363704000800004300204d6f7274616c363804000800004400204d6f7274616c363904000800004500204d6f7274616c373004000800004600204d6f7274616c373104000800004700204d6f7274616c373204000800004800204d6f7274616c373304000800004900204d6f7274616c373404000800004a00204d6f7274616c373504000800004b00204d6f7274616c373604000800004c00204d6f7274616c373704000800004d00204d6f7274616c373804000800004e00204d6f7274616c373904000800004f00204d6f7274616c383004000800005000204d6f7274616c383104000800005100204d6f7274616c383204000800005200204d6f7274616c383304000800005300204d6f7274616c383404000800005400204d6f7274616c383504000800005500204d6f7274616c383604000800005600204d6f7274616c383704000800005700204d6f7274616c383804000800005800204d6f7274616c383904000800005900204d6f7274616c393004000800005a00204d6f7274616c393104000800005b00204d6f7274616c393204000800005c00204d6f7274616c393304000800005d00204d6f7274616c393404000800005e00204d6f7274616c393504000800005f00204d6f7274616c393604000800006000204d6f7274616c393704000800006100204d6f7274616c393804000800006200204d6f7274616c393904000800006300244d6f7274616c31303004000800006400244d6f7274616c31303104000800006500244d6f7274616c31303204000800006600244d6f7274616c31303304000800006700244d6f7274616c31303404000800006800244d6f7274616c31303504000800006900244d6f7274616c31303604000800006a00244d6f7274616c31303704000800006b00244d6f7274616c31303804000800006c00244d6f7274616c31303904000800006d00244d6f7274616c31313004000800006e00244d6f7274616c31313104000800006f00244d6f7274616c31313204000800007000244d6f7274616c31313304000800007100244d6f7274616c31313404000800007200244d6f7274616c31313504000800007300244d6f7274616c31313604000800007400244d6f7274616c31313704000800007500244d6f7274616c31313804000800007600244d6f7274616c31313904000800007700244d6f7274616c31323004000800007800244d6f7274616c31323104000800007900244d6f7274616c31323204000800007a00244d6f7274616c31323304000800007b00244d6f7274616c31323404000800007c00244d6f7274616c31323504000800007d00244d6f7274616c31323604000800007e00244d6f7274616c31323704000800007f00244d6f7274616c31323804000800008000244d6f7274616c31323904000800008100244d6f7274616c31333004000800008200244d6f7274616c31333104000800008300244d6f7274616c31333204000800008400244d6f7274616c31333304000800008500244d6f7274616c31333404000800008600244d6f7274616c31333504000800008700244d6f7274616c31333604000800008800244d6f7274616c31333704000800008900244d6f7274616c31333804000800008a00244d6f7274616c31333904000800008b00244d6f7274616c31343004000800008c00244d6f7274616c31343104000800008d00244d6f7274616c31343204000800008e00244d6f7274616c31343304000800008f00244d6f7274616c31343404000800009000244d6f7274616c31343504000800009100244d6f7274616c31343604000800009200244d6f7274616c31343704000800009300244d6f7274616c31343804000800009400244d6f7274616c31343904000800009500244d6f7274616c31353004000800009600244d6f7274616c31353104000800009700244d6f7274616c31353204000800009800244d6f7274616c31353304000800009900244d6f7274616c31353404000800009a00244d6f7274616c31353504000800009b00244d6f7274616c31353604000800009c00244d6f7274616c31353704000800009d00244d6f7274616c31353804000800009e00244d6f7274616c31353904000800009f00244d6f7274616c3136300400080000a000244d6f7274616c3136310400080000a100244d6f7274616c3136320400080000a200244d6f7274616c3136330400080000a300244d6f7274616c3136340400080000a400244d6f7274616c3136350400080000a500244d6f7274616c3136360400080000a600244d6f7274616c3136370400080000a700244d6f7274616c3136380400080000a800244d6f7274616c3136390400080000a900244d6f7274616c3137300400080000aa00244d6f7274616c3137310400080000ab00244d6f7274616c3137320400080000ac00244d6f7274616c3137330400080000ad00244d6f7274616c3137340400080000ae00244d6f7274616c3137350400080000af00244d6f7274616c3137360400080000b000244d6f7274616c3137370400080000b100244d6f7274616c3137380400080000b200244d6f7274616c3137390400080000b300244d6f7274616c3138300400080000b400244d6f7274616c3138310400080000b500244d6f7274616c3138320400080000b600244d6f7274616c3138330400080000b700244d6f7274616c3138340400080000b800244d6f7274616c3138350400080000b900244d6f7274616c3138360400080000ba00244d6f7274616c3138370400080000bb00244d6f7274616c3138380400080000bc00244d6f7274616c3138390400080000bd00244d6f7274616c3139300400080000be00244d6f7274616c3139310400080000bf00244d6f7274616c3139320400080000c000244d6f7274616c3139330400080000c100244d6f7274616c3139340400080000c200244d6f7274616c3139350400080000c300244d6f7274616c3139360400080000c400244d6f7274616c3139370400080000c500244d6f7274616c3139380400080000c600244d6f7274616c3139390400080000c700244d6f7274616c3230300400080000c800244d6f7274616c3230310400080000c900244d6f7274616c3230320400080000ca00244d6f7274616c3230330400080000cb00244d6f7274616c3230340400080000cc00244d6f7274616c3230350400080000cd00244d6f7274616c3230360400080000ce00244d6f7274616c3230370400080000cf00244d6f7274616c3230380400080000d000244d6f7274616c3230390400080000d100244d6f7274616c3231300400080000d200244d6f7274616c3231310400080000d300244d6f7274616c3231320400080000d400244d6f7274616c3231330400080000d500244d6f7274616c3231340400080000d600244d6f7274616c3231350400080000d700244d6f7274616c3231360400080000d800244d6f7274616c3231370400080000d900244d6f7274616c3231380400080000da00244d6f7274616c3231390400080000db00244d6f7274616c3232300400080000dc00244d6f7274616c3232310400080000dd00244d6f7274616c3232320400080000de00244d6f7274616c3232330400080000df00244d6f7274616c3232340400080000e000244d6f7274616c3232350400080000e100244d6f7274616c3232360400080000e200244d6f7274616c3232370400080000e300244d6f7274616c3232380400080000e400244d6f7274616c3232390400080000e500244d6f7274616c3233300400080000e600244d6f7274616c3233310400080000e700244d6f7274616c3233320400080000e800244d6f7274616c3233330400080000e900244d6f7274616c3233340400080000ea00244d6f7274616c3233350400080000eb00244d6f7274616c3233360400080000ec00244d6f7274616c3233370400080000ed00244d6f7274616c3233380400080000ee00244d6f7274616c3233390400080000ef00244d6f7274616c3234300400080000f000244d6f7274616c3234310400080000f100244d6f7274616c3234320400080000f200244d6f7274616c3234330400080000f300244d6f7274616c3234340400080000f400244d6f7274616c3234350400080000f500244d6f7274616c3234360400080000f600244d6f7274616c3234370400080000f700244d6f7274616c3234380400080000f800244d6f7274616c3234390400080000f900244d6f7274616c3235300400080000fa00244d6f7274616c3235310400080000fb00244d6f7274616c3235320400080000fc00244d6f7274616c3235330400080000fd00244d6f7274616c3235340400080000fe00244d6f7274616c3235350400080000ff00004d0610306672616d655f73797374656d28657874656e73696f6e732c636865636b5f6e6f6e636528436865636b4e6f6e636504045400000400dd010120543a3a496e6465780000510610306672616d655f73797374656d28657874656e73696f6e7330636865636b5f7765696768742c436865636b576569676874040454000000005506086870616c6c65745f7472616e73616374696f6e5f7061796d656e74604368617267655472616e73616374696f6e5061796d656e7404045400000400cc013042616c616e63654f663c543e00005906085c637265646974636f696e5f6e6f64655f72756e74696d651c52756e74696d6500000000641853797374656d011853797374656d401c4163636f756e7401010402000c4101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004e8205468652066756c6c206163636f756e7420696e666f726d6174696f6e20666f72206120706172746963756c6172206163636f756e742049442e3845787472696e736963436f756e74000010040004b820546f74616c2065787472696e7369637320636f756e7420666f72207468652063757272656e7420626c6f636b2e2c426c6f636b57656967687401001c180000000000000488205468652063757272656e742077656967687420666f722074686520626c6f636b2e40416c6c45787472696e736963734c656e000010040004410120546f74616c206c656e6774682028696e2062797465732920666f7220616c6c2065787472696e736963732070757420746f6765746865722c20666f72207468652063757272656e7420626c6f636b2e24426c6f636b4861736801010405102c8000000000000000000000000000000000000000000000000000000000000000000498204d6170206f6620626c6f636b206e756d6265727320746f20626c6f636b206861736865732e3445787472696e736963446174610101040510300400043d012045787472696e73696373206461746120666f72207468652063757272656e7420626c6f636b20286d61707320616e2065787472696e736963277320696e64657820746f206974732064617461292e184e756d6265720100101000000000040901205468652063757272656e7420626c6f636b206e756d626572206265696e672070726f6365737365642e205365742062792060657865637574655f626c6f636b602e28506172656e744861736801002c80000000000000000000000000000000000000000000000000000000000000000004702048617368206f66207468652070726576696f757320626c6f636b2e18446967657374010034040004f020446967657374206f66207468652063757272656e7420626c6f636b2c20616c736f2070617274206f662074686520626c6f636b206865616465722e184576656e747301004404001ca0204576656e7473206465706f736974656420666f72207468652063757272656e7420626c6f636b2e001d01204e4f54453a20546865206974656d20697320756e626f756e6420616e642073686f756c64207468657265666f7265206e657665722062652072656164206f6e20636861696e2ed020497420636f756c64206f746865727769736520696e666c6174652074686520506f562073697a65206f66206120626c6f636b2e002d01204576656e747320686176652061206c6172676520696e2d6d656d6f72792073697a652e20426f7820746865206576656e747320746f206e6f7420676f206f75742d6f662d6d656d6f7279fc206a75737420696e206361736520736f6d656f6e65207374696c6c207265616473207468656d2066726f6d2077697468696e207468652072756e74696d652e284576656e74436f756e74010010100000000004b820546865206e756d626572206f66206576656e747320696e2074686520604576656e74733c543e60206c6973742e2c4576656e74546f70696373010104022cd5010400282501204d617070696e67206265747765656e206120746f7069632028726570726573656e74656420627920543a3a486173682920616e64206120766563746f72206f6620696e646578657394206f66206576656e747320696e2074686520603c4576656e74733c543e3e60206c6973742e00510120416c6c20746f70696320766563746f727320686176652064657465726d696e69737469632073746f72616765206c6f636174696f6e7320646570656e64696e67206f6e2074686520746f7069632e2054686973450120616c6c6f7773206c696768742d636c69656e747320746f206c6576657261676520746865206368616e67657320747269652073746f7261676520747261636b696e67206d656368616e69736d20616e64e420696e2063617365206f66206368616e67657320666574636820746865206c697374206f66206576656e7473206f6620696e7465726573742e004d01205468652076616c756520686173207468652074797065206028543a3a426c6f636b4e756d6265722c204576656e74496e646578296020626563617573652069662077652075736564206f6e6c79206a7573744d012074686520604576656e74496e64657860207468656e20696e20636173652069662074686520746f70696320686173207468652073616d6520636f6e74656e7473206f6e20746865206e65787420626c6f636b0101206e6f206e6f74696669636174696f6e2077696c6c20626520747269676765726564207468757320746865206576656e74206d69676874206265206c6f73742e484c61737452756e74696d65557067726164650000d90104000455012053746f726573207468652060737065635f76657273696f6e6020616e642060737065635f6e616d6560206f66207768656e20746865206c6173742072756e74696d6520757067726164652068617070656e65642e545570677261646564546f553332526566436f756e7401008c0400044d012054727565206966207765206861766520757067726164656420736f207468617420607479706520526566436f756e74602069732060753332602e2046616c7365202864656661756c7429206966206e6f742e605570677261646564546f547269706c65526566436f756e7401008c0400085d012054727565206966207765206861766520757067726164656420736f2074686174204163636f756e74496e666f20636f6e7461696e73207468726565207479706573206f662060526566436f756e74602e2046616c736548202864656661756c7429206966206e6f742e38457865637574696f6e50686173650000cd01040004882054686520657865637574696f6e207068617365206f662074686520626c6f636b2e01e50101501830426c6f636b57656967687473f501fd01624fd75a000b005039278c0413ffffffffffffffff02c0cd1700010b000425adf4021366666666666666a6010b00fc6a1d690313ffffffffffffffbf01000002c0cd1700010b0058f3b617041366666666666666e6010b005039278c0413ffffffffffffffff010b0054ce09230113000000000000004002c0cd170000000004d020426c6f636b20262065787472696e7369637320776569676874733a20626173652076616c75657320616e64206c696d6974732e2c426c6f636b4c656e67746805023000003c00000050000000500004a820546865206d6178696d756d206c656e677468206f66206120626c6f636b2028696e206279746573292e38426c6f636b48617368436f756e74101060090000045501204d6178696d756d206e756d626572206f6620626c6f636b206e756d62657220746f20626c6f636b2068617368206d617070696e677320746f206b65657020286f6c64657374207072756e6564206669727374292e2044625765696768740d024000127a000000000080f0fa02000000000409012054686520776569676874206f662072756e74696d65206461746162617365206f7065726174696f6e73207468652072756e74696d652063616e20696e766f6b652e1c56657273696f6e110239033c637265646974636f696e2d6e6f64653c637265646974636f696e2d6e6f646501000000e90000000000000034df6acb689907609b0400000037e397fc7c91f5e40100000040fe3ad401f8959a06000000d2bc9897eed08f1503000000f78b278be53f454c02000000ab3c0572291feb8b01000000bc9d89904f5b923f0100000037c8bb1350a9a2a8030000001ea173a1db199b3b010000006c7049b21e24441101000000ed99c5acb25eedf503000000cbca25e39f14238702000000426f359225537dc6010000000b000000010484204765742074686520636861696e27732063757272656e742076657273696f6e2e2853533538507265666978ad01082a0014a8205468652064657369676e61746564205353353820707265666978206f66207468697320636861696e2e0039012054686973207265706c6163657320746865202273733538466f726d6174222070726f7065727479206465636c6172656420696e2074686520636861696e20737065632e20526561736f6e20697331012074686174207468652072756e74696d652073686f756c64206b6e6f772061626f7574207468652070726566697820696e206f7264657220746f206d616b6520757365206f662069742061737020616e206964656e746966696572206f662074686520636861696e2e012502002454696d657374616d70012454696d657374616d70080c4e6f7701002820000000000000000004902043757272656e742074696d6520666f72207468652063757272656e7420626c6f636b2e2444696455706461746501008c040004b420446964207468652074696d657374616d7020676574207570646174656420696e207468697320626c6f636b3f0129020004344d696e696d756d506572696f642820c409000000000000104d0120546865206d696e696d756d20706572696f64206265747765656e20626c6f636b732e204265776172652074686174207468697320697320646966666572656e7420746f20746865202a65787065637465642a5d0120706572696f6420746861742074686520626c6f636b2070726f64756374696f6e206170706172617475732070726f76696465732e20596f75722063686f73656e20636f6e73656e7375732073797374656d2077696c6c5d012067656e6572616c6c7920776f726b2077697468207468697320746f2064657465726d696e6520612073656e7369626c6520626c6f636b2074696d652e20652e672e20466f7220417572612c2069742077696c6c206265a020646f75626c65207468697320706572696f64206f6e2064656661756c742073657474696e67732e000124506f735377697463680124506f735377697463680444537769746368426c6f636b4e756d6265720000350104000000000000021042616265011042616265442845706f6368496e64657801002820000000000000000004542043757272656e742065706f636820696e6465782e2c417574686f72697469657301002d020400046c2043757272656e742065706f636820617574686f7269746965732e2c47656e65736973536c6f7401003d0220000000000000000008f82054686520736c6f74206174207768696368207468652066697273742065706f63682061637475616c6c7920737461727465642e205468697320697320309020756e74696c2074686520666972737420626c6f636b206f662074686520636861696e2e2c43757272656e74536c6f7401003d0220000000000000000004542043757272656e7420736c6f74206e756d6265722e2852616e646f6d6e65737301000480000000000000000000000000000000000000000000000000000000000000000028b8205468652065706f63682072616e646f6d6e65737320666f7220746865202a63757272656e742a2065706f63682e002c20232053656375726974790005012054686973204d555354204e4f54206265207573656420666f722067616d626c696e672c2061732069742063616e20626520696e666c75656e6365642062792061f8206d616c6963696f75732076616c696461746f7220696e207468652073686f7274207465726d2e204974204d4159206265207573656420696e206d616e7915012063727970746f677261706869632070726f746f636f6c732c20686f77657665722c20736f206c6f6e67206173206f6e652072656d656d6265727320746861742074686973150120286c696b652065766572797468696e6720656c7365206f6e2d636861696e29206974206973207075626c69632e20466f72206578616d706c652c2069742063616e206265050120757365642077686572652061206e756d626572206973206e656564656420746861742063616e6e6f742068617665206265656e2063686f73656e20627920616e0d01206164766572736172792c20666f7220707572706f7365732073756368206173207075626c69632d636f696e207a65726f2d6b6e6f776c656467652070726f6f66732e6050656e64696e6745706f6368436f6e6669674368616e67650000410204000461012050656e64696e672065706f636820636f6e66696775726174696f6e206368616e676520746861742077696c6c206265206170706c696564207768656e20746865206e6578742065706f636820697320656e61637465642e384e65787452616e646f6d6e657373010004800000000000000000000000000000000000000000000000000000000000000000045c204e6578742065706f63682072616e646f6d6e6573732e3c4e657874417574686f72697469657301002d0204000460204e6578742065706f636820617574686f7269746965732e305365676d656e74496e6465780100101000000000247c2052616e646f6d6e65737320756e64657220636f6e737472756374696f6e2e00f8205765206d616b6520612074726164652d6f6666206265747765656e2073746f7261676520616363657373657320616e64206c697374206c656e6774682e01012057652073746f72652074686520756e6465722d636f6e737472756374696f6e2072616e646f6d6e65737320696e207365676d656e7473206f6620757020746f942060554e4445525f434f4e535452554354494f4e5f5345474d454e545f4c454e475448602e00ec204f6e63652061207365676d656e7420726561636865732074686973206c656e6774682c20776520626567696e20746865206e657874206f6e652e090120576520726573657420616c6c207365676d656e747320616e642072657475726e20746f206030602061742074686520626567696e6e696e67206f662065766572791c2065706f63682e44556e646572436f6e737472756374696f6e01010405104d0204000415012054574f582d4e4f54453a20605365676d656e74496e6465786020697320616e20696e6372656173696e6720696e74656765722c20736f2074686973206973206f6b61792e2c496e697469616c697a65640000550204000801012054656d706f726172792076616c75652028636c656172656420617420626c6f636b2066696e616c697a6174696f6e292077686963682069732060536f6d65601d01206966207065722d626c6f636b20696e697469616c697a6174696f6e2068617320616c7265616479206265656e2063616c6c656420666f722063757272656e7420626c6f636b2e4c417574686f7256726652616e646f6d6e6573730100990104001015012054686973206669656c642073686f756c6420616c7761797320626520706f70756c6174656420647572696e6720626c6f636b2070726f63657373696e6720756e6c6573731901207365636f6e6461727920706c61696e20736c6f74732061726520656e61626c65642028776869636820646f6e277420636f6e7461696e206120565246206f7574707574292e0049012049742069732073657420696e20606f6e5f66696e616c697a65602c206265666f72652069742077696c6c20636f6e7461696e207468652076616c75652066726f6d20746865206c61737420626c6f636b2e2845706f6368537461727401009501200000000000000000145d012054686520626c6f636b206e756d62657273207768656e20746865206c61737420616e642063757272656e742065706f6368206861766520737461727465642c20726573706563746976656c7920604e2d316020616e641420604e602e4901204e4f54453a20576520747261636b207468697320697320696e206f7264657220746f20616e6e6f746174652074686520626c6f636b206e756d626572207768656e206120676976656e20706f6f6c206f66590120656e74726f7079207761732066697865642028692e652e20697420776173206b6e6f776e20746f20636861696e206f6273657276657273292e2053696e63652065706f6368732061726520646566696e656420696e590120736c6f74732c207768696368206d617920626520736b69707065642c2074686520626c6f636b206e756d62657273206d6179206e6f74206c696e6520757020776974682074686520736c6f74206e756d626572732e204c6174656e657373010010100000000014d820486f77206c617465207468652063757272656e7420626c6f636b20697320636f6d706172656420746f2069747320706172656e742e001501205468697320656e74727920697320706f70756c617465642061732070617274206f6620626c6f636b20657865637574696f6e20616e6420697320636c65616e65642075701101206f6e20626c6f636b2066696e616c697a6174696f6e2e205175657279696e6720746869732073746f7261676520656e747279206f757473696465206f6620626c6f636bb020657865637574696f6e20636f6e746578742073686f756c6420616c77617973207969656c64207a65726f2e2c45706f6368436f6e66696700006d0204000861012054686520636f6e66696775726174696f6e20666f72207468652063757272656e742065706f63682e2053686f756c64206e6576657220626520604e6f6e656020617320697420697320696e697469616c697a656420696e242067656e657369732e3c4e65787445706f6368436f6e66696700006d020400082d012054686520636f6e66696775726174696f6e20666f7220746865206e6578742065706f63682c20604e6f6e65602069662074686520636f6e6669672077696c6c206e6f74206368616e6765e82028796f752063616e2066616c6c6261636b20746f206045706f6368436f6e6669676020696e737465616420696e20746861742063617365292e34536b697070656445706f6368730100710204002029012041206c697374206f6620746865206c6173742031303020736b69707065642065706f63687320616e642074686520636f72726573706f6e64696e672073657373696f6e20696e64657870207768656e207468652065706f63682077617320736b69707065642e0031012054686973206973206f6e6c79207573656420666f722076616c69646174696e672065717569766f636174696f6e2070726f6f66732e20416e2065717569766f636174696f6e2070726f6f663501206d75737420636f6e7461696e732061206b65792d6f776e6572736869702070726f6f6620666f72206120676976656e2073657373696f6e2c207468657265666f7265207765206e656564206139012077617920746f2074696520746f6765746865722073657373696f6e7320616e642065706f636820696e64696365732c20692e652e207765206e65656420746f2076616c69646174652074686174290120612076616c696461746f722077617320746865206f776e6572206f66206120676976656e206b6579206f6e206120676976656e2073657373696f6e2c20616e64207768617420746865b0206163746976652065706f636820696e6465782077617320647572696e6720746861742073657373696f6e2e017d02000c3445706f63684475726174696f6e28200f000000000000000cec2054686520616d6f756e74206f662074696d652c20696e20736c6f74732c207468617420656163682065706f63682073686f756c64206c6173742e1901204e4f54453a2043757272656e746c79206974206973206e6f7420706f737369626c6520746f206368616e6765207468652065706f6368206475726174696f6e20616674657221012074686520636861696e2068617320737461727465642e20417474656d7074696e6720746f20646f20736f2077696c6c20627269636b20626c6f636b2070726f64756374696f6e2e444578706563746564426c6f636b54696d652820881300000000000014050120546865206578706563746564206176657261676520626c6f636b2074696d6520617420776869636820424142452073686f756c64206265206372656174696e67110120626c6f636b732e2053696e636520424142452069732070726f626162696c6973746963206974206973206e6f74207472697669616c20746f20666967757265206f75740501207768617420746865206578706563746564206176657261676520626c6f636b2074696d652073686f756c64206265206261736564206f6e2074686520736c6f740901206475726174696f6e20616e642074686520736563757269747920706172616d657465722060636020287768657265206031202d20636020726570726573656e7473a0207468652070726f626162696c697479206f66206120736c6f74206265696e6720656d707479292e384d6178417574686f7269746965731010a08601000488204d6178206e756d626572206f6620617574686f72697469657320616c6c6f776564019102032042616c616e636573012042616c616e6365731434546f74616c49737375616e6365010018400000000000000000000000000000000004982054686520746f74616c20756e6974732069737375656420696e207468652073797374656d2e40496e61637469766549737375616e636501001840000000000000000000000000000000000409012054686520746f74616c20756e697473206f66206f75747374616e64696e672064656163746976617465642062616c616e636520696e207468652073797374656d2e1c4163636f756e74010104020014010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600901205468652042616c616e6365732070616c6c6574206578616d706c65206f662073746f72696e67207468652062616c616e6365206f6620616e206163636f756e742e00282023204578616d706c650034206060606e6f636f6d70696c65b02020696d706c2070616c6c65745f62616c616e6365733a3a436f6e66696720666f722052756e74696d65207b19022020202074797065204163636f756e7453746f7265203d2053746f726167654d61705368696d3c53656c663a3a4163636f756e743c52756e74696d653e2c206672616d655f73797374656d3a3a50726f76696465723c52756e74696d653e2c204163636f756e7449642c2053656c663a3a4163636f756e74446174613c42616c616e63653e3e0c20207d102060606000150120596f752063616e20616c736f2073746f7265207468652062616c616e6365206f6620616e206163636f756e7420696e20746865206053797374656d602070616c6c65742e00282023204578616d706c650034206060606e6f636f6d70696c65b02020696d706c2070616c6c65745f62616c616e6365733a3a436f6e66696720666f722052756e74696d65207b7420202074797065204163636f756e7453746f7265203d2053797374656d0c20207d102060606000510120427574207468697320636f6d657320776974682074726164656f6666732c2073746f72696e67206163636f756e742062616c616e63657320696e207468652073797374656d2070616c6c65742073746f7265736d0120606672616d655f73797374656d60206461746120616c6f6e677369646520746865206163636f756e74206461746120636f6e747261727920746f2073746f72696e67206163636f756e742062616c616e63657320696e207468652901206042616c616e636573602070616c6c65742c20776869636820757365732061206053746f726167654d61706020746f2073746f72652062616c616e6365732064617461206f6e6c792e4101204e4f54453a2054686973206973206f6e6c79207573656420696e207468652063617365207468617420746869732070616c6c6574206973207573656420746f2073746f72652062616c616e6365732e144c6f636b7301010402009502040008b820416e79206c6971756964697479206c6f636b73206f6e20736f6d65206163636f756e742062616c616e6365732e2501204e4f54453a2053686f756c64206f6e6c79206265206163636573736564207768656e2073657474696e672c206368616e67696e6720616e642066726565696e672061206c6f636b2e2052657365727665730101040200a502040004a4204e616d6564207265736572766573206f6e20736f6d65206163636f756e742062616c616e6365732e01b10201740c484578697374656e7469616c4465706f7369741840f401000000000000000000000000000004d420546865206d696e696d756d20616d6f756e7420726571756972656420746f206b65657020616e206163636f756e74206f70656e2e204d61784c6f636b7310103200000008f420546865206d6178696d756d206e756d626572206f66206c6f636b7320746861742073686f756c64206578697374206f6e20616e206163636f756e742edc204e6f74207374726963746c7920656e666f726365642c20627574207573656420666f722077656967687420657374696d6174696f6e2e2c4d61785265736572766573101000000000040d0120546865206d6178696d756d206e756d626572206f66206e616d656420726573657276657320746861742063616e206578697374206f6e20616e206163636f756e742e01bd020428417574686f72736869700128417574686f72736869700418417574686f720000000400046420417574686f72206f662063757272656e7420626c6f636b2e00000000051c5374616b696e67011c5374616b696e67943856616c696461746f72436f756e740100101000000000049c2054686520696465616c206e756d626572206f66206163746976652076616c696461746f72732e544d696e696d756d56616c696461746f72436f756e740100101000000000044101204d696e696d756d206e756d626572206f66207374616b696e67207061727469636970616e7473206265666f726520656d657267656e637920636f6e646974696f6e732061726520696d706f7365642e34496e76756c6e657261626c65730100c10204000c590120416e792076616c696461746f72732074686174206d6179206e6576657220626520736c6173686564206f7220666f726369626c79206b69636b65642e20497427732061205665632073696e636520746865792772654d01206561737920746f20696e697469616c697a6520616e642074686520706572666f726d616e636520686974206973206d696e696d616c2028776520657870656374206e6f206d6f7265207468616e20666f7572ac20696e76756c6e657261626c65732920616e64207265737472696374656420746f20746573746e6574732e18426f6e64656400010405000004000c0101204d61702066726f6d20616c6c206c6f636b65642022737461736822206163636f756e747320746f2074686520636f6e74726f6c6c6572206163636f756e742e00d02054574f582d4e4f54453a20534146452073696e636520604163636f756e7449646020697320612073656375726520686173682e404d696e4e6f6d696e61746f72426f6e64010018400000000000000000000000000000000004210120546865206d696e696d756d2061637469766520626f6e6420746f206265636f6d6520616e64206d61696e7461696e2074686520726f6c65206f662061206e6f6d696e61746f722e404d696e56616c696461746f72426f6e64010018400000000000000000000000000000000004210120546865206d696e696d756d2061637469766520626f6e6420746f206265636f6d6520616e64206d61696e7461696e2074686520726f6c65206f6620612076616c696461746f722e484d696e696d756d4163746976655374616b65010018400000000000000000000000000000000004110120546865206d696e696d756d20616374697665206e6f6d696e61746f72207374616b65206f6620746865206c617374207375636365737366756c20656c656374696f6e2e344d696e436f6d6d697373696f6e01008010000000000ce820546865206d696e696d756d20616d6f756e74206f6620636f6d6d697373696f6e20746861742076616c696461746f72732063616e207365742e00802049662073657420746f206030602c206e6f206c696d6974206578697374732e184c65646765720001040200c5020400044501204d61702066726f6d20616c6c2028756e6c6f636b6564292022636f6e74726f6c6c657222206163636f756e747320746f2074686520696e666f20726567617264696e6720746865207374616b696e672e1450617965650101040500d90204000ce42057686572652074686520726577617264207061796d656e742073686f756c64206265206d6164652e204b657965642062792073746173682e00d02054574f582d4e4f54453a20534146452073696e636520604163636f756e7449646020697320612073656375726520686173682e2856616c696461746f72730101040500840800000c450120546865206d61702066726f6d202877616e6e616265292076616c696461746f72207374617368206b657920746f2074686520707265666572656e636573206f6620746861742076616c696461746f722e00d02054574f582d4e4f54453a20534146452073696e636520604163636f756e7449646020697320612073656375726520686173682e50436f756e746572466f7256616c696461746f7273010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d6170484d617856616c696461746f7273436f756e7400001004000c310120546865206d6178696d756d2076616c696461746f7220636f756e74206265666f72652077652073746f7020616c6c6f77696e67206e65772076616c696461746f727320746f206a6f696e2e00d0205768656e20746869732076616c7565206973206e6f74207365742c206e6f206c696d6974732061726520656e666f726365642e284e6f6d696e61746f72730001040500dd02040048750120546865206d61702066726f6d206e6f6d696e61746f72207374617368206b657920746f207468656972206e6f6d696e6174696f6e20707265666572656e6365732c206e616d656c79207468652076616c696461746f72732074686174582074686579207769736820746f20737570706f72742e003901204e6f7465207468617420746865206b657973206f6620746869732073746f72616765206d6170206d69676874206265636f6d65206e6f6e2d6465636f6461626c6520696e2063617365207468656d01205b60436f6e6669673a3a4d61784e6f6d696e6174696f6e73605d20636f6e66696775726174696f6e206973206465637265617365642e20496e2074686973207261726520636173652c207468657365206e6f6d696e61746f7273650120617265207374696c6c206578697374656e7420696e2073746f726167652c207468656972206b657920697320636f727265637420616e64207265747269657661626c652028692e652e2060636f6e7461696e735f6b657960710120696e6469636174657320746861742074686579206578697374292c206275742074686569722076616c75652063616e6e6f74206265206465636f6465642e205468657265666f72652c20746865206e6f6e2d6465636f6461626c656d01206e6f6d696e61746f72732077696c6c206566666563746976656c79206e6f742d65786973742c20756e74696c20746865792072652d7375626d697420746865697220707265666572656e6365732073756368207468617420697401012069732077697468696e2074686520626f756e6473206f6620746865206e65776c79207365742060436f6e6669673a3a4d61784e6f6d696e6174696f6e73602e006101205468697320696d706c696573207468617420603a3a697465725f6b65797328292e636f756e7428296020616e6420603a3a6974657228292e636f756e74282960206d696768742072657475726e20646966666572656e746d012076616c75657320666f722074686973206d61702e204d6f72656f7665722c20746865206d61696e20603a3a636f756e7428296020697320616c69676e656420776974682074686520666f726d65722c206e616d656c79207468656c206e756d626572206f66206b65797320746861742065786973742e006d01204c6173746c792c20696620616e79206f6620746865206e6f6d696e61746f7273206265636f6d65206e6f6e2d6465636f6461626c652c20746865792063616e206265206368696c6c656420696d6d6564696174656c7920766961b8205b6043616c6c3a3a6368696c6c5f6f74686572605d20646973706174636861626c6520627920616e796f6e652e00d02054574f582d4e4f54453a20534146452073696e636520604163636f756e7449646020697320612073656375726520686173682e50436f756e746572466f724e6f6d696e61746f7273010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d6170484d61784e6f6d696e61746f7273436f756e7400001004000c310120546865206d6178696d756d206e6f6d696e61746f7220636f756e74206265666f72652077652073746f7020616c6c6f77696e67206e65772076616c696461746f727320746f206a6f696e2e00d0205768656e20746869732076616c7565206973206e6f74207365742c206e6f206c696d6974732061726520656e666f726365642e2843757272656e744572610000100400105c205468652063757272656e742065726120696e6465782e006501205468697320697320746865206c617465737420706c616e6e6564206572612c20646570656e64696e67206f6e20686f77207468652053657373696f6e2070616c6c657420717565756573207468652076616c696461746f7280207365742c206974206d6967687420626520616374697665206f72206e6f742e244163746976654572610000e502040010d820546865206163746976652065726120696e666f726d6174696f6e2c20697420686f6c647320696e64657820616e642073746172742e0059012054686520616374697665206572612069732074686520657261206265696e672063757272656e746c792072657761726465642e2056616c696461746f7220736574206f66207468697320657261206d757374206265ac20657175616c20746f205b6053657373696f6e496e746572666163653a3a76616c696461746f7273605d2e5445726173537461727453657373696f6e496e6465780001040510100400103101205468652073657373696f6e20696e646578206174207768696368207468652065726120737461727420666f7220746865206c6173742060484953544f52595f44455054486020657261732e006101204e6f74653a205468697320747261636b7320746865207374617274696e672073657373696f6e2028692e652e2073657373696f6e20696e646578207768656e20657261207374617274206265696e672061637469766529f020666f7220746865206572617320696e20605b43757272656e74457261202d20484953544f52595f44455054482c2043757272656e744572615d602e2c457261735374616b6572730101080505e902c80c0000001878204578706f73757265206f662076616c696461746f72206174206572612e0061012054686973206973206b65796564206669727374206279207468652065726120696e64657820746f20616c6c6f772062756c6b2064656c6574696f6e20616e64207468656e20746865207374617368206163636f756e742e00a82049732069742072656d6f7665642061667465722060484953544f52595f44455054486020657261732e4101204966207374616b657273206861736e2774206265656e20736574206f7220686173206265656e2072656d6f766564207468656e20656d707479206578706f737572652069732072657475726e65642e48457261735374616b657273436c69707065640101080505e902c80c0000002c9820436c6970706564204578706f73757265206f662076616c696461746f72206174206572612e00590120546869732069732073696d696c617220746f205b60457261735374616b657273605d20627574206e756d626572206f66206e6f6d696e61746f7273206578706f736564206973207265647563656420746f20746865dc2060543a3a4d61784e6f6d696e61746f72526577617264656450657256616c696461746f72602062696767657374207374616b6572732e1d0120284e6f74653a20746865206669656c642060746f74616c6020616e6420606f776e60206f6620746865206578706f737572652072656d61696e7320756e6368616e676564292ef42054686973206973207573656420746f206c696d69742074686520692f6f20636f737420666f7220746865206e6f6d696e61746f72207061796f75742e005d012054686973206973206b657965642066697374206279207468652065726120696e64657820746f20616c6c6f772062756c6b2064656c6574696f6e20616e64207468656e20746865207374617368206163636f756e742e00a82049732069742072656d6f7665642061667465722060484953544f52595f44455054486020657261732e4101204966207374616b657273206861736e2774206265656e20736574206f7220686173206265656e2072656d6f766564207468656e20656d707479206578706f737572652069732072657475726e65642e484572617356616c696461746f7250726566730101080505e902840800001411012053696d696c617220746f2060457261735374616b657273602c207468697320686f6c64732074686520707265666572656e636573206f662076616c696461746f72732e0061012054686973206973206b65796564206669727374206279207468652065726120696e64657820746f20616c6c6f772062756c6b2064656c6574696f6e20616e64207468656e20746865207374617368206163636f756e742e00a82049732069742072656d6f7665642061667465722060484953544f52595f44455054486020657261732e4c4572617356616c696461746f7252657761726400010405101804000c09012054686520746f74616c2076616c696461746f7220657261207061796f757420666f7220746865206c6173742060484953544f52595f44455054486020657261732e0021012045726173207468617420686176656e27742066696e697368656420796574206f7220686173206265656e2072656d6f76656420646f65736e27742068617665207265776172642e4045726173526577617264506f696e74730101040510ed0214000000000008ac205265776172647320666f7220746865206c6173742060484953544f52595f44455054486020657261732e250120496620726577617264206861736e2774206265656e20736574206f7220686173206265656e2072656d6f766564207468656e2030207265776172642069732072657475726e65642e3845726173546f74616c5374616b65010104051018400000000000000000000000000000000008ec2054686520746f74616c20616d6f756e74207374616b656420666f7220746865206c6173742060484953544f52595f44455054486020657261732e1d0120496620746f74616c206861736e2774206265656e20736574206f7220686173206265656e2072656d6f766564207468656e2030207374616b652069732072657475726e65642e20466f72636545726101009004000454204d6f6465206f662065726120666f7263696e672e4c536c6173685265776172644672616374696f6e01008010000000000cf8205468652070657263656e74616765206f662074686520736c617368207468617420697320646973747269627574656420746f207265706f72746572732e00e4205468652072657374206f662074686520736c61736865642076616c75652069732068616e646c6564206279207468652060536c617368602e4c43616e63656c6564536c6173685061796f757401001840000000000000000000000000000000000815012054686520616d6f756e74206f662063757272656e637920676976656e20746f207265706f7274657273206f66206120736c617368206576656e7420776869636820776173ec2063616e63656c65642062792065787472616f7264696e6172792063697263756d7374616e6365732028652e672e20676f7665726e616e6365292e40556e6170706c696564536c61736865730101040510fd02040004c420416c6c20756e6170706c69656420736c61736865732074686174206172652071756575656420666f72206c617465722e28426f6e646564457261730100d50104001025012041206d617070696e672066726f6d207374696c6c2d626f6e646564206572617320746f207468652066697273742073657373696f6e20696e646578206f662074686174206572612e00c8204d75737420636f6e7461696e7320696e666f726d6174696f6e20666f72206572617320666f72207468652072616e67653abc20605b6163746976655f657261202d20626f756e64696e675f6475726174696f6e3b206163746976655f6572615d604c56616c696461746f72536c617368496e4572610001080505e9020d03040008450120416c6c20736c617368696e67206576656e7473206f6e2076616c696461746f72732c206d61707065642062792065726120746f20746865206869676865737420736c6173682070726f706f7274696f6e7020616e6420736c6173682076616c7565206f6620746865206572612e4c4e6f6d696e61746f72536c617368496e4572610001080505e90218040004610120416c6c20736c617368696e67206576656e7473206f6e206e6f6d696e61746f72732c206d61707065642062792065726120746f20746865206869676865737420736c6173682076616c7565206f6620746865206572612e34536c617368696e675370616e73000104050011030400048c20536c617368696e67207370616e7320666f72207374617368206163636f756e74732e245370616e536c61736801010405f9021503800000000000000000000000000000000000000000000000000000000000000000083d01205265636f72647320696e666f726d6174696f6e2061626f757420746865206d6178696d756d20736c617368206f6620612073746173682077697468696e206120736c617368696e67207370616e2cb82061732077656c6c20617320686f77206d7563682072657761726420686173206265656e2070616964206f75742e5443757272656e74506c616e6e656453657373696f6e01001010000000000ce820546865206c61737420706c616e6e65642073657373696f6e207363686564756c6564206279207468652073657373696f6e2070616c6c65742e0071012054686973206973206261736963616c6c7920696e2073796e632077697468207468652063616c6c20746f205b6070616c6c65745f73657373696f6e3a3a53657373696f6e4d616e616765723a3a6e65775f73657373696f6e605d2e4c4f6666656e64696e6756616c696461746f727301001903040024690120496e6469636573206f662076616c696461746f727320746861742068617665206f6666656e64656420696e20746865206163746976652065726120616e6420776865746865722074686579206172652063757272656e746c79282064697361626c65642e00690120546869732076616c75652073686f756c642062652061207375706572736574206f662064697361626c65642076616c696461746f72732073696e6365206e6f7420616c6c206f6666656e636573206c65616420746f2074686571012076616c696461746f72206265696e672064697361626c65642028696620746865726520776173206e6f20736c617368292e2054686973206973206e656564656420746f20747261636b207468652070657263656e74616765206f6649012076616c696461746f727320746861742068617665206f6666656e64656420696e207468652063757272656e74206572612c20656e737572696e672061206e65772065726120697320666f72636564206966750120604f6666656e64696e6756616c696461746f72735468726573686f6c646020697320726561636865642e205468652076656320697320616c77617973206b65707420736f7274656420736f20746861742077652063616e2066696e6471012077686574686572206120676976656e2076616c696461746f72206861732070726576696f75736c79206f6666656e646564207573696e672062696e617279207365617263682e204974206765747320636c6561726564207768656e38207468652065726120656e64732e384368696c6c5468726573686f6c640000210304000c510120546865207468726573686f6c6420666f72207768656e2075736572732063616e2073746172742063616c6c696e6720606368696c6c5f6f746865726020666f72206f746865722076616c696461746f7273202f5901206e6f6d696e61746f72732e20546865207468726573686f6c6420697320636f6d706172656420746f207468652061637475616c206e756d626572206f662076616c696461746f7273202f206e6f6d696e61746f72732901202860436f756e74466f722a602920696e207468652073797374656d20636f6d706172656420746f2074686520636f6e66696775726564206d61782028604d61782a436f756e7460292e012503017c1c384d61784e6f6d696e6174696f6e731010e803000004b4204d6178696d756d206e756d626572206f66206e6f6d696e6174696f6e7320706572206e6f6d696e61746f722e30486973746f72794465707468101054000000508c204e756d626572206f66206572617320746f206b65657020696e20686973746f72792e00e820466f6c6c6f77696e6720696e666f726d6174696f6e206973206b65707420666f72206572617320696e20605b63757272656e745f657261202d090120486973746f727944657074682c2063757272656e745f6572615d603a2060457261735374616b657273602c2060457261735374616b657273436c6970706564602c050120604572617356616c696461746f725072656673602c20604572617356616c696461746f72526577617264602c206045726173526577617264506f696e7473602cac206045726173546f74616c5374616b65602c206045726173537461727453657373696f6e496e646578602c8420605374616b696e674c65646765722e636c61696d65645f72657761726473602e00e4204d757374206265206d6f7265207468616e20746865206e756d626572206f6620657261732064656c617965642062792073657373696f6e2ef820492e652e2061637469766520657261206d75737420616c7761797320626520696e20686973746f72792e20492e652e20606163746976655f657261203ec42063757272656e745f657261202d20686973746f72795f646570746860206d7573742062652067756172616e746565642e001101204966206d6967726174696e6720616e206578697374696e672070616c6c65742066726f6d2073746f726167652076616c756520746f20636f6e6669672076616c75652cec20746869732073686f756c642062652073657420746f2073616d652076616c7565206f72206772656174657220617320696e2073746f726167652e001501204e6f74653a2060486973746f727944657074686020697320757365642061732074686520757070657220626f756e6420666f72207468652060426f756e646564566563601101206974656d20605374616b696e674c65646765722e636c61696d65645f72657761726473602e2053657474696e6720746869732076616c7565206c6f776572207468616ed820746865206578697374696e672076616c75652063616e206c65616420746f20696e636f6e73697374656e6369657320696e20746865150120605374616b696e674c65646765726020616e642077696c6c206e65656420746f2062652068616e646c65642070726f7065726c7920696e2061206d6967726174696f6e2ef020546865207465737420607265647563696e675f686973746f72795f64657074685f616272757074602073686f77732074686973206566666563742e3853657373696f6e735065724572611010020000000470204e756d626572206f662073657373696f6e7320706572206572612e3c426f6e64696e674475726174696f6e10100700000004e4204e756d626572206f6620657261732074686174207374616b65642066756e6473206d7573742072656d61696e20626f6e64656420666f722e48536c61736844656665724475726174696f6e101006000000100101204e756d626572206f662065726173207468617420736c6173686573206172652064656665727265642062792c20616674657220636f6d7075746174696f6e2e000d0120546869732073686f756c64206265206c657373207468616e2074686520626f6e64696e67206475726174696f6e2e2053657420746f203020696620736c617368657315012073686f756c64206265206170706c69656420696d6d6564696174656c792c20776974686f7574206f70706f7274756e69747920666f7220696e74657276656e74696f6e2e804d61784e6f6d696e61746f72526577617264656450657256616c696461746f7210100002000010f820546865206d6178696d756d206e756d626572206f66206e6f6d696e61746f727320726577617264656420666f7220656163682076616c696461746f722e00510120466f7220656163682076616c696461746f72206f6e6c79207468652060244d61784e6f6d696e61746f72526577617264656450657256616c696461746f72602062696767657374207374616b6572732063616e390120636c61696d207468656972207265776172642e2054686973207573656420746f206c696d69742074686520692f6f20636f737420666f7220746865206e6f6d696e61746f72207061796f75742e484d6178556e6c6f636b696e674368756e6b7310102000000028050120546865206d6178696d756d206e756d626572206f662060756e6c6f636b696e6760206368756e6b732061205b605374616b696e674c6564676572605d2063616e090120686176652e204566666563746976656c792064657465726d696e657320686f77206d616e7920756e6971756520657261732061207374616b6572206d61792062653820756e626f6e64696e6720696e2e00f8204e6f74653a20604d6178556e6c6f636b696e674368756e6b736020697320757365642061732074686520757070657220626f756e6420666f722074686501012060426f756e64656456656360206974656d20605374616b696e674c65646765722e756e6c6f636b696e67602e2053657474696e6720746869732076616c75650501206c6f776572207468616e20746865206578697374696e672076616c75652063616e206c65616420746f20696e636f6e73697374656e6369657320696e20746865090120605374616b696e674c65646765726020616e642077696c6c206e65656420746f2062652068616e646c65642070726f7065726c7920696e20612072756e74696d650501206d6967726174696f6e2e20546865207465737420607265647563696e675f6d61785f756e6c6f636b696e675f6368756e6b735f616272757074602073686f7773342074686973206566666563742e013d0306204f6666656e63657301204f6666656e6365730c1c5265706f727473000104052c4103040004490120546865207072696d61727920737472756374757265207468617420686f6c647320616c6c206f6666656e6365207265636f726473206b65796564206279207265706f7274206964656e746966696572732e58436f6e63757272656e745265706f727473496e64657801010805054503d1010400042901204120766563746f72206f66207265706f727473206f66207468652073616d65206b696e6420746861742068617070656e6564206174207468652073616d652074696d6520736c6f742e485265706f72747342794b696e64496e646578010104059830040018110120456e756d65726174657320616c6c207265706f727473206f662061206b696e6420616c6f6e672077697468207468652074696d6520746865792068617070656e65642e00bc20416c6c207265706f7274732061726520736f72746564206279207468652074696d65206f66206f6666656e63652e004901204e6f74652074686174207468652061637475616c2074797065206f662074686973206d617070696e6720697320605665633c75383e602c207468697320697320626563617573652076616c756573206f66690120646966666572656e7420747970657320617265206e6f7420737570706f7274656420617420746865206d6f6d656e7420736f2077652061726520646f696e6720746865206d616e75616c2073657269616c697a6174696f6e2e00019400000728486973746f726963616c0128486973746f726963616c0848486973746f726963616c53657373696f6e73000104051049030400045d01204d617070696e672066726f6d20686973746f726963616c2073657373696f6e20696e646963657320746f2073657373696f6e2d6461746120726f6f74206861736820616e642076616c696461746f7220636f756e742e2c53746f72656452616e676500009501040004e4205468652072616e6765206f6620686973746f726963616c2073657373696f6e732077652073746f72652e205b66697273742c206c6173742900000000081c53657373696f6e011c53657373696f6e1c2856616c696461746f72730100c1020400047c205468652063757272656e7420736574206f662076616c696461746f72732e3043757272656e74496e646578010010100000000004782043757272656e7420696e646578206f66207468652073657373696f6e2e345175657565644368616e67656401008c040008390120547275652069662074686520756e6465726c79696e672065636f6e6f6d6963206964656e746974696573206f7220776569676874696e6720626568696e64207468652076616c696461746f7273a420686173206368616e67656420696e20746865207175657565642076616c696461746f72207365742e285175657565644b65797301004d030400083d012054686520717565756564206b65797320666f7220746865206e6578742073657373696f6e2e205768656e20746865206e6578742073657373696f6e20626567696e732c207468657365206b657973e02077696c6c206265207573656420746f2064657465726d696e65207468652076616c696461746f7227732073657373696f6e206b6579732e4844697361626c656456616c696461746f72730100b5010400148020496e6469636573206f662064697361626c65642076616c696461746f72732e003d01205468652076656320697320616c77617973206b65707420736f7274656420736f20746861742077652063616e2066696e642077686574686572206120676976656e2076616c696461746f722069733d012064697361626c6564207573696e672062696e617279207365617263682e204974206765747320636c6561726564207768656e20606f6e5f73657373696f6e5f656e64696e67602072657475726e73642061206e657720736574206f66206964656e7469746965732e204e6578744b657973000104050055030400049c20546865206e6578742073657373696f6e206b65797320666f7220612076616c696461746f722e204b65794f776e657200010405590300040004090120546865206f776e6572206f662061206b65792e20546865206b65792069732074686520604b657954797065496460202b2074686520656e636f646564206b65792e016103019c00016503091c4772616e647061011c4772616e647061181453746174650100690304000490205374617465206f66207468652063757272656e7420617574686f72697479207365742e3450656e64696e674368616e676500006d03040004c42050656e64696e67206368616e67653a20287369676e616c65642061742c207363686564756c6564206368616e6765292e284e657874466f72636564000010040004bc206e65787420626c6f636b206e756d6265722077686572652077652063616e20666f7263652061206368616e67652e1c5374616c6c6564000095010400049020607472756560206966207765206172652063757272656e746c79207374616c6c65642e3043757272656e745365744964010028200000000000000000085d0120546865206e756d626572206f66206368616e6765732028626f746820696e207465726d73206f66206b65797320616e6420756e6465726c79696e672065636f6e6f6d696320726573706f6e736962696c697469657329c420696e20746865202273657422206f66204772616e6470612076616c696461746f72732066726f6d2067656e657369732e30536574496453657373696f6e00010405281004002859012041206d617070696e672066726f6d206772616e6470612073657420494420746f2074686520696e646578206f6620746865202a6d6f737420726563656e742a2073657373696f6e20666f722077686963682069747368206d656d62657273207765726520726573706f6e7369626c652e0045012054686973206973206f6e6c79207573656420666f722076616c69646174696e672065717569766f636174696f6e2070726f6f66732e20416e2065717569766f636174696f6e2070726f6f66206d7573744d0120636f6e7461696e732061206b65792d6f776e6572736869702070726f6f6620666f72206120676976656e2073657373696f6e2c207468657265666f7265207765206e65656420612077617920746f20746965450120746f6765746865722073657373696f6e7320616e64204752414e44504120736574206964732c20692e652e207765206e65656420746f2076616c6964617465207468617420612076616c696461746f7241012077617320746865206f776e6572206f66206120676976656e206b6579206f6e206120676976656e2073657373696f6e2c20616e642077686174207468652061637469766520736574204944207761735420647572696e6720746861742073657373696f6e2e00b82054574f582d4e4f54453a2060536574496460206973206e6f7420756e646572207573657220636f6e74726f6c2e01750301a008384d6178417574686f7269746965731010a0860100045c204d617820417574686f72697469657320696e20757365584d6178536574496453657373696f6e456e74726965732820000000000000000018390120546865206d6178696d756d206e756d626572206f6620656e747269657320746f206b65657020696e207468652073657420696420746f2073657373696f6e20696e646578206d617070696e672e0031012053696e6365207468652060536574496453657373696f6e60206d6170206973206f6e6c79207573656420666f722076616c69646174696e672065717569766f636174696f6e73207468697329012076616c75652073686f756c642072656c61746520746f2074686520626f6e64696e67206475726174696f6e206f66207768617465766572207374616b696e672073797374656d2069733501206265696e6720757365642028696620616e79292e2049662065717569766f636174696f6e2068616e646c696e67206973206e6f7420656e61626c6564207468656e20746869732076616c7565342063616e206265207a65726f2e01a1030a20496d4f6e6c696e650120496d4f6e6c696e651038486561727462656174416674657201001010000000002c1d012054686520626c6f636b206e756d6265722061667465722077686963682069742773206f6b20746f2073656e64206865617274626561747320696e207468652063757272656e74242073657373696f6e2e0025012041742074686520626567696e6e696e67206f6620656163682073657373696f6e20776520736574207468697320746f20612076616c756520746861742073686f756c642066616c6c350120726f7567686c7920696e20746865206d6964646c65206f66207468652073657373696f6e206475726174696f6e2e20546865206964656120697320746f206669727374207761697420666f721901207468652076616c696461746f727320746f2070726f64756365206120626c6f636b20696e207468652063757272656e742073657373696f6e2c20736f207468617420746865a820686561727462656174206c61746572206f6e2077696c6c206e6f74206265206e65636573736172792e00390120546869732076616c75652077696c6c206f6e6c79206265207573656420617320612066616c6c6261636b206966207765206661696c20746f2067657420612070726f7065722073657373696f6e2d012070726f677265737320657374696d6174652066726f6d20604e65787453657373696f6e526f746174696f6e602c2061732074686f736520657374696d617465732073686f756c642062650101206d6f7265206163637572617465207468656e207468652076616c75652077652063616c63756c61746520666f7220604865617274626561744166746572602e104b6579730100a503040004d0205468652063757272656e7420736574206f66206b6579732074686174206d61792069737375652061206865617274626561742e4852656365697665644865617274626561747300010805059501ad030400083d0120466f7220656163682073657373696f6e20696e6465782c207765206b6565702061206d617070696e67206f66206053657373696f6e496e6465786020616e64206041757468496e6465786020746fb02060577261707065724f70617175653c426f756e6465644f70617175654e6574776f726b53746174653e602e38417574686f726564426c6f636b730101080505e90210100000000008150120466f7220656163682073657373696f6e20696e6465782c207765206b6565702061206d617070696e67206f66206056616c696461746f7249643c543e6020746f20746865c8206e756d626572206f6620626c6f636b7320617574686f7265642062792074686520676976656e20617574686f726974792e01c10301b40440556e7369676e65645072696f726974792820ffffffffffffffff10f0204120636f6e66696775726174696f6e20666f722062617365207072696f72697479206f6620756e7369676e6564207472616e73616374696f6e732e0015012054686973206973206578706f73656420736f20746861742069742063616e2062652074756e656420666f7220706172746963756c61722072756e74696d652c207768656eb4206d756c7469706c652070616c6c6574732073656e6420756e7369676e6564207472616e73616374696f6e732e01e1030b24566f7465724c6973740124566f7465724c6973740c244c6973744e6f6465730001040500e50304000c8020412073696e676c65206e6f64652c2077697468696e20736f6d65206261672e000501204e6f6465732073746f7265206c696e6b7320666f727761726420616e64206261636b2077697468696e207468656972207265737065637469766520626167732e4c436f756e746572466f724c6973744e6f646573010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d6170204c697374426167730001040528e90304000c642041206261672073746f72656420696e2073746f726167652e0019012053746f7265732061206042616760207374727563742c2077686963682073746f726573206865616420616e64207461696c20706f696e7465727320746f20697473656c662e01ed0301d804344261675468726573686f6c6473f1030400acd020546865206c697374206f66207468726573686f6c64732073657061726174696e672074686520766172696f757320626167732e00490120496473206172652073657061726174656420696e746f20756e736f727465642062616773206163636f7264696e6720746f2074686569722073636f72652e205468697320737065636966696573207468656101207468726573686f6c64732073657061726174696e672074686520626167732e20416e20696427732062616720697320746865206c6172676573742062616720666f722077686963682074686520696427732073636f7265b8206973206c657373207468616e206f7220657175616c20746f20697473207570706572207468726573686f6c642e006501205768656e20696473206172652069746572617465642c2068696768657220626167732061726520697465726174656420636f6d706c6574656c79206265666f7265206c6f77657220626167732e2054686973206d65616e735901207468617420697465726174696f6e206973205f73656d692d736f727465645f3a20696473206f66206869676865722073636f72652074656e6420746f20636f6d65206265666f726520696473206f66206c6f7765722d012073636f72652c206275742070656572206964732077697468696e206120706172746963756c6172206261672061726520736f7274656420696e20696e73657274696f6e206f726465722e006820232045787072657373696e672074686520636f6e7374616e74004d01205468697320636f6e7374616e74206d75737420626520736f7274656420696e207374726963746c7920696e6372656173696e67206f726465722e204475706c6963617465206974656d7320617265206e6f742c207065726d69747465642e00410120546865726520697320616e20696d706c696564207570706572206c696d6974206f66206053636f72653a3a4d4158603b20746861742076616c756520646f6573206e6f74206e65656420746f2062652101207370656369666965642077697468696e20746865206261672e20466f7220616e792074776f207468726573686f6c64206c697374732c206966206f6e6520656e647320776974683101206053636f72653a3a4d4158602c20746865206f74686572206f6e6520646f6573206e6f742c20616e64207468657920617265206f746865727769736520657175616c2c207468652074776f7c206c697374732077696c6c20626568617665206964656e746963616c6c792e003820232043616c63756c6174696f6e005501204974206973207265636f6d6d656e64656420746f2067656e65726174652074686520736574206f66207468726573686f6c647320696e20612067656f6d6574726963207365726965732c2073756368207468617441012074686572652065786973747320736f6d6520636f6e7374616e7420726174696f2073756368207468617420607468726573686f6c645b6b202b20315d203d3d20287468726573686f6c645b6b5d202ad020636f6e7374616e745f726174696f292e6d6178287468726573686f6c645b6b5d202b2031296020666f7220616c6c20606b602e005901205468652068656c7065727320696e2074686520602f7574696c732f6672616d652f67656e65726174652d6261677360206d6f64756c652063616e2073696d706c69667920746869732063616c63756c6174696f6e2e002c2023204578616d706c6573005101202d20496620604261675468726573686f6c64733a3a67657428292e69735f656d7074792829602c207468656e20616c6c20696473206172652070757420696e746f207468652073616d65206261672c20616e64b0202020697465726174696f6e206973207374726963746c7920696e20696e73657274696f6e206f726465722e6101202d20496620604261675468726573686f6c64733a3a67657428292e6c656e2829203d3d203634602c20616e6420746865207468726573686f6c6473206172652064657465726d696e6564206163636f7264696e6720746f11012020207468652070726f63656475726520676976656e2061626f76652c207468656e2074686520636f6e7374616e7420726174696f20697320657175616c20746f20322e6501202d20496620604261675468726573686f6c64733a3a67657428292e6c656e2829203d3d20323030602c20616e6420746865207468726573686f6c6473206172652064657465726d696e6564206163636f7264696e6720746f59012020207468652070726f63656475726520676976656e2061626f76652c207468656e2074686520636f6e7374616e7420726174696f20697320617070726f78696d6174656c7920657175616c20746f20312e3234382e6101202d20496620746865207468726573686f6c64206c69737420626567696e7320605b312c20322c20332c202e2e2e5d602c207468656e20616e20696420776974682073636f72652030206f7220312077696c6c2066616c6cf0202020696e746f2062616720302c20616e20696420776974682073636f726520322077696c6c2066616c6c20696e746f2062616720312c206574632e00302023204d6967726174696f6e00610120496e20746865206576656e7420746861742074686973206c6973742065766572206368616e6765732c206120636f7079206f6620746865206f6c642062616773206c697374206d7573742062652072657461696e65642e5d012057697468207468617420604c6973743a3a6d696772617465602063616e2062652063616c6c65642c2077686963682077696c6c20706572666f726d2074686520617070726f707269617465206d6967726174696f6e2e01f5030c485472616e73616374696f6e5061796d656e7401485472616e73616374696f6e5061796d656e7408444e6578744665654d756c7469706c6965720100fd0340000064a7b3b6e00d0000000000000000003853746f7261676556657273696f6e010001040400000001dc04604f7065726174696f6e616c4665654d756c7469706c696572080401545901204120666565206d756c6974706c69657220666f7220604f7065726174696f6e616c602065787472696e7369637320746f20636f6d7075746520227669727475616c207469702220746f20626f6f73742074686569722c20607072696f7269747960004d0120546869732076616c7565206973206d756c7469706c656420627920746865206066696e616c5f6665656020746f206f627461696e206120227669727475616c20746970222074686174206973206c61746572f420616464656420746f20612074697020636f6d706f6e656e7420696e20726567756c617220607072696f72697479602063616c63756c6174696f6e732e4d01204974206d65616e732074686174206120604e6f726d616c60207472616e73616374696f6e2063616e2066726f6e742d72756e20612073696d696c61726c792d73697a656420604f7065726174696f6e616c6041012065787472696e736963202877697468206e6f20746970292c20627920696e636c7564696e672061207469702076616c75652067726561746572207468616e20746865207669727475616c207469702e003c20606060727573742c69676e6f726540202f2f20466f7220604e6f726d616c608c206c6574207072696f72697479203d207072696f726974795f63616c6328746970293b0054202f2f20466f7220604f7065726174696f6e616c601101206c6574207669727475616c5f746970203d2028696e636c7573696f6e5f666565202b2074697029202a204f7065726174696f6e616c4665654d756c7469706c6965723bc4206c6574207072696f72697479203d207072696f726974795f63616c6328746970202b207669727475616c5f746970293b1020606060005101204e6f746520746861742073696e636520776520757365206066696e616c5f6665656020746865206d756c7469706c696572206170706c69657320616c736f20746f2074686520726567756c61722060746970605d012073656e74207769746820746865207472616e73616374696f6e2e20536f2c206e6f74206f6e6c7920646f657320746865207472616e73616374696f6e206765742061207072696f726974792062756d702062617365646101206f6e207468652060696e636c7573696f6e5f666565602c2062757420776520616c736f20616d706c6966792074686520696d70616374206f662074697073206170706c69656420746f20604f7065726174696f6e616c6038207472616e73616374696f6e732e000d105375646f01105375646f040c4b6579000000040004842054686520604163636f756e74496460206f6620746865207375646f206b65792e01050401e000011d050e28437265646974636f696e0128437265646974636f696e38344c656761637957616c6c657473000104038101180400004c4c656761637942616c616e63654b6565706572000000040000284465616c4f72646572730001080506210575010400002441646472657373657300010402f4f804000024557365644775696473000104020101e80400002441736b4f7264657273000108050621054901040000244269644f7264657273000108050621056501040000184f6666657273000108050621057101040000245472616e7366657273000104061d01210104000038436f6c6c6563746564436f696e73000104060501410104000050436f6c6c656374436f696e73436f6e747261637401000d0154a3ee21c306a700e682abcdfe9baa6a08f382041900003047415445436f6e747261637401000d0154a3ee21c306a700e682abcdfe9baa6a08f3820419000044474154454661756365744163636f756e7400000004000030436c65616e7570537461746500002505040000010d0401f00450506572426c6f636b436c65616e75704c696d697410105fa80000000135050f28446966666963756c74790128446966666963756c7479108450726576696f7573446966666963756c74696573416e6454696d657374616d7073010039050400004443757272656e74446966666963756c747901003501800000000000000000000000000000000000000000000000000000000000000000003c546172676574426c6f636b54696d650100282000000000000000000068446966666963756c747941646a7573746d656e74506572696f640100450520000000000000000000000000014905101c52657761726473011c52657761726473042c426c6f636b417574686f7200000004000000018d01000011245363686564756c657201245363686564756c65720c3c496e636f6d706c65746553696e6365000010040000184167656e646101010405104d050400044d01204974656d7320746f2062652065786563757465642c20696e64657865642062792074686520626c6f636b206e756d626572207468617420746865792073686f756c64206265206578656375746564206f6e2e184c6f6f6b757000010405049501040010f8204c6f6f6b75702066726f6d2061206e616d6520746f2074686520626c6f636b206e756d62657220616e6420696e646578206f6620746865207461736b2e00590120466f72207633202d3e207634207468652070726576696f75736c7920756e626f756e646564206964656e7469746965732061726520426c616b65322d3235362068617368656420746f20666f726d2074686520763430206964656e7469746965732e01390401910108344d6178696d756d57656967687420400b00409452a30313cccccccccccccccc04290120546865206d6178696d756d207765696768742074686174206d6179206265207363686564756c65642070657220626c6f636b20666f7220616e7920646973706174636861626c65732e504d61785363686564756c6564506572426c6f636b101032000000041d0120546865206d6178696d756d206e756d626572206f66207363686564756c65642063616c6c7320696e2074686520717565756520666f7220612073696e676c6520626c6f636b2e01650512345461736b5363686564756c657201345461736b5363686564756c6572083050656e64696e675461736b730001080606210569050400002c417574686f7269746965730001040200e804000000019d010001710513204964656e7469747901204964656e7469747910284964656e746974794f660001040500750504000c210120496e666f726d6174696f6e20746861742069732070657274696e656e7420746f206964656e746966792074686520656e7469747920626568696e6420616e206163636f756e742e00c02054574f582d4e4f54453a204f4b20e2809520604163636f756e7449646020697320612073656375726520686173682e1c53757065724f660001040200d1040400086101205468652073757065722d6964656e74697479206f6620616e20616c7465726e6174697665202273756222206964656e7469747920746f676574686572207769746820697473206e616d652c2077697468696e2074686174510120636f6e746578742e20496620746865206163636f756e74206973206e6f7420736f6d65206f74686572206163636f756e742773207375622d6964656e746974792c207468656e206a75737420604e6f6e65602e18537562734f660101040500850544000000000000000000000000000000000014b820416c7465726e6174697665202273756222206964656e746974696573206f662074686973206163636f756e742e001d0120546865206669727374206974656d20697320746865206465706f7369742c20746865207365636f6e64206973206120766563746f72206f6620746865206163636f756e74732e00c02054574f582d4e4f54453a204f4b20e2809520604163636f756e7449646020697320612073656375726520686173682e285265676973747261727301008d050400104d012054686520736574206f6620726567697374726172732e204e6f7420657870656374656420746f206765742076657279206269672061732063616e206f6e6c79206265206164646564207468726f7567682061a8207370656369616c206f726967696e20286c696b656c79206120636f756e63696c206d6f74696f6e292e0029012054686520696e64657820696e746f20746869732063616e206265206361737420746f2060526567697374726172496e6465786020746f2067657420612076616c69642076616c75652e01410401a101183042617369634465706f7369741840f401000000000000000000000000000004d42054686520616d6f756e742068656c64206f6e206465706f73697420666f7220612072656769737465726564206964656e74697479304669656c644465706f7369741840f4010000000000000000000000000000042d012054686520616d6f756e742068656c64206f6e206465706f73697420706572206164646974696f6e616c206669656c6420666f7220612072656769737465726564206964656e746974792e445375624163636f756e744465706f7369741840f40100000000000000000000000000000c65012054686520616d6f756e742068656c64206f6e206465706f73697420666f7220612072656769737465726564207375626163636f756e742e20546869732073686f756c64206163636f756e7420666f7220746865206661637465012074686174206f6e652073746f72616765206974656d27732076616c75652077696c6c20696e637265617365206279207468652073697a65206f6620616e206163636f756e742049442c20616e642074686572652077696c6c350120626520616e6f746865722074726965206974656d2077686f73652076616c7565206973207468652073697a65206f6620616e206163636f756e7420494420706c75732033322062797465732e384d61785375624163636f756e747310100a000000040d0120546865206d6178696d756d206e756d626572206f66207375622d6163636f756e747320616c6c6f77656420706572206964656e746966696564206163636f756e742e4c4d61784164646974696f6e616c4669656c647310100a000000086501204d6178696d756d206e756d626572206f66206164646974696f6e616c206669656c64732074686174206d61792062652073746f72656420696e20616e2049442e204e656564656420746f20626f756e642074686520492f4fe020726571756972656420746f2061636365737320616e206964656e746974792c206275742063616e2062652070726574747920686967682e344d61785265676973747261727310100f000000085101204d61786d696d756d206e756d626572206f66207265676973747261727320616c6c6f77656420696e207468652073797374656d2e204e656564656420746f20626f756e642074686520636f6d706c65786974797c206f662c20652e672e2c207570646174696e67206a756467656d656e74732e019d05141c5574696c6974790001e10401a501044c626174636865645f63616c6c735f6c696d69741010aa2a000004a820546865206c696d6974206f6e20746865206e756d626572206f6620626174636865642063616c6c732e01a105151450726f7879011450726f7879081c50726f786965730101040500a5054400000000000000000000000000000000000845012054686520736574206f66206163636f756e742070726f786965732e204d61707320746865206163636f756e74207768696368206861732064656c65676174656420746f20746865206163636f756e7473210120776869636820617265206265696e672064656c65676174656420746f2c20746f67657468657220776974682074686520616d6f756e742068656c64206f6e206465706f7369742e34416e6e6f756e63656d656e74730101040500b50544000000000000000000000000000000000004ac2054686520616e6e6f756e63656d656e7473206d616465206279207468652070726f787920286b6579292e01f50401a901184050726f78794465706f736974426173651840f401000000000000000000000000000010110120546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e6720612070726f78792e00010120546869732069732068656c6420666f7220616e206164646974696f6e616c2073746f72616765206974656d2077686f73652076616c75652073697a652069732501206073697a656f662842616c616e6365296020627974657320616e642077686f7365206b65792073697a65206973206073697a656f66284163636f756e74496429602062797465732e4850726f78794465706f736974466163746f721840f401000000000000000000000000000014bc2054686520616d6f756e74206f662063757272656e6379206e6565646564207065722070726f78792061646465642e00350120546869732069732068656c6420666f7220616464696e6720333220627974657320706c757320616e20696e7374616e6365206f66206050726f78795479706560206d6f726520696e746f20616101207072652d6578697374696e672073746f726167652076616c75652e20546875732c207768656e20636f6e6669677572696e67206050726f78794465706f736974466163746f7260206f6e652073686f756c642074616b65f420696e746f206163636f756e7420603332202b2070726f78795f747970652e656e636f646528292e6c656e282960206279746573206f6620646174612e284d617850726f7869657310104000000004f020546865206d6178696d756d20616d6f756e74206f662070726f7869657320616c6c6f77656420666f7220612073696e676c65206163636f756e742e284d617850656e64696e6710104000000004450120546865206d6178696d756d20616d6f756e74206f662074696d652d64656c6179656420616e6e6f756e63656d656e747320746861742061726520616c6c6f77656420746f2062652070656e64696e672e5c416e6e6f756e63656d656e744465706f736974426173651840f401000000000000000000000000000010310120546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e6720616e20616e6e6f756e63656d656e742e00490120546869732069732068656c64207768656e2061206e65772073746f72616765206974656d20686f6c64696e672061206042616c616e636560206973206372656174656420287479706963616c6c7920313620206279746573292e64416e6e6f756e63656d656e744465706f736974466163746f721840f401000000000000000000000000000010d42054686520616d6f756e74206f662063757272656e6379206e65656465642070657220616e6e6f756e63656d656e74206d6164652e00590120546869732069732068656c6420666f7220616464696e6720616e20604163636f756e744964602c2060486173686020616e642060426c6f636b4e756d6265726020287479706963616c6c79203638206279746573298c20696e746f2061207072652d6578697374696e672073746f726167652076616c75652e01c505162c46617374556e7374616b65012c46617374556e7374616b651010486561640000c905040004c0205468652063757272656e74202268656164206f662074686520717565756522206265696e6720756e7374616b65642e145175657565000104050018040014c020546865206d6170206f6620616c6c206163636f756e74732077697368696e6720746f20626520756e7374616b65642e003901204b6565707320747261636b206f6620604163636f756e744964602077697368696e6720746f20756e7374616b6520616e64206974277320636f72726573706f6e64696e67206465706f7369742e00d02054574f582d4e4f54453a20534146452073696e636520604163636f756e7449646020697320612073656375726520686173682e3c436f756e746572466f725175657565010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d61704c45726173546f436865636b506572426c6f636b0100101000000000188c204e756d626572206f66206572617320746f20636865636b2070657220626c6f636b2e00c82049662073657420746f20302c20746869732070616c6c657420646f6573206162736f6c7574656c79206e6f7468696e672e005d01204261736564206f6e2074686520616d6f756e74206f662077656967687420617661696c61626c6520617420606f6e5f69646c65602c20757020746f2074686973206d616e792065726173206f6620612073696e676c6570206e6f6d696e61746f72206d6967687420626520636865636b65642e01fd0401b101041c4465706f7369741840f4010000000000000000000000000000086501204465706f73697420746f2074616b6520666f7220756e7374616b696e672c20746f206d616b6520737572652077652772652061626c6520746f20736c6173682074686520697420696e206f7264657220746f20636f766572c02074686520636f737473206f66207265736f7572636573206f6e20756e7375636365737366756c20756e7374616b652e01d505173c4e6f6d696e6174696f6e506f6f6c73013c4e6f6d696e6174696f6e506f6f6c73502c4d696e4a6f696e426f6e640100184000000000000000000000000000000000049c204d696e696d756d20616d6f756e7420746f20626f6e6420746f206a6f696e206120706f6f6c2e344d696e437265617465426f6e6401001840000000000000000000000000000000001ca0204d696e696d756d20626f6e6420726571756972656420746f20637265617465206120706f6f6c2e00650120546869732069732074686520616d6f756e74207468617420746865206465706f7369746f72206d7573742070757420617320746865697220696e697469616c207374616b6520696e2074686520706f6f6c2c20617320616e8820696e6469636174696f6e206f662022736b696e20696e207468652067616d65222e0069012054686973206973207468652076616c756520746861742077696c6c20616c7761797320657869737420696e20746865207374616b696e67206c6564676572206f662074686520706f6f6c20626f6e646564206163636f756e7480207768696c6520616c6c206f74686572206163636f756e7473206c656176652e204d6178506f6f6c730000100400086901204d6178696d756d206e756d626572206f66206e6f6d696e6174696f6e20706f6f6c7320746861742063616e2065786973742e20496620604e6f6e65602c207468656e20616e20756e626f756e646564206e756d626572206f664420706f6f6c732063616e2065786973742e384d6178506f6f6c4d656d626572730000100400084901204d6178696d756d206e756d626572206f66206d656d6265727320746861742063616e20657869737420696e207468652073797374656d2e20496620604e6f6e65602c207468656e2074686520636f756e74b8206d656d6265727320617265206e6f7420626f756e64206f6e20612073797374656d20776964652062617369732e544d6178506f6f6c4d656d62657273506572506f6f6c0000100400084101204d6178696d756d206e756d626572206f66206d656d626572732074686174206d61792062656c6f6e6720746f20706f6f6c2e20496620604e6f6e65602c207468656e2074686520636f756e74206f66a8206d656d62657273206973206e6f7420626f756e64206f6e20612070657220706f6f6c2062617369732e4c476c6f62616c4d6178436f6d6d697373696f6e00008004000c690120546865206d6178696d756d20636f6d6d697373696f6e20746861742063616e2062652063686172676564206279206120706f6f6c2e2055736564206f6e20636f6d6d697373696f6e207061796f75747320746f20626f756e64250120706f6f6c20636f6d6d697373696f6e73207468617420617265203e2060476c6f62616c4d6178436f6d6d697373696f6e602c206e65636573736172792069662061206675747572650d012060476c6f62616c4d6178436f6d6d697373696f6e60206973206c6f776572207468616e20736f6d652063757272656e7420706f6f6c20636f6d6d697373696f6e732e2c506f6f6c4d656d626572730001040500d90504000c4020416374697665206d656d626572732e00d02054574f582d4e4f54453a20534146452073696e636520604163636f756e7449646020697320612073656375726520686173682e54436f756e746572466f72506f6f6c4d656d62657273010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d61702c426f6e646564506f6f6c730001040510ed05040004682053746f7261676520666f7220626f6e64656420706f6f6c732e54436f756e746572466f72426f6e646564506f6f6c73010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d61702c526577617264506f6f6c730001040510010604000875012052657761726420706f6f6c732e2054686973206973207768657265207468657265207265776172647320666f72206561636820706f6f6c20616363756d756c6174652e205768656e2061206d656d62657273207061796f7574206973590120636c61696d65642c207468652062616c616e636520636f6d6573206f757420666f207468652072657761726420706f6f6c2e204b657965642062792074686520626f6e64656420706f6f6c73206163636f756e742e54436f756e746572466f72526577617264506f6f6c73010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d61703c537562506f6f6c7353746f726167650001040510050604000819012047726f757073206f6620756e626f6e64696e6720706f6f6c732e20456163682067726f7570206f6620756e626f6e64696e6720706f6f6c732062656c6f6e677320746f2061290120626f6e64656420706f6f6c2c2068656e636520746865206e616d65207375622d706f6f6c732e204b657965642062792074686520626f6e64656420706f6f6c73206163636f756e742e64436f756e746572466f72537562506f6f6c7353746f72616765010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d6170204d6574616461746101010405101d060400045c204d6574616461746120666f722074686520706f6f6c2e48436f756e746572466f724d65746164617461010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d6170284c617374506f6f6c4964010010100000000004d0204576657220696e6372656173696e67206e756d626572206f6620616c6c20706f6f6c73206372656174656420736f206661722e4c52657665727365506f6f6c49644c6f6f6b7570000104050010040010dc20412072657665727365206c6f6f6b75702066726f6d2074686520706f6f6c2773206163636f756e7420696420746f206974732069642e0055012054686973206973206f6e6c79207573656420666f7220736c617368696e672e20496e20616c6c206f7468657220696e7374616e6365732c2074686520706f6f6c20696420697320757365642c20616e6420746865c0206163636f756e7473206172652064657465726d696e6973746963616c6c7920646572697665642066726f6d2069742e74436f756e746572466f7252657665727365506f6f6c49644c6f6f6b7570010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d617040436c61696d5065726d697373696f6e73010104050019050400040101204d61702066726f6d206120706f6f6c206d656d626572206163636f756e7420746f207468656972206f7074656420636c61696d207065726d697373696f6e2e01010501b901082050616c6c65744964210620637265646974636f048420546865206e6f6d696e6174696f6e20706f6f6c27732070616c6c65742069642e484d6178506f696e7473546f42616c616e6365080464301d0120546865206d6178696d756d20706f6f6c20706f696e74732d746f2d62616c616e636520726174696f207468617420616e20606f70656e6020706f6f6c2063616e20686176652e005501205468697320697320696d706f7274616e7420696e20746865206576656e7420736c617368696e672074616b657320706c61636520616e642074686520706f6f6c277320706f696e74732d746f2d62616c616e63657c20726174696f206265636f6d65732064697370726f706f7274696f6e616c2e006501204d6f72656f7665722c20746869732072656c6174657320746f207468652060526577617264436f756e7465726020747970652061732077656c6c2c206173207468652061726974686d65746963206f7065726174696f6e7355012061726520612066756e6374696f6e206f66206e756d626572206f6620706f696e74732c20616e642062792073657474696e6720746869732076616c756520746f20652e672e2031302c20796f7520656e73757265650120746861742074686520746f74616c206e756d626572206f6620706f696e747320696e207468652073797374656d20617265206174206d6f73742031302074696d65732074686520746f74616c5f69737375616e6365206f669c2074686520636861696e2c20696e20746865206162736f6c75746520776f72736520636173652e00490120466f7220612076616c7565206f662031302c20746865207468726573686f6c6420776f756c64206265206120706f6f6c20706f696e74732d746f2d62616c616e636520726174696f206f662031303a312e310120537563682061207363656e6172696f20776f756c6420616c736f20626520746865206571756976616c656e74206f662074686520706f6f6c206265696e672039302520736c61736865642e012506182d06042048436865636b4e6f6e5a65726f53656e6465723506e840436865636b5370656356657273696f6e39061038436865636b547856657273696f6e3d061030436865636b47656e6573697341062c38436865636b4d6f7274616c69747945062c28436865636b4e6f6e63654d06e82c436865636b5765696768745106e8604368617267655472616e73616374696f6e5061796d656e745506e85906","id":"1"} +{"jsonrpc":"2.0","result":"0x6d6574610e5906000c1c73705f636f72651863727970746f2c4163636f756e7449643332000004000401205b75383b2033325d0000040000032000000008000800000503000c08306672616d655f73797374656d2c4163636f756e74496e666f0814496e64657801102c4163636f756e74446174610114001401146e6f6e6365100114496e646578000124636f6e73756d657273100120526566436f756e7400012470726f766964657273100120526566436f756e7400012c73756666696369656e7473100120526566436f756e740001106461746114012c4163636f756e7444617461000010000005050014083c70616c6c65745f62616c616e6365732c4163636f756e7444617461041c42616c616e63650118001001106672656518011c42616c616e6365000120726573657276656418011c42616c616e636500012c6d6973635f66726f7a656e18011c42616c616e63650001286665655f66726f7a656e18011c42616c616e636500001800000507001c0c346672616d655f737570706f7274206469737061746368405065724469737061746368436c6173730404540120000c01186e6f726d616c2001045400012c6f7065726174696f6e616c200104540001246d616e6461746f7279200104540000200c2873705f77656967687473247765696768745f76321857656967687400000801207265665f74696d6524010c75363400012870726f6f665f73697a6524010c75363400002400000628002800000506002c083c7072696d69746976655f74797065731048323536000004000401205b75383b2033325d000030000002080034102873705f72756e74696d651c67656e65726963186469676573741844696765737400000401106c6f677338013c5665633c4469676573744974656d3e0000380000023c003c102873705f72756e74696d651c67656e6572696318646967657374284469676573744974656d0001142850726552756e74696d650800400144436f6e73656e737573456e67696e654964000030011c5665633c75383e00060024436f6e73656e7375730800400144436f6e73656e737573456e67696e654964000030011c5665633c75383e000400105365616c0800400144436f6e73656e737573456e67696e654964000030011c5665633c75383e000500144f74686572040030011c5665633c75383e0000006452756e74696d65456e7669726f6e6d656e745570646174656400080000400000030400000008004400000248004808306672616d655f73797374656d2c4576656e745265636f7264080445014c0454012c000c01147068617365b501011450686173650001146576656e744c010445000118746f70696373b90101185665633c543e00004c085c637265646974636f696e5f6e6f64655f72756e74696d653052756e74696d654576656e7400014c1853797374656d04005001706672616d655f73797374656d3a3a4576656e743c52756e74696d653e0000002042616c616e636573040074017c70616c6c65745f62616c616e6365733a3a4576656e743c52756e74696d653e0004001c5374616b696e6704007c01a070616c6c65745f7374616b696e675f7375627374726174653a3a4576656e743c52756e74696d653e000600204f6666656e636573040094015870616c6c65745f6f6666656e6365733a3a4576656e740007001c53657373696f6e04009c015470616c6c65745f73657373696f6e3a3a4576656e740009001c4772616e6470610400a0015470616c6c65745f6772616e6470613a3a4576656e74000a0020496d4f6e6c696e650400b4018070616c6c65745f696d5f6f6e6c696e653a3a4576656e743c52756e74696d653e000b0024566f7465724c6973740400d801f470616c6c65745f626167735f6c6973743a3a4576656e743c52756e74696d652c2070616c6c65745f626167735f6c6973743a3a496e7374616e6365313e000c00485472616e73616374696f6e5061796d656e740400dc01a870616c6c65745f7472616e73616374696f6e5f7061796d656e743a3a4576656e743c52756e74696d653e000d00105375646f0400e0016c70616c6c65745f7375646f3a3a4576656e743c52756e74696d653e000e0028437265646974636f696e0400f0018470616c6c65745f637265646974636f696e3a3a4576656e743c52756e74696d653e000f001c5265776172647304007501017870616c6c65745f726577617264733a3a4576656e743c52756e74696d653e001100245363686564756c657204007901018070616c6c65745f7363686564756c65723a3a4576656e743c52756e74696d653e001200345461736b5363686564756c65720400850101b870616c6c65745f6f6666636861696e5f7461736b5f7363686564756c65723a3a4576656e743c52756e74696d653e001300204964656e7469747904008901017c70616c6c65745f6964656e746974793a3a4576656e743c52756e74696d653e0014001c5574696c69747904008d01015470616c6c65745f7574696c6974793a3a4576656e740015001450726f787904009101017070616c6c65745f70726f78793a3a4576656e743c52756e74696d653e0016002c46617374556e7374616b6504009901018c70616c6c65745f666173745f756e7374616b653a3a4576656e743c52756e74696d653e0017003c4e6f6d696e6174696f6e506f6f6c730400a101019c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c733a3a4576656e743c52756e74696d653e00180000500c306672616d655f73797374656d1870616c6c6574144576656e740404540001184045787472696e7369635375636365737304013464697370617463685f696e666f5401304469737061746368496e666f00000490416e2065787472696e73696320636f6d706c65746564207375636365737366756c6c792e3c45787472696e7369634661696c656408013864697370617463685f6572726f7260013444697370617463684572726f7200013464697370617463685f696e666f5401304469737061746368496e666f00010450416e2065787472696e736963206661696c65642e2c436f64655570646174656400020450603a636f6465602077617320757064617465642e284e65774163636f756e7404011c6163636f756e74000130543a3a4163636f756e7449640003046841206e6577206163636f756e742077617320637265617465642e344b696c6c65644163636f756e7404011c6163636f756e74000130543a3a4163636f756e74496400040458416e206163636f756e7420776173207265617065642e2052656d61726b656408011873656e646572000130543a3a4163636f756e744964000110686173682c011c543a3a48617368000504704f6e206f6e2d636861696e2072656d61726b2068617070656e65642e04704576656e7420666f72207468652053797374656d2070616c6c65742e540c346672616d655f737570706f7274206469737061746368304469737061746368496e666f00000c0118776569676874200118576569676874000114636c6173735801344469737061746368436c617373000120706179735f6665655c0110506179730000580c346672616d655f737570706f7274206469737061746368344469737061746368436c61737300010c184e6f726d616c0000002c4f7065726174696f6e616c000100244d616e6461746f7279000200005c0c346672616d655f737570706f727420646973706174636810506179730001080c596573000000084e6f0001000060082873705f72756e74696d653444697370617463684572726f72000134144f746865720000003043616e6e6f744c6f6f6b7570000100244261644f726967696e000200184d6f64756c65040064012c4d6f64756c654572726f7200030044436f6e73756d657252656d61696e696e670004002c4e6f50726f76696465727300050040546f6f4d616e79436f6e73756d65727300060014546f6b656e0400680128546f6b656e4572726f720007002841726974686d6574696304006c013c41726974686d657469634572726f72000800345472616e73616374696f6e616c04007001485472616e73616374696f6e616c4572726f7200090024457868617573746564000a0028436f7272757074696f6e000b002c556e617661696c61626c65000c000064082873705f72756e74696d652c4d6f64756c654572726f720000080114696e64657808010875380001146572726f7240018c5b75383b204d41585f4d4f44554c455f4552524f525f454e434f4445445f53495a455d000068082873705f72756e74696d6528546f6b656e4572726f7200011c1c4e6f46756e647300000020576f756c644469650001003042656c6f774d696e696d756d0002003043616e6e6f7443726561746500030030556e6b6e6f776e41737365740004001846726f7a656e0005002c556e737570706f72746564000600006c083473705f61726974686d657469633c41726974686d657469634572726f7200010c24556e646572666c6f77000000204f766572666c6f77000100384469766973696f6e42795a65726f0002000070082873705f72756e74696d65485472616e73616374696f6e616c4572726f72000108304c696d6974526561636865640000001c4e6f4c6179657200010000740c3c70616c6c65745f62616c616e6365731870616c6c6574144576656e740804540004490001281c456e646f77656408011c6163636f756e74000130543a3a4163636f756e744964000130667265655f62616c616e6365180128543a3a42616c616e6365000004b8416e206163636f756e74207761732063726561746564207769746820736f6d6520667265652062616c616e63652e20447573744c6f737408011c6163636f756e74000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650001083d01416e206163636f756e74207761732072656d6f7665642077686f73652062616c616e636520776173206e6f6e2d7a65726f206275742062656c6f77204578697374656e7469616c4465706f7369742c78726573756c74696e6720696e20616e206f75747269676874206c6f73732e205472616e736665720c011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650002044c5472616e73666572207375636365656465642e2842616c616e63655365740c010c77686f000130543a3a4163636f756e74496400011066726565180128543a3a42616c616e63650001207265736572766564180128543a3a42616c616e636500030468412062616c616e6365207761732073657420627920726f6f742e20526573657276656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000404e0536f6d652062616c616e63652077617320726573657276656420286d6f7665642066726f6d206672656520746f207265736572766564292e28556e726573657276656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000504e8536f6d652062616c616e63652077617320756e726573657276656420286d6f7665642066726f6d20726573657276656420746f2066726565292e4852657365727665526570617472696174656410011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500014864657374696e6174696f6e5f7374617475737801185374617475730006084d01536f6d652062616c616e636520776173206d6f7665642066726f6d207468652072657365727665206f6620746865206669727374206163636f756e7420746f20746865207365636f6e64206163636f756e742ed846696e616c20617267756d656e7420696e64696361746573207468652064657374696e6174696f6e2062616c616e636520747970652e1c4465706f73697408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000704d8536f6d6520616d6f756e7420776173206465706f73697465642028652e672e20666f72207472616e73616374696f6e2066656573292e20576974686472617708010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650008041d01536f6d6520616d6f756e74207761732077697468647261776e2066726f6d20746865206163636f756e742028652e672e20666f72207472616e73616374696f6e2066656573292e1c536c617368656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650009040101536f6d6520616d6f756e74207761732072656d6f7665642066726f6d20746865206163636f756e742028652e672e20666f72206d69736265686176696f72292e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a0909097814346672616d655f737570706f72741874726169747318746f6b656e73106d6973633442616c616e63655374617475730001081046726565000000205265736572766564000100007c103870616c6c65745f7374616b696e671870616c6c65741870616c6c6574144576656e7404045400013c1c457261506169640c01246572615f696e646578100120457261496e64657800014076616c696461746f725f7061796f757418013042616c616e63654f663c543e00012472656d61696e64657218013042616c616e63654f663c543e000008550154686520657261207061796f757420686173206265656e207365743b207468652066697273742062616c616e6365206973207468652076616c696461746f722d7061796f75743b20746865207365636f6e64206973c07468652072656d61696e6465722066726f6d20746865206d6178696d756d20616d6f756e74206f66207265776172642e2052657761726465640801147374617368000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e000104bc546865206e6f6d696e61746f7220686173206265656e207265776172646564206279207468697320616d6f756e742e1c536c61736865640801187374616b6572000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e0002041d0141207374616b6572202876616c696461746f72206f72206e6f6d696e61746f722920686173206265656e20736c61736865642062792074686520676976656e20616d6f756e742e34536c6173685265706f727465640c012476616c696461746f72000130543a3a4163636f756e7449640001206672616374696f6e80011c50657262696c6c000124736c6173685f657261100120457261496e64657800030859014120736c61736820666f722074686520676976656e2076616c696461746f722c20666f722074686520676976656e2070657263656e74616765206f66207468656972207374616b652c2061742074686520676976656e54657261206173206265656e207265706f727465642e684f6c64536c617368696e675265706f727444697363617264656404013473657373696f6e5f696e64657810013053657373696f6e496e6465780004081901416e206f6c6420736c617368696e67207265706f72742066726f6d2061207072696f72206572612077617320646973636172646564206265636175736520697420636f756c64446e6f742062652070726f6365737365642e385374616b657273456c65637465640005048441206e657720736574206f66207374616b6572732077617320656c65637465642e18426f6e6465640801147374617368000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e000610d0416e206163636f756e742068617320626f6e646564207468697320616d6f756e742e205c5b73746173682c20616d6f756e745c5d004d014e4f54453a2054686973206576656e74206973206f6e6c7920656d6974746564207768656e2066756e64732061726520626f6e64656420766961206120646973706174636861626c652e204e6f7461626c792c210169742077696c6c206e6f7420626520656d697474656420666f72207374616b696e672072657761726473207768656e20746865792061726520616464656420746f207374616b652e20556e626f6e6465640801147374617368000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e00070490416e206163636f756e742068617320756e626f6e646564207468697320616d6f756e742e2457697468647261776e0801147374617368000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e0008085901416e206163636f756e74206861732063616c6c6564206077697468647261775f756e626f6e6465646020616e642072656d6f76656420756e626f6e64696e67206368756e6b7320776f727468206042616c616e6365606466726f6d2074686520756e6c6f636b696e672071756575652e184b69636b65640801246e6f6d696e61746f72000130543a3a4163636f756e7449640001147374617368000130543a3a4163636f756e744964000904b441206e6f6d696e61746f7220686173206265656e206b69636b65642066726f6d20612076616c696461746f722e545374616b696e67456c656374696f6e4661696c6564000a04ac54686520656c656374696f6e206661696c65642e204e6f206e65772065726120697320706c616e6e65642e1c4368696c6c65640401147374617368000130543a3a4163636f756e744964000b042101416e206163636f756e74206861732073746f707065642070617274696369706174696e672061732065697468657220612076616c696461746f72206f72206e6f6d696e61746f722e345061796f7574537461727465640801246572615f696e646578100120457261496e64657800013c76616c696461746f725f7374617368000130543a3a4163636f756e744964000c0498546865207374616b657273272072657761726473206172652067657474696e6720706169642e4456616c696461746f7250726566735365740801147374617368000130543a3a4163636f756e744964000114707265667384013856616c696461746f725072656673000d0498412076616c696461746f72206861732073657420746865697220707265666572656e6365732e20466f7263654572610401106d6f646590011c466f7263696e67000e047441206e657720666f72636520657261206d6f646520776173207365742e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909800c3473705f61726974686d65746963287065725f7468696e67731c50657262696c6c0000040010010c753332000084083870616c6c65745f7374616b696e673856616c696461746f7250726566730000080128636f6d6d697373696f6e88011c50657262696c6c00011c626c6f636b65648c0110626f6f6c00008800000680008c000005000090083870616c6c65745f7374616b696e671c466f7263696e67000110284e6f74466f7263696e6700000020466f7263654e657700010024466f7263654e6f6e650002002c466f726365416c7761797300030000940c3c70616c6c65745f6f6666656e6365731870616c6c6574144576656e740001041c4f6666656e63650801106b696e649801104b696e6400012074696d65736c6f743001384f706171756554696d65536c6f7400000c5101546865726520697320616e206f6666656e6365207265706f72746564206f662074686520676976656e20606b696e64602068617070656e656420617420746865206073657373696f6e5f696e6465786020616e643501286b696e642d7370656369666963292074696d6520736c6f742e2054686973206576656e74206973206e6f74206465706f736974656420666f72206475706c696361746520736c61736865732e4c5c5b6b696e642c2074696d65736c6f745c5d2e04304576656e747320747970652e980000031000000008009c0c3870616c6c65745f73657373696f6e1870616c6c6574144576656e74000104284e657753657373696f6e04013473657373696f6e5f696e64657810013053657373696f6e496e64657800000839014e65772073657373696f6e206861732068617070656e65642e204e6f746520746861742074686520617267756d656e74206973207468652073657373696f6e20696e6465782c206e6f74207468659c626c6f636b206e756d626572206173207468652074797065206d6967687420737567676573742e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909a00c3870616c6c65745f6772616e6470611870616c6c6574144576656e7400010c384e6577417574686f726974696573040134617574686f726974795f736574a40134417574686f726974794c6973740000048c4e657720617574686f726974792073657420686173206265656e206170706c6965642e185061757365640001049843757272656e7420617574686f726974792073657420686173206265656e207061757365642e1c526573756d65640002049c43757272656e7420617574686f726974792073657420686173206265656e20726573756d65642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909a4000002a800a800000408ac2800ac0c5073705f636f6e73656e7375735f6772616e6470610c617070185075626c696300000400b0013c656432353531393a3a5075626c69630000b00c1c73705f636f72651c65643235353139185075626c6963000004000401205b75383b2033325d0000b40c4070616c6c65745f696d5f6f6e6c696e651870616c6c6574144576656e7404045400010c444865617274626561745265636569766564040130617574686f726974795f6964b80138543a3a417574686f726974794964000004c041206e657720686561727462656174207761732072656365697665642066726f6d2060417574686f726974794964602e1c416c6c476f6f64000104d041742074686520656e64206f66207468652073657373696f6e2c206e6f206f6666656e63652077617320636f6d6d69747465642e2c536f6d654f66666c696e6504011c6f66666c696e65c0016c5665633c4964656e74696669636174696f6e5475706c653c543e3e000204290141742074686520656e64206f66207468652073657373696f6e2c206174206c65617374206f6e652076616c696461746f722077617320666f756e6420746f206265206f66666c696e652e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909b8104070616c6c65745f696d5f6f6e6c696e651c737232353531392c6170705f73723235353139185075626c696300000400bc013c737232353531393a3a5075626c69630000bc0c1c73705f636f72651c73723235353139185075626c6963000004000401205b75383b2033325d0000c0000002c400c40000040800c800c8083870616c6c65745f7374616b696e67204578706f7375726508244163636f756e74496401001c42616c616e63650118000c0114746f74616ccc011c42616c616e636500010c6f776ecc011c42616c616e63650001186f7468657273d001ac5665633c496e646976696475616c4578706f737572653c4163636f756e7449642c2042616c616e63653e3e0000cc0000061800d0000002d400d4083870616c6c65745f7374616b696e6748496e646976696475616c4578706f7375726508244163636f756e74496401001c42616c616e636501180008010c77686f0001244163636f756e74496400011476616c7565cc011c42616c616e63650000d80c4070616c6c65745f626167735f6c6973741870616c6c6574144576656e740804540004490001082052656261676765640c010c77686f000130543a3a4163636f756e74496400011066726f6d280120543a3a53636f7265000108746f280120543a3a53636f7265000004a44d6f76656420616e206163636f756e742066726f6d206f6e652062616720746f20616e6f746865722e3053636f72655570646174656408010c77686f000130543a3a4163636f756e7449640001246e65775f73636f7265280120543a3a53636f7265000104d855706461746564207468652073636f7265206f6620736f6d65206163636f756e7420746f2074686520676976656e20616d6f756e742e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909dc0c6870616c6c65745f7472616e73616374696f6e5f7061796d656e741870616c6c6574144576656e74040454000104485472616e73616374696f6e466565506169640c010c77686f000130543a3a4163636f756e74496400012861637475616c5f66656518013042616c616e63654f663c543e00010c74697018013042616c616e63654f663c543e000008590141207472616e73616374696f6e20666565206061637475616c5f666565602c206f662077686963682060746970602077617320616464656420746f20746865206d696e696d756d20696e636c7573696f6e206665652c5c686173206265656e2070616964206279206077686f602e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909e00c2c70616c6c65745f7375646f1870616c6c6574144576656e7404045400010c14537564696404012c7375646f5f726573756c74e401384469737061746368526573756c740000048841207375646f206a75737420746f6f6b20706c6163652e205c5b726573756c745c5d284b65794368616e6765640401286f6c645f7375646f6572ec01504f7074696f6e3c543a3a4163636f756e7449643e0001043901546865205c5b7375646f65725c5d206a757374207377697463686564206964656e746974793b20746865206f6c64206b657920697320737570706c696564206966206f6e6520657869737465642e285375646f4173446f6e6504012c7375646f5f726573756c74e401384469737061746368526573756c740002048841207375646f206a75737420746f6f6b20706c6163652e205c5b726573756c745c5d04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909e40418526573756c7408045401e8044501600108084f6b0400e8000000000c4572720400600000010000e80000040000ec04184f7074696f6e04045401000108104e6f6e6500000010536f6d650400000000010000f00c4470616c6c65745f637265646974636f696e1870616c6c6574144576656e7404045400013c4441646472657373526567697374657265640800f401484164647265737349643c543a3a486173683e0000f80154416464726573733c543a3a4163636f756e7449643e000008d0416e2061646472657373206f6e20616e2065787465726e616c20636861696e20686173206265656e20726567697374657265642eac5b726567697374657265645f616464726573735f69642c20726567697374657265645f616464726573735d485472616e736665725265676973746572656408000501014c5472616e7366657249643c543a3a486173683e0000090101e85472616e736665723c543a3a4163636f756e7449642c20543a3a426c6f636b4e756d6265722c20543a3a486173682c20543a3a4d6f6d656e743e000108f8416e2065787465726e616c207472616e7366657220686173206265656e207265676973746572656420616e642077696c6c2062652076657269666965642eb45b726567697374657265645f7472616e736665725f69642c20726567697374657265645f7472616e736665725d405472616e73666572566572696669656404000501014c5472616e7366657249643c543a3a486173683e000208d0416e2065787465726e616c207472616e7366657220686173206265656e207375636365737366756c6c792076657269666965642e585b76657269666965645f7472616e736665725f69645d445472616e7366657250726f63657373656404000501014c5472616e7366657249643c543a3a486173683e0003081501416e2065787465726e616c207472616e7366657220686173206265656e2070726f63657373656420616e64206d61726b65642061732070617274206f662061206c6f616e2e5c5b70726f6365737365645f7472616e736665725f69645d3441736b4f72646572416464656408002901018c41736b4f7264657249643c543a3a426c6f636b4e756d6265722c20543a3a486173683e00002d0101bc41736b4f726465723c543a3a4163636f756e7449642c20543a3a426c6f636b4e756d6265722c20543a3a486173683e00040c4d01416e2061736b206f7264657220686173206265656e20616464656420627920612070726f7370656374697665206c656e6465722e205468697320696e64696361746573207468617420746865206c656e646572b86973206c6f6f6b696e6720746f2069737375652061206c6f616e2077697468206365727461696e207465726d732e645b61736b5f6f726465725f69642c2061736b5f6f726465725d344269644f72646572416464656408004501018c4269644f7264657249643c543a3a426c6f636b4e756d6265722c20543a3a486173683e0000490101bc4269644f726465723c543a3a4163636f756e7449642c20543a3a426c6f636b4e756d6265722c20543a3a486173683e00050c59014120626964206f7264657220686173206265656e20616464656420627920612070726f737065637469766520626f72726f7765722e205468697320696e6469636174657320746861742074686520626f72726f776572a46973206c6f6f6b696e6720666f722061206c6f616e2077697468206365727461696e207465726d732e645b6269645f6f726465725f69642c206269645f6f726465725d284f6666657241646465640800510101804f6666657249643c543a3a426c6f636b4e756d6265722c20543a3a486173683e0000550101b04f666665723c543a3a4163636f756e7449642c20543a3a426c6f636b4e756d6265722c20543a3a486173683e00060c0d01416e206f6666657220686173206265656e2061646465642062792061206c656e6465722e205468697320696e64696361746573207468617420746865206c656e6465720501697320696e746572657374656420696e20656e746572696e672061206c6f616e207769746820746865206f776e6572206f662074686520626964206f726465722e445b6f666665725f69642c206f666665725d384465616c4f7264657241646465640800150101904465616c4f7264657249643c543a3a426c6f636b4e756d6265722c20543a3a486173683e0000590101ec4465616c4f726465723c543a3a4163636f756e7449642c20543a3a426c6f636b4e756d6265722c20543a3a486173682c20543a3a4d6f6d656e743e00070c2d0141206465616c206f7264657220686173206265656e206164646564206279206120626f72726f7765722e205468697320696e6469636174657320746861742074686520626f72726f776572f06861732061636365707465642061206c656e6465722773206f6666657220616e6420696e74656e647320746f20656e74657220746865206c6f616e2e6c5b6465616c5f6f726465725f69642c206465616c5f6f726465725d3c4465616c4f7264657246756e6465640400150101904465616c4f7264657249643c543a3a426c6f636b4e756d6265722c20543a3a486173683e000810210141206465616c206f7264657220686173206265656e2066756e6465642062792061206c656e6465722e205468697320696e64696361746573207468617420746865206c656e646572350168617320696e69746961746564207468652061637475616c206c6f616e206279207472616e7366657272696e6720746865206c6f616e20616d6f756e7420746f2074686520626f72726f776572546f6e20616e2065787465726e616c20636861696e2e585b66756e6465645f6465616c5f6f726465725f69645d3c4465616c4f726465724c6f636b65640400150101904465616c4f7264657249643c543a3a426c6f636b4e756d6265722c20543a3a486173683e000910310141206465616c206f7264657220686173206265656e206c6f636b6564206279206120626f72726f7765722e205468697320696e6469636174657320746861742074686520626f72726f7765724901697320707265706172696e6720746f206d616b6520612072657061796d656e7420616e64206c6f636b7320746865206c6f616e2066726f6d206265696e6720736f6c64206f72207472616e7366657272656444746f20616e6f746865722070617274792e3c5b6465616c5f6f726465725f69645d3c4465616c4f72646572436c6f7365640400150101904465616c4f7264657249643c543a3a426c6f636b4e756d6265722c20543a3a486173683e000a0c310141206465616c206f7264657220686173206265656e20636c6f736564206279206120626f72726f7765722e205468697320696e6469636174657320746861742074686520626f72726f776572f06861732072657061696420746865206c6f616e20696e2066756c6c20616e64206973206e6f7720636c6f73696e67206f757420746865206c6f616e2e585b636c6f7365645f6465616c5f6f726465725f69645d304c6f616e4578656d707465640400150101904465616c4f7264657249643c543a3a426c6f636b4e756d6265722c20543a3a486173683e000b10350141206c6f616e206578656d7074696f6e20686173206265656e206772616e7465642062792061206c656e6465722e205468697320696e64696361746573207468617420746865206c656e646572090169732072656c656173696e6720616c6c206f6620746865206f75747374616e64696e672064656274206f6e20746865206c6f616e2e2054686520626f72726f776572c46973206e6f206c6f6e67657220726573706f6e7369626c6520666f72207265706179696e672074686520616d6f756e742e605b6578656d707465645f6465616c5f6f726465725f69645d4c4c656761637957616c6c6574436c61696d65640c00000130543a3a4163636f756e7449640000650101344c6567616379536967686173680000180128543a3a42616c616e6365000c0c590141206c65676163792077616c6c65742066726f6d20437265646974636f696e20312e5820686173206265656e20636c61696d65642e205468652062616c616e6365206f6620746865206c65676163792077616c6c6574ec686173206265656e207472616e7366657272656420746f20746865206f776e6572277320437265646974636f696e20322e30206163636f756e742e15015b6c65676163795f77616c6c65745f636c61696d65722c206c65676163795f77616c6c65745f736967686173682c206c65676163795f77616c6c65745f62616c616e63655d685472616e736665724661696c6564566572696669636174696f6e08000501014c5472616e7366657249643c543a3a486173683e00006d010160566572696669636174696f6e4661696c7572654361757365000d00184275726e65640400710101184275726e4964000e0004a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909f40c4470616c6c65745f637265646974636f696e14747970657324416464726573734964041048617368012c0004002c0110486173680000f80c4470616c6c65745f637265646974636f696e1474797065731c4164647265737304244163636f756e7449640100000c0128626c6f636b636861696efc0128426c6f636b636861696e00011476616c75650101013c45787465726e616c416464726573730001146f776e65720001244163636f756e7449640000fc0c4470616c6c65745f637265646974636f696e14747970657328426c6f636b636861696e00011420457468657265756d0000001c52696e6b656279000100244c756e6976657273650002001c426974636f696e000300144f746865720400010101284f74686572436861696e0004000001010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e00000501104470616c6c65745f637265646974636f696e147479706573207472616e73666572285472616e736665724964041048617368012c0004002c01104861736800000901104470616c6c65745f637265646974636f696e147479706573207472616e73666572205472616e7366657210244163636f756e744964010020426c6f636b4e756d01101048617368012c184d6f6d656e740128002c0128626c6f636b636861696efc0128426c6f636b636861696e0001106b696e640d0101305472616e736665724b696e6400011066726f6df4013c4164647265737349643c486173683e000108746ff4013c4164647265737349643c486173683e0001206f726465725f69641101015c4f7264657249643c426c6f636b4e756d2c20486173683e000118616d6f756e741d01013845787465726e616c416d6f756e7400011474785f69640101013045787465726e616c54784964000114626c6f636b100120426c6f636b4e756d00013069735f70726f6365737365648c0110626f6f6c0001286163636f756e745f69640001244163636f756e74496400012474696d657374616d70250101384f7074696f6e3c4d6f6d656e743e00000d010c4470616c6c65745f637265646974636f696e147479706573305472616e736665724b696e6400011014457263323004000101013c45787465726e616c416464726573730000001c4574686c65737304000101013c45787465726e616c41646472657373000100184e6174697665000200144f746865720400010101444f746865725472616e736665724b696e640003000011010c4470616c6c65745f637265646974636f696e1474797065731c4f7264657249640820426c6f636b4e756d01101048617368012c0108104465616c04001501016c4465616c4f7264657249643c426c6f636b4e756d2c20486173683e0000002452657061796d656e7404001901018052657061796d656e744f7264657249643c426c6f636b4e756d2c20486173683e0001000015010c4470616c6c65745f637265646974636f696e1474797065732c4465616c4f7264657249640820426c6f636b4e756d01101048617368012c000800100120426c6f636b4e756d00002c011048617368000019010c4470616c6c65745f637265646974636f696e1474797065734052657061796d656e744f7264657249640820426c6f636b4e756d01101048617368012c000800100120426c6f636b4e756d00002c01104861736800001d01083c7072696d69746976655f7479706573105532353600000400210101205b7536343b20345d00002101000003040000002800250104184f7074696f6e04045401280108104e6f6e6500000010536f6d65040028000001000029010c4470616c6c65745f637265646974636f696e1474797065732841736b4f7264657249640820426c6f636b4e756d01101048617368012c000800100120426c6f636b4e756d00002c01104861736800002d010c4470616c6c65745f637265646974636f696e1474797065732041736b4f726465720c244163636f756e744964010020426c6f636b4e756d01101048617368012c00180128626c6f636b636861696efc0128426c6f636b636861696e0001446c656e6465725f616464726573735f6964f4013c4164647265737349643c486173683e0001147465726d733101012041736b5465726d7300014065787069726174696f6e5f626c6f636b100120426c6f636b4e756d000114626c6f636b100120426c6f636b4e756d0001186c656e6465720001244163636f756e74496400003101104470616c6c65745f637265646974636f696e147479706573286c6f616e5f7465726d732041736b5465726d7300000400350101244c6f616e5465726d7300003501104470616c6c65745f637265646974636f696e147479706573286c6f616e5f7465726d73244c6f616e5465726d7300000c0118616d6f756e741d01013845787465726e616c416d6f756e74000134696e7465726573745f7261746539010130496e7465726573745261746500012c7465726d5f6c656e6774683d0101204475726174696f6e00003901104470616c6c65745f637265646974636f696e147479706573286c6f616e5f7465726d7330496e74657265737452617465000010013c726174655f7065725f706572696f6428013452617465506572506572696f64000120646563696d616c73280120446563696d616c73000118706572696f643d0101204475726174696f6e000134696e7465726573745f7479706541010130496e7465726573745479706500003d01104470616c6c65745f637265646974636f696e147479706573286c6f616e5f7465726d73204475726174696f6e00000801107365637328010c7536340001146e616e6f7310010c75333200004101104470616c6c65745f637265646974636f696e147479706573286c6f616e5f7465726d7330496e746572657374547970650001081853696d706c6500000020436f6d706f756e640001000045010c4470616c6c65745f637265646974636f696e147479706573284269644f7264657249640820426c6f636b4e756d01101048617368012c000800100120426c6f636b4e756d00002c011048617368000049010c4470616c6c65745f637265646974636f696e147479706573204269644f726465720c244163636f756e744964010020426c6f636b4e756d01101048617368012c00180128626c6f636b636861696efc0128426c6f636b636861696e00014c626f72726f7765725f616464726573735f6964f4013c4164647265737349643c486173683e0001147465726d734d0101204269645465726d7300014065787069726174696f6e5f626c6f636b100120426c6f636b4e756d000114626c6f636b100120426c6f636b4e756d000120626f72726f7765720001244163636f756e74496400004d01104470616c6c65745f637265646974636f696e147479706573286c6f616e5f7465726d73204269645465726d7300000400350101244c6f616e5465726d73000051010c4470616c6c65745f637265646974636f696e1474797065731c4f6666657249640820426c6f636b4e756d01101048617368012c000800100120426c6f636b4e756d00002c011048617368000055010c4470616c6c65745f637265646974636f696e147479706573144f666665720c244163636f756e744964010020426c6f636b4e756d01101048617368012c00180128626c6f636b636861696efc0128426c6f636b636861696e00011861736b5f69642901016841736b4f7264657249643c426c6f636b4e756d2c20486173683e0001186269645f6964450101684269644f7264657249643c426c6f636b4e756d2c20486173683e00014065787069726174696f6e5f626c6f636b100120426c6f636b4e756d000114626c6f636b100120426c6f636b4e756d0001186c656e6465720001244163636f756e744964000059010c4470616c6c65745f637265646974636f696e147479706573244465616c4f7264657210244163636f756e744964010020426c6f636b4e756d01101048617368012c184d6f6d656e74012800300128626c6f636b636861696efc0128426c6f636b636861696e0001206f666665725f69645101015c4f6666657249643c426c6f636b4e756d2c20486173683e0001446c656e6465725f616464726573735f6964f4013c4164647265737349643c486173683e00014c626f72726f7765725f616464726573735f6964f4013c4164647265737349643c486173683e0001147465726d73350101244c6f616e5465726d7300014065787069726174696f6e5f626c6f636b100120426c6f636b4e756d00012474696d657374616d702801184d6f6d656e74000114626c6f636b5d0101404f7074696f6e3c426c6f636b4e756d3e00014c66756e64696e675f7472616e736665725f6964610101604f7074696f6e3c5472616e7366657249643c486173683e3e00015472657061796d656e745f7472616e736665725f6964610101604f7074696f6e3c5472616e7366657249643c486173683e3e0001106c6f636bec01444f7074696f6e3c4163636f756e7449643e000120626f72726f7765720001244163636f756e74496400005d0104184f7074696f6e04045401100108104e6f6e6500000010536f6d650400100000010000610104184f7074696f6e0404540105010108104e6f6e6500000010536f6d6504000501000001000065010c4470616c6c65745f637265646974636f696e147479706573344c65676163795369676861736800000400690101205b75383b2036305d000069010000033c00000008006d01104470616c6c65745f637265646974636f696e0c6f6377186572726f727360566572696669636174696f6e4661696c75726543617573650001503c5461736b4e6f6e6578697374656e74000000285461736b4661696c65640001002c5461736b50656e64696e670002003c5461736b556e636f6e6669726d6564000300305461736b496e46757475726500040044496e636f7272656374436f6e74726163740005003c4d697373696e675265636569766572000600344d697373696e6753656e6465720007002c4162694d69736d6174636800080050496e636f7272656374496e7075744c656e67746800090028456d707479496e707574000a0048496e636f7272656374496e70757454797065000b003c496e636f7272656374416d6f756e74000c0038496e636f72726563744e6f6e6365000d0044496e636f72726563745265636569766572000e003c496e636f727265637453656e646572000f0038496e76616c69644164647265737300100044556e737570706f727465644d6574686f640011004c5472616e73616374696f6e4e6f74466f756e6400120064496e73756666696369656e7446617563657442616c616e63650013000071010c4470616c6c65745f637265646974636f696e147479706573184275726e49640000040028010c753634000075010c3870616c6c65745f726577617264731870616c6c6574144576656e740404540001043052657761726449737375656408000001384163636f756e7449644f663c543e000018013042616c616e63654f663c543e000004a452657761726420776173206973737565642e205b626c6f636b5f617574686f722c20616d6f756e745d04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a09090979010c4070616c6c65745f7363686564756c65721870616c6c6574144576656e74040454000118245363686564756c65640801107768656e100138543a3a426c6f636b4e756d626572000114696e64657810010c753332000004505363686564756c656420736f6d65207461736b2e2043616e63656c65640801107768656e100138543a3a426c6f636b4e756d626572000114696e64657810010c7533320001044c43616e63656c656420736f6d65207461736b2e28446973706174636865640c01107461736b7d01016c5461736b416464726573733c543a3a426c6f636b4e756d6265723e0001086964810101404f7074696f6e3c5461736b4e616d653e000118726573756c74e401384469737061746368526573756c74000204544469737061746368656420736f6d65207461736b2e3c43616c6c556e617661696c61626c650801107461736b7d01016c5461736b416464726573733c543a3a426c6f636b4e756d6265723e0001086964810101404f7074696f6e3c5461736b4e616d653e00030429015468652063616c6c20666f72207468652070726f7669646564206861736820776173206e6f7420666f756e6420736f20746865207461736b20686173206265656e2061626f727465642e38506572696f6469634661696c65640801107461736b7d01016c5461736b416464726573733c543a3a426c6f636b4e756d6265723e0001086964810101404f7074696f6e3c5461736b4e616d653e0004043d0154686520676976656e207461736b2077617320756e61626c6520746f2062652072656e657765642073696e636520746865206167656e64612069732066756c6c206174207468617420626c6f636b2e545065726d616e656e746c794f7665727765696768740801107461736b7d01016c5461736b416464726573733c543a3a426c6f636b4e756d6265723e0001086964810101404f7074696f6e3c5461736b4e616d653e000504f054686520676976656e207461736b2063616e206e657665722062652065786563757465642073696e6365206974206973206f7665727765696768742e04304576656e747320747970652e7d0100000408101000810104184f7074696f6e04045401040108104e6f6e6500000010536f6d65040004000001000085010c7870616c6c65745f6f6666636861696e5f7461736b5f7363686564756c65721870616c6c6574144576656e7404045400010004a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a09090989010c3c70616c6c65745f6964656e746974791870616c6c6574144576656e740404540001282c4964656e7469747953657404010c77686f000130543a3a4163636f756e744964000004ec41206e616d652077617320736574206f72207265736574202877686963682077696c6c2072656d6f766520616c6c206a756467656d656e7473292e3c4964656e74697479436c656172656408010c77686f000130543a3a4163636f756e74496400011c6465706f73697418013042616c616e63654f663c543e000104cc41206e616d652077617320636c65617265642c20616e642074686520676976656e2062616c616e63652072657475726e65642e384964656e746974794b696c6c656408010c77686f000130543a3a4163636f756e74496400011c6465706f73697418013042616c616e63654f663c543e000204c441206e616d65207761732072656d6f76656420616e642074686520676976656e2062616c616e636520736c61736865642e484a756467656d656e7452657175657374656408010c77686f000130543a3a4163636f756e74496400013c7265676973747261725f696e646578100138526567697374726172496e6465780003049c41206a756467656d656e74207761732061736b65642066726f6d2061207265676973747261722e504a756467656d656e74556e72657175657374656408010c77686f000130543a3a4163636f756e74496400013c7265676973747261725f696e646578100138526567697374726172496e6465780004048841206a756467656d656e74207265717565737420776173207265747261637465642e384a756467656d656e74476976656e080118746172676574000130543a3a4163636f756e74496400013c7265676973747261725f696e646578100138526567697374726172496e6465780005049441206a756467656d656e742077617320676976656e2062792061207265676973747261722e38526567697374726172416464656404013c7265676973747261725f696e646578100138526567697374726172496e646578000604584120726567697374726172207761732061646465642e405375624964656e7469747941646465640c010c737562000130543a3a4163636f756e7449640001106d61696e000130543a3a4163636f756e74496400011c6465706f73697418013042616c616e63654f663c543e000704f441207375622d6964656e746974792077617320616464656420746f20616e206964656e7469747920616e6420746865206465706f73697420706169642e485375624964656e7469747952656d6f7665640c010c737562000130543a3a4163636f756e7449640001106d61696e000130543a3a4163636f756e74496400011c6465706f73697418013042616c616e63654f663c543e000804090141207375622d6964656e74697479207761732072656d6f7665642066726f6d20616e206964656e7469747920616e6420746865206465706f7369742066726565642e485375624964656e746974795265766f6b65640c010c737562000130543a3a4163636f756e7449640001106d61696e000130543a3a4163636f756e74496400011c6465706f73697418013042616c616e63654f663c543e000908190141207375622d6964656e746974792077617320636c65617265642c20616e642074686520676976656e206465706f7369742072657061747269617465642066726f6d20746865c86d61696e206964656e74697479206163636f756e7420746f20746865207375622d6964656e74697479206163636f756e742e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a0909098d010c3870616c6c65745f7574696c6974791870616c6c6574144576656e74000118404261746368496e746572727570746564080114696e64657810010c7533320001146572726f7260013444697370617463684572726f7200000855014261746368206f66206469737061746368657320646964206e6f7420636f6d706c6574652066756c6c792e20496e646578206f66206669727374206661696c696e6720646973706174636820676976656e2c2061734877656c6c20617320746865206572726f722e384261746368436f6d706c65746564000104c84261746368206f66206469737061746368657320636f6d706c657465642066756c6c792077697468206e6f206572726f722e604261746368436f6d706c65746564576974684572726f7273000204b44261746368206f66206469737061746368657320636f6d706c657465642062757420686173206572726f72732e344974656d436f6d706c657465640003041d01412073696e676c65206974656d2077697468696e2061204261746368206f6620646973706174636865732068617320636f6d706c657465642077697468206e6f206572726f722e284974656d4661696c65640401146572726f7260013444697370617463684572726f720004041101412073696e676c65206974656d2077697468696e2061204261746368206f6620646973706174636865732068617320636f6d706c657465642077697468206572726f722e30446973706174636865644173040118726573756c74e401384469737061746368526573756c7400050458412063616c6c2077617320646973706174636865642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a09090991010c3070616c6c65745f70726f78791870616c6c6574144576656e740404540001143450726f78794578656375746564040118726573756c74e401384469737061746368526573756c74000004bc412070726f78792077617320657865637574656420636f72726563746c792c20776974682074686520676976656e2e2c507572654372656174656410011070757265000130543a3a4163636f756e74496400010c77686f000130543a3a4163636f756e74496400012870726f78795f74797065e80130543a3a50726f787954797065000150646973616d626967756174696f6e5f696e6465789501010c753136000108dc412070757265206163636f756e7420686173206265656e2063726561746564206279206e65772070726f7879207769746820676976656e90646973616d626967756174696f6e20696e64657820616e642070726f787920747970652e24416e6e6f756e6365640c01107265616c000130543a3a4163636f756e74496400011470726f7879000130543a3a4163636f756e74496400012463616c6c5f686173682c013443616c6c486173684f663c543e000204e0416e20616e6e6f756e63656d656e742077617320706c6163656420746f206d616b6520612063616c6c20696e20746865206675747572652e2850726f7879416464656410012464656c656761746f72000130543a3a4163636f756e74496400012464656c656761746565000130543a3a4163636f756e74496400012870726f78795f74797065e80130543a3a50726f78795479706500011464656c6179100138543a3a426c6f636b4e756d62657200030448412070726f7879207761732061646465642e3050726f787952656d6f76656410012464656c656761746f72000130543a3a4163636f756e74496400012464656c656761746565000130543a3a4163636f756e74496400012870726f78795f74797065e80130543a3a50726f78795479706500011464656c6179100138543a3a426c6f636b4e756d62657200040450412070726f7879207761732072656d6f7665642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a0909099501000005040099010c4c70616c6c65745f666173745f756e7374616b651870616c6c6574144576656e7404045400011420556e7374616b65640801147374617368000130543a3a4163636f756e744964000118726573756c74e401384469737061746368526573756c740000045841207374616b65722077617320756e7374616b65642e1c536c61736865640801147374617368000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e000104190141207374616b65722077617320736c617368656420666f722072657175657374696e6720666173742d756e7374616b65207768696c7374206265696e67206578706f7365642e34496e7465726e616c4572726f72000204e8416e20696e7465726e616c206572726f722068617070656e65642e204f7065726174696f6e732077696c6c20626520706175736564206e6f772e304261746368436865636b6564040110657261739d0101345665633c457261496e6465783e00030445014120626174636820776173207061727469616c6c7920636865636b656420666f722074686520676976656e20657261732c20627574207468652070726f6365737320646964206e6f742066696e6973682e34426174636846696e697368656404011073697a6510010c7533320004109c41206261746368206f66206120676976656e2073697a6520776173207465726d696e617465642e0055015468697320697320616c7761797320666f6c6c6f77732062792061206e756d626572206f662060556e7374616b656460206f722060536c617368656460206576656e74732c206d61726b696e672074686520656e64e86f66207468652062617463682e2041206e65772062617463682077696c6c20626520637265617465642075706f6e206e65787420626c6f636b2e0468546865206576656e7473206f6620746869732070616c6c65742e9d010000021000a1010c5c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c731870616c6c6574144576656e7404045400013c1c437265617465640801246465706f7369746f72000130543a3a4163636f756e74496400011c706f6f6c5f6964100118506f6f6c4964000004604120706f6f6c20686173206265656e20637265617465642e18426f6e6465641001186d656d626572000130543a3a4163636f756e74496400011c706f6f6c5f6964100118506f6f6c4964000118626f6e64656418013042616c616e63654f663c543e0001186a6f696e65648c0110626f6f6c0001049441206d656d6265722068617320626563616d6520626f6e64656420696e206120706f6f6c2e1c506169644f75740c01186d656d626572000130543a3a4163636f756e74496400011c706f6f6c5f6964100118506f6f6c49640001187061796f757418013042616c616e63654f663c543e0002048c41207061796f757420686173206265656e206d61646520746f2061206d656d6265722e20556e626f6e6465641401186d656d626572000130543a3a4163636f756e74496400011c706f6f6c5f6964100118506f6f6c496400011c62616c616e636518013042616c616e63654f663c543e000118706f696e747318013042616c616e63654f663c543e00010c657261100120457261496e64657800032c9841206d656d6265722068617320756e626f6e6465642066726f6d20746865697220706f6f6c2e0039012d206062616c616e6365602069732074686520636f72726573706f6e64696e672062616c616e6365206f6620746865206e756d626572206f6620706f696e7473207468617420686173206265656e5501202072657175657374656420746f20626520756e626f6e646564202874686520617267756d656e74206f66207468652060756e626f6e6460207472616e73616374696f6e292066726f6d2074686520626f6e6465641c2020706f6f6c2e45012d2060706f696e74736020697320746865206e756d626572206f6620706f696e747320746861742061726520697373756564206173206120726573756c74206f66206062616c616e636560206265696e67c0646973736f6c76656420696e746f2074686520636f72726573706f6e64696e6720756e626f6e64696e6720706f6f6c2ee42d206065726160206973207468652065726120696e207768696368207468652062616c616e63652077696c6c20626520756e626f6e6465642e5501496e2074686520616273656e6365206f6620736c617368696e672c2074686573652076616c7565732077696c6c206d617463682e20496e207468652070726573656e6365206f6620736c617368696e672c207468654d016e756d626572206f6620706f696e74732074686174206172652069737375656420696e2074686520756e626f6e64696e6720706f6f6c2077696c6c206265206c657373207468616e2074686520616d6f756e746472657175657374656420746f20626520756e626f6e6465642e2457697468647261776e1001186d656d626572000130543a3a4163636f756e74496400011c706f6f6c5f6964100118506f6f6c496400011c62616c616e636518013042616c616e63654f663c543e000118706f696e747318013042616c616e63654f663c543e0004189c41206d656d626572206861732077697468647261776e2066726f6d20746865697220706f6f6c2e00210154686520676976656e206e756d626572206f662060706f696e7473602068617665206265656e20646973736f6c76656420696e2072657475726e206f66206062616c616e6365602e00590153696d696c617220746f2060556e626f6e64656460206576656e742c20696e2074686520616273656e6365206f6620736c617368696e672c2074686520726174696f206f6620706f696e7420746f2062616c616e63652877696c6c20626520312e2444657374726f79656404011c706f6f6c5f6964100118506f6f6c4964000504684120706f6f6c20686173206265656e2064657374726f7965642e3053746174654368616e67656408011c706f6f6c5f6964100118506f6f6c49640001246e65775f7374617465a5010124506f6f6c53746174650006047c546865207374617465206f66206120706f6f6c20686173206368616e676564344d656d62657252656d6f76656408011c706f6f6c5f6964100118506f6f6c49640001186d656d626572000130543a3a4163636f756e74496400070c9841206d656d62657220686173206265656e2072656d6f7665642066726f6d206120706f6f6c2e0051015468652072656d6f76616c2063616e20626520766f6c756e74617279202877697468647261776e20616c6c20756e626f6e6465642066756e647329206f7220696e766f6c756e7461727920286b69636b6564292e30526f6c6573557064617465640c0110726f6f74ec01504f7074696f6e3c543a3a4163636f756e7449643e00011c626f756e636572ec01504f7074696f6e3c543a3a4163636f756e7449643e0001246e6f6d696e61746f72ec01504f7074696f6e3c543a3a4163636f756e7449643e000808550154686520726f6c6573206f66206120706f6f6c2068617665206265656e207570646174656420746f2074686520676976656e206e657720726f6c65732e204e6f7465207468617420746865206465706f7369746f724463616e206e65766572206368616e67652e2c506f6f6c536c617368656408011c706f6f6c5f6964100118506f6f6c496400011c62616c616e636518013042616c616e63654f663c543e0009040d01546865206163746976652062616c616e6365206f6620706f6f6c2060706f6f6c5f69646020686173206265656e20736c617368656420746f206062616c616e6365602e50556e626f6e64696e67506f6f6c536c61736865640c011c706f6f6c5f6964100118506f6f6c496400010c657261100120457261496e64657800011c62616c616e636518013042616c616e63654f663c543e000a04250154686520756e626f6e6420706f6f6c206174206065726160206f6620706f6f6c2060706f6f6c5f69646020686173206265656e20736c617368656420746f206062616c616e6365602e54506f6f6c436f6d6d697373696f6e5570646174656408011c706f6f6c5f6964100118506f6f6c496400011c63757272656e74a901017c4f7074696f6e3c2850657262696c6c2c20543a3a4163636f756e744964293e000b04b44120706f6f6c277320636f6d6d697373696f6e2073657474696e6720686173206265656e206368616e6765642e60506f6f6c4d6178436f6d6d697373696f6e5570646174656408011c706f6f6c5f6964100118506f6f6c49640001386d61785f636f6d6d697373696f6e80011c50657262696c6c000c04d44120706f6f6c2773206d6178696d756d20636f6d6d697373696f6e2073657474696e6720686173206265656e206368616e6765642e7c506f6f6c436f6d6d697373696f6e4368616e6765526174655570646174656408011c706f6f6c5f6964100118506f6f6c496400012c6368616e67655f72617465b1010190436f6d6d697373696f6e4368616e6765526174653c543a3a426c6f636b4e756d6265723e000d04cc4120706f6f6c277320636f6d6d697373696f6e20606368616e67655f726174656020686173206265656e206368616e6765642e54506f6f6c436f6d6d697373696f6e436c61696d656408011c706f6f6c5f6964100118506f6f6c4964000128636f6d6d697373696f6e18013042616c616e63654f663c543e000e0484506f6f6c20636f6d6d697373696f6e20686173206265656e20636c61696d65642e04584576656e7473206f6620746869732070616c6c65742ea501085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7324506f6f6c537461746500010c104f70656e0000001c426c6f636b65640001002844657374726f79696e6700020000a90104184f7074696f6e04045401ad010108104e6f6e6500000010536f6d650400ad010000010000ad0100000408800000b101085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7350436f6d6d697373696f6e4368616e676552617465042c426c6f636b4e756d6265720110000801306d61785f696e63726561736580011c50657262696c6c0001246d696e5f64656c617910012c426c6f636b4e756d6265720000b50108306672616d655f73797374656d14506861736500010c384170706c7945787472696e736963040010010c7533320000003046696e616c697a6174696f6e00010038496e697469616c697a6174696f6e00020000b9010000022c00bd010000027d0100c10108306672616d655f73797374656d584c61737452756e74696d6555706772616465496e666f0000080130737065635f76657273696f6ec501014c636f6465633a3a436f6d706163743c7533323e000124737065635f6e616d65c901016473705f72756e74696d653a3a52756e74696d65537472696e670000c5010000061000c9010000050200cd010c306672616d655f73797374656d1870616c6c65741043616c6c0404540001201872656d61726b04011872656d61726b30011c5665633c75383e000010684d616b6520736f6d65206f6e2d636861696e2072656d61726b2e0034232320436f6d706c6578697479202d20604f28312960387365745f686561705f7061676573040114706167657328010c753634000104f853657420746865206e756d626572206f6620706167657320696e2074686520576562417373656d626c7920656e7669726f6e6d656e74277320686561702e207365745f636f6465040110636f646530011c5665633c75383e0002106453657420746865206e65772072756e74696d6520636f64652e0034232320436f6d706c657869747931012d20604f2843202b2053296020776865726520604360206c656e677468206f662060636f64656020616e642060536020636f6d706c6578697479206f66206063616e5f7365745f636f6465605c7365745f636f64655f776974686f75745f636865636b73040110636f646530011c5665633c75383e000310190153657420746865206e65772072756e74696d6520636f646520776974686f757420646f696e6720616e7920636865636b73206f662074686520676976656e2060636f6465602e0034232320436f6d706c65786974798c2d20604f2843296020776865726520604360206c656e677468206f662060636f6465602c7365745f73746f726167650401146974656d73d10101345665633c4b657956616c75653e0004046853657420736f6d65206974656d73206f662073746f726167652e306b696c6c5f73746f726167650401106b657973d90101205665633c4b65793e000504744b696c6c20736f6d65206974656d732066726f6d2073746f726167652e2c6b696c6c5f70726566697808011870726566697830010c4b657900011c7375626b65797310010c75333200061011014b696c6c20616c6c2073746f72616765206974656d7320776974682061206b657920746861742073746172747320776974682074686520676976656e207072656669782e0039012a2a4e4f54453a2a2a2057652072656c79206f6e2074686520526f6f74206f726967696e20746f2070726f7669646520757320746865206e756d626572206f66207375626b65797320756e6465723d0174686520707265666978207765206172652072656d6f76696e6720746f2061636375726174656c792063616c63756c6174652074686520776569676874206f6620746869732066756e6374696f6e2e4472656d61726b5f776974685f6576656e7404011872656d61726b30011c5665633c75383e000704a44d616b6520736f6d65206f6e2d636861696e2072656d61726b20616e6420656d6974206576656e742e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ed101000002d50100d50100000408303000d9010000023000dd010c306672616d655f73797374656d186c696d69747330426c6f636b5765696768747300000c0128626173655f626c6f636b2001185765696768740001246d61785f626c6f636b2001185765696768740001247065725f636c617373e10101845065724469737061746368436c6173733c57656967687473506572436c6173733e0000e1010c346672616d655f737570706f7274206469737061746368405065724469737061746368436c61737304045401e501000c01186e6f726d616ce50101045400012c6f7065726174696f6e616ce5010104540001246d616e6461746f7279e5010104540000e5010c306672616d655f73797374656d186c696d6974733c57656967687473506572436c6173730000100138626173655f65787472696e7369632001185765696768740001346d61785f65787472696e736963e90101384f7074696f6e3c5765696768743e0001246d61785f746f74616ce90101384f7074696f6e3c5765696768743e0001207265736572766564e90101384f7074696f6e3c5765696768743e0000e90104184f7074696f6e04045401200108104e6f6e6500000010536f6d650400200000010000ed010c306672616d655f73797374656d186c696d6974732c426c6f636b4c656e677468000004010c6d6178f10101545065724469737061746368436c6173733c7533323e0000f1010c346672616d655f737570706f7274206469737061746368405065724469737061746368436c6173730404540110000c01186e6f726d616c1001045400012c6f7065726174696f6e616c100104540001246d616e6461746f7279100104540000f501082873705f776569676874733c52756e74696d65446257656967687400000801107265616428010c753634000114777269746528010c7536340000f901082873705f76657273696f6e3852756e74696d6556657273696f6e0000200124737065635f6e616d65c901013452756e74696d65537472696e67000124696d706c5f6e616d65c901013452756e74696d65537472696e67000144617574686f72696e675f76657273696f6e10010c753332000130737065635f76657273696f6e10010c753332000130696d706c5f76657273696f6e10010c75333200011061706973fd01011c4170697356656300014c7472616e73616374696f6e5f76657273696f6e10010c75333200013473746174655f76657273696f6e08010875380000fd01040c436f77040454010102000400010200000001020000020502000502000004080902100009020000030800000008000d020c306672616d655f73797374656d1870616c6c6574144572726f720404540001183c496e76616c6964537065634e616d650000081101546865206e616d65206f662073706563696669636174696f6e20646f6573206e6f74206d61746368206265747765656e207468652063757272656e742072756e74696d6550616e6420746865206e65772072756e74696d652e685370656356657273696f6e4e65656473546f496e63726561736500010841015468652073706563696669636174696f6e2076657273696f6e206973206e6f7420616c6c6f77656420746f206465637265617365206265747765656e207468652063757272656e742072756e74696d6550616e6420746865206e65772072756e74696d652e744661696c6564546f4578747261637452756e74696d6556657273696f6e00020cec4661696c656420746f2065787472616374207468652072756e74696d652076657273696f6e2066726f6d20746865206e65772072756e74696d652e0009014569746865722063616c6c696e672060436f72655f76657273696f6e60206f72206465636f64696e67206052756e74696d6556657273696f6e60206661696c65642e4c4e6f6e44656661756c74436f6d706f73697465000304fc537569636964652063616c6c6564207768656e20746865206163636f756e7420686173206e6f6e2d64656661756c7420636f6d706f7369746520646174612e3c4e6f6e5a65726f526566436f756e74000404350154686572652069732061206e6f6e2d7a65726f207265666572656e636520636f756e742070726576656e74696e6720746865206163636f756e742066726f6d206265696e67207075726765642e3043616c6c46696c7465726564000504d0546865206f726967696e2066696c7465722070726576656e74207468652063616c6c20746f20626520646973706174636865642e046c4572726f7220666f72207468652053797374656d2070616c6c657411020c4070616c6c65745f74696d657374616d701870616c6c65741043616c6c0404540001040c73657404010c6e6f77240124543a3a4d6f6d656e7400003c54536574207468652063757272656e742074696d652e005501546869732063616c6c2073686f756c6420626520696e766f6b65642065786163746c79206f6e63652070657220626c6f636b2e2049742077696c6c2070616e6963206174207468652066696e616c697a6174696f6ed470686173652c20696620746869732063616c6c206861736e2774206265656e20696e766f6b656420627920746861742074696d652e0041015468652074696d657374616d702073686f756c642062652067726561746572207468616e207468652070726576696f7573206f6e652062792074686520616d6f756e742073706563696669656420627940604d696e696d756d506572696f64602e00d4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d7573742062652060496e686572656e74602e0034232320436f6d706c657869747931012d20604f2831296020284e6f7465207468617420696d706c656d656e746174696f6e73206f6620604f6e54696d657374616d7053657460206d75737420616c736f20626520604f283129602961012d20312073746f72616765207265616420616e6420312073746f72616765206d75746174696f6e2028636f64656320604f28312960292e202862656361757365206f6620604469645570646174653a3a74616b656020696e402020606f6e5f66696e616c697a656029d42d2031206576656e742068616e646c657220606f6e5f74696d657374616d705f736574602e204d75737420626520604f283129602e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e15020c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e646564566563080454011902045300000400210201185665633c543e00001902000004081d0228001d020c4473705f636f6e73656e7375735f626162650c617070185075626c696300000400bc013c737232353531393a3a5075626c6963000021020000021902002502084873705f636f6e73656e7375735f736c6f747310536c6f740000040028010c753634000029020c4473705f636f6e73656e7375735f626162651c64696765737473504e657874436f6e66696744657363726970746f72000104085631080104632d020128287536342c2075363429000134616c6c6f7765645f736c6f747331020130416c6c6f776564536c6f7473000100002d02000004082828003102084473705f636f6e73656e7375735f6261626530416c6c6f776564536c6f747300010c305072696d617279536c6f7473000000745072696d617279416e645365636f6e64617279506c61696e536c6f74730001006c5072696d617279416e645365636f6e64617279565246536c6f74730002000035020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540104045300000400390201185665633c543e0000390200000204003d0204184f7074696f6e0404540141020108104e6f6e6500000010536f6d6504004102000001000041020c4473705f636f6e73656e7375735f626162651c646967657374732450726544696765737400010c1c5072696d6172790400450201405072696d617279507265446967657374000100385365636f6e64617279506c61696e04004d02015c5365636f6e64617279506c61696e507265446967657374000200305365636f6e646172795652460400510201545365636f6e646172795652465072654469676573740003000045020c4473705f636f6e73656e7375735f626162651c64696765737473405072696d617279507265446967657374000010013c617574686f726974795f696e64657810015473757065723a3a417574686f72697479496e646578000110736c6f7425020110536c6f740001287672665f6f75747075740401245652464f75747075740001247672665f70726f6f664902012056524650726f6f66000049020000034000000008004d020c4473705f636f6e73656e7375735f626162651c646967657374735c5365636f6e64617279506c61696e507265446967657374000008013c617574686f726974795f696e64657810015473757065723a3a417574686f72697479496e646578000110736c6f7425020110536c6f74000051020c4473705f636f6e73656e7375735f626162651c64696765737473545365636f6e64617279565246507265446967657374000010013c617574686f726974795f696e64657810015473757065723a3a417574686f72697479496e646578000110736c6f7425020110536c6f740001287672665f6f75747075740401245652464f75747075740001247672665f70726f6f664902012056524650726f6f6600005502084473705f636f6e73656e7375735f62616265584261626545706f6368436f6e66696775726174696f6e0000080104632d020128287536342c2075363429000134616c6c6f7765645f736c6f747331020130416c6c6f776564536c6f7473000059020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454015d02045300000400610201185665633c543e00005d020000040828100061020000025d020065020c2c70616c6c65745f626162651870616c6c65741043616c6c04045400010c4c7265706f72745f65717569766f636174696f6e08014865717569766f636174696f6e5f70726f6f6669020184426f783c45717569766f636174696f6e50726f6f663c543a3a4865616465723e3e00013c6b65795f6f776e65725f70726f6f6675020140543a3a4b65794f776e657250726f6f6600001009015265706f727420617574686f726974792065717569766f636174696f6e2f6d69736265686176696f722e2054686973206d6574686f642077696c6c2076657269667905017468652065717569766f636174696f6e2070726f6f6620616e642076616c69646174652074686520676976656e206b6579206f776e6572736869702070726f6f660d01616761696e73742074686520657874726163746564206f6666656e6465722e20496620626f7468206172652076616c69642c20746865206f6666656e63652077696c6c306265207265706f727465642e707265706f72745f65717569766f636174696f6e5f756e7369676e656408014865717569766f636174696f6e5f70726f6f6669020184426f783c45717569766f636174696f6e50726f6f663c543a3a4865616465723e3e00013c6b65795f6f776e65725f70726f6f6675020140543a3a4b65794f776e657250726f6f6600012009015265706f727420617574686f726974792065717569766f636174696f6e2f6d69736265686176696f722e2054686973206d6574686f642077696c6c2076657269667905017468652065717569766f636174696f6e2070726f6f6620616e642076616c69646174652074686520676976656e206b6579206f776e6572736869702070726f6f660d01616761696e73742074686520657874726163746564206f6666656e6465722e20496620626f7468206172652076616c69642c20746865206f6666656e63652077696c6c306265207265706f727465642e0d01546869732065787472696e736963206d7573742062652063616c6c656420756e7369676e656420616e642069742069732065787065637465642074686174206f6e6c791501626c6f636b20617574686f72732077696c6c2063616c6c206974202876616c69646174656420696e206056616c6964617465556e7369676e656460292c2061732073756368150169662074686520626c6f636b20617574686f7220697320646566696e65642069742077696c6c20626520646566696e6564206173207468652065717569766f636174696f6e247265706f727465722e48706c616e5f636f6e6669675f6368616e6765040118636f6e666967290201504e657874436f6e66696744657363726970746f720002105d01506c616e20616e2065706f636820636f6e666967206368616e67652e205468652065706f636820636f6e666967206368616e6765206973207265636f7264656420616e642077696c6c20626520656e6163746564206f6e5101746865206e6578742063616c6c20746f2060656e6163745f65706f63685f6368616e6765602e2054686520636f6e6669672077696c6c20626520616374697661746564206f6e652065706f63682061667465722e59014d756c7469706c652063616c6c7320746f2074686973206d6574686f642077696c6c207265706c61636520616e79206578697374696e6720706c616e6e656420636f6e666967206368616e6765207468617420686164546e6f74206265656e20656e6163746564207965742e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e6902084873705f636f6e73656e7375735f736c6f74734445717569766f636174696f6e50726f6f660818486561646572016d02084964011d02001001206f6666656e6465721d0201084964000110736c6f7425020110536c6f7400013066697273745f6865616465726d0201184865616465720001347365636f6e645f6865616465726d02011848656164657200006d02102873705f72756e74696d651c67656e65726963186865616465721848656164657208184e756d626572011010486173680171020014012c706172656e745f686173682c0130486173683a3a4f75747075740001186e756d626572c50101184e756d62657200012873746174655f726f6f742c0130486173683a3a4f757470757400013c65787472696e736963735f726f6f742c0130486173683a3a4f7574707574000118646967657374340118446967657374000071020c2873705f72756e74696d65187472616974732c426c616b6554776f323536000000007502082873705f73657373696f6e3c4d656d6265727368697050726f6f6600000c011c73657373696f6e10013053657373696f6e496e646578000128747269655f6e6f646573d90101305665633c5665633c75383e3e00013c76616c696461746f725f636f756e7410013856616c696461746f72436f756e74000079020c2c70616c6c65745f626162651870616c6c6574144572726f7204045400011060496e76616c696445717569766f636174696f6e50726f6f660000043101416e2065717569766f636174696f6e2070726f6f662070726f76696465642061732070617274206f6620616e2065717569766f636174696f6e207265706f727420697320696e76616c69642e60496e76616c69644b65794f776e65727368697050726f6f66000104310141206b6579206f776e6572736869702070726f6f662070726f76696465642061732070617274206f6620616e2065717569766f636174696f6e207265706f727420697320696e76616c69642e584475706c69636174654f6666656e63655265706f727400020415014120676976656e2065717569766f636174696f6e207265706f72742069732076616c69642062757420616c72656164792070726576696f75736c79207265706f727465642e50496e76616c6964436f6e66696775726174696f6e0003048c5375626d697474656420636f6e66696775726174696f6e20697320696e76616c69642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909097d020c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e646564566563080454018102045300000400890201185665633c543e00008102083c70616c6c65745f62616c616e6365732c42616c616e63654c6f636b041c42616c616e63650118000c01086964090201384c6f636b4964656e746966696572000118616d6f756e7418011c42616c616e636500011c726561736f6e738502011c526561736f6e7300008502083c70616c6c65745f62616c616e6365731c526561736f6e7300010c0c466565000000104d6973630001000c416c6c0002000089020000028102008d020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454019102045300000400950201185665633c543e00009102083c70616c6c65745f62616c616e6365732c52657365727665446174610844526573657276654964656e7469666965720109021c42616c616e6365011800080108696409020144526573657276654964656e746966696572000118616d6f756e7418011c42616c616e63650000950200000291020099020c3c70616c6c65745f62616c616e6365731870616c6c65741043616c6c080454000449000118207472616e73666572080110646573749d0201504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565cc0128543a3a42616c616e6365000058d45472616e7366657220736f6d65206c697175696420667265652062616c616e636520746f20616e6f74686572206163636f756e742e000501607472616e73666572602077696c6c207365742074686520604672656542616c616e636560206f66207468652073656e64657220616e642072656365697665722e11014966207468652073656e6465722773206163636f756e742069732062656c6f7720746865206578697374656e7469616c206465706f736974206173206120726573756c74b06f6620746865207472616e736665722c20746865206163636f756e742077696c6c206265207265617065642e001501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d75737420626520605369676e65646020627920746865207472616e736163746f722e0034232320436f6d706c657869747961012d20446570656e64656e74206f6e20617267756d656e747320627574206e6f7420637269746963616c2c20676976656e2070726f70657220696d706c656d656e746174696f6e7320666f7220696e70757420636f6e66696794202074797065732e205365652072656c617465642066756e6374696f6e732062656c6f772e31012d20497420636f6e7461696e732061206c696d69746564206e756d626572206f6620726561647320616e642077726974657320696e7465726e616c6c7920616e64206e6f20636f6d706c6578382020636f6d7075746174696f6e2e004852656c617465642066756e6374696f6e733a004d0120202d2060656e737572655f63616e5f77697468647261776020697320616c776179732063616c6c656420696e7465726e616c6c792062757420686173206120626f756e64656420636f6d706c65786974792e290120202d205472616e7366657272696e672062616c616e63657320746f206163636f756e7473207468617420646964206e6f74206578697374206265666f72652077696c6c206361757365cc2020202060543a3a4f6e4e65774163636f756e743a3a6f6e5f6e65775f6163636f756e746020746f2062652063616c6c65642e5d0120202d2052656d6f76696e6720656e6f7567682066756e64732066726f6d20616e206163636f756e742077696c6c20747269676765722060543a3a4475737452656d6f76616c3a3a6f6e5f756e62616c616e636564602e5d0120202d20607472616e736665725f6b6565705f616c6976656020776f726b73207468652073616d652077617920617320607472616e73666572602c206275742068617320616e206164646974696f6e616c20636865636bdc202020207468617420746865207472616e736665722077696c6c206e6f74206b696c6c20746865206f726967696e206163636f756e742e2c7365745f62616c616e63650c010c77686f9d0201504163636f756e7449644c6f6f6b75704f663c543e0001206e65775f66726565cc0128543a3a42616c616e63650001306e65775f7265736572766564cc0128543a3a42616c616e636500012090536574207468652062616c616e636573206f66206120676976656e206163636f756e742e001d01546869732077696c6c20616c74657220604672656542616c616e63656020616e642060526573657276656442616c616e63656020696e2073746f726167652e2069742077696c6c3101616c736f20616c7465722074686520746f74616c2069737375616e6365206f66207468652073797374656d202860546f74616c49737375616e6365602920617070726f7072696174656c792e1501496620746865206e65772066726565206f722072657365727665642062616c616e63652069732062656c6f7720746865206578697374656e7469616c206465706f7369742cfc69742077696c6c20726573657420746865206163636f756e74206e6f6e63652028606672616d655f73797374656d3a3a4163636f756e744e6f6e636560292e00b0546865206469737061746368206f726967696e20666f7220746869732063616c6c2069732060726f6f74602e38666f7263655f7472616e736665720c0118736f757263659d0201504163636f756e7449644c6f6f6b75704f663c543e000110646573749d0201504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565cc0128543a3a42616c616e63650002144d0145786163746c7920617320607472616e73666572602c2065786365707420746865206f726967696e206d75737420626520726f6f7420616e642074686520736f75726365206163636f756e74206d6179206265287370656369666965642e34232320436f6d706c65786974794d012d2053616d65206173207472616e736665722c20627574206164646974696f6e616c207265616420616e6420777269746520626563617573652074686520736f75726365206163636f756e74206973206e6f747c2020617373756d656420746f20626520696e20746865206f7665726c61792e4c7472616e736665725f6b6565705f616c697665080110646573749d0201504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565cc0128543a3a42616c616e63650003184d0153616d6520617320746865205b607472616e73666572605d2063616c6c2c206275742077697468206120636865636b207468617420746865207472616e736665722077696c6c206e6f74206b696c6c207468653c6f726967696e206163636f756e742e00b8393925206f66207468652074696d6520796f752077616e74205b607472616e73666572605d20696e73746561642e00c05b607472616e73666572605d3a207374727563742e50616c6c65742e68746d6c236d6574686f642e7472616e73666572307472616e736665725f616c6c080110646573749d0201504163636f756e7449644c6f6f6b75704f663c543e0001286b6565705f616c6976658c0110626f6f6c00044005015472616e736665722074686520656e74697265207472616e7366657261626c652062616c616e63652066726f6d207468652063616c6c6572206163636f756e742e0059014e4f54453a20546869732066756e6374696f6e206f6e6c7920617474656d70747320746f207472616e73666572205f7472616e7366657261626c655f2062616c616e6365732e2054686973206d65616e7320746861746101616e79206c6f636b65642c2072657365727665642c206f72206578697374656e7469616c206465706f7369747320287768656e20606b6565705f616c6976656020697320607472756560292c2077696c6c206e6f742062655d017472616e7366657272656420627920746869732066756e6374696f6e2e20546f20656e73757265207468617420746869732066756e6374696f6e20726573756c747320696e2061206b696c6c6564206163636f756e742c4501796f75206d69676874206e65656420746f207072657061726520746865206163636f756e742062792072656d6f76696e6720616e79207265666572656e636520636f756e746572732c2073746f72616765406465706f736974732c206574632e2e2e00c0546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205369676e65642e00a02d206064657374603a2054686520726563697069656e74206f6620746865207472616e736665722e59012d20606b6565705f616c697665603a204120626f6f6c65616e20746f2064657465726d696e652069662074686520607472616e736665725f616c6c60206f7065726174696f6e2073686f756c642073656e6420616c6c4d0120206f66207468652066756e647320746865206163636f756e74206861732c2063617573696e67207468652073656e646572206163636f756e7420746f206265206b696c6c6564202866616c7365292c206f72590120207472616e736665722065766572797468696e6720657863657074206174206c6561737420746865206578697374656e7469616c206465706f7369742c2077686963682077696c6c2067756172616e74656520746fd420206b656570207468652073656e646572206163636f756e7420616c697665202874727565292e20232320436f6d706c657869747939012d204f2831292e204a757374206c696b65207472616e736665722c206275742072656164696e672074686520757365722773207472616e7366657261626c652062616c616e63652066697273742e3c666f7263655f756e7265736572766508010c77686f9d0201504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e74180128543a3a42616c616e636500050cb0556e7265736572766520736f6d652062616c616e63652066726f6d2061207573657220627920666f7263652e006c43616e206f6e6c792062652063616c6c656420627920524f4f542e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e9d020c2873705f72756e74696d65306d756c746961646472657373304d756c74694164647265737308244163636f756e7449640100304163636f756e74496e64657801e8011408496404000001244163636f756e74496400000014496e6465780400a10201304163636f756e74496e6465780001000c526177040030011c5665633c75383e0002002441646472657373333204000401205b75383b2033325d000300244164647265737332300400a50201205b75383b2032305d00040000a102000006e800a502000003140000000800a9020c3c70616c6c65745f62616c616e6365731870616c6c6574144572726f720804540004490001203856657374696e6742616c616e63650000049856657374696e672062616c616e636520746f6f206869676820746f2073656e642076616c7565544c69717569646974795265737472696374696f6e73000104c44163636f756e74206c6971756964697479207265737472696374696f6e732070726576656e74207769746864726177616c4c496e73756666696369656e7442616c616e63650002047842616c616e636520746f6f206c6f7720746f2073656e642076616c75652e484578697374656e7469616c4465706f736974000304e856616c756520746f6f206c6f7720746f20637265617465206163636f756e742064756520746f206578697374656e7469616c206465706f736974244b656570416c6976650004048c5472616e736665722f7061796d656e7420776f756c64206b696c6c206163636f756e745c4578697374696e6756657374696e675363686564756c65000504c8412076657374696e67207363686564756c6520616c72656164792065786973747320666f722074686973206163636f756e742c446561644163636f756e740006048842656e6566696369617279206163636f756e74206d757374207072652d65786973743c546f6f4d616e795265736572766573000704ac4e756d626572206f66206e616d656420726573657276657320657863656564204d6178526573657276657304b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909ad020000020000b102083870616c6c65745f7374616b696e67345374616b696e674c656467657204045400001401147374617368000130543a3a4163636f756e744964000114746f74616ccc013042616c616e63654f663c543e000118616374697665cc013042616c616e63654f663c543e000124756e6c6f636b696e67b50201f0426f756e6465645665633c556e6c6f636b4368756e6b3c42616c616e63654f663c543e3e2c20543a3a4d6178556e6c6f636b696e674368756e6b733e00013c636c61696d65645f72657761726473c1020194426f756e6465645665633c457261496e6465782c20543a3a486973746f727944657074683e0000b5020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401b902045300000400bd0201185665633c543e0000b902083870616c6c65745f7374616b696e672c556e6c6f636b4368756e6b041c42616c616e636501180008011476616c7565cc011c42616c616e636500010c657261c5010120457261496e6465780000bd02000002b90200c1020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401100453000004009d0101185665633c543e0000c502083870616c6c65745f7374616b696e674452657761726444657374696e6174696f6e04244163636f756e74496401000114185374616b656400000014537461736800010028436f6e74726f6c6c65720002001c4163636f756e7404000001244163636f756e744964000300104e6f6e6500040000c902083870616c6c65745f7374616b696e672c4e6f6d696e6174696f6e7304045400000c011c74617267657473cd0201ac426f756e6465645665633c543a3a4163636f756e7449642c20543a3a4d61784e6f6d696e6174696f6e733e0001307375626d69747465645f696e100120457261496e646578000128737570707265737365648c0110626f6f6c0000cd020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400ad0201185665633c543e0000d102083870616c6c65745f7374616b696e6734416374697665457261496e666f0000080114696e646578100120457261496e64657800011473746172742501012c4f7074696f6e3c7536343e0000d50200000408100000d902083870616c6c65745f7374616b696e673c457261526577617264506f696e747304244163636f756e744964010000080114746f74616c10012c526577617264506f696e74000128696e646976696475616cdd02018042547265654d61703c4163636f756e7449642c20526577617264506f696e743e0000dd02042042547265654d617008044b010004560110000400e102000000e102000002e50200e50200000408001000e902000002ed0200ed02083870616c6c65745f7374616b696e6738556e6170706c696564536c61736808244163636f756e74496401001c42616c616e636501180014012476616c696461746f720001244163636f756e74496400010c6f776e18011c42616c616e63650001186f7468657273f10201645665633c284163636f756e7449642c2042616c616e6365293e0001247265706f7274657273ad0201385665633c4163636f756e7449643e0001187061796f757418011c42616c616e63650000f102000002f50200f50200000408001800f90200000408801800fd020c3870616c6c65745f7374616b696e6720736c617368696e6734536c617368696e675370616e7300001001287370616e5f696e6465781001245370616e496e6465780001286c6173745f7374617274100120457261496e6465780001486c6173745f6e6f6e7a65726f5f736c617368100120457261496e6465780001147072696f729d0101345665633c457261496e6465783e000001030c3870616c6c65745f7374616b696e6720736c617368696e67285370616e5265636f7264041c42616c616e636501180008011c736c617368656418011c42616c616e6365000120706169645f6f757418011c42616c616e636500000503000002090300090300000408108c000d030c3473705f61726974686d65746963287065725f7468696e67731c50657263656e7400000400080108753800001103103870616c6c65745f7374616b696e671870616c6c65741870616c6c65741043616c6c04045400016810626f6e640c0128636f6e74726f6c6c65729d0201504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565cc013042616c616e63654f663c543e0001147061796565c502017c52657761726444657374696e6174696f6e3c543a3a4163636f756e7449643e00003c610154616b6520746865206f726967696e206163636f756e74206173206120737461736820616e64206c6f636b207570206076616c756560206f66206974732062616c616e63652e2060636f6e74726f6c6c6572602077696c6c80626520746865206163636f756e74207468617420636f6e74726f6c732069742e002d016076616c756560206d757374206265206d6f7265207468616e2074686520606d696e696d756d5f62616c616e636560207370656369666965642062792060543a3a43757272656e6379602e002101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20627920746865207374617368206163636f756e742e003c456d6974732060426f6e646564602e34232320436f6d706c6578697479d02d20496e646570656e64656e74206f662074686520617267756d656e74732e204d6f64657261746520636f6d706c65786974792e1c2d204f2831292e642d20546872656520657874726120444220656e74726965732e004d014e4f54453a2054776f206f66207468652073746f726167652077726974657320286053656c663a3a626f6e646564602c206053656c663a3a7061796565602920617265205f6e657665725f20636c65616e65643d01756e6c6573732074686520606f726967696e602066616c6c732062656c6f77205f6578697374656e7469616c206465706f7369745f20616e6420676574732072656d6f76656420617320647573742e28626f6e645f65787472610401386d61785f6164646974696f6e616ccc013042616c616e63654f663c543e000138610141646420736f6d6520657874726120616d6f756e742074686174206861766520617070656172656420696e207468652073746173682060667265655f62616c616e63656020696e746f207468652062616c616e636520757030666f72207374616b696e672e005101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f206279207468652073746173682c206e6f742074686520636f6e74726f6c6c65722e004d01557365207468697320696620746865726520617265206164646974696f6e616c2066756e647320696e20796f7572207374617368206163636f756e74207468617420796f75207769736820746f20626f6e642e5501556e6c696b65205b60626f6e64605d2853656c663a3a626f6e6429206f72205b60756e626f6e64605d2853656c663a3a756e626f6e642920746869732066756e6374696f6e20646f6573206e6f7420696d706f7365bc616e79206c696d69746174696f6e206f6e2074686520616d6f756e7420746861742063616e2062652061646465642e003c456d6974732060426f6e646564602e0034232320436f6d706c6578697479e42d20496e646570656e64656e74206f662074686520617267756d656e74732e20496e7369676e69666963616e7420636f6d706c65786974792e1c2d204f2831292e18756e626f6e6404011476616c7565cc013042616c616e63654f663c543e00024c51015363686564756c65206120706f7274696f6e206f662074686520737461736820746f20626520756e6c6f636b656420726561647920666f72207472616e73666572206f75742061667465722074686520626f6e64fc706572696f6420656e64732e2049662074686973206c656176657320616e20616d6f756e74206163746976656c7920626f6e646564206c657373207468616e2101543a3a43757272656e63793a3a6d696e696d756d5f62616c616e636528292c207468656e20697420697320696e6372656173656420746f207468652066756c6c20616d6f756e742e005101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2062792074686520636f6e74726f6c6c65722c206e6f74207468652073746173682e0045014f6e63652074686520756e6c6f636b20706572696f6420697320646f6e652c20796f752063616e2063616c6c206077697468647261775f756e626f6e6465646020746f2061637475616c6c79206d6f7665bc7468652066756e6473206f7574206f66206d616e6167656d656e7420726561647920666f72207472616e736665722e0031014e6f206d6f7265207468616e2061206c696d69746564206e756d626572206f6620756e6c6f636b696e67206368756e6b73202873656520604d6178556e6c6f636b696e674368756e6b736029410163616e20636f2d657869737473206174207468652073616d652074696d652e20496620746865726520617265206e6f20756e6c6f636b696e67206368756e6b7320736c6f747320617661696c61626c6545015b6043616c6c3a3a77697468647261775f756e626f6e646564605d2069732063616c6c656420746f2072656d6f766520736f6d65206f6620746865206368756e6b732028696620706f737369626c65292e00390149662061207573657220656e636f756e74657273207468652060496e73756666696369656e74426f6e6460206572726f72207768656e2063616c6c696e6720746869732065787472696e7369632c1901746865792073686f756c642063616c6c20606368696c6c6020666972737420696e206f7264657220746f206672656520757020746865697220626f6e6465642066756e64732e0044456d6974732060556e626f6e646564602e009453656520616c736f205b6043616c6c3a3a77697468647261775f756e626f6e646564605d2e4477697468647261775f756e626f6e6465640401486e756d5f736c617368696e675f7370616e7310010c753332000338290152656d6f766520616e7920756e6c6f636b6564206368756e6b732066726f6d207468652060756e6c6f636b696e67602071756575652066726f6d206f7572206d616e6167656d656e742e0031015468697320657373656e7469616c6c7920667265657320757020746861742062616c616e636520746f206265207573656420627920746865207374617368206163636f756e7420746f20646f4877686174657665722069742077616e74732e001501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2062792074686520636f6e74726f6c6c65722e0048456d697473206057697468647261776e602e006853656520616c736f205b6043616c6c3a3a756e626f6e64605d2e0034232320436f6d706c6578697479d84f285329207768657265205320697320746865206e756d626572206f6620736c617368696e67207370616e7320746f2072656d6f766509014e4f54453a2057656967687420616e6e6f746174696f6e20697320746865206b696c6c207363656e6172696f2c20776520726566756e64206f74686572776973652e2076616c6964617465040114707265667384013856616c696461746f725072656673000414e44465636c617265207468652064657369726520746f2076616c696461746520666f7220746865206f726967696e20636f6e74726f6c6c65722e00d8456666656374732077696c6c2062652066656c742061742074686520626567696e6e696e67206f6620746865206e657874206572612e005101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2062792074686520636f6e74726f6c6c65722c206e6f74207468652073746173682e206e6f6d696e61746504011c74617267657473150301645665633c4163636f756e7449644c6f6f6b75704f663c543e3e0005280d014465636c617265207468652064657369726520746f206e6f6d696e6174652060746172676574736020666f7220746865206f726967696e20636f6e74726f6c6c65722e00d8456666656374732077696c6c2062652066656c742061742074686520626567696e6e696e67206f6620746865206e657874206572612e005101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2062792074686520636f6e74726f6c6c65722c206e6f74207468652073746173682e0034232320436f6d706c65786974792d012d20546865207472616e73616374696f6e277320636f6d706c65786974792069732070726f706f7274696f6e616c20746f207468652073697a65206f662060746172676574736020284e29050177686963682069732063617070656420617420436f6d7061637441737369676e6d656e74733a3a4c494d49542028543a3a4d61784e6f6d696e6174696f6e73292ed42d20426f74682074686520726561647320616e642077726974657320666f6c6c6f7720612073696d696c6172207061747465726e2e146368696c6c000628c44465636c617265206e6f2064657369726520746f206569746865722076616c6964617465206f72206e6f6d696e6174652e00d8456666656374732077696c6c2062652066656c742061742074686520626567696e6e696e67206f6620746865206e657874206572612e005101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2062792074686520636f6e74726f6c6c65722c206e6f74207468652073746173682e0034232320436f6d706c6578697479e42d20496e646570656e64656e74206f662074686520617267756d656e74732e20496e7369676e69666963616e7420636f6d706c65786974792e502d20436f6e7461696e73206f6e6520726561642ec42d2057726974657320617265206c696d6974656420746f2074686520606f726967696e60206163636f756e74206b65792e247365745f70617965650401147061796565c502017c52657761726444657374696e6174696f6e3c543a3a4163636f756e7449643e000730b42852652d2973657420746865207061796d656e742074617267657420666f72206120636f6e74726f6c6c65722e005101456666656374732077696c6c2062652066656c7420696e7374616e746c792028617320736f6f6e20617320746869732066756e6374696f6e20697320636f6d706c65746564207375636365737366756c6c79292e005101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2062792074686520636f6e74726f6c6c65722c206e6f74207468652073746173682e0034232320436f6d706c6578697479182d204f283129e42d20496e646570656e64656e74206f662074686520617267756d656e74732e20496e7369676e69666963616e7420636f6d706c65786974792e942d20436f6e7461696e732061206c696d69746564206e756d626572206f662072656164732ec42d2057726974657320617265206c696d6974656420746f2074686520606f726967696e60206163636f756e74206b65792e242d2d2d2d2d2d2d2d2d387365745f636f6e74726f6c6c6572040128636f6e74726f6c6c65729d0201504163636f756e7449644c6f6f6b75704f663c543e00082c8c2852652d297365742074686520636f6e74726f6c6c6572206f6620612073746173682e005101456666656374732077696c6c2062652066656c7420696e7374616e746c792028617320736f6f6e20617320746869732066756e6374696f6e20697320636f6d706c65746564207375636365737366756c6c79292e005101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f206279207468652073746173682c206e6f742074686520636f6e74726f6c6c65722e0034232320436f6d706c6578697479104f283129e42d20496e646570656e64656e74206f662074686520617267756d656e74732e20496e7369676e69666963616e7420636f6d706c65786974792e942d20436f6e7461696e732061206c696d69746564206e756d626572206f662072656164732ec42d2057726974657320617265206c696d6974656420746f2074686520606f726967696e60206163636f756e74206b65792e4c7365745f76616c696461746f725f636f756e7404010c6e6577c501010c75333200091890536574732074686520696465616c206e756d626572206f662076616c696461746f72732e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e0034232320436f6d706c6578697479104f28312960696e6372656173655f76616c696461746f725f636f756e740401286164646974696f6e616cc501010c753332000a1ce4496e6372656d656e74732074686520696465616c206e756d626572206f662076616c696461746f7273207570746f206d6178696d756d206f668c60456c656374696f6e50726f7669646572426173653a3a4d617857696e6e657273602e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e0034232320436f6d706c65786974799853616d65206173205b6053656c663a3a7365745f76616c696461746f725f636f756e74605d2e547363616c655f76616c696461746f725f636f756e74040118666163746f720d03011c50657263656e74000b1c0d015363616c652075702074686520696465616c206e756d626572206f662076616c696461746f7273206279206120666163746f72207570746f206d6178696d756d206f668c60456c656374696f6e50726f7669646572426173653a3a4d617857696e6e657273602e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e0034232320436f6d706c65786974799853616d65206173205b6053656c663a3a7365745f76616c696461746f725f636f756e74605d2e34666f7263655f6e6f5f65726173000c34ac466f72636520746865726520746f206265206e6f206e6577206572617320696e646566696e6974656c792e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e002423205761726e696e6700190154686520656c656374696f6e2070726f6365737320737461727473206d756c7469706c6520626c6f636b73206265666f72652074686520656e64206f6620746865206572612e3901546875732074686520656c656374696f6e2070726f63657373206d6179206265206f6e676f696e67207768656e20746869732069732063616c6c65642e20496e2074686973206361736520746865dc656c656374696f6e2077696c6c20636f6e74696e756520756e74696c20746865206e65787420657261206973207472696767657265642e0034232320436f6d706c65786974793c2d204e6f20617267756d656e74732e382d205765696768743a204f28312934666f7263655f6e65775f657261000d384901466f72636520746865726520746f2062652061206e6577206572612061742074686520656e64206f6620746865206e6578742073657373696f6e2e20416674657220746869732c2069742077696c6c2062659c726573657420746f206e6f726d616c20286e6f6e2d666f7263656429206265686176696f75722e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e002423205761726e696e6700190154686520656c656374696f6e2070726f6365737320737461727473206d756c7469706c6520626c6f636b73206265666f72652074686520656e64206f6620746865206572612e4901496620746869732069732063616c6c6564206a757374206265666f72652061206e657720657261206973207472696767657265642c2074686520656c656374696f6e2070726f63657373206d6179206e6f748c6861766520656e6f75676820626c6f636b7320746f20676574206120726573756c742e0034232320436f6d706c65786974793c2d204e6f20617267756d656e74732e382d205765696768743a204f283129447365745f696e76756c6e657261626c6573040134696e76756c6e657261626c6573ad0201445665633c543a3a4163636f756e7449643e000e0cc8536574207468652076616c696461746f72732077686f2063616e6e6f7420626520736c61736865642028696620616e79292e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e34666f7263655f756e7374616b650801147374617368000130543a3a4163636f756e7449640001486e756d5f736c617368696e675f7370616e7310010c753332000f0c0901466f72636520612063757272656e74207374616b657220746f206265636f6d6520636f6d706c6574656c7920756e7374616b65642c20696d6d6564696174656c792e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e50666f7263655f6e65775f6572615f616c776179730010240101466f72636520746865726520746f2062652061206e6577206572612061742074686520656e64206f662073657373696f6e7320696e646566696e6974656c792e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e002423205761726e696e6700190154686520656c656374696f6e2070726f6365737320737461727473206d756c7469706c6520626c6f636b73206265666f72652074686520656e64206f6620746865206572612e4901496620746869732069732063616c6c6564206a757374206265666f72652061206e657720657261206973207472696767657265642c2074686520656c656374696f6e2070726f63657373206d6179206e6f748c6861766520656e6f75676820626c6f636b7320746f20676574206120726573756c742e5463616e63656c5f64656665727265645f736c61736808010c657261100120457261496e646578000134736c6173685f696e64696365739d0101205665633c7533323e0011149443616e63656c20656e6163746d656e74206f66206120646566657272656420736c6173682e009843616e2062652063616c6c6564206279207468652060543a3a41646d696e4f726967696e602e000101506172616d65746572733a2065726120616e6420696e6469636573206f662074686520736c617368657320666f7220746861742065726120746f206b696c6c2e387061796f75745f7374616b65727308013c76616c696461746f725f7374617368000130543a3a4163636f756e74496400010c657261100120457261496e64657800122c0d01506179206f757420616c6c20746865207374616b65727320626568696e6420612073696e676c652076616c696461746f7220666f7220612073696e676c65206572612e0049012d206076616c696461746f725f73746173686020697320746865207374617368206163636f756e74206f66207468652076616c696461746f722e205468656972206e6f6d696e61746f72732c20757020746f2501202060543a3a4d61784e6f6d696e61746f72526577617264656450657256616c696461746f72602c2077696c6c20616c736f207265636569766520746865697220726577617264732e31012d206065726160206d617920626520616e7920657261206265747765656e20605b63757272656e745f657261202d20686973746f72795f64657074683b2063757272656e745f6572615d602e005501546865206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2e20416e79206163636f756e742063616e2063616c6c20746869732066756e6374696f6e2c206576656e206966746974206973206e6f74206f6e65206f6620746865207374616b6572732e0034232320436f6d706c6578697479b82d204174206d6f7374204f284d61784e6f6d696e61746f72526577617264656450657256616c696461746f72292e187265626f6e6404011476616c7565cc013042616c616e63654f663c543e00131cdc5265626f6e64206120706f7274696f6e206f6620746865207374617368207363686564756c656420746f20626520756e6c6f636b65642e00d4546865206469737061746368206f726967696e206d757374206265207369676e65642062792074686520636f6e74726f6c6c65722e0034232320436f6d706c6578697479d02d2054696d6520636f6d706c65786974793a204f284c292c207768657265204c20697320756e6c6f636b696e67206368756e6b73882d20426f756e64656420627920604d6178556e6c6f636b696e674368756e6b73602e28726561705f73746173680801147374617368000130543a3a4163636f756e7449640001486e756d5f736c617368696e675f7370616e7310010c7533320014305d0152656d6f766520616c6c2064617461207374727563747572657320636f6e6365726e696e672061207374616b65722f7374617368206f6e636520697420697320617420612073746174652077686572652069742063616e0501626520636f6e736964657265642060647573746020696e20746865207374616b696e672073797374656d2e2054686520726571756972656d656e7473206172653a000501312e207468652060746f74616c5f62616c616e636560206f66207468652073746173682069732062656c6f77206578697374656e7469616c206465706f7369742e1101322e206f722c2074686520606c65646765722e746f74616c60206f66207468652073746173682069732062656c6f77206578697374656e7469616c206465706f7369742e00550154686520666f726d65722063616e2068617070656e20696e206361736573206c696b65206120736c6173683b20746865206c6174746572207768656e20612066756c6c7920756e626f6e646564206163636f756e7409016973207374696c6c20726563656976696e67207374616b696e67207265776172647320696e206052657761726444657374696e6174696f6e3a3a5374616b6564602e00310149742063616e2062652063616c6c656420627920616e796f6e652c206173206c6f6e672061732060737461736860206d65657473207468652061626f766520726571756972656d656e74732e00dc526566756e647320746865207472616e73616374696f6e20666565732075706f6e207375636365737366756c20657865637574696f6e2e106b69636b04010c77686f150301645665633c4163636f756e7449644c6f6f6b75704f663c543e3e00152ce052656d6f76652074686520676976656e206e6f6d696e6174696f6e732066726f6d207468652063616c6c696e672076616c696461746f722e00d8456666656374732077696c6c2062652066656c742061742074686520626567696e6e696e67206f6620746865206e657874206572612e005101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2062792074686520636f6e74726f6c6c65722c206e6f74207468652073746173682e004d012d206077686f603a2041206c697374206f66206e6f6d696e61746f72207374617368206163636f756e74732077686f20617265206e6f6d696e6174696e6720746869732076616c696461746f72207768696368c0202073686f756c64206e6f206c6f6e676572206265206e6f6d696e6174696e6720746869732076616c696461746f722e0055014e6f74653a204d616b696e6720746869732063616c6c206f6e6c79206d616b65732073656e736520696620796f7520666972737420736574207468652076616c696461746f7220707265666572656e63657320746f78626c6f636b20616e792066757274686572206e6f6d696e6174696f6e732e4c7365745f7374616b696e675f636f6e666967731801486d696e5f6e6f6d696e61746f725f626f6e6419030158436f6e6669674f703c42616c616e63654f663c543e3e0001486d696e5f76616c696461746f725f626f6e6419030158436f6e6669674f703c42616c616e63654f663c543e3e00014c6d61785f6e6f6d696e61746f725f636f756e741d030134436f6e6669674f703c7533323e00014c6d61785f76616c696461746f725f636f756e741d030134436f6e6669674f703c7533323e00013c6368696c6c5f7468726573686f6c6421030144436f6e6669674f703c50657263656e743e0001386d696e5f636f6d6d697373696f6e25030144436f6e6669674f703c50657262696c6c3e001644ac5570646174652074686520766172696f7573207374616b696e6720636f6e66696775726174696f6e73202e0025012a20606d696e5f6e6f6d696e61746f725f626f6e64603a20546865206d696e696d756d2061637469766520626f6e64206e656564656420746f2062652061206e6f6d696e61746f722e25012a20606d696e5f76616c696461746f725f626f6e64603a20546865206d696e696d756d2061637469766520626f6e64206e656564656420746f20626520612076616c696461746f722e55012a20606d61785f6e6f6d696e61746f725f636f756e74603a20546865206d6178206e756d626572206f662075736572732077686f2063616e2062652061206e6f6d696e61746f72206174206f6e63652e205768656e98202073657420746f20604e6f6e65602c206e6f206c696d697420697320656e666f726365642e55012a20606d61785f76616c696461746f725f636f756e74603a20546865206d6178206e756d626572206f662075736572732077686f2063616e20626520612076616c696461746f72206174206f6e63652e205768656e98202073657420746f20604e6f6e65602c206e6f206c696d697420697320656e666f726365642e59012a20606368696c6c5f7468726573686f6c64603a2054686520726174696f206f6620606d61785f6e6f6d696e61746f725f636f756e7460206f7220606d61785f76616c696461746f725f636f756e74602077686963681901202073686f756c642062652066696c6c656420696e206f7264657220666f722074686520606368696c6c5f6f7468657260207472616e73616374696f6e20746f20776f726b2e61012a20606d696e5f636f6d6d697373696f6e603a20546865206d696e696d756d20616d6f756e74206f6620636f6d6d697373696f6e207468617420656163682076616c696461746f7273206d757374206d61696e7461696e2e550120205468697320697320636865636b6564206f6e6c792075706f6e2063616c6c696e67206076616c6964617465602e204578697374696e672076616c696461746f727320617265206e6f742061666665637465642e00c452756e74696d654f726967696e206d75737420626520526f6f7420746f2063616c6c20746869732066756e6374696f6e2e0035014e4f54453a204578697374696e67206e6f6d696e61746f727320616e642076616c696461746f72732077696c6c206e6f742062652061666665637465642062792074686973207570646174652e1101746f206b69636b2070656f706c6520756e64657220746865206e6577206c696d6974732c20606368696c6c5f6f74686572602073686f756c642062652063616c6c65642e2c6368696c6c5f6f74686572040128636f6e74726f6c6c6572000130543a3a4163636f756e74496400176841014465636c61726520612060636f6e74726f6c6c65726020746f2073746f702070617274696369706174696e672061732065697468657220612076616c696461746f72206f72206e6f6d696e61746f722e00d8456666656374732077696c6c2062652066656c742061742074686520626567696e6e696e67206f6620746865206e657874206572612e004101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2c206275742063616e2062652063616c6c656420627920616e796f6e652e0059014966207468652063616c6c6572206973207468652073616d652061732074686520636f6e74726f6c6c6572206265696e672074617267657465642c207468656e206e6f206675727468657220636865636b7320617265d8656e666f726365642c20616e6420746869732066756e6374696f6e2062656861766573206a757374206c696b6520606368696c6c602e005d014966207468652063616c6c657220697320646966666572656e74207468616e2074686520636f6e74726f6c6c6572206265696e672074617267657465642c2074686520666f6c6c6f77696e6720636f6e646974696f6e73306d757374206265206d65743a001d012a2060636f6e74726f6c6c657260206d7573742062656c6f6e6720746f2061206e6f6d696e61746f722077686f20686173206265636f6d65206e6f6e2d6465636f6461626c652c000c4f723a003d012a204120604368696c6c5468726573686f6c6460206d7573742062652073657420616e6420636865636b656420776869636820646566696e657320686f7720636c6f736520746f20746865206d6178550120206e6f6d696e61746f7273206f722076616c696461746f7273207765206d757374207265616368206265666f72652075736572732063616e207374617274206368696c6c696e67206f6e652d616e6f746865722e59012a204120604d61784e6f6d696e61746f72436f756e746020616e6420604d617856616c696461746f72436f756e7460206d75737420626520736574207768696368206973207573656420746f2064657465726d696e65902020686f7720636c6f73652077652061726520746f20746865207468726573686f6c642e5d012a204120604d696e4e6f6d696e61746f72426f6e646020616e6420604d696e56616c696461746f72426f6e6460206d7573742062652073657420616e6420636865636b65642c2077686963682064657465726d696e65735101202069662074686973206973206120706572736f6e20746861742073686f756c64206265206368696c6c6564206265636175736520746865792068617665206e6f74206d657420746865207468726573686f6c64402020626f6e642072657175697265642e005501546869732063616e2062652068656c7066756c20696620626f6e6420726571756972656d656e74732061726520757064617465642c20616e64207765206e65656420746f2072656d6f7665206f6c642075736572739877686f20646f206e6f74207361746973667920746865736520726571756972656d656e74732e68666f7263655f6170706c795f6d696e5f636f6d6d697373696f6e04013c76616c696461746f725f7374617368000130543a3a4163636f756e74496400180c4501466f72636520612076616c696461746f7220746f2068617665206174206c6561737420746865206d696e696d756d20636f6d6d697373696f6e2e20546869732077696c6c206e6f74206166666563742061610176616c696461746f722077686f20616c726561647920686173206120636f6d6d697373696f6e2067726561746572207468616e206f7220657175616c20746f20746865206d696e696d756d2e20416e79206163636f756e743863616e2063616c6c20746869732e487365745f6d696e5f636f6d6d697373696f6e04010c6e657780011c50657262696c6c00191025015365747320746865206d696e696d756d20616d6f756e74206f6620636f6d6d697373696f6e207468617420656163682076616c696461746f7273206d757374206d61696e7461696e2e005901546869732063616c6c20686173206c6f7765722070726976696c65676520726571756972656d656e7473207468616e20607365745f7374616b696e675f636f6e6669676020616e642063616e2062652063616c6c6564cc6279207468652060543a3a41646d696e4f726967696e602e20526f6f742063616e20616c776179732063616c6c20746869732e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e15030000029d02001903103870616c6c65745f7374616b696e671870616c6c65741870616c6c657420436f6e6669674f700404540118010c104e6f6f700000000c5365740400180104540001001852656d6f7665000200001d03103870616c6c65745f7374616b696e671870616c6c65741870616c6c657420436f6e6669674f700404540110010c104e6f6f700000000c5365740400100104540001001852656d6f7665000200002103103870616c6c65745f7374616b696e671870616c6c65741870616c6c657420436f6e6669674f70040454010d03010c104e6f6f700000000c53657404000d030104540001001852656d6f7665000200002503103870616c6c65745f7374616b696e671870616c6c65741870616c6c657420436f6e6669674f700404540180010c104e6f6f700000000c5365740400800104540001001852656d6f7665000200002903103870616c6c65745f7374616b696e671870616c6c65741870616c6c6574144572726f72040454000164344e6f74436f6e74726f6c6c6572000004644e6f74206120636f6e74726f6c6c6572206163636f756e742e204e6f745374617368000104504e6f742061207374617368206163636f756e742e34416c7265616479426f6e64656400020460537461736820697320616c726561647920626f6e6465642e34416c726561647950616972656400030474436f6e74726f6c6c657220697320616c7265616479207061697265642e30456d7074795461726765747300040460546172676574732063616e6e6f7420626520656d7074792e384475706c6963617465496e646578000504404475706c696361746520696e6465782e44496e76616c6964536c617368496e64657800060484536c617368207265636f726420696e646578206f7574206f6620626f756e64732e40496e73756666696369656e74426f6e6400070c590143616e6e6f74206861766520612076616c696461746f72206f72206e6f6d696e61746f7220726f6c652c20776974682076616c7565206c657373207468616e20746865206d696e696d756d20646566696e65642062793d01676f7665726e616e6365202873656520604d696e56616c696461746f72426f6e646020616e6420604d696e4e6f6d696e61746f72426f6e6460292e20496620756e626f6e64696e67206973207468651501696e74656e74696f6e2c20606368696c6c6020666972737420746f2072656d6f7665206f6e65277320726f6c652061732076616c696461746f722f6e6f6d696e61746f722e304e6f4d6f72654368756e6b730008049043616e206e6f74207363686564756c65206d6f726520756e6c6f636b206368756e6b732e344e6f556e6c6f636b4368756e6b000904a043616e206e6f74207265626f6e6420776974686f757420756e6c6f636b696e67206368756e6b732e3046756e646564546172676574000a04c8417474656d7074696e6720746f2074617267657420612073746173682074686174207374696c6c206861732066756e64732e48496e76616c6964457261546f526577617264000b0458496e76616c69642065726120746f207265776172642e68496e76616c69644e756d6265724f664e6f6d696e6174696f6e73000c0478496e76616c6964206e756d626572206f66206e6f6d696e6174696f6e732e484e6f74536f72746564416e64556e69717565000d04804974656d7320617265206e6f7420736f7274656420616e6420756e697175652e38416c7265616479436c61696d6564000e0409015265776172647320666f72207468697320657261206861766520616c7265616479206265656e20636c61696d656420666f7220746869732076616c696461746f722e54496e636f7272656374486973746f72794465707468000f04c0496e636f72726563742070726576696f757320686973746f727920646570746820696e7075742070726f76696465642e58496e636f7272656374536c617368696e675370616e73001004b0496e636f7272656374206e756d626572206f6620736c617368696e67207370616e732070726f76696465642e2042616453746174650011043901496e7465726e616c20737461746520686173206265636f6d6520736f6d65686f7720636f7272757074656420616e6420746865206f7065726174696f6e2063616e6e6f7420636f6e74696e75652e38546f6f4d616e795461726765747300120494546f6f206d616e79206e6f6d696e6174696f6e207461726765747320737570706c6965642e244261645461726765740013043d0141206e6f6d696e6174696f6e207461726765742077617320737570706c69656420746861742077617320626c6f636b6564206f72206f7468657277697365206e6f7420612076616c696461746f722e4043616e6e6f744368696c6c4f74686572001404550154686520757365722068617320656e6f75676820626f6e6420616e6420746875732063616e6e6f74206265206368696c6c656420666f72636566756c6c7920627920616e2065787465726e616c20706572736f6e2e44546f6f4d616e794e6f6d696e61746f72730015084d0154686572652061726520746f6f206d616e79206e6f6d696e61746f727320696e207468652073797374656d2e20476f7665726e616e6365206e6565647320746f2061646a75737420746865207374616b696e67b473657474696e677320746f206b656570207468696e6773207361666520666f72207468652072756e74696d652e44546f6f4d616e7956616c696461746f7273001608550154686572652061726520746f6f206d616e792076616c696461746f722063616e6469646174657320696e207468652073797374656d2e20476f7665726e616e6365206e6565647320746f2061646a75737420746865d47374616b696e672073657474696e677320746f206b656570207468696e6773207361666520666f72207468652072756e74696d652e40436f6d6d697373696f6e546f6f4c6f77001704e0436f6d6d697373696f6e20697320746f6f206c6f772e204d757374206265206174206c6561737420604d696e436f6d6d697373696f6e602e2c426f756e644e6f744d657400180458536f6d6520626f756e64206973206e6f74206d65742e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909092d030c2873705f7374616b696e671c6f6666656e6365384f6666656e636544657461696c7308205265706f727465720100204f6666656e64657201c4000801206f6666656e646572c401204f6666656e6465720001247265706f7274657273ad0201345665633c5265706f727465723e00003103000004089830003503000004082c100039030000023d03003d03000004080041030041030c5c637265646974636f696e5f6e6f64655f72756e74696d65186f70617175652c53657373696f6e4b65797300000c011c6772616e647061ac01d03c4772616e647061206173202463726174653a3a426f756e64546f52756e74696d654170705075626c69633e3a3a5075626c6963000110626162651d0201c43c42616265206173202463726174653a3a426f756e64546f52756e74696d654170705075626c69633e3a3a5075626c6963000124696d5f6f6e6c696e65b801d43c496d4f6e6c696e65206173202463726174653a3a426f756e64546f52756e74696d654170705075626c69633e3a3a5075626c696300004503000004084903300049030c1c73705f636f72651863727970746f244b65795479706549640000040040011c5b75383b20345d00004d030c3870616c6c65745f73657373696f6e1870616c6c65741043616c6c040454000108207365745f6b6579730801106b6579734103011c543a3a4b65797300011470726f6f6630011c5665633c75383e000024e453657473207468652073657373696f6e206b6579287329206f66207468652066756e6374696f6e2063616c6c657220746f20606b657973602e1d01416c6c6f777320616e206163636f756e7420746f20736574206974732073657373696f6e206b6579207072696f7220746f206265636f6d696e6720612076616c696461746f722ec05468697320646f65736e27742074616b652065666665637420756e74696c20746865206e6578742073657373696f6e2e00d0546865206469737061746368206f726967696e206f6620746869732066756e6374696f6e206d757374206265207369676e65642e0034232320436f6d706c657869747959012d20604f283129602e2041637475616c20636f737420646570656e6473206f6e20746865206e756d626572206f66206c656e677468206f662060543a3a4b6579733a3a6b65795f69647328296020776869636820697320202066697865642e2870757267655f6b657973000130c852656d6f76657320616e792073657373696f6e206b6579287329206f66207468652066756e6374696f6e2063616c6c65722e00c05468697320646f65736e27742074616b652065666665637420756e74696c20746865206e6578742073657373696f6e2e005501546865206469737061746368206f726967696e206f6620746869732066756e6374696f6e206d757374206265205369676e656420616e6420746865206163636f756e74206d757374206265206569746865722062655d01636f6e7665727469626c6520746f20612076616c696461746f72204944207573696e672074686520636861696e2773207479706963616c2061646472657373696e672073797374656d20287468697320757375616c6c7951016d65616e73206265696e67206120636f6e74726f6c6c6572206163636f756e7429206f72206469726563746c7920636f6e7665727469626c6520696e746f20612076616c696461746f722049442028776869636894757375616c6c79206d65616e73206265696e672061207374617368206163636f756e74292e0034232320436f6d706c65786974793d012d20604f2831296020696e206e756d626572206f66206b65792074797065732e2041637475616c20636f737420646570656e6473206f6e20746865206e756d626572206f66206c656e677468206f6698202060543a3a4b6579733a3a6b65795f6964732829602077686963682069732066697865642e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e51030c3870616c6c65745f73657373696f6e1870616c6c6574144572726f7204045400011430496e76616c696450726f6f6600000460496e76616c6964206f776e6572736869702070726f6f662e5c4e6f4173736f63696174656456616c696461746f7249640001049c4e6f206173736f6369617465642076616c696461746f7220494420666f72206163636f756e742e344475706c6963617465644b65790002046452656769737465726564206475706c6963617465206b65792e184e6f4b657973000304a44e6f206b65797320617265206173736f63696174656420776974682074686973206163636f756e742e244e6f4163636f756e7400040419014b65792073657474696e67206163636f756e74206973206e6f74206c6976652c20736f206974277320696d706f737369626c6520746f206173736f6369617465206b6579732e04744572726f7220666f72207468652073657373696f6e2070616c6c65742e5503083870616c6c65745f6772616e6470612c53746f726564537461746504044e01100110104c6976650000003050656e64696e6750617573650801307363686564756c65645f61741001044e00011464656c61791001044e000100185061757365640002003450656e64696e67526573756d650801307363686564756c65645f61741001044e00011464656c61791001044e000300005903083870616c6c65745f6772616e6470614c53746f72656450656e64696e674368616e676508044e0110144c696d697400001001307363686564756c65645f61741001044e00011464656c61791001044e0001406e6578745f617574686f7269746965735d03016c426f756e646564417574686f726974794c6973743c4c696d69743e000118666f726365645d0101244f7074696f6e3c4e3e00005d030c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401a8045300000400a401185665633c543e000061030c3870616c6c65745f6772616e6470611870616c6c65741043616c6c04045400010c4c7265706f72745f65717569766f636174696f6e08014865717569766f636174696f6e5f70726f6f66650301bc426f783c45717569766f636174696f6e50726f6f663c543a3a486173682c20543a3a426c6f636b4e756d6265723e3e00013c6b65795f6f776e65725f70726f6f6675020140543a3a4b65794f776e657250726f6f6600001009015265706f727420766f7465722065717569766f636174696f6e2f6d69736265686176696f722e2054686973206d6574686f642077696c6c2076657269667920746865f465717569766f636174696f6e2070726f6f6620616e642076616c69646174652074686520676976656e206b6579206f776e6572736869702070726f6f66f8616761696e73742074686520657874726163746564206f6666656e6465722e20496620626f7468206172652076616c69642c20746865206f6666656e63654477696c6c206265207265706f727465642e707265706f72745f65717569766f636174696f6e5f756e7369676e656408014865717569766f636174696f6e5f70726f6f66650301bc426f783c45717569766f636174696f6e50726f6f663c543a3a486173682c20543a3a426c6f636b4e756d6265723e3e00013c6b65795f6f776e65725f70726f6f6675020140543a3a4b65794f776e657250726f6f6600012409015265706f727420766f7465722065717569766f636174696f6e2f6d69736265686176696f722e2054686973206d6574686f642077696c6c2076657269667920746865f465717569766f636174696f6e2070726f6f6620616e642076616c69646174652074686520676976656e206b6579206f776e6572736869702070726f6f66f8616761696e73742074686520657874726163746564206f6666656e6465722e20496620626f7468206172652076616c69642c20746865206f6666656e63654477696c6c206265207265706f727465642e000d01546869732065787472696e736963206d7573742062652063616c6c656420756e7369676e656420616e642069742069732065787065637465642074686174206f6e6c791501626c6f636b20617574686f72732077696c6c2063616c6c206974202876616c69646174656420696e206056616c6964617465556e7369676e656460292c2061732073756368150169662074686520626c6f636b20617574686f7220697320646566696e65642069742077696c6c20626520646566696e6564206173207468652065717569766f636174696f6e247265706f727465722e306e6f74655f7374616c6c656408011464656c6179100138543a3a426c6f636b4e756d62657200016c626573745f66696e616c697a65645f626c6f636b5f6e756d626572100138543a3a426c6f636b4e756d6265720002303d014e6f74652074686174207468652063757272656e7420617574686f7269747920736574206f6620746865204752414e4450412066696e616c6974792067616467657420686173207374616c6c65642e006101546869732077696c6c2074726967676572206120666f7263656420617574686f7269747920736574206368616e67652061742074686520626567696e6e696e67206f6620746865206e6578742073657373696f6e2c20746f6101626520656e6163746564206064656c61796020626c6f636b7320616674657220746861742e20546865206064656c6179602073686f756c64206265206869676820656e6f75676820746f20736166656c7920617373756d654901746861742074686520626c6f636b207369676e616c6c696e672074686520666f72636564206368616e67652077696c6c206e6f742062652072652d6f7267656420652e672e203130303020626c6f636b732e5d0154686520626c6f636b2070726f64756374696f6e207261746520287768696368206d617920626520736c6f77656420646f776e2062656361757365206f662066696e616c697479206c616767696e67292073686f756c64510162652074616b656e20696e746f206163636f756e74207768656e2063686f6f73696e6720746865206064656c6179602e20546865204752414e44504120766f74657273206261736564206f6e20746865206e65775501617574686f726974792077696c6c20737461727420766f74696e67206f6e20746f70206f662060626573745f66696e616c697a65645f626c6f636b5f6e756d6265726020666f72206e65772066696e616c697a65644d01626c6f636b732e2060626573745f66696e616c697a65645f626c6f636b5f6e756d626572602073686f756c64206265207468652068696768657374206f6620746865206c61746573742066696e616c697a6564c4626c6f636b206f6620616c6c2076616c696461746f7273206f6620746865206e657720617574686f72697479207365742e00584f6e6c792063616c6c61626c6520627920726f6f742e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e6503085073705f636f6e73656e7375735f6772616e6470614445717569766f636174696f6e50726f6f66080448012c044e0110000801187365745f6964280114536574496400013065717569766f636174696f6e6903014845717569766f636174696f6e3c482c204e3e00006903085073705f636f6e73656e7375735f6772616e6470613045717569766f636174696f6e080448012c044e011001081c507265766f746504006d030139016772616e6470613a3a45717569766f636174696f6e3c417574686f7269747949642c206772616e6470613a3a507265766f74653c482c204e3e2c0a417574686f726974795369676e61747572653e00000024507265636f6d6d6974040081030141016772616e6470613a3a45717569766f636174696f6e3c417574686f7269747949642c206772616e6470613a3a507265636f6d6d69743c482c204e3e2c0a417574686f726974795369676e61747572653e000100006d03084066696e616c6974795f6772616e6470613045717569766f636174696f6e0c08496401ac0456017103045301750300100130726f756e645f6e756d62657228010c7536340001206964656e74697479ac0108496400011466697273747d03011828562c2053290001187365636f6e647d03011828562c20532900007103084066696e616c6974795f6772616e6470611c507265766f7465080448012c044e01100008012c7461726765745f686173682c0104480001347461726765745f6e756d6265721001044e000075030c5073705f636f6e73656e7375735f6772616e6470610c617070245369676e61747572650000040079030148656432353531393a3a5369676e6174757265000079030c1c73705f636f72651c65643235353139245369676e617475726500000400490201205b75383b2036345d00007d030000040871037503008103084066696e616c6974795f6772616e6470613045717569766f636174696f6e0c08496401ac0456018503045301750300100130726f756e645f6e756d62657228010c7536340001206964656e74697479ac0108496400011466697273748903011828562c2053290001187365636f6e648903011828562c20532900008503084066696e616c6974795f6772616e64706124507265636f6d6d6974080448012c044e01100008012c7461726765745f686173682c0104480001347461726765745f6e756d6265721001044e000089030000040885037503008d030c3870616c6c65745f6772616e6470611870616c6c6574144572726f7204045400011c2c50617573654661696c65640000080501417474656d707420746f207369676e616c204752414e445041207061757365207768656e2074686520617574686f72697479207365742069736e2774206c697665a42865697468657220706175736564206f7220616c72656164792070656e64696e67207061757365292e30526573756d654661696c65640001081101417474656d707420746f207369676e616c204752414e44504120726573756d65207768656e2074686520617574686f72697479207365742069736e277420706175736564a028656974686572206c697665206f7220616c72656164792070656e64696e6720726573756d65292e344368616e676550656e64696e67000204e8417474656d707420746f207369676e616c204752414e445041206368616e67652077697468206f6e6520616c72656164792070656e64696e672e1c546f6f536f6f6e000304bc43616e6e6f74207369676e616c20666f72636564206368616e676520736f20736f6f6e206166746572206c6173742e60496e76616c69644b65794f776e65727368697050726f6f66000404310141206b6579206f776e6572736869702070726f6f662070726f76696465642061732070617274206f6620616e2065717569766f636174696f6e207265706f727420697320696e76616c69642e60496e76616c696445717569766f636174696f6e50726f6f660005043101416e2065717569766f636174696f6e2070726f6f662070726f76696465642061732070617274206f6620616e2065717569766f636174696f6e207265706f727420697320696e76616c69642e584475706c69636174654f6666656e63655265706f727400060415014120676976656e2065717569766f636174696f6e207265706f72742069732076616c69642062757420616c72656164792070726576696f75736c79207265706f727465642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a09090991030c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401b8045300000400950301185665633c543e00009503000002b800990310346672616d655f737570706f727418747261697473106d69736334577261707065724f7061717565040454019d03000800c5010000009d0301045400009d03084070616c6c65745f696d5f6f6e6c696e6564426f756e6465644f70617175654e6574776f726b53746174650c4c506565724964456e636f64696e674c696d697400584d756c746941646472456e636f64696e674c696d697400384164647265737365734c696d6974000008011c706565725f6964a103019c5765616b426f756e6465645665633c75382c20506565724964456e636f64696e674c696d69743e00014865787465726e616c5f616464726573736573a503012d015765616b426f756e6465645665633c5765616b426f756e6465645665633c75382c204d756c746941646472456e636f64696e674c696d69743e2c204164647265737365734c696d69740a3e0000a1030c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401080453000004003001185665633c543e0000a5030c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401a103045300000400a90301185665633c543e0000a903000002a10300ad030c4070616c6c65745f696d5f6f6e6c696e651870616c6c65741043616c6c04045400010424686561727462656174080124686561727462656174b10301644865617274626561743c543a3a426c6f636b4e756d6265723e0001247369676e6174757265c50301bc3c543a3a417574686f7269747949642061732052756e74696d654170705075626c69633e3a3a5369676e617475726500001438232320436f6d706c65786974793a59012d20604f284b202b20452960207768657265204b206973206c656e677468206f6620604b6579736020286865617274626561742e76616c696461746f72735f6c656e2920616e642045206973206c656e677468206f66b02020606865617274626561742e6e6574776f726b5f73746174652e65787465726e616c5f61646472657373608820202d20604f284b29603a206465636f64696e67206f66206c656e67746820604b60ac20202d20604f284529603a206465636f64696e672f656e636f64696e67206f66206c656e67746820604560042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632eb103084070616c6c65745f696d5f6f6e6c696e6524486561727462656174042c426c6f636b4e756d626572011000140130626c6f636b5f6e756d62657210012c426c6f636b4e756d6265720001346e6574776f726b5f7374617465b50301484f70617175654e6574776f726b537461746500013473657373696f6e5f696e64657810013053657373696f6e496e64657800013c617574686f726974795f696e64657810012441757468496e64657800013876616c696461746f72735f6c656e10010c7533320000b5030c1c73705f636f7265206f6666636861696e484f70617175654e6574776f726b5374617465000008011c706565725f6964b90301304f706171756550656572496400014865787465726e616c5f616464726573736573bd0301505665633c4f70617175654d756c7469616464723e0000b903081c73705f636f7265304f70617175655065657249640000040030011c5665633c75383e0000bd03000002c10300c1030c1c73705f636f7265206f6666636861696e3c4f70617175654d756c7469616464720000040030011c5665633c75383e0000c503104070616c6c65745f696d5f6f6e6c696e651c737232353531392c6170705f73723235353139245369676e617475726500000400c9030148737232353531393a3a5369676e61747572650000c9030c1c73705f636f72651c73723235353139245369676e617475726500000400490201205b75383b2036345d0000cd030c4070616c6c65745f696d5f6f6e6c696e651870616c6c6574144572726f7204045400010828496e76616c69644b6579000004604e6f6e206578697374656e74207075626c6963206b65792e4c4475706c696361746564486561727462656174000104544475706c696361746564206865617274626561742e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909d1030c4070616c6c65745f626167735f6c697374106c697374104e6f646508045400044900001401086964000130543a3a4163636f756e74496400011070726576ec01504f7074696f6e3c543a3a4163636f756e7449643e0001106e657874ec01504f7074696f6e3c543a3a4163636f756e7449643e0001246261675f7570706572280120543a3a53636f726500011473636f7265280120543a3a53636f72650000d5030c4070616c6c65745f626167735f6c697374106c6973740c426167080454000449000008011068656164ec01504f7074696f6e3c543a3a4163636f756e7449643e0001107461696cec01504f7074696f6e3c543a3a4163636f756e7449643e0000d9030c4070616c6c65745f626167735f6c6973741870616c6c65741043616c6c0804540004490001081472656261670401286469736c6f63617465649d0201504163636f756e7449644c6f6f6b75704f663c543e00002859014465636c617265207468617420736f6d6520606469736c6f636174656460206163636f756e74206861732c207468726f7567682072657761726473206f722070656e616c746965732c2073756666696369656e746c7951016368616e676564206974732073636f726520746861742069742073686f756c642070726f7065726c792066616c6c20696e746f206120646966666572656e7420626167207468616e206974732063757272656e74106f6e652e001d01416e796f6e652063616e2063616c6c20746869732066756e6374696f6e2061626f757420616e7920706f74656e7469616c6c79206469736c6f6361746564206163636f756e742e00490157696c6c20616c7761797320757064617465207468652073746f7265642073636f7265206f6620606469736c6f63617465646020746f2074686520636f72726563742073636f72652c206261736564206f6e406053636f726550726f7669646572602e00d4496620606469736c6f63617465646020646f6573206e6f74206578697374732c2069742072657475726e7320616e206572726f722e3c7075745f696e5f66726f6e745f6f6604011c6c6967687465729d0201504163636f756e7449644c6f6f6b75704f663c543e000120d04d6f7665207468652063616c6c65722773204964206469726563746c7920696e2066726f6e74206f6620606c696768746572602e005901546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e642063616e206f6e6c792062652063616c6c656420627920746865204964206f66a0746865206163636f756e7420676f696e6720696e2066726f6e74206f6620606c696768746572602e00344f6e6c7920776f726b73206966942d20626f7468206e6f646573206172652077697468696e207468652073616d65206261672cd02d20616e6420606f726967696e602068617320612067726561746572206053636f726560207468616e20606c696768746572602e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632edd030000022800e1030c4070616c6c65745f626167735f6c6973741870616c6c6574144572726f72080454000449000104104c6973740400e50301244c6973744572726f72000004b441206572726f7220696e20746865206c69737420696e7465726661636520696d706c656d656e746174696f6e2e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909e5030c4070616c6c65745f626167735f6c697374106c697374244c6973744572726f72000110244475706c6963617465000000284e6f7448656176696572000100304e6f74496e53616d65426167000200304e6f64654e6f74466f756e6400030000e9030c3473705f61726974686d657469632c66697865645f706f696e742446697865645531323800000400180110753132380000ed03086870616c6c65745f7472616e73616374696f6e5f7061796d656e742052656c6561736573000108245631416e6369656e7400000008563200010000f1030c2c70616c6c65745f7375646f1870616c6c65741043616c6c040454000110107375646f04011063616c6cf503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000018350141757468656e7469636174657320746865207375646f206b657920616e64206469737061746368657320612066756e6374696f6e2063616c6c20776974682060526f6f7460206f726967696e2e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0034232320436f6d706c65786974791c2d204f2831292e547375646f5f756e636865636b65645f77656967687408011063616c6cf503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000118776569676874200118576569676874000120350141757468656e7469636174657320746865207375646f206b657920616e64206469737061746368657320612066756e6374696f6e2063616c6c20776974682060526f6f7460206f726967696e2e2d01546869732066756e6374696f6e20646f6573206e6f7420636865636b2074686520776569676874206f66207468652063616c6c2c20616e6420696e737465616420616c6c6f777320746865b05375646f207573657220746f20737065636966792074686520776569676874206f66207468652063616c6c2e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0034232320436f6d706c65786974791c2d204f2831292e1c7365745f6b657904010c6e65779d0201504163636f756e7449644c6f6f6b75704f663c543e00021c5d0141757468656e74696361746573207468652063757272656e74207375646f206b657920616e6420736574732074686520676976656e204163636f756e7449642028606e6577602920617320746865206e6577207375646f106b65792e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0034232320436f6d706c65786974791c2d204f2831292e1c7375646f5f617308010c77686f9d0201504163636f756e7449644c6f6f6b75704f663c543e00011063616c6cf503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00031c4d0141757468656e7469636174657320746865207375646f206b657920616e64206469737061746368657320612066756e6374696f6e2063616c6c207769746820605369676e656460206f726967696e2066726f6d406120676976656e206163636f756e742e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0034232320436f6d706c65786974791c2d204f2831292e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ef503085c637265646974636f696e5f6e6f64655f72756e74696d652c52756e74696d6543616c6c0001441853797374656d0400cd0101ad0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c53797374656d2c2052756e74696d653e0000002454696d657374616d700400110201b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c54696d657374616d702c2052756e74696d653e00010010426162650400650201a50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c426162652c2052756e74696d653e0003002042616c616e6365730400990201b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c42616c616e6365732c2052756e74696d653e0004001c5374616b696e670400110301b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5374616b696e672c2052756e74696d653e0006001c53657373696f6e04004d0301b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c53657373696f6e2c2052756e74696d653e0009001c4772616e6470610400610301b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4772616e6470612c2052756e74696d653e000a0020496d4f6e6c696e650400ad0301b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c496d4f6e6c696e652c2052756e74696d653e000b0024566f7465724c6973740400d90301b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c566f7465724c6973742c2052756e74696d653e000c00105375646f0400f10301a50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5375646f2c2052756e74696d653e000e0028437265646974636f696e0400f90301bd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c437265646974636f696e2c2052756e74696d653e000f00245363686564756c65720400210401b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5363686564756c65722c2052756e74696d653e001200204964656e746974790400290401b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4964656e746974792c2052756e74696d653e0014001c5574696c6974790400c90401b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5574696c6974792c2052756e74696d653e0015001450726f78790400dd0401a90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50726f78792c2052756e74696d653e0016002c46617374556e7374616b650400e50401c10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c46617374556e7374616b652c2052756e74696d653e0017003c4e6f6d696e6174696f6e506f6f6c730400e90401d10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4e6f6d696e6174696f6e506f6f6c732c2052756e74696d653e00180000f9030c4470616c6c65745f637265646974636f696e1870616c6c65741043616c6c0404540001484c636c61696d5f6c65676163795f77616c6c65740401287075626c69635f6b6579fd03015873705f636f72653a3a65636473613a3a5075626c69630000041d01436c61696d73206c65676163792077616c6c657420616e64207472616e7366657273207468652062616c616e636520746f207468652073656e6465722773206163636f756e742e4072656769737465725f616464726573730c0128626c6f636b636861696efc0128426c6f636b636861696e00011c616464726573730101013c45787465726e616c4164647265737300013c6f776e6572736869705f70726f6f660504016473705f636f72653a3a65636473613a3a5369676e6174757265000104410152656769737465727320616e2065787465726e616c2061646472657373206f6e2060626c6f636b636861696e6020616e6420606e6574776f726b6020776974682076616c756520606164647265737360346164645f61736b5f6f72646572100128616464726573735f6964f401484164647265737349643c543a3a486173683e0001147465726d73350101244c6f616e5465726d7300014065787069726174696f6e5f626c6f636b100144426c6f636b4e756d626572466f723c543e000110677569640101011047756964000200346164645f6269645f6f72646572100128616464726573735f6964f401484164647265737349643c543a3a486173683e0001147465726d73350101244c6f616e5465726d7300014065787069726174696f6e5f626c6f636b100144426c6f636b4e756d626572466f723c543e000110677569640101011047756964000300246164645f6f666665720c013061736b5f6f726465725f69642901018c41736b4f7264657249643c543a3a426c6f636b4e756d6265722c20543a3a486173683e0001306269645f6f726465725f69644501018c4269644f7264657249643c543a3a426c6f636b4e756d6265722c20543a3a486173683e00014065787069726174696f6e5f626c6f636b100144426c6f636b4e756d626572466f723c543e000400386164645f6465616c5f6f726465720801206f666665725f6964510101804f6666657249643c543a3a426c6f636b4e756d6265722c20543a3a486173683e00014065787069726174696f6e5f626c6f636b100144426c6f636b4e756d626572466f723c543e0005003c6c6f636b5f6465616c5f6f726465720401346465616c5f6f726465725f6964150101904465616c4f7264657249643c543a3a426c6f636b4e756d6265722c20543a3a486173683e0006003c66756e645f6465616c5f6f726465720801346465616c5f6f726465725f6964150101904465616c4f7264657249643c543a3a426c6f636b4e756d6265722c20543a3a486173683e00012c7472616e736665725f69640501014c5472616e7366657249643c543a3a486173683e0007004c72656769737465725f6465616c5f6f726465722001446c656e6465725f616464726573735f6964f401484164647265737349643c543a3a486173683e00014c626f72726f7765725f616464726573735f6964f401484164647265737349643c543a3a486173683e0001147465726d73350101244c6f616e5465726d7300014065787069726174696f6e5f626c6f636b100144426c6f636b4e756d626572466f723c543e00012061736b5f6775696401010110477569640001206269645f677569640101011047756964000130626f72726f7765725f6b65790d040124543a3a5369676e6572000148626f72726f7765725f7369676e617475726511040148543a3a5369676e65725369676e617475726500080040636c6f73655f6465616c5f6f726465720801346465616c5f6f726465725f6964150101904465616c4f7264657249643c543a3a426c6f636b4e756d6265722c20543a3a486173683e00012c7472616e736665725f69640501014c5472616e7366657249643c543a3a486173683e0009006472656769737465725f66756e64696e675f7472616e736665720c01347472616e736665725f6b696e640d0101305472616e736665724b696e640001346465616c5f6f726465725f6964150101904465616c4f7264657249643c543a3a426c6f636b4e756d6265722c20543a3a486173683e000140626c6f636b636861696e5f74785f69640101013045787465726e616c54784964000b006c72656769737465725f72657061796d656e745f7472616e736665721001347472616e736665725f6b696e640d0101305472616e736665724b696e6400014072657061796d656e745f616d6f756e741d01013845787465726e616c416d6f756e740001346465616c5f6f726465725f6964150101904465616c4f7264657249643c543a3a426c6f636b4e756d6265722c20543a3a486173683e000140626c6f636b636861696e5f74785f69640101013045787465726e616c54784964000c00186578656d70740401346465616c5f6f726465725f6964150101904465616c4f7264657249643c543a3a426c6f636b4e756d6265722c20543a3a486173683e000d004c706572736973745f7461736b5f6f7574707574080120646561646c696e65100138543a3a426c6f636b4e756d62657200012c7461736b5f6f7574707574150401f05461736b4f75747075743c543a3a4163636f756e7449642c20543a3a426c6f636b4e756d6265722c20543a3a486173682c20543a3a4d6f6d656e743e001000246661696c5f7461736b0c0120646561646c696e65100138543a3a426c6f636b4e756d62657200011c7461736b5f69641904013c5461736b49643c543a3a486173683e00011463617573656d010160566572696669636174696f6e4661696c7572654361757365001100346164645f617574686f7269747904010c77686f000130543a3a4163636f756e7449640012004072656d6f76655f617574686f7269747904010c77686f000130543a3a4163636f756e7449640015004c72656769737465725f616464726573735f76320c0128626c6f636b636861696efc0128426c6f636b636861696e00011c616464726573730101013c45787465726e616c4164647265737300013c6f776e6572736869705f70726f6f661d0401384f776e65727368697050726f6f6600160c550152656769737465727320616e2061646472657373206f6e20616e2065787465726e616c20626c6f636b636861696e206173207468652070726f7065727479206f6620616e206f6e636861696e20616464726573732e0103546f2070726f7665206f776e6572736869702c2061207369676e61747572652069732070726f76696465642e20546f2063726561746520746865207369676e61747572652c20746865207075626c6963206b6579206f66207468652065787465726e616c2061646472657373206973207573656420746f207369676e20612068617368206f6620746865206163636f756e745f6964206f662077686f65766572206973207375626d697474696e672074686973207472616e73616374696f6e2e7103546865207369676e6174757265207479706520616c6c6f7773207468652063616c6c657220746f20737065636966792069662074686973206164647265737320776173207369676e6564207573696e6720746865206f6c64657220616e20696e736563757265204574685369676e206d6574686f64206f7220746865206e657720506572736f6e616c5369676e206d6574686f642e20536565206865726520666f722064657461696c732068747470733a2f2f646f63732e6d6574616d61736b2e696f2f77616c6c65742f686f772d746f2f7369676e2d646174612f042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632efd030c1c73705f636f7265146563647361185075626c696300000400010401205b75383b2033335d0000010400000321000000080005040c1c73705f636f7265146563647361245369676e617475726500000400090401205b75383b2036355d000009040000034100000008000d04082873705f72756e74696d652c4d756c74695369676e657200010c1c456432353531390400b0013c656432353531393a3a5075626c69630000001c537232353531390400bc013c737232353531393a3a5075626c69630001001445636473610400fd03013465636473613a3a5075626c6963000200001104082873705f72756e74696d65384d756c74695369676e617475726500010c1c45643235353139040079030148656432353531393a3a5369676e61747572650000001c537232353531390400c9030148737232353531393a3a5369676e617475726500010014456364736104000504014065636473613a3a5369676e61747572650002000015040c4470616c6c65745f637265646974636f696e147479706573285461736b4f757470757410244163636f756e744964010020426c6f636b4e756d01101048617368012c184d6f6d656e7401280104385665726966795472616e736665720800050101405472616e7366657249643c486173683e0000090101ac5472616e736665723c4163636f756e7449642c20426c6f636b4e756d2c20486173682c204d6f6d656e743e0000000019040c4470616c6c65745f637265646974636f696e147479706573185461736b4964041048617368012c0104385665726966795472616e736665720400050101405472616e7366657249643c486173683e000000001d040c4470616c6c65745f637265646974636f696e147479706573384f776e65727368697050726f6f6600010830506572736f6e616c5369676e04000504016473705f636f72653a3a65636473613a3a5369676e61747572650000001c4574685369676e04000504016473705f636f72653a3a65636473613a3a5369676e61747572650001000021040c4070616c6c65745f7363686564756c65721870616c6c65741043616c6c040454000118207363686564756c651001107768656e100138543a3a426c6f636b4e756d6265720001386d617962655f706572696f646963250401a04f7074696f6e3c7363686564756c653a3a506572696f643c543a3a426c6f636b4e756d6265723e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6cf503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00000470416e6f6e796d6f75736c79207363686564756c652061207461736b2e1863616e63656c0801107768656e100138543a3a426c6f636b4e756d626572000114696e64657810010c7533320001049443616e63656c20616e20616e6f6e796d6f75736c79207363686564756c6564207461736b2e387363686564756c655f6e616d656414010869640401205461736b4e616d650001107768656e100138543a3a426c6f636b4e756d6265720001386d617962655f706572696f646963250401a04f7074696f6e3c7363686564756c653a3a506572696f643c543a3a426c6f636b4e756d6265723e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6cf503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000204585363686564756c652061206e616d6564207461736b2e3063616e63656c5f6e616d656404010869640401205461736b4e616d650003047843616e63656c2061206e616d6564207363686564756c6564207461736b2e387363686564756c655f61667465721001146166746572100138543a3a426c6f636b4e756d6265720001386d617962655f706572696f646963250401a04f7074696f6e3c7363686564756c653a3a506572696f643c543a3a426c6f636b4e756d6265723e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6cf503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000404a8416e6f6e796d6f75736c79207363686564756c652061207461736b20616674657220612064656c61792e507363686564756c655f6e616d65645f616674657214010869640401205461736b4e616d650001146166746572100138543a3a426c6f636b4e756d6265720001386d617962655f706572696f646963250401a04f7074696f6e3c7363686564756c653a3a506572696f643c543a3a426c6f636b4e756d6265723e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6cf503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000504905363686564756c652061206e616d6564207461736b20616674657220612064656c61792e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e250404184f7074696f6e040454017d010108104e6f6e6500000010536f6d6504007d01000001000029040c3c70616c6c65745f6964656e746974791870616c6c65741043616c6c04045400013c346164645f72656769737472617204011c6163636f756e749d0201504163636f756e7449644c6f6f6b75704f663c543e0000287841646420612072656769737472617220746f207468652073797374656d2e00fc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d7573742062652060543a3a5265676973747261724f726967696e602e00a82d20606163636f756e74603a20746865206163636f756e74206f6620746865207265676973747261722e0094456d6974732060526567697374726172416464656460206966207375636365737366756c2e0034232320436f6d706c657869747925012d20604f2852296020776865726520605260207265676973747261722d636f756e742028676f7665726e616e63652d626f756e64656420616e6420636f64652d626f756e646564292e307365745f6964656e74697479040110696e666f2d0401a4426f783c4964656e74697479496e666f3c543a3a4d61784164646974696f6e616c4669656c64733e3e00013c290153657420616e206163636f756e742773206964656e7469747920696e666f726d6174696f6e20616e6420726573657276652074686520617070726f707269617465206465706f7369742e005501496620746865206163636f756e7420616c726561647920686173206964656e7469747920696e666f726d6174696f6e2c20746865206465706f7369742069732074616b656e2061732070617274207061796d656e7450666f7220746865206e6577206465706f7369742e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e008c2d2060696e666f603a20546865206964656e7469747920696e666f726d6174696f6e2e0088456d69747320604964656e7469747953657460206966207375636365737366756c2e0034232320436f6d706c6578697479442d20604f2858202b205827202b205229601d0120202d20776865726520605860206164646974696f6e616c2d6669656c642d636f756e7420286465706f7369742d626f756e64656420616e6420636f64652d626f756e64656429e020202d20776865726520605260206a756467656d656e74732d636f756e7420287265676973747261722d636f756e742d626f756e64656429207365745f7375627304011073756273b50401645665633c28543a3a4163636f756e7449642c2044617461293e0002388c53657420746865207375622d6163636f756e7473206f66207468652073656e6465722e0055015061796d656e743a20416e79206167677265676174652062616c616e63652072657365727665642062792070726576696f757320607365745f73756273602063616c6c732077696c6c2062652072657475726e65642d01616e6420616e20616d6f756e7420605375624163636f756e744465706f736974602077696c6c20626520726573657276656420666f722065616368206974656d20696e206073756273602e006101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d757374206861766520612072656769737465726564246964656e746974792e00b02d206073756273603a20546865206964656e74697479277320286e657729207375622d6163636f756e74732e0034232320436f6d706c6578697479302d20604f2850202b20532960e420202d20776865726520605060206f6c642d737562732d636f756e742028686172642d20616e64206465706f7369742d626f756e646564292ed420202d2077686572652060536020737562732d636f756e742028686172642d20616e64206465706f7369742d626f756e646564292e38636c6561725f6964656e746974790003383901436c65617220616e206163636f756e742773206964656e7469747920696e666f20616e6420616c6c207375622d6163636f756e747320616e642072657475726e20616c6c206465706f736974732e00ec5061796d656e743a20416c6c2072657365727665642062616c616e636573206f6e20746865206163636f756e74206172652072657475726e65642e006101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d757374206861766520612072656769737465726564246964656e746974792e0098456d69747320604964656e74697479436c656172656460206966207375636365737366756c2e0034232320436f6d706c6578697479402d20604f2852202b2053202b20582960cc20202d20776865726520605260207265676973747261722d636f756e742028676f7665726e616e63652d626f756e646564292ed420202d2077686572652060536020737562732d636f756e742028686172642d20616e64206465706f7369742d626f756e646564292e210120202d20776865726520605860206164646974696f6e616c2d6669656c642d636f756e7420286465706f7369742d626f756e64656420616e6420636f64652d626f756e646564292e44726571756573745f6a756467656d656e740801247265675f696e646578c5010138526567697374726172496e64657800011c6d61785f666565cc013042616c616e63654f663c543e00045494526571756573742061206a756467656d656e742066726f6d2061207265676973747261722e0055015061796d656e743a204174206d6f737420606d61785f666565602077696c6c20626520726573657276656420666f72207061796d656e7420746f2074686520726567697374726172206966206a756467656d656e7418676976656e2e003501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d757374206861766520615072656769737465726564206964656e746974792e001d012d20607265675f696e646578603a2054686520696e646578206f6620746865207265676973747261722077686f7365206a756467656d656e74206973207265717565737465642e55012d20606d61785f666565603a20546865206d6178696d756d206665652074686174206d617920626520706169642e20546869732073686f756c64206a757374206265206175746f2d706f70756c617465642061733a00306060606e6f636f6d70696c65b853656c663a3a7265676973747261727328292e676574287265675f696e646578292e756e7772617028292e6665650c60606000a4456d69747320604a756467656d656e7452657175657374656460206966207375636365737366756c2e0034232320436f6d706c6578697479342d20604f2852202b205829602ecc20202d20776865726520605260207265676973747261722d636f756e742028676f7665726e616e63652d626f756e646564292e210120202d20776865726520605860206164646974696f6e616c2d6669656c642d636f756e7420286465706f7369742d626f756e64656420616e6420636f64652d626f756e646564292e3863616e63656c5f726571756573740401247265675f696e646578100138526567697374726172496e64657800053c6843616e63656c20612070726576696f757320726571756573742e00f85061796d656e743a20412070726576696f75736c79207265736572766564206465706f7369742069732072657475726e6564206f6e20737563636573732e003501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d757374206861766520615072656769737465726564206964656e746974792e0045012d20607265675f696e646578603a2054686520696e646578206f6620746865207265676973747261722077686f7365206a756467656d656e74206973206e6f206c6f6e676572207265717565737465642e00ac456d69747320604a756467656d656e74556e72657175657374656460206966207375636365737366756c2e0034232320436f6d706c6578697479342d20604f2852202b205829602ecc20202d20776865726520605260207265676973747261722d636f756e742028676f7665726e616e63652d626f756e646564292e210120202d20776865726520605860206164646974696f6e616c2d6669656c642d636f756e7420286465706f7369742d626f756e64656420616e6420636f64652d626f756e646564292e1c7365745f666565080114696e646578c5010138526567697374726172496e64657800010c666565cc013042616c616e63654f663c543e00062c1901536574207468652066656520726571756972656420666f722061206a756467656d656e7420746f206265207265717565737465642066726f6d2061207265676973747261722e005501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420626520746865206163636f756e74a06f6620746865207265676973747261722077686f736520696e6465782069732060696e646578602e00f42d2060696e646578603a2074686520696e646578206f6620746865207265676973747261722077686f73652066656520697320746f206265207365742e542d2060666565603a20746865206e6577206665652e0034232320436f6d706c6578697479242d20604f285229602ecc20202d20776865726520605260207265676973747261722d636f756e742028676f7665726e616e63652d626f756e646564292e387365745f6163636f756e745f6964080114696e646578c5010138526567697374726172496e64657800010c6e65779d0201504163636f756e7449644c6f6f6b75704f663c543e00072cbc4368616e676520746865206163636f756e74206173736f63696174656420776974682061207265676973747261722e005501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420626520746865206163636f756e74a06f6620746865207265676973747261722077686f736520696e6465782069732060696e646578602e00f42d2060696e646578603a2074686520696e646578206f6620746865207265676973747261722077686f73652066656520697320746f206265207365742e702d20606e6577603a20746865206e6577206163636f756e742049442e0034232320436f6d706c6578697479242d20604f285229602ecc20202d20776865726520605260207265676973747261722d636f756e742028676f7665726e616e63652d626f756e646564292e287365745f6669656c6473080114696e646578c5010138526567697374726172496e6465780001186669656c6473bd0401384964656e746974794669656c647300082ca853657420746865206669656c6420696e666f726d6174696f6e20666f722061207265676973747261722e005501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420626520746865206163636f756e74a06f6620746865207265676973747261722077686f736520696e6465782069732060696e646578602e00f42d2060696e646578603a2074686520696e646578206f6620746865207265676973747261722077686f73652066656520697320746f206265207365742e0d012d20606669656c6473603a20746865206669656c64732074686174207468652072656769737472617220636f6e6365726e73207468656d73656c76657320776974682e0034232320436f6d706c6578697479242d20604f285229602ecc20202d20776865726520605260207265676973747261722d636f756e742028676f7665726e616e63652d626f756e646564292e4470726f766964655f6a756467656d656e741001247265675f696e646578c5010138526567697374726172496e6465780001187461726765749d0201504163636f756e7449644c6f6f6b75704f663c543e0001246a756467656d656e74c504015c4a756467656d656e743c42616c616e63654f663c543e3e0001206964656e746974792c011c543a3a48617368000944b850726f766964652061206a756467656d656e7420666f7220616e206163636f756e742773206964656e746974792e005501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420626520746865206163636f756e74b06f6620746865207265676973747261722077686f736520696e64657820697320607265675f696e646578602e0021012d20607265675f696e646578603a2074686520696e646578206f6620746865207265676973747261722077686f7365206a756467656d656e74206973206265696e67206d6164652e55012d2060746172676574603a20746865206163636f756e742077686f7365206964656e7469747920746865206a756467656d656e742069732075706f6e2e2054686973206d75737420626520616e206163636f756e747420207769746820612072656769737465726564206964656e746974792e49012d20606a756467656d656e74603a20746865206a756467656d656e74206f662074686520726567697374726172206f6620696e64657820607265675f696e646578602061626f75742060746172676574602e49012d20606964656e74697479603a205468652068617368206f6620746865205b604964656e74697479496e666f605d20666f72207468617420746865206a756467656d656e742069732070726f76696465642e0094456d69747320604a756467656d656e74476976656e60206966207375636365737366756c2e0034232320436f6d706c6578697479342d20604f2852202b205829602ecc20202d20776865726520605260207265676973747261722d636f756e742028676f7665726e616e63652d626f756e646564292e210120202d20776865726520605860206164646974696f6e616c2d6669656c642d636f756e7420286465706f7369742d626f756e64656420616e6420636f64652d626f756e646564292e346b696c6c5f6964656e746974790401187461726765749d0201504163636f756e7449644c6f6f6b75704f663c543e000a48410152656d6f766520616e206163636f756e742773206964656e7469747920616e64207375622d6163636f756e7420696e666f726d6174696f6e20616e6420736c61736820746865206465706f736974732e0061015061796d656e743a2052657365727665642062616c616e6365732066726f6d20607365745f737562736020616e6420607365745f6964656e74697479602061726520736c617368656420616e642068616e646c6564206279450160536c617368602e20566572696669636174696f6e2072657175657374206465706f7369747320617265206e6f742072657475726e65643b20746865792073686f756c642062652063616e63656c6c6564806d616e75616c6c79207573696e67206063616e63656c5f72657175657374602e00f8546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206d617463682060543a3a466f7263654f726967696e602e0055012d2060746172676574603a20746865206163636f756e742077686f7365206964656e7469747920746865206a756467656d656e742069732075706f6e2e2054686973206d75737420626520616e206163636f756e747420207769746820612072656769737465726564206964656e746974792e0094456d69747320604964656e746974794b696c6c656460206966207375636365737366756c2e0034232320436f6d706c6578697479402d20604f2852202b2053202b20582960cc20202d20776865726520605260207265676973747261722d636f756e742028676f7665726e616e63652d626f756e646564292ed420202d2077686572652060536020737562732d636f756e742028686172642d20616e64206465706f7369742d626f756e646564292e210120202d20776865726520605860206164646974696f6e616c2d6669656c642d636f756e7420286465706f7369742d626f756e64656420616e6420636f64652d626f756e646564292e1c6164645f73756208010c7375629d0201504163636f756e7449644c6f6f6b75704f663c543e000110646174613904011044617461000b1cac4164642074686520676976656e206163636f756e7420746f207468652073656e646572277320737562732e005d015061796d656e743a2042616c616e636520726573657276656420627920612070726576696f757320607365745f73756273602063616c6c20666f72206f6e65207375622077696c6c20626520726570617472696174656438746f207468652073656e6465722e006101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420686176652061207265676973746572656458737562206964656e74697479206f662060737562602e2872656e616d655f73756208010c7375629d0201504163636f756e7449644c6f6f6b75704f663c543e000110646174613904011044617461000c10cc416c74657220746865206173736f636961746564206e616d65206f662074686520676976656e207375622d6163636f756e742e006101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420686176652061207265676973746572656458737562206964656e74697479206f662060737562602e2872656d6f76655f73756204010c7375629d0201504163636f756e7449644c6f6f6b75704f663c543e000d1cc052656d6f76652074686520676976656e206163636f756e742066726f6d207468652073656e646572277320737562732e005d015061796d656e743a2042616c616e636520726573657276656420627920612070726576696f757320607365745f73756273602063616c6c20666f72206f6e65207375622077696c6c20626520726570617472696174656438746f207468652073656e6465722e006101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420686176652061207265676973746572656458737562206964656e74697479206f662060737562602e20717569745f737562000e288c52656d6f7665207468652073656e6465722061732061207375622d6163636f756e742e005d015061796d656e743a2042616c616e636520726573657276656420627920612070726576696f757320607365745f73756273602063616c6c20666f72206f6e65207375622077696c6c206265207265706174726961746564b4746f207468652073656e64657220282a6e6f742a20746865206f726967696e616c206465706f7369746f72292e006101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d7573742068617665206120726567697374657265643c73757065722d6964656e746974792e0045014e4f54453a20546869732073686f756c64206e6f74206e6f726d616c6c7920626520757365642c206275742069732070726f766964656420696e207468652063617365207468617420746865206e6f6e2d1101636f6e74726f6c6c6572206f6620616e206163636f756e74206973206d616c6963696f75736c7920726567697374657265642061732061207375622d6163636f756e742e04704964656e746974792070616c6c6574206465636c61726174696f6e2e2d040c3c70616c6c65745f6964656e74697479147479706573304964656e74697479496e666f04284669656c644c696d697400002401286164646974696f6e616c31040190426f756e6465645665633c28446174612c2044617461292c204669656c644c696d69743e00011c646973706c617939040110446174610001146c6567616c390401104461746100010c776562390401104461746100011072696f743904011044617461000114656d61696c390401104461746100013c7067705f66696e6765727072696e74b10401404f7074696f6e3c5b75383b2032305d3e000114696d616765390401104461746100011c747769747465723904011044617461000031040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454013504045300000400ad0401185665633c543e0000350400000408390439040039040c3c70616c6c65745f6964656e746974791474797065731044617461000198104e6f6e65000000105261773004003d0400000100105261773104004104000002001052617732040045040000030010526177330400490400000400105261773404004000000500105261773504004d040000060010526177360400510400000700105261773704005504000008001052617738040009020000090010526177390400590400000a0014526177313004005d0400000b001452617731310400610400000c001452617731320400650400000d001452617731330400690400000e0014526177313404006d0400000f001452617731350400710400001000145261773136040098000011001452617731370400750400001200145261773138040079040000130014526177313904007d04000014001452617732300400a5020000150014526177323104008104000016001452617732320400850400001700145261773233040089040000180014526177323404008d04000019001452617732350400910400001a001452617732360400950400001b001452617732370400990400001c0014526177323804009d0400001d001452617732390400a10400001e001452617733300400a50400001f001452617733310400a90400002000145261773332040004000021002c426c616b6554776f323536040004000022001853686132353604000400002300244b656363616b323536040004000024002c536861546872656532353604000400002500003d040000030000000008004104000003010000000800450400000302000000080049040000030300000008004d040000030500000008005104000003060000000800550400000307000000080059040000030900000008005d040000030a000000080061040000030b000000080065040000030c000000080069040000030d00000008006d040000030e000000080071040000030f0000000800750400000311000000080079040000031200000008007d040000031300000008008104000003150000000800850400000316000000080089040000031700000008008d04000003180000000800910400000319000000080095040000031a000000080099040000031b00000008009d040000031c0000000800a1040000031d0000000800a5040000031e0000000800a9040000031f0000000800ad04000002350400b10404184f7074696f6e04045401a5020108104e6f6e6500000010536f6d650400a5020000010000b504000002b90400b9040000040800390400bd040c3c70616c6c65745f6964656e7469747914747970657320426974466c61677304045401c1040004002801344964656e746974794669656c640000c1040c3c70616c6c65745f6964656e74697479147479706573344964656e746974794669656c640001201c446973706c6179000100144c6567616c0002000c5765620004001052696f7400080014456d61696c0010003850677046696e6765727072696e7400200014496d6167650040001c5477697474657200800000c5040c3c70616c6c65745f6964656e74697479147479706573244a756467656d656e74041c42616c616e63650118011c1c556e6b6e6f776e0000001c46656550616964040018011c42616c616e636500010028526561736f6e61626c65000200244b6e6f776e476f6f64000300244f75744f6644617465000400284c6f775175616c697479000500244572726f6e656f757300060000c9040c3870616c6c65745f7574696c6974791870616c6c65741043616c6c04045400011814626174636804011463616c6c73cd04017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0000487c53656e642061206261746368206f662064697370617463682063616c6c732e00b04d61792062652063616c6c65642066726f6d20616e79206f726967696e2065786365707420604e6f6e65602e005d012d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e20546865206e756d626572206f662063616c6c206d757374206e6f74390120206578636565642074686520636f6e7374616e743a2060626174636865645f63616c6c735f6c696d6974602028617661696c61626c6520696e20636f6e7374616e74206d65746164617461292e0055014966206f726967696e20697320726f6f74207468656e207468652063616c6c7320617265206469737061746368656420776974686f757420636865636b696e67206f726967696e2066696c7465722e202854686973ec696e636c7564657320627970617373696e6720606672616d655f73797374656d3a3a436f6e6669673a3a4261736543616c6c46696c74657260292e0034232320436f6d706c6578697479d02d204f284329207768657265204320697320746865206e756d626572206f662063616c6c7320746f20626520626174636865642e005501546869732077696c6c2072657475726e20604f6b6020696e20616c6c2063697263756d7374616e6365732e20546f2064657465726d696e65207468652073756363657373206f66207468652062617463682c20616e31016576656e74206973206465706f73697465642e20496620612063616c6c206661696c656420616e64207468652062617463682077617320696e7465727275707465642c207468656e207468655501604261746368496e74657272757074656460206576656e74206973206465706f73697465642c20616c6f6e67207769746820746865206e756d626572206f66207375636365737366756c2063616c6c73206d6164654d01616e6420746865206572726f72206f6620746865206661696c65642063616c6c2e20496620616c6c2077657265207375636365737366756c2c207468656e2074686520604261746368436f6d706c65746564604c6576656e74206973206465706f73697465642e3461735f64657269766174697665080114696e6465789501010c75313600011063616c6cf503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000134dc53656e6420612063616c6c207468726f75676820616e20696e64657865642070736575646f6e796d206f66207468652073656e6465722e00550146696c7465722066726f6d206f726967696e206172652070617373656420616c6f6e672e205468652063616c6c2077696c6c2062652064697370617463686564207769746820616e206f726967696e207768696368bc757365207468652073616d652066696c74657220617320746865206f726967696e206f6620746869732063616c6c2e0045014e4f54453a20496620796f75206e65656420746f20656e73757265207468617420616e79206163636f756e742d62617365642066696c746572696e67206973206e6f7420686f6e6f7265642028692e652e61016265636175736520796f7520657870656374206070726f78796020746f2068617665206265656e2075736564207072696f7220696e207468652063616c6c20737461636b20616e6420796f7520646f206e6f742077616e7451017468652063616c6c207265737472696374696f6e7320746f206170706c7920746f20616e79207375622d6163636f756e7473292c207468656e20757365206061735f6d756c74695f7468726573686f6c645f31607c696e20746865204d756c74697369672070616c6c657420696e73746561642e00f44e4f54453a205072696f7220746f2076657273696f6e202a31322c2074686973207761732063616c6c6564206061735f6c696d697465645f737562602e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e2462617463685f616c6c04011463616c6c73cd04017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000234ec53656e642061206261746368206f662064697370617463682063616c6c7320616e642061746f6d6963616c6c792065786563757465207468656d2e21015468652077686f6c65207472616e73616374696f6e2077696c6c20726f6c6c6261636b20616e64206661696c20696620616e79206f66207468652063616c6c73206661696c65642e00b04d61792062652063616c6c65642066726f6d20616e79206f726967696e2065786365707420604e6f6e65602e005d012d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e20546865206e756d626572206f662063616c6c206d757374206e6f74390120206578636565642074686520636f6e7374616e743a2060626174636865645f63616c6c735f6c696d6974602028617661696c61626c6520696e20636f6e7374616e74206d65746164617461292e0055014966206f726967696e20697320726f6f74207468656e207468652063616c6c7320617265206469737061746368656420776974686f757420636865636b696e67206f726967696e2066696c7465722e202854686973ec696e636c7564657320627970617373696e6720606672616d655f73797374656d3a3a436f6e6669673a3a4261736543616c6c46696c74657260292e0034232320436f6d706c6578697479d02d204f284329207768657265204320697320746865206e756d626572206f662063616c6c7320746f20626520626174636865642e2c64697370617463685f617308012461735f6f726967696ed1040154426f783c543a3a50616c6c6574734f726967696e3e00011063616c6cf503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000318c84469737061746368657320612066756e6374696f6e2063616c6c207769746820612070726f7669646564206f726967696e2e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e0034232320436f6d706c65786974791c2d204f2831292e2c666f7263655f626174636804011463616c6c73cd04017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0004347c53656e642061206261746368206f662064697370617463682063616c6c732ed4556e6c696b6520606261746368602c20697420616c6c6f7773206572726f727320616e6420776f6e277420696e746572727570742e00b04d61792062652063616c6c65642066726f6d20616e79206f726967696e2065786365707420604e6f6e65602e005d012d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e20546865206e756d626572206f662063616c6c206d757374206e6f74390120206578636565642074686520636f6e7374616e743a2060626174636865645f63616c6c735f6c696d6974602028617661696c61626c6520696e20636f6e7374616e74206d65746164617461292e004d014966206f726967696e20697320726f6f74207468656e207468652063616c6c732061726520646973706174636820776974686f757420636865636b696e67206f726967696e2066696c7465722e202854686973ec696e636c7564657320627970617373696e6720606672616d655f73797374656d3a3a436f6e6669673a3a4261736543616c6c46696c74657260292e0034232320436f6d706c6578697479d02d204f284329207768657265204320697320746865206e756d626572206f662063616c6c7320746f20626520626174636865642e2c776974685f77656967687408011063616c6cf503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000118776569676874200118576569676874000518c4446973706174636820612066756e6374696f6e2063616c6c2077697468206120737065636966696564207765696768742e002d01546869732066756e6374696f6e20646f6573206e6f7420636865636b2074686520776569676874206f66207468652063616c6c2c20616e6420696e737465616420616c6c6f777320746865b8526f6f74206f726967696e20746f20737065636966792074686520776569676874206f66207468652063616c6c2e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ecd04000002f50300d104085c637265646974636f696e5f6e6f64655f72756e74696d65304f726967696e43616c6c65720001081873797374656d0400d50401746672616d655f73797374656d3a3a4f726967696e3c52756e74696d653e00000010566f69640400d90401110173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a566f696400010000d5040c346672616d655f737570706f7274206469737061746368245261774f726967696e04244163636f756e7449640100010c10526f6f74000000185369676e656404000001244163636f756e744964000100104e6f6e6500020000d904081c73705f636f726510566f696400010000dd040c3070616c6c65745f70726f78791870616c6c65741043616c6c0404540001281470726f78790c01107265616c9d0201504163636f756e7449644c6f6f6b75704f663c543e000140666f7263655f70726f78795f74797065e10401504f7074696f6e3c543a3a50726f7879547970653e00011063616c6cf503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0000244d0144697370617463682074686520676976656e206063616c6c602066726f6d20616e206163636f756e742074686174207468652073656e64657220697320617574686f726973656420666f72207468726f75676830606164645f70726f7879602e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a0d012d20607265616c603a20546865206163636f756e742074686174207468652070726f78792077696c6c206d616b6520612063616c6c206f6e20626568616c66206f662e61012d2060666f7263655f70726f78795f74797065603a2053706563696679207468652065786163742070726f7879207479706520746f206265207573656420616e6420636865636b656420666f7220746869732063616c6c2ed02d206063616c6c603a205468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e246164645f70726f78790c012064656c65676174659d0201504163636f756e7449644c6f6f6b75704f663c543e00012870726f78795f74797065e80130543a3a50726f78795479706500011464656c6179100138543a3a426c6f636b4e756d6265720001244501526567697374657220612070726f7879206163636f756e7420666f72207468652073656e64657220746861742069732061626c6520746f206d616b652063616c6c73206f6e2069747320626568616c662e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a11012d206070726f7879603a20546865206163636f756e74207468617420746865206063616c6c65726020776f756c64206c696b6520746f206d616b6520612070726f78792efc2d206070726f78795f74797065603a20546865207065726d697373696f6e7320616c6c6f77656420666f7220746869732070726f7879206163636f756e742e4d012d206064656c6179603a2054686520616e6e6f756e63656d656e7420706572696f64207265717569726564206f662074686520696e697469616c2070726f78792e2057696c6c2067656e6572616c6c79206265147a65726f2e3072656d6f76655f70726f78790c012064656c65676174659d0201504163636f756e7449644c6f6f6b75704f663c543e00012870726f78795f74797065e80130543a3a50726f78795479706500011464656c6179100138543a3a426c6f636b4e756d62657200021ca8556e726567697374657220612070726f7879206163636f756e7420666f72207468652073656e6465722e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a25012d206070726f7879603a20546865206163636f756e74207468617420746865206063616c6c65726020776f756c64206c696b6520746f2072656d6f766520617320612070726f78792e41012d206070726f78795f74797065603a20546865207065726d697373696f6e732063757272656e746c7920656e61626c656420666f72207468652072656d6f7665642070726f7879206163636f756e742e3872656d6f76655f70726f78696573000318b4556e726567697374657220616c6c2070726f7879206163636f756e747320666f72207468652073656e6465722e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0041015741524e494e473a2054686973206d61792062652063616c6c6564206f6e206163636f756e74732063726561746564206279206070757265602c20686f776576657220696620646f6e652c207468656e590174686520756e726573657276656420666565732077696c6c20626520696e61636365737369626c652e202a2a416c6c2061636365737320746f2074686973206163636f756e742077696c6c206265206c6f73742e2a2a2c6372656174655f707572650c012870726f78795f74797065e80130543a3a50726f78795479706500011464656c6179100138543a3a426c6f636b4e756d626572000114696e6465789501010c7531360004483901537061776e2061206672657368206e6577206163636f756e7420746861742069732067756172616e7465656420746f206265206f746865727769736520696e61636365737369626c652c20616e64fc696e697469616c697a65206974207769746820612070726f7879206f66206070726f78795f747970656020666f7220606f726967696e602073656e6465722e006c5265717569726573206120605369676e656460206f726967696e2e0051012d206070726f78795f74797065603a205468652074797065206f66207468652070726f78792074686174207468652073656e6465722077696c6c2062652072656769737465726564206173206f766572207468654d016e6577206163636f756e742e20546869732077696c6c20616c6d6f737420616c7761797320626520746865206d6f7374207065726d697373697665206050726f7879547970656020706f737369626c6520746f78616c6c6f7720666f72206d6178696d756d20666c65786962696c6974792e51012d2060696e646578603a204120646973616d626967756174696f6e20696e6465782c20696e206361736520746869732069732063616c6c6564206d756c7469706c652074696d657320696e207468652073616d655d017472616e73616374696f6e2028652e672e207769746820607574696c6974793a3a626174636860292e20556e6c65737320796f75277265207573696e67206062617463686020796f752070726f6261626c79206a7573744077616e7420746f20757365206030602e4d012d206064656c6179603a2054686520616e6e6f756e63656d656e7420706572696f64207265717569726564206f662074686520696e697469616c2070726f78792e2057696c6c2067656e6572616c6c79206265147a65726f2e0051014661696c73207769746820604475706c69636174656020696620746869732068617320616c7265616479206265656e2063616c6c656420696e2074686973207472616e73616374696f6e2c2066726f6d207468659873616d652073656e6465722c2077697468207468652073616d6520706172616d65746572732e00e44661696c732069662074686572652061726520696e73756666696369656e742066756e647320746f2070617920666f72206465706f7369742e246b696c6c5f7075726514011c737061776e65729d0201504163636f756e7449644c6f6f6b75704f663c543e00012870726f78795f74797065e80130543a3a50726f787954797065000114696e6465789501010c753136000118686569676874c5010138543a3a426c6f636b4e756d6265720001246578745f696e646578c501010c753332000540a052656d6f76657320612070726576696f75736c7920737061776e656420707572652070726f78792e0049015741524e494e473a202a2a416c6c2061636365737320746f2074686973206163636f756e742077696c6c206265206c6f73742e2a2a20416e792066756e64732068656c6420696e2069742077696c6c20626534696e61636365737369626c652e0059015265717569726573206120605369676e656460206f726967696e2c20616e64207468652073656e646572206163636f756e74206d7573742068617665206265656e206372656174656420627920612063616c6c20746f94607075726560207769746820636f72726573706f6e64696e6720706172616d65746572732e0039012d2060737061776e6572603a20546865206163636f756e742074686174206f726967696e616c6c792063616c6c65642060707572656020746f206372656174652074686973206163636f756e742e39012d2060696e646578603a2054686520646973616d626967756174696f6e20696e646578206f726967696e616c6c792070617373656420746f206070757265602e2050726f6261626c79206030602eec2d206070726f78795f74797065603a205468652070726f78792074797065206f726967696e616c6c792070617373656420746f206070757265602e29012d2060686569676874603a2054686520686569676874206f662074686520636861696e207768656e207468652063616c6c20746f20607075726560207761732070726f6365737365642e35012d20606578745f696e646578603a205468652065787472696e73696320696e64657820696e207768696368207468652063616c6c20746f20607075726560207761732070726f6365737365642e0035014661696c73207769746820604e6f5065726d697373696f6e6020696e2063617365207468652063616c6c6572206973206e6f7420612070726576696f75736c7920637265617465642070757265dc6163636f756e742077686f7365206070757265602063616c6c2068617320636f72726573706f6e64696e6720706172616d65746572732e20616e6e6f756e63650801107265616c9d0201504163636f756e7449644c6f6f6b75704f663c543e00012463616c6c5f686173682c013443616c6c486173684f663c543e00063c05015075626c697368207468652068617368206f6620612070726f78792d63616c6c20746861742077696c6c206265206d61646520696e20746865206675747572652e005d0154686973206d7573742062652063616c6c656420736f6d65206e756d626572206f6620626c6f636b73206265666f72652074686520636f72726573706f6e64696e67206070726f78796020697320617474656d7074656425016966207468652064656c6179206173736f6369617465642077697468207468652070726f78792072656c6174696f6e736869702069732067726561746572207468616e207a65726f2e0011014e6f206d6f7265207468616e20604d617850656e64696e676020616e6e6f756e63656d656e7473206d6179206265206d61646520617420616e79206f6e652074696d652e000901546869732077696c6c2074616b652061206465706f736974206f662060416e6e6f756e63656d656e744465706f736974466163746f72602061732077656c6c206173190160416e6e6f756e63656d656e744465706f736974426173656020696620746865726520617265206e6f206f746865722070656e64696e6720616e6e6f756e63656d656e74732e002501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e6420612070726f7879206f6620607265616c602e002c506172616d65746572733a0d012d20607265616c603a20546865206163636f756e742074686174207468652070726f78792077696c6c206d616b6520612063616c6c206f6e20626568616c66206f662e15012d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e4c72656d6f76655f616e6e6f756e63656d656e740801107265616c9d0201504163636f756e7449644c6f6f6b75704f663c543e00012463616c6c5f686173682c013443616c6c486173684f663c543e0007287052656d6f7665206120676976656e20616e6e6f756e63656d656e742e0059014d61792062652063616c6c656420627920612070726f7879206163636f756e7420746f2072656d6f766520612063616c6c20746865792070726576696f75736c7920616e6e6f756e63656420616e642072657475726e30746865206465706f7369742e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a0d012d20607265616c603a20546865206163636f756e742074686174207468652070726f78792077696c6c206d616b6520612063616c6c206f6e20626568616c66206f662e15012d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e4c72656a6563745f616e6e6f756e63656d656e7408012064656c65676174659d0201504163636f756e7449644c6f6f6b75704f663c543e00012463616c6c5f686173682c013443616c6c486173684f663c543e000828b052656d6f76652074686520676976656e20616e6e6f756e63656d656e74206f6620612064656c65676174652e0061014d61792062652063616c6c6564206279206120746172676574202870726f7869656429206163636f756e7420746f2072656d6f766520612063616c6c2074686174206f6e65206f662074686569722064656c6567617465732501286064656c656761746560292068617320616e6e6f756e63656420746865792077616e7420746f20657865637574652e20546865206465706f7369742069732072657475726e65642e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733af42d206064656c6567617465603a20546865206163636f756e7420746861742070726576696f75736c7920616e6e6f756e636564207468652063616c6c2ebc2d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f206265206d6164652e3c70726f78795f616e6e6f756e63656410012064656c65676174659d0201504163636f756e7449644c6f6f6b75704f663c543e0001107265616c9d0201504163636f756e7449644c6f6f6b75704f663c543e000140666f7263655f70726f78795f74797065e10401504f7074696f6e3c543a3a50726f7879547970653e00011063616c6cf503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00092c4d0144697370617463682074686520676976656e206063616c6c602066726f6d20616e206163636f756e742074686174207468652073656e64657220697320617574686f72697a656420666f72207468726f75676830606164645f70726f7879602e00a852656d6f76657320616e7920636f72726573706f6e64696e6720616e6e6f756e63656d656e742873292e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a0d012d20607265616c603a20546865206163636f756e742074686174207468652070726f78792077696c6c206d616b6520612063616c6c206f6e20626568616c66206f662e61012d2060666f7263655f70726f78795f74797065603a2053706563696679207468652065786163742070726f7879207479706520746f206265207573656420616e6420636865636b656420666f7220746869732063616c6c2ed02d206063616c6c603a205468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ee10404184f7074696f6e04045401e80108104e6f6e6500000010536f6d650400e80000010000e5040c4c70616c6c65745f666173745f756e7374616b651870616c6c65741043616c6c04045400010c5472656769737465725f666173745f756e7374616b65000048885265676973746572206f6e6573656c6620666f7220666173742d756e7374616b652e005501546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265207369676e65642062792074686520636f6e74726f6c6c6572206163636f756e742c2073696d696c617220746f48607374616b696e673a3a756e626f6e64602e003901546865207374617368206173736f636961746564207769746820746865206f726967696e206d7573742068617665206e6f206f6e676f696e6720756e6c6f636b696e67206368756e6b732e2049665d017375636365737366756c2c20746869732077696c6c2066756c6c7920756e626f6e6420616e64206368696c6c207468652073746173682e205468656e2c2069742077696c6c20656e71756575652074686520737461736880746f20626520636865636b656420696e206675727468657220626c6f636b732e0051014966206279207468652074696d6520746869732069732063616c6c65642c207468652073746173682069732061637475616c6c7920656c696769626c6520666f7220666173742d756e7374616b652c207468656e450174686579206172652067756172616e7465656420746f2072656d61696e20656c696769626c652c2062656361757365207468652063616c6c2077696c6c206368696c6c207468656d2061732077656c6c2e003d0149662074686520636865636b20776f726b732c2074686520656e74697265207374616b696e6720646174612069732072656d6f7665642c20692e652e207468652073746173682069732066756c6c7924756e7374616b65642e005d0149662074686520636865636b206661696c732c207468652073746173682072656d61696e73206368696c6c656420616e642077616974696e6720666f72206265696e6720756e626f6e64656420617320696e20776974686101746865206e6f726d616c207374616b696e672073797374656d2c206275742074686579206c6f73652070617274206f6620746865697220756e626f6e64696e67206368756e6b732064756520746f20636f6e73756d696e675874686520636861696e2773207265736f75726365732e286465726567697374657200011ca444657265676973746572206f6e6573656c662066726f6d2074686520666173742d756e7374616b652e006101546869732069732075736566756c206966206f6e6520697320726567697374657265642c207468657920617265207374696c6c2077616974696e672c20616e642074686579206368616e6765207468656972206d696e642e0059014e6f7465207468617420746865206173736f636961746564207374617368206973207374696c6c2066756c6c7920756e626f6e64656420616e64206368696c6c6564206173206120636f6e73657175656e6365206f66390163616c6c696e67206072656769737465725f666173745f756e7374616b65602e20546869732073686f756c642070726f6261626c7920626520666f6c6c6f77656420627920612063616c6c20746f48605374616b696e673a3a7265626f6e64602e1c636f6e74726f6c040134657261735f746f5f636865636b100120457261496e64657800020c94436f6e74726f6c20746865206f7065726174696f6e206f6620746869732070616c6c65742e0001014469737061746368206f726967696e206d757374206265207369676e656420627920746865205b60436f6e6669673a3a436f6e74726f6c4f726967696e605d2e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ee9040c5c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c731870616c6c65741043616c6c040454000154106a6f696e080118616d6f756e74cc013042616c616e63654f663c543e00011c706f6f6c5f6964100118506f6f6c496400002845015374616b652066756e64732077697468206120706f6f6c2e2054686520616d6f756e7420746f20626f6e64206973207472616e736665727265642066726f6d20746865206d656d62657220746f20746865dc706f6f6c73206163636f756e7420616e6420696d6d6564696174656c7920696e637265617365732074686520706f6f6c7320626f6e642e001823204e6f746500cc2a20416e206163636f756e742063616e206f6e6c792062652061206d656d626572206f6620612073696e676c6520706f6f6c2ed82a20416e206163636f756e742063616e6e6f74206a6f696e207468652073616d6520706f6f6c206d756c7469706c652074696d65732e41012a20546869732063616c6c2077696c6c202a6e6f742a206475737420746865206d656d626572206163636f756e742c20736f20746865206d656d626572206d7573742068617665206174206c65617374c82020606578697374656e7469616c206465706f736974202b20616d6f756e746020696e207468656972206163636f756e742ed02a204f6e6c79206120706f6f6c2077697468205b60506f6f6c53746174653a3a4f70656e605d2063616e206265206a6f696e656428626f6e645f65787472610401146578747261ed04015c426f6e6445787472613c42616c616e63654f663c543e3e00011c4501426f6e642060657874726160206d6f72652066756e64732066726f6d20606f726967696e6020696e746f2074686520706f6f6c20746f207768696368207468657920616c72656164792062656c6f6e672e0049014164646974696f6e616c2066756e64732063616e20636f6d652066726f6d206569746865722074686520667265652062616c616e6365206f6620746865206163636f756e742c206f662066726f6d207468659c616363756d756c6174656420726577617264732c20736565205b60426f6e644578747261605d2e003d01426f6e64696e672065787472612066756e647320696d706c69657320616e206175746f6d61746963207061796f7574206f6620616c6c2070656e64696e6720726577617264732061732077656c6c2e09015365652060626f6e645f65787472615f6f746865726020746f20626f6e642070656e64696e672072657761726473206f6620606f7468657260206d656d626572732e30636c61696d5f7061796f757400022055014120626f6e646564206d656d6265722063616e20757365207468697320746f20636c61696d207468656972207061796f7574206261736564206f6e20746865207265776172647320746861742074686520706f6f6c610168617320616363756d756c617465642073696e6365207468656972206c61737420636c61696d6564207061796f757420284f522073696e6365206a6f696e696e6720696620746869732069732074686569722066697273743d0174696d6520636c61696d696e672072657761726473292e20546865207061796f75742077696c6c206265207472616e7366657272656420746f20746865206d656d6265722773206163636f756e742e004901546865206d656d6265722077696c6c206561726e20726577617264732070726f2072617461206261736564206f6e20746865206d656d62657273207374616b65207673207468652073756d206f6620746865d06d656d6265727320696e2074686520706f6f6c73207374616b652e205265776172647320646f206e6f742022657870697265222e003d015365652060636c61696d5f7061796f75745f6f746865726020746f206361696d2072657761726473206f6e20626168616c66206f6620736f6d6520606f746865726020706f6f6c206d656d6265722e18756e626f6e640801386d656d6265725f6163636f756e749d0201504163636f756e7449644c6f6f6b75704f663c543e000140756e626f6e64696e675f706f696e7473cc013042616c616e63654f663c543e00037c4501556e626f6e6420757020746f2060756e626f6e64696e675f706f696e747360206f662074686520606d656d6265725f6163636f756e746027732066756e64732066726f6d2074686520706f6f6c2e2049744501696d706c696369746c7920636f6c6c65637473207468652072657761726473206f6e65206c6173742074696d652c2073696e6365206e6f7420646f696e6720736f20776f756c64206d65616e20736f6d656c7265776172647320776f756c6420626520666f726665697465642e004d01556e646572206365727461696e20636f6e646974696f6e732c20746869732063616c6c2063616e2062652064697370617463686564207065726d697373696f6e6c6573736c792028692e652e20627920616e79246163636f756e74292e00ac2320436f6e646974696f6e7320666f722061207065726d697373696f6e6c6573732064697370617463682e005d012a2054686520706f6f6c20697320626c6f636b656420616e64207468652063616c6c6572206973206569746865722074686520726f6f74206f7220626f756e6365722e205468697320697320726566657265656420746f30202061732061206b69636b2ef42a2054686520706f6f6c2069732064657374726f79696e6720616e6420746865206d656d626572206973206e6f7420746865206465706f7369746f722e55012a2054686520706f6f6c2069732064657374726f79696e672c20746865206d656d62657220697320746865206465706f7369746f7220616e64206e6f206f74686572206d656d626572732061726520696e207468651c2020706f6f6c2e001101232320436f6e646974696f6e7320666f72207065726d697373696f6e65642064697370617463682028692e652e207468652063616c6c657220697320616c736f2074686548606d656d6265725f6163636f756e7460293a00882a205468652063616c6c6572206973206e6f7420746865206465706f7369746f722e55012a205468652063616c6c657220697320746865206465706f7369746f722c2074686520706f6f6c2069732064657374726f79696e6720616e64206e6f206f74686572206d656d626572732061726520696e207468651c2020706f6f6c2e001823204e6f7465001d0149662074686572652061726520746f6f206d616e7920756e6c6f636b696e67206368756e6b7320746f20756e626f6e6420776974682074686520706f6f6c206163636f756e742c51015b6043616c6c3a3a706f6f6c5f77697468647261775f756e626f6e646564605d2063616e2062652063616c6c656420746f2074727920616e64206d696e696d697a6520756e6c6f636b696e67206368756e6b732e5901546865205b605374616b696e67496e746572666163653a3a756e626f6e64605d2077696c6c20696d706c696369746c792063616c6c205b6043616c6c3a3a706f6f6c5f77697468647261775f756e626f6e646564605d5501746f2074727920746f2066726565206368756e6b73206966206e6563657373617279202869652e20696620756e626f756e64207761732063616c6c656420616e64206e6f20756e6c6f636b696e67206368756e6b73610161726520617661696c61626c65292e20486f77657665722c206974206d6179206e6f7420626520706f737369626c6520746f2072656c65617365207468652063757272656e7420756e6c6f636b696e67206368756e6b732c5d01696e20776869636820636173652c2074686520726573756c74206f6620746869732063616c6c2077696c6c206c696b656c792062652074686520604e6f4d6f72654368756e6b7360206572726f722066726f6d207468653c7374616b696e672073797374656d2e58706f6f6c5f77697468647261775f756e626f6e64656408011c706f6f6c5f6964100118506f6f6c49640001486e756d5f736c617368696e675f7370616e7310010c753332000418550143616c6c206077697468647261775f756e626f6e6465646020666f722074686520706f6f6c73206163636f756e742e20546869732063616c6c2063616e206265206d61646520627920616e79206163636f756e742e004101546869732069732075736566756c2069662074686569722061726520746f6f206d616e7920756e6c6f636b696e67206368756e6b7320746f2063616c6c2060756e626f6e64602c20616e6420736f6d65610163616e20626520636c6561726564206279207769746864726177696e672e20496e2074686520636173652074686572652061726520746f6f206d616e7920756e6c6f636b696e67206368756e6b732c2074686520757365725101776f756c642070726f6261626c792073656520616e206572726f72206c696b6520604e6f4d6f72654368756e6b736020656d69747465642066726f6d20746865207374616b696e672073797374656d207768656e5c7468657920617474656d707420746f20756e626f6e642e4477697468647261775f756e626f6e6465640801386d656d6265725f6163636f756e749d0201504163636f756e7449644c6f6f6b75704f663c543e0001486e756d5f736c617368696e675f7370616e7310010c75333200054c5501576974686472617720756e626f6e6465642066756e64732066726f6d20606d656d6265725f6163636f756e74602e204966206e6f20626f6e6465642066756e64732063616e20626520756e626f6e6465642c20616e486572726f722069732072657475726e65642e004d01556e646572206365727461696e20636f6e646974696f6e732c20746869732063616c6c2063616e2062652064697370617463686564207065726d697373696f6e6c6573736c792028692e652e20627920616e79246163636f756e74292e00a82320436f6e646974696f6e7320666f722061207065726d697373696f6e6c6573732064697370617463680009012a2054686520706f6f6c20697320696e2064657374726f79206d6f646520616e642074686520746172676574206973206e6f7420746865206465706f7369746f722e31012a205468652074617267657420697320746865206465706f7369746f7220616e6420746865792061726520746865206f6e6c79206d656d62657220696e207468652073756220706f6f6c732e0d012a2054686520706f6f6c20697320626c6f636b656420616e64207468652063616c6c6572206973206569746865722074686520726f6f74206f7220626f756e6365722e00982320436f6e646974696f6e7320666f72207065726d697373696f6e656420646973706174636800e82a205468652063616c6c6572206973207468652074617267657420616e64207468657920617265206e6f7420746865206465706f7369746f722e001823204e6f746500ec4966207468652074617267657420697320746865206465706f7369746f722c2074686520706f6f6c2077696c6c2062652064657374726f7965642e18637265617465100118616d6f756e74cc013042616c616e63654f663c543e000110726f6f749d0201504163636f756e7449644c6f6f6b75704f663c543e0001246e6f6d696e61746f729d0201504163636f756e7449644c6f6f6b75704f663c543e00011c626f756e6365729d0201504163636f756e7449644c6f6f6b75704f663c543e000644744372656174652061206e65772064656c65676174696f6e20706f6f6c2e002c2320417267756d656e74730055012a2060616d6f756e7460202d2054686520616d6f756e74206f662066756e647320746f2064656c656761746520746f2074686520706f6f6c2e205468697320616c736f2061637473206f66206120736f7274206f664d0120206465706f7369742073696e63652074686520706f6f6c732063726561746f722063616e6e6f742066756c6c7920756e626f6e642066756e647320756e74696c2074686520706f6f6c206973206265696e6730202064657374726f7965642e51012a2060696e64657860202d204120646973616d626967756174696f6e20696e64657820666f72206372656174696e6720746865206163636f756e742e204c696b656c79206f6e6c792075736566756c207768656ec020206372656174696e67206d756c7469706c6520706f6f6c7320696e207468652073616d652065787472696e7369632ed42a2060726f6f7460202d20546865206163636f756e7420746f20736574206173205b60506f6f6c526f6c65733a3a726f6f74605d2e0d012a20606e6f6d696e61746f7260202d20546865206163636f756e7420746f2073657420617320746865205b60506f6f6c526f6c65733a3a6e6f6d696e61746f72605d2efc2a2060626f756e63657260202d20546865206163636f756e7420746f2073657420617320746865205b60506f6f6c526f6c65733a3a626f756e636572605d2e001823204e6f7465006101496e206164646974696f6e20746f2060616d6f756e74602c207468652063616c6c65722077696c6c207472616e7366657220746865206578697374656e7469616c206465706f7369743b20736f207468652063616c6c657211016e656564732061742068617665206174206c656173742060616d6f756e74202b206578697374656e7469616c5f6465706f73697460207472616e736665727261626c652e4c6372656174655f776974685f706f6f6c5f6964140118616d6f756e74cc013042616c616e63654f663c543e000110726f6f749d0201504163636f756e7449644c6f6f6b75704f663c543e0001246e6f6d696e61746f729d0201504163636f756e7449644c6f6f6b75704f663c543e00011c626f756e6365729d0201504163636f756e7449644c6f6f6b75704f663c543e00011c706f6f6c5f6964100118506f6f6c4964000718ec4372656174652061206e65772064656c65676174696f6e20706f6f6c207769746820612070726576696f75736c79207573656420706f6f6c206964002c2320417267756d656e7473009873616d6520617320606372656174656020776974682074686520696e636c7573696f6e206f66782a2060706f6f6c5f696460202d2060412076616c696420506f6f6c49642e206e6f6d696e61746508011c706f6f6c5f6964100118506f6f6c496400012876616c696461746f7273ad0201445665633c543a3a4163636f756e7449643e00081c7c4e6f6d696e617465206f6e20626568616c66206f662074686520706f6f6c2e004501546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265207369676e65642062792074686520706f6f6c206e6f6d696e61746f72206f722074686520706f6f6c28726f6f7420726f6c652e00490154686973206469726563746c7920666f7277617264207468652063616c6c20746f20746865207374616b696e672070616c6c65742c206f6e20626568616c66206f662074686520706f6f6c20626f6e646564206163636f756e742e247365745f737461746508011c706f6f6c5f6964100118506f6f6c49640001147374617465a5010124506f6f6c5374617465000928745365742061206e657720737461746520666f722074686520706f6f6c2e0055014966206120706f6f6c20697320616c726561647920696e20746865206044657374726f79696e67602073746174652c207468656e20756e646572206e6f20636f6e646974696f6e2063616e20697473207374617465346368616e676520616761696e2e00c0546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265206569746865723a00dc312e207369676e65642062792074686520626f756e6365722c206f722074686520726f6f7420726f6c65206f662074686520706f6f6c2c5d01322e2069662074686520706f6f6c20636f6e646974696f6e7320746f206265206f70656e20617265204e4f54206d6574202861732064657363726962656420627920606f6b5f746f5f62655f6f70656e60292c20616e6439012020207468656e20746865207374617465206f662074686520706f6f6c2063616e206265207065726d697373696f6e6c6573736c79206368616e67656420746f206044657374726f79696e67602e307365745f6d6574616461746108011c706f6f6c5f6964100118506f6f6c49640001206d6574616461746130011c5665633c75383e000a10805365742061206e6577206d6574616461746120666f722074686520706f6f6c2e005d01546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265207369676e65642062792074686520626f756e6365722c206f722074686520726f6f7420726f6c65206f662074686514706f6f6c2e2c7365745f636f6e666967731801346d696e5f6a6f696e5f626f6e64f1040158436f6e6669674f703c42616c616e63654f663c543e3e00013c6d696e5f6372656174655f626f6e64f1040158436f6e6669674f703c42616c616e63654f663c543e3e0001246d61785f706f6f6c73f5040134436f6e6669674f703c7533323e00012c6d61785f6d656d62657273f5040134436f6e6669674f703c7533323e0001506d61785f6d656d626572735f7065725f706f6f6cf5040134436f6e6669674f703c7533323e000154676c6f62616c5f6d61785f636f6d6d697373696f6ef9040144436f6e6669674f703c50657262696c6c3e000b2c410155706461746520636f6e66696775726174696f6e7320666f7220746865206e6f6d696e6174696f6e20706f6f6c732e20546865206f726967696e20666f7220746869732063616c6c206d75737420626514526f6f742e002c2320417267756d656e747300a02a20606d696e5f6a6f696e5f626f6e6460202d20536574205b604d696e4a6f696e426f6e64605d2eb02a20606d696e5f6372656174655f626f6e6460202d20536574205b604d696e437265617465426f6e64605d2e842a20606d61785f706f6f6c7360202d20536574205b604d6178506f6f6c73605d2ea42a20606d61785f6d656d6265727360202d20536574205b604d6178506f6f6c4d656d62657273605d2ee42a20606d61785f6d656d626572735f7065725f706f6f6c60202d20536574205b604d6178506f6f6c4d656d62657273506572506f6f6c605d2ee02a2060676c6f62616c5f6d61785f636f6d6d697373696f6e60202d20536574205b60476c6f62616c4d6178436f6d6d697373696f6e605d2e307570646174655f726f6c657310011c706f6f6c5f6964100118506f6f6c49640001206e65775f726f6f74fd040158436f6e6669674f703c543a3a4163636f756e7449643e0001346e65775f6e6f6d696e61746f72fd040158436f6e6669674f703c543a3a4163636f756e7449643e00012c6e65775f626f756e636572fd040158436f6e6669674f703c543a3a4163636f756e7449643e000c1c745570646174652074686520726f6c6573206f662074686520706f6f6c2e003d0154686520726f6f7420697320746865206f6e6c7920656e7469747920746861742063616e206368616e676520616e79206f662074686520726f6c65732c20696e636c7564696e6720697473656c662cb86578636c7564696e6720746865206465706f7369746f722c2077686f2063616e206e65766572206368616e67652e005101497420656d69747320616e206576656e742c206e6f74696679696e6720554973206f662074686520726f6c65206368616e67652e2054686973206576656e742069732071756974652072656c6576616e7420746f1d016d6f737420706f6f6c206d656d6265727320616e6420746865792073686f756c6420626520696e666f726d6564206f66206368616e67657320746f20706f6f6c20726f6c65732e146368696c6c04011c706f6f6c5f6964100118506f6f6c4964000d1c704368696c6c206f6e20626568616c66206f662074686520706f6f6c2e004501546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265207369676e65642062792074686520706f6f6c206e6f6d696e61746f72206f722074686520706f6f6ca0726f6f7420726f6c652c2073616d65206173205b6050616c6c65743a3a6e6f6d696e617465605d2e00490154686973206469726563746c7920666f7277617264207468652063616c6c20746f20746865207374616b696e672070616c6c65742c206f6e20626568616c66206f662074686520706f6f6c20626f6e646564206163636f756e742e40626f6e645f65787472615f6f746865720801186d656d6265729d0201504163636f756e7449644c6f6f6b75704f663c543e0001146578747261ed04015c426f6e6445787472613c42616c616e63654f663c543e3e000e245501606f726967696e6020626f6e64732066756e64732066726f6d206065787472616020666f7220736f6d6520706f6f6c206d656d62657220606d656d6265726020696e746f207468656972207265737065637469766518706f6f6c732e004901606f726967696e602063616e20626f6e642065787472612066756e64732066726f6d20667265652062616c616e6365206f722070656e64696e672072657761726473207768656e20606f726967696e203d3d1c6f74686572602e004501496e207468652063617365206f6620606f726967696e20213d206f74686572602c20606f726967696e602063616e206f6e6c7920626f6e642065787472612070656e64696e672072657761726473206f661501606f7468657260206d656d6265727320617373756d696e67207365745f636c61696d5f7065726d697373696f6e20666f722074686520676976656e206d656d626572206973c0605065726d697373696f6e6c657373416c6c60206f7220605065726d697373696f6e6c657373436f6d706f756e64602e507365745f636c61696d5f7065726d697373696f6e0401287065726d697373696f6e0105013c436c61696d5065726d697373696f6e000f304901416c6c6f7773206120706f6f6c206d656d62657220746f20736574206120636c61696d207065726d697373696f6e20746f20616c6c6f77206f7220646973616c6c6f77207065726d697373696f6e6c65737360626f6e64696e6720616e64207769746864726177696e672e00550142792064656661756c742c207468697320697320605065726d697373696f6e6564602c20776869636820696d706c696573206f6e6c792074686520706f6f6c206d656d626572207468656d73656c7665732063616e3501636c61696d2074686569722070656e64696e6720726577617264732e204966206120706f6f6c206d656d6265722077697368657320736f2c20746865792063616e20736574207468697320746f5501605065726d697373696f6e6c657373416c6c6020746f20616c6c6f7720616e79206163636f756e7420746f20636c61696d207468656972207265776172647320616e6420626f6e6420657874726120746f2074686514706f6f6c2e002c2320417267756d656e747300782a20606f726967696e60202d204d656d626572206f66206120706f6f6c2ed02a20606163746f7260202d204163636f756e7420746f20636c61696d207265776172642e202f2f20696d70726f7665207468697348636c61696d5f7061796f75745f6f746865720401146f74686572000130543a3a4163636f756e7449640010100101606f726967696e602063616e20636c61696d207061796f757473206f6e20736f6d6520706f6f6c206d656d62657220606f7468657260277320626568616c662e006101506f6f6c206d656d62657220606f7468657260206d7573742068617665206120605065726d697373696f6e6c657373416c6c60206f7220605065726d697373696f6e6c65737357697468647261776020696e206f726465727c666f7220746869732063616c6c20746f206265207375636365737366756c2e387365745f636f6d6d697373696f6e08011c706f6f6c5f6964100118506f6f6c49640001386e65775f636f6d6d697373696f6ea901017c4f7074696f6e3c2850657262696c6c2c20543a3a4163636f756e744964293e001114745365742074686520636f6d6d697373696f6e206f66206120706f6f6c2e5501426f7468206120636f6d6d697373696f6e2070657263656e7461676520616e64206120636f6d6d697373696f6e207061796565206d7573742062652070726f766964656420696e20746865206063757272656e74605d017475706c652e2057686572652061206063757272656e7460206f6620604e6f6e65602069732070726f76696465642c20616e792063757272656e7420636f6d6d697373696f6e2077696c6c2062652072656d6f7665642e004d012d204966206120604e6f6e656020697320737570706c69656420746f20606e65775f636f6d6d697373696f6e602c206578697374696e6720636f6d6d697373696f6e2077696c6c2062652072656d6f7665642e487365745f636f6d6d697373696f6e5f6d617808011c706f6f6c5f6964100118506f6f6c49640001386d61785f636f6d6d697373696f6e80011c50657262696c6c0012149453657420746865206d6178696d756d20636f6d6d697373696f6e206f66206120706f6f6c2e0039012d20496e697469616c206d61782063616e2062652073657420746f20616e79206050657262696c6c602c20616e64206f6e6c7920736d616c6c65722076616c75657320746865726561667465722e35012d2043757272656e7420636f6d6d697373696f6e2077696c6c206265206c6f776572656420696e20746865206576656e7420697420697320686967686572207468616e2061206e6577206d6178342020636f6d6d697373696f6e2e687365745f636f6d6d697373696f6e5f6368616e67655f7261746508011c706f6f6c5f6964100118506f6f6c496400012c6368616e67655f72617465b1010190436f6d6d697373696f6e4368616e6765526174653c543a3a426c6f636b4e756d6265723e001310a85365742074686520636f6d6d697373696f6e206368616e6765207261746520666f72206120706f6f6c2e003d01496e697469616c206368616e67652072617465206973206e6f7420626f756e6465642c20776865726561732073756273657175656e7420757064617465732063616e206f6e6c79206265206d6f7265747265737472696374697665207468616e207468652063757272656e742e40636c61696d5f636f6d6d697373696f6e04011c706f6f6c5f6964100118506f6f6c496400141464436c61696d2070656e64696e6720636f6d6d697373696f6e2e005d01546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265207369676e6564206279207468652060726f6f746020726f6c65206f662074686520706f6f6c2e2050656e64696e675d01636f6d6d697373696f6e2069732070616964206f757420616e6420616464656420746f20746f74616c20636c61696d656420636f6d6d697373696f6e602e20546f74616c2070656e64696e6720636f6d6d697373696f6e78697320726573657420746f207a65726f2e207468652063757272656e742e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632eed04085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7324426f6e644578747261041c42616c616e6365011801082c4672656542616c616e6365040018011c42616c616e63650000001c5265776172647300010000f104085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7320436f6e6669674f700404540118010c104e6f6f700000000c5365740400180104540001001852656d6f766500020000f504085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7320436f6e6669674f700404540110010c104e6f6f700000000c5365740400100104540001001852656d6f766500020000f904085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7320436f6e6669674f700404540180010c104e6f6f700000000c5365740400800104540001001852656d6f766500020000fd04085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7320436f6e6669674f700404540100010c104e6f6f700000000c5365740400000104540001001852656d6f7665000200000105085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c733c436c61696d5065726d697373696f6e000110305065726d697373696f6e6564000000585065726d697373696f6e6c657373436f6d706f756e64000100585065726d697373696f6e6c6573735769746864726177000200445065726d697373696f6e6c657373416c6c0003000005050c2c70616c6c65745f7375646f1870616c6c6574144572726f720404540001042c526571756972655375646f0000047c53656e646572206d75737420626520746865205375646f206163636f756e7404644572726f7220666f7220746865205375646f2070616c6c6574090500000408102c000d05104470616c6c65745f637265646974636f696e14747970657334636f6c6c6563745f636f696e7340436f6c6c6563746564436f696e734964041048617368012c0004002c01104861736800001105104470616c6c65745f637265646974636f696e14747970657334636f6c6c6563745f636f696e7338436f6c6c6563746564436f696e73081048617368012c1c42616c616e6365011800100108746ff4013c4164647265737349643c486173683e000118616d6f756e7418011c42616c616e636500011474785f69640101013045787465726e616c54784964000134636f6e74726163745f7479706515050130436f6e74726163745479706500001505104470616c6c65745f637265646974636f696e14747970657334636f6c6c6563745f636f696e7330436f6e74726163745479706500010810474352450000001047415445000100001905144470616c6c65745f637265646974636f696e0c6f6377147461736b7334636f6c6c6563745f636f696e73404465706c6f796564436f6e7472616374000008011c616464726573731d05011048313630000114636861696efc0128426c6f636b636861696e00001d05083c7072696d69746976655f7479706573104831363000000400a50201205b75383b2032305d00002105104470616c6c65745f637265646974636f696e1474797065731c636c65616e75704c53746f72616765436c65616e75705374617465042c426c6f636b4e756d6265720110000c012861736b5f6f72646572732505019053746f726167654974656d436c65616e757053746174653c426c6f636b4e756d6265723e0001286269645f6f72646572732505019053746f726167654974656d436c65616e757053746174653c426c6f636b4e756d6265723e0001186f66666572732505019053746f726167654974656d436c65616e757053746174653c426c6f636b4e756d6265723e00002505104470616c6c65745f637265646974636f696e1474797065731c636c65616e75705c53746f726167654974656d436c65616e75705374617465042c426c6f636b4e756d6265720110000801206f6e5f626c6f636b10012c426c6f636b4e756d626572000118637572736f72290501d04f7074696f6e3c5765616b426f756e6465645665633c75382c20436f6e73745533323c4d41585f435552534f525f4c454e3e3e3e0000290504184f7074696f6e040454012d050108104e6f6e6500000010536f6d6504002d0500000100002d050c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401080453000004003001185665633c543e000031050c4470616c6c65745f637265646974636f696e147479706573204275726e496e666f08244163636f756e74496401001c42616c616e63650118000c011c6163636f756e740001244163636f756e744964000118616d6f756e7418011c42616c616e6365000124636f6c6c6563746f720001244163636f756e744964000035050c4470616c6c65745f637265646974636f696e1870616c6c6574144572726f720404540001f86041646472657373416c72656164795265676973746572656400000415015468652073706563696669656420616464726573732068617320616c7265616479206265656e207265676973746572656420746f20616e6f74686572206163636f756e742e8041646472657373416c726561647952656769737465726564427943616c6c657200010409015468652073706563696669656420616464726573732068617320616c7265616479206265656e207265676973746572656420746f2074686973206163636f756e742e484e6f6e4578697374656e74416464726573730002049454686520737065636966696564206164647265737320646f6573206e6f742065786973742e504e6f6e4578697374656e744465616c4f72646572000304a054686520737065636966696564206465616c206f7264657220646f6573206e6f742065786973742e4c4e6f6e4578697374656e7441736b4f726465720004049c546865207370656369666965642061736b206f7264657220646f6573206e6f742065786973742e4c4e6f6e4578697374656e744269644f726465720005049c5468652073706563696669656420626964206f7264657220646f6573206e6f742065786973742e404e6f6e4578697374656e744f666665720006048c54686520737065636966696564206f6666657220646f6573206e6f742065786973742e4c4e6f6e4578697374656e745472616e736665720007049854686520737065636966696564207472616e7366657220646f6573206e6f742065786973742e645472616e73666572416c726561647952656769737465726564000804a4546865207472616e736665722068617320616c7265616479206265656e20726567697374657265642e74436f6c6c656374436f696e73416c726561647952656769737465726564000904c054686520636f696e20636f6c6c656374696f6e2068617320616c7265616479206265656e20726567697374657265642e5c5472616e736665724163636f756e744d69736d61746368000a08b4546865206163636f756e742074686174207265676973746572656420746865207472616e7366657220646f6573d46e6f74206d6174636820746865206163636f756e7420617474656d7074696e6720746f2075736520746865207472616e736665722e645472616e736665724465616c4f726465724d69736d61746368000b04190154686520737065636966696564206465616c206f7264657220494420646f6573206e6f74206d6174636820746865207472616e73666572206465616c206f726465722049442e585472616e73666572416d6f756e744d69736d61746368000c04010154686520616d6f756e74206f6e20746865206465616c206f7264657220646f6573206e6f74206d6174636820746865207472616e7366657220616d6f756e742e605472616e73666572416c726561647950726f636573736564000d04ec546865207472616e736665722068617320616c7265616479206265656e2070726f63657373656420616e642063616e6e6f7420626520757365642e685472616e73666572416d6f756e74496e73756666696369656e74000e04f8546865207472616e7366657220616d6f756e74206973206c657373207468616e2074686520616d6f756e7420696e20746865206c6f616e207465726d732e444d616c666f726d65645472616e73666572000f080501546865207472616e73666572206973206d616c666f726d656420616e6420686173206120626c6f636b206e756d6265722067726561746572207468616e207468657c7469702e205468697320697320616e20696e7465726e616c206572726f722e5c556e737570706f727465645472616e736665724b696e64001008e454686520737065636966696564207472616e736665722074797065206973206e6f742063757272656e746c7920737570706f727465642062799c74686520626c6f636b636861696e20746865206c6f616e206973206578656375746564206f6e2e54496e73756666696369656e74417574686f726974790011040501546865206e6f646520646f6573206e6f7420686176652073756666696369656e7420617574686f7269747920746f207665726966792061207472616e736665722e2c4475706c696361746549640012049c546865207370656369666965642049442068617320616c7265616479206265656e20757365642e3c4e6f74416464726573734f776e6572001304f054686520616464726573732063616e6e6f742062652075736564206265636175736520746865207573657220646f6573206e6f74206f776e2069742e584f6666636861696e5369676e656454784661696c6564001408fc4661696c656420746f2073656e6420616e206f6666636861696e2063616c6c6261636b207472616e73616374696f6e2e2054686973206973206c696b656c7948616e20696e7465726e616c206572726f722e584e6f4c6f63616c41636374466f725369676e65645478001508f0546865206e6f646520697320616e20617574686f7269747920627574207468657265206973206e6f206163636f756e7420746f206372656174652061dc63616c6c6261636b207472616e73616374696f6e2e2054686973206973206c696b656c7920616e20696e7465726e616c206572726f722e6452657061796d656e744f726465724e6f6e5a65726f4761696e0016006441646472657373426c6f636b636861696e4d69736d61746368001704f8546865206164647265737365732073706563696669656420617265206e6f74206f6e20636f6d70617469626c652065787465726e616c20636861696e732e40416c7265616479417574686f7269747900180490546865206163636f756e7420697320616c726561647920616e20617574686f726974792e384e6f74416e417574686f72697479001904e8546865206163636f756e7420796f752061726520747279696e6720746f2072656d6f7665206973206e6f742020616e20617574686f726974792e384475706c69636174654f66666572001a0480546865206f666665722068617320616c7265616479206265656e206d6164652e344465616c4e6f7446756e646564001b04dc546865206465616c2063616e6e6f74206265206c6f636b65642062656361757365206974206973206e6f742066756e646564207965742e584465616c4f72646572416c726561647946756e646564001c04f0546865206465616c206f7264657220697320616c72656164792066756e64656420616e642063616e6e6f742062652066756e64656420616761696e2e584465616c4f72646572416c7265616479436c6f736564001d04f0546865206465616c206f7264657220697320616c726561647920636c6f73656420616e642063616e6e6f7420626520636c6f73656420616761696e2e584465616c4f72646572416c72656164794c6f636b6564001e04f0546865206465616c206f7264657220697320616c7265616479206c6f636b656420616e642063616e6e6f74206265206c6f636b656420616761696e2e544465616c4f726465724d75737442654c6f636b6564001f04d8546865206465616c206f72646572206d757374206265206c6f636b6564206265666f72652069742063616e20626520636c6f7365642e484475706c69636174654465616c4f7264657200200478546865206465616c206f7264657220616c7265616479206578697374732e404465616c4f7264657245787069726564002104c8546865206465616c206f7264657220686173206578706972656420616e64206973206e6f206c6f6e6765722076616c69642e3c41736b4f7264657245787069726564002204c45468652061736b206f7264657220686173206578706972656420616e64206973206e6f206c6f6e6765722076616c69642e3c4269644f7264657245787069726564002304c454686520626964206f7264657220686173206578706972656420616e64206973206e6f206c6f6e6765722076616c69642e304f6666657245787069726564002404cc546865206f66666572206f7264657220686173206578706972656420616e64206973206e6f206c6f6e6765722076616c69642e3841736b4269644d69736d61746368002504c0546865207465726d73206f66207468652061736b20616e6420626964206f7264657220646f206e6f742061677265652e2453616d654f776e65720026040d0154686520626964206f72646572206973206f776e65642062792074686520757365722c206120757365722063616e6e6f74206c656e6420746f207468656d73656c662e40496e76616c69645369676e6174757265002704e0546865207369676e617475726520646f6573206e6f74206d6174636820746865207075626c6963206b657920616e64206d6573736167652e2c4e6f74426f72726f776572002804a44f6e6c792074686520626f72726f7765722063616e20706572666f726d2074686520616374696f6e2e484d616c666f726d65644465616c4f726465720029080d01546865206465616c206f72646572206973206d616c666f726d656420616e6420686173206120626c6f636b206e756d6265722067726561746572207468616e207468657c7469702e205468697320697320616e20696e7465726e616c206572726f722e244e6f744c656e646572002a049c4f6e6c7920746865206c656e6465722063616e20706572666f726d2074686520616374696f6e2e6452657061796d656e744f72646572556e737570706f72746564002b04b452657061796d656e74206f726465727320617265206e6f742063757272656e746c7920737570706f727465642e504e6f744c656761637957616c6c65744f776e6572002c04ac546865206c65676163792077616c6c6574206973206e6f74206f776e65642062792074686520757365722e504c656761637957616c6c65744e6f74466f756e64002d04e85468657265206973206e6f206c65676163792077616c6c657420636f72726573706f6e64696e6720746f20746865207075626c6963206b65792e684c656761637942616c616e63654b65657065724d697373696e67002e081d015468657265206973206e6f206c65676163792062616c616e6365206b65657065722c20736f206e6f206c65676163792077616c6c6574732063616e20626520636c61696d65642e350154686973206973206120636f6e66696775726174696f6e206572726f7220616e642073686f756c64206f6e6c79206f6363757220647572696e67206c6f63616c20646576656c6f706d656e742e3c47756964416c726561647955736564002f04fc5468652073706563696669656420677569642068617320616c7265616479206265656e207573656420616e642063616e6e6f742062652072652d757365642e44496e76616c69645465726d4c656e6774680030040d015468652076616c7565206f6620746865206c6f616e207465726d2773207465726d206c656e677468206973207a65726f2c20776869636820697320696e76616c69642e604d616c666f726d656445787465726e616c4164647265737300310421015468652065787465726e616c2061646472657373206973206d616c666f726d6564206f72206f746865727769736520696e76616c696420666f722074686520706c6174666f726d2e6441646472657373466f726d61744e6f74537570706f727465640032045101546865206164647265737320666f726d617420776173206e6f74207265636f676e697a656420666f722074686520676976656e20626c6f636b636861696e20616e642065787465726e616c20616464726573732e544f776e6572736869704e6f74536174697366696564003304c1015468652061646472657373207265747269657665642066726f6d207468652070726f6f662d6f662d6f776e657273686970207369676e617475726520646964206e6f74206d61746368207468652065787465726e616c2061646472657373206265696e6720726567697374657265642e6443757272656e6379416c726561647952656769737465726564003404a45468652063757272656e63792068617320616c7265616479206265656e20726567697374657265642e984574685369676e45787465726e616c4164647265737347656e65726174696f6e4661696c65640035049501412076616c69642065787465726e616c206164647265737320636f756c64206e6f742062652067656e65726174656420666f72207468652073706563696669656420626c6f636b636861696e20616e64207265636f7665726564207075626c6963206b6579784574685369676e5075626c69634b65795265636f766572794661696c656400360415014543445341207075626c6963206b6579207265636f76657279206661696c656420666f7220616e206f776e6572736869702070726f6f66207573696e67204574685369676eac506572736f6e616c5369676e45787465726e616c4164647265737347656e65726174696f6e4661696c65640037049501412076616c69642065787465726e616c206164647265737320636f756c64206e6f742062652067656e65726174656420666f72207468652073706563696669656420626c6f636b636861696e20616e64207265636f7665726564207075626c6963206b65798c506572736f6e616c5369676e5075626c69634b65795265636f766572794661696c656400380429014543445341207075626c6963206b6579207265636f76657279206661696c656420666f7220616e206f776e6572736869702070726f6f66207573696e6720506572736f6e616c5369676e54556e737570706f72746564426c6f636b636861696e003904f8416e20756e737570706f7274656420626c6f636b636861696e207761732073706563696669656420746f2072656769737465725f616464726573735f7632504275726e474154454661756365744e6f74536574003a04cd01546865206f6e636861696e20666175636574206164647265737320666f722074686520474154452073776170206d656368616e69736d20686173206e6f74206265656e20736574207573696e6720746865207365745f676174655f6661756365745f616464726573732065787472696e736963844275726e47415445496e73756666696369656e7446617563657442616c616e6365003b049d01546865206661756365742068617320696e73756666696369656e742066756e647320746f20636f6d706c657465207468697320737761702c20706c65617365207265747279207768656e207468652066617563657420686173206265656e2072656c6f616465644c4275726e536574746c656d656e744572726f72003c043d01447572696e6720612063616c6c20746f206275726e206f72206275726e5f616c6c2074686520736574746c656d656e74206f6620746865206163636f756e742062616c616e636573206661696c6564544275726e496e73756666696369656e7446756e6473003d041d01412063616c6c20746f206275726e20737065636966696564206d6f726520667265652066756e6473207468616e20746865206163636f756e74206861732061636365737320746f04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a09090939050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454013d05045300000400410501185665633c543e00003d05084470616c6c65745f646966666963756c747958446966666963756c7479416e6454696d657374616d7004184d6f6d656e74012800080128646966666963756c74791d010128446966666963756c747900012474696d657374616d702801184d6f6d656e74000041050000023d050045050000050c0049050c4470616c6c65745f646966666963756c74791870616c6c6574144572726f7204045400010c385a65726f54617267657454696d65000000505a65726f41646a7573746d656e74506572696f64000100604e6567617469766541646a7573746d656e74506572696f6400020004b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909094d050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454015105045300000400610501185665633c543e0000510504184f7074696f6e0404540155050108104e6f6e6500000010536f6d650400550500000100005505084070616c6c65745f7363686564756c6572245363686564756c656414104e616d6501041043616c6c0159052c426c6f636b4e756d62657201103450616c6c6574734f726967696e01d104244163636f756e7449640100001401206d617962655f6964810101304f7074696f6e3c4e616d653e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6c5905011043616c6c0001386d617962655f706572696f646963250401944f7074696f6e3c7363686564756c653a3a506572696f643c426c6f636b4e756d6265723e3e0001186f726967696ed104013450616c6c6574734f726967696e0000590510346672616d655f737570706f72741874726169747324707265696d616765731c426f756e64656404045401f503010c184c6567616379040110686173682c01104861736800000018496e6c696e6504005d050134426f756e646564496e6c696e65000100184c6f6f6b7570080110686173682c01104861736800010c6c656e10010c753332000200005d050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e0000610500000251050065050c4070616c6c65745f7363686564756c65721870616c6c6574144572726f72040454000114404661696c6564546f5363686564756c65000004644661696c656420746f207363686564756c6520612063616c6c204e6f74466f756e640001047c43616e6e6f742066696e6420746865207363686564756c65642063616c6c2e5c546172676574426c6f636b4e756d626572496e50617374000204a4476976656e2074617267657420626c6f636b206e756d62657220697320696e2074686520706173742e4852657363686564756c654e6f4368616e6765000304f052657363686564756c65206661696c6564206265636175736520697420646f6573206e6f74206368616e6765207363686564756c65642074696d652e144e616d6564000404d0417474656d707420746f207573652061206e6f6e2d6e616d65642066756e6374696f6e206f6e2061206e616d6564207461736b2e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a09090969050c4470616c6c65745f637265646974636f696e147479706573105461736b10244163636f756e744964010020426c6f636b4e756d01101048617368012c184d6f6d656e7401280104385665726966795472616e7366657204006d0501d4556e76657269666965645472616e736665723c4163636f756e7449642c20426c6f636b4e756d2c20486173682c204d6f6d656e743e000000006d05104470616c6c65745f637265646974636f696e147479706573207472616e7366657248556e76657269666965645472616e7366657210244163636f756e744964010020426c6f636b4e756d01101048617368012c184d6f6d656e740128001001207472616e73666572090101ac5472616e736665723c4163636f756e7449642c20426c6f636b4e756d2c20486173682c204d6f6d656e743e00013466726f6d5f65787465726e616c0101013c45787465726e616c4164647265737300012c746f5f65787465726e616c0101013c45787465726e616c41646472657373000120646561646c696e65100120426c6f636b4e756d000071050c7870616c6c65745f6f6666636861696e5f7461736b5f7363686564756c65721870616c6c6574144572726f72040454000108584f6666636861696e5369676e656454784661696c6564000008fc4661696c656420746f2073656e6420616e206f6666636861696e2063616c6c6261636b207472616e73616374696f6e2e2054686973206973206c696b656c7948616e20696e7465726e616c206572726f722e584e6f4c6f63616c41636374466f725369676e65645478000108f0546865206e6f646520697320616e20617574686f7269747920627574207468657265206973206e6f206163636f756e7420746f206372656174652061dc63616c6c6261636b207472616e73616374696f6e2e2054686973206973206c696b656c7920616e20696e7465726e616c206572726f722e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a09090975050c3c70616c6c65745f6964656e7469747914747970657330526567697374726174696f6e0c1c42616c616e63650118344d61784a756467656d656e7473004c4d61784164646974696f6e616c4669656c647300000c01286a756467656d656e7473790501fc426f756e6465645665633c28526567697374726172496e6465782c204a756467656d656e743c42616c616e63653e292c204d61784a756467656d656e74733e00011c6465706f73697418011c42616c616e6365000110696e666f2d0401844964656e74697479496e666f3c4d61784164646974696f6e616c4669656c64733e000079050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454017d05045300000400810501185665633c543e00007d050000040810c5040081050000027d05008505000004081889050089050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400ad0201185665633c543e00008d050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454019105045300000400990501185665633c543e0000910504184f7074696f6e0404540195050108104e6f6e6500000010536f6d6504009505000001000095050c3c70616c6c65745f6964656e7469747914747970657334526567697374726172496e666f081c42616c616e63650118244163636f756e7449640100000c011c6163636f756e740001244163636f756e74496400010c66656518011c42616c616e63650001186669656c6473bd0401384964656e746974794669656c6473000099050000029105009d050c3c70616c6c65745f6964656e746974791870616c6c6574144572726f7204045400014848546f6f4d616e795375624163636f756e74730000045c546f6f206d616e7920737562732d6163636f756e74732e204e6f74466f756e64000104504163636f756e742069736e277420666f756e642e204e6f744e616d6564000204504163636f756e742069736e2774206e616d65642e28456d707479496e64657800030430456d70747920696e6465782e284665654368616e6765640004043c466565206973206368616e6765642e284e6f4964656e74697479000504484e6f206964656e7469747920666f756e642e3c537469636b794a756467656d656e7400060444537469636b79206a756467656d656e742e384a756467656d656e74476976656e000704404a756467656d656e7420676976656e2e40496e76616c69644a756467656d656e7400080448496e76616c6964206a756467656d656e742e30496e76616c6964496e6465780009045454686520696e64657820697320696e76616c69642e34496e76616c6964546172676574000a04585468652074617267657420697320696e76616c69642e34546f6f4d616e794669656c6473000b046c546f6f206d616e79206164646974696f6e616c206669656c64732e44546f6f4d616e7952656769737472617273000c04e84d6178696d756d20616d6f756e74206f66207265676973747261727320726561636865642e2043616e6e6f742061646420616e79206d6f72652e38416c7265616479436c61696d6564000d04704163636f756e7420494420697320616c7265616479206e616d65642e184e6f74537562000e047053656e646572206973206e6f742061207375622d6163636f756e742e204e6f744f776e6564000f04885375622d6163636f756e742069736e2774206f776e65642062792073656e6465722e744a756467656d656e74466f72446966666572656e744964656e74697479001004d05468652070726f7669646564206a756467656d656e742077617320666f72206120646966666572656e74206964656e746974792e584a756467656d656e745061796d656e744661696c6564001104f84572726f722074686174206f6363757273207768656e20746865726520697320616e20697373756520706179696e6720666f72206a756467656d656e742e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909a1050c3870616c6c65745f7574696c6974791870616c6c6574144572726f7204045400010430546f6f4d616e7943616c6c730000045c546f6f206d616e792063616c6c7320626174636865642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909a50500000408a9051800a9050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401ad05045300000400b10501185665633c543e0000ad05083070616c6c65745f70726f78793c50726f7879446566696e6974696f6e0c244163636f756e74496401002450726f78795479706501e82c426c6f636b4e756d6265720110000c012064656c65676174650001244163636f756e74496400012870726f78795f74797065e8012450726f78795479706500011464656c617910012c426c6f636b4e756d6265720000b105000002ad0500b50500000408b9051800b9050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401bd05045300000400c10501185665633c543e0000bd05083070616c6c65745f70726f787930416e6e6f756e63656d656e740c244163636f756e74496401001048617368012c2c426c6f636b4e756d6265720110000c01107265616c0001244163636f756e74496400012463616c6c5f686173682c01104861736800011868656967687410012c426c6f636b4e756d6265720000c105000002bd0500c5050c3070616c6c65745f70726f78791870616c6c6574144572726f720404540001201c546f6f4d616e79000004210154686572652061726520746f6f206d616e792070726f786965732072656769737465726564206f7220746f6f206d616e7920616e6e6f756e63656d656e74732070656e64696e672e204e6f74466f756e640001047450726f787920726567697374726174696f6e206e6f7420666f756e642e204e6f7450726f7879000204cc53656e646572206973206e6f7420612070726f7879206f6620746865206163636f756e7420746f2062652070726f786965642e2c556e70726f787961626c650003042101412063616c6c20776869636820697320696e636f6d70617469626c652077697468207468652070726f7879207479706527732066696c7465722077617320617474656d707465642e244475706c69636174650004046c4163636f756e7420697320616c726561647920612070726f78792e304e6f5065726d697373696f6e000504150143616c6c206d6179206e6f74206265206d6164652062792070726f78792062656361757365206974206d617920657363616c617465206974732070726976696c656765732e2c556e616e6e6f756e636564000604d0416e6e6f756e63656d656e742c206966206d61646520617420616c6c2c20776173206d61646520746f6f20726563656e746c792e2c4e6f53656c6650726f78790007046443616e6e6f74206164642073656c662061732070726f78792e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909c9050c4c70616c6c65745f666173745f756e7374616b6514747970657338556e7374616b6552657175657374040454000008011c73746173686573cd0501d8426f756e6465645665633c28543a3a4163636f756e7449642c2042616c616e63654f663c543e292c20543a3a426174636853697a653e00011c636865636b6564d1050190426f756e6465645665633c457261496e6465782c204d6178436865636b696e673c543e3e0000cd050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401f502045300000400f10201185665633c543e0000d1050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401100453000004009d0101185665633c543e0000d5050c4c70616c6c65745f666173745f756e7374616b651870616c6c6574144572726f72040454000118344e6f74436f6e74726f6c6c657200000cb85468652070726f766964656420436f6e74726f6c6c6572206163636f756e7420776173206e6f7420666f756e642e00c054686973206d65616e7320746861742074686520676976656e206163636f756e74206973206e6f7420626f6e6465642e34416c7265616479517565756564000104ac54686520626f6e646564206163636f756e742068617320616c7265616479206265656e207175657565642e384e6f7446756c6c79426f6e646564000204bc54686520626f6e646564206163636f756e74206861732061637469766520756e6c6f636b696e67206368756e6b732e244e6f74517565756564000304b45468652070726f766964656420756e2d7374616b6572206973206e6f7420696e2074686520605175657565602e2c416c72656164794865616400040405015468652070726f766964656420756e2d7374616b657220697320616c726561647920696e20486561642c20616e642063616e6e6f7420646572656769737465722e3843616c6c4e6f74416c6c6f7765640005041d015468652063616c6c206973206e6f7420616c6c6f776564206174207468697320706f696e742062656361757365207468652070616c6c6574206973206e6f74206163746976652e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909d905085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7328506f6f6c4d656d626572040454000010011c706f6f6c5f6964100118506f6f6c4964000118706f696e747318013042616c616e63654f663c543e0001706c6173745f7265636f726465645f7265776172645f636f756e746572e9030140543a3a526577617264436f756e746572000138756e626f6e64696e675f65726173dd0501e0426f756e64656442547265654d61703c457261496e6465782c2042616c616e63654f663c543e2c20543a3a4d6178556e626f6e64696e673e0000dd050c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b011004560118045300000400e105013842547265654d61703c4b2c20563e0000e105042042547265654d617008044b011004560118000400e505000000e505000002e90500e90500000408101800ed05085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c733c426f6e646564506f6f6c496e6e65720404540000140128636f6d6d697373696f6ef1050134436f6d6d697373696f6e3c543e0001386d656d6265725f636f756e74657210010c753332000118706f696e747318013042616c616e63654f663c543e000114726f6c6573fd05015c506f6f6c526f6c65733c543a3a4163636f756e7449643e0001147374617465a5010124506f6f6c53746174650000f105085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7328436f6d6d697373696f6e040454000010011c63757272656e74a901017c4f7074696f6e3c2850657262696c6c2c20543a3a4163636f756e744964293e00010c6d6178f505013c4f7074696f6e3c50657262696c6c3e00012c6368616e67655f72617465f90501b04f7074696f6e3c436f6d6d697373696f6e4368616e6765526174653c543a3a426c6f636b4e756d6265723e3e0001347468726f74746c655f66726f6d5d0101584f7074696f6e3c543a3a426c6f636b4e756d6265723e0000f50504184f7074696f6e04045401800108104e6f6e6500000010536f6d650400800000010000f90504184f7074696f6e04045401b1010108104e6f6e6500000010536f6d650400b1010000010000fd05085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7324506f6f6c526f6c657304244163636f756e7449640100001001246465706f7369746f720001244163636f756e744964000110726f6f74ec01444f7074696f6e3c4163636f756e7449643e0001246e6f6d696e61746f72ec01444f7074696f6e3c4163636f756e7449643e00011c626f756e636572ec01444f7074696f6e3c4163636f756e7449643e00000106085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7328526577617264506f6f6c04045400001401706c6173745f7265636f726465645f7265776172645f636f756e746572e9030140543a3a526577617264436f756e74657200016c6c6173745f7265636f726465645f746f74616c5f7061796f75747318013042616c616e63654f663c543e000154746f74616c5f726577617264735f636c61696d656418013042616c616e63654f663c543e000160746f74616c5f636f6d6d697373696f6e5f70656e64696e6718013042616c616e63654f663c543e000160746f74616c5f636f6d6d697373696f6e5f636c61696d656418013042616c616e63654f663c543e00000506085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7320537562506f6f6c7304045400000801186e6f5f65726109060134556e626f6e64506f6f6c3c543e000120776974685f6572610d06010101426f756e64656442547265654d61703c457261496e6465782c20556e626f6e64506f6f6c3c543e2c20546f74616c556e626f6e64696e67506f6f6c733c543e3e00000906085c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c7328556e626f6e64506f6f6c0404540000080118706f696e747318013042616c616e63654f663c543e00011c62616c616e636518013042616c616e63654f663c543e00000d060c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b011004560109060453000004001106013842547265654d61703c4b2c20563e00001106042042547265654d617008044b0110045601090600040015060000001506000002190600190600000408100906001d0608346672616d655f737570706f72742050616c6c65744964000004000902011c5b75383b20385d000021060c5c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c731870616c6c6574144572726f7204045400017830506f6f6c4e6f74466f756e6400000488412028626f6e6465642920706f6f6c20696420646f6573206e6f742065786973742e48506f6f6c4d656d6265724e6f74466f756e640001046c416e206163636f756e74206973206e6f742061206d656d6265722e48526577617264506f6f6c4e6f74466f756e640002042101412072657761726420706f6f6c20646f6573206e6f742065786973742e20496e20616c6c206361736573207468697320697320612073797374656d206c6f676963206572726f722e40537562506f6f6c734e6f74466f756e6400030468412073756220706f6f6c20646f6573206e6f742065786973742e644163636f756e7442656c6f6e6773546f4f74686572506f6f6c0004084d01416e206163636f756e7420697320616c72656164792064656c65676174696e6720696e20616e6f7468657220706f6f6c2e20416e206163636f756e74206d6179206f6e6c792062656c6f6e6720746f206f6e653c706f6f6c20617420612074696d652e3846756c6c79556e626f6e64696e670005083d01546865206d656d6265722069732066756c6c7920756e626f6e6465642028616e6420746875732063616e6e6f74206163636573732074686520626f6e64656420616e642072657761726420706f6f6ca8616e796d6f726520746f2c20666f72206578616d706c652c20636f6c6c6563742072657761726473292e444d6178556e626f6e64696e674c696d69740006040901546865206d656d6265722063616e6e6f7420756e626f6e642066757274686572206368756e6b732064756520746f207265616368696e6720746865206c696d69742e4443616e6e6f745769746864726177416e790007044d014e6f6e65206f66207468652066756e64732063616e2062652077697468647261776e2079657420626563617573652074686520626f6e64696e67206475726174696f6e20686173206e6f74207061737365642e444d696e696d756d426f6e644e6f744d6574000814290154686520616d6f756e7420646f6573206e6f74206d65657420746865206d696e696d756d20626f6e6420746f20656974686572206a6f696e206f7220637265617465206120706f6f6c2e00cc546865206465706f7369746f722063616e206e6576657220756e626f6e6420746f20612076616c7565206c657373207468616e05016050616c6c65743a3a6465706f7369746f725f6d696e5f626f6e64602e205468652063616c6c657220646f6573206e6f742068617665206e6f6d696e6174696e6749017065726d697373696f6e7320666f722074686520706f6f6c2e204d656d626572732063616e206e6576657220756e626f6e6420746f20612076616c75652062656c6f7720604d696e4a6f696e426f6e64602e304f766572666c6f775269736b0009042101546865207472616e73616374696f6e20636f756c64206e6f742062652065786563757465642064756520746f206f766572666c6f77207269736b20666f722074686520706f6f6c2e344e6f7444657374726f79696e67000a085d014120706f6f6c206d75737420626520696e205b60506f6f6c53746174653a3a44657374726f79696e67605d20696e206f7264657220666f7220746865206465706f7369746f7220746f20756e626f6e64206f7220666f72b86f74686572206d656d6265727320746f206265207065726d697373696f6e6c6573736c7920756e626f6e6465642e304e6f744e6f6d696e61746f72000b04f45468652063616c6c657220646f6573206e6f742068617665206e6f6d696e6174696e67207065726d697373696f6e7320666f722074686520706f6f6c2e544e6f744b69636b65724f7244657374726f79696e67000c043d01456974686572206129207468652063616c6c65722063616e6e6f74206d616b6520612076616c6964206b69636b206f722062292074686520706f6f6c206973206e6f742064657374726f79696e672e1c4e6f744f70656e000d047054686520706f6f6c206973206e6f74206f70656e20746f206a6f696e204d6178506f6f6c73000e04845468652073797374656d206973206d61786564206f7574206f6e20706f6f6c732e384d6178506f6f6c4d656d62657273000f049c546f6f206d616e79206d656d6265727320696e2074686520706f6f6c206f722073797374656d2e4443616e4e6f744368616e676553746174650010048854686520706f6f6c732073746174652063616e6e6f74206265206368616e6765642e54446f65734e6f74486176655065726d697373696f6e001104b85468652063616c6c657220646f6573206e6f742068617665206164657175617465207065726d697373696f6e732e544d65746164617461457863656564734d61784c656e001204ac4d657461646174612065786365656473205b60436f6e6669673a3a4d61784d657461646174614c656e605d24446566656e73697665040025060138446566656e736976654572726f720013083101536f6d65206572726f72206f6363757272656420746861742073686f756c64206e657665722068617070656e2e20546869732073686f756c64206265207265706f7274656420746f20746865306d61696e7461696e6572732e9c5061727469616c556e626f6e644e6f74416c6c6f7765645065726d697373696f6e6c6573736c79001404bc5061727469616c20756e626f6e64696e67206e6f7720616c6c6f776564207065726d697373696f6e6c6573736c792e5c4d6178436f6d6d697373696f6e526573747269637465640015041d0154686520706f6f6c2773206d617820636f6d6d697373696f6e2063616e6e6f742062652073657420686967686572207468616e20746865206578697374696e672076616c75652e60436f6d6d697373696f6e457863656564734d6178696d756d001604ec54686520737570706c69656420636f6d6d697373696f6e206578636565647320746865206d617820616c6c6f77656420636f6d6d697373696f6e2e64436f6d6d697373696f6e4368616e67655468726f74746c656400170409014e6f7420656e6f75676820626c6f636b732068617665207375727061737365642073696e636520746865206c61737420636f6d6d697373696f6e207570646174652e78436f6d6d697373696f6e4368616e6765526174654e6f74416c6c6f7765640018040101546865207375626d6974746564206368616e67657320746f20636f6d6d697373696f6e206368616e6765207261746520617265206e6f7420616c6c6f7765642e4c4e6f50656e64696e67436f6d6d697373696f6e001904a05468657265206973206e6f2070656e64696e6720636f6d6d697373696f6e20746f20636c61696d2e584e6f436f6d6d697373696f6e43757272656e74536574001a048c4e6f20636f6d6d697373696f6e2063757272656e7420686173206265656e207365742e2c506f6f6c4964496e557365001b0464506f6f6c2069642063757272656e746c7920696e207573652e34496e76616c6964506f6f6c4964001c049c506f6f6c2069642070726f7669646564206973206e6f7420636f72726563742f757361626c652e4c426f6e64457874726152657374726963746564001d04fc426f6e64696e67206578747261206973207265737472696374656420746f207468652065786163742070656e64696e672072657761726420616d6f756e742e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a09090925060c5c70616c6c65745f6e6f6d696e6174696f6e5f706f6f6c731870616c6c657438446566656e736976654572726f72000114684e6f74456e6f7567685370616365496e556e626f6e64506f6f6c00000030506f6f6c4e6f74466f756e6400010048526577617264506f6f6c4e6f74466f756e6400020040537562506f6f6c734e6f74466f756e6400030070426f6e64656453746173684b696c6c65645072656d61747572656c79000400002906102873705f72756e74696d651c67656e657269634c756e636865636b65645f65787472696e73696348556e636865636b656445787472696e736963101c41646472657373019d021043616c6c01f503245369676e6174757265011104144578747261012d06000400300000002d06000004203106350639063d06410649064d06510600310610306672616d655f73797374656d28657874656e73696f6e7354636865636b5f6e6f6e5f7a65726f5f73656e64657248436865636b4e6f6e5a65726f53656e64657204045400000000350610306672616d655f73797374656d28657874656e73696f6e7348636865636b5f737065635f76657273696f6e40436865636b5370656356657273696f6e04045400000000390610306672616d655f73797374656d28657874656e73696f6e7340636865636b5f74785f76657273696f6e38436865636b547856657273696f6e040454000000003d0610306672616d655f73797374656d28657874656e73696f6e7334636865636b5f67656e6573697330436865636b47656e6573697304045400000000410610306672616d655f73797374656d28657874656e73696f6e733c636865636b5f6d6f7274616c69747938436865636b4d6f7274616c697479040454000004004506010c45726100004506102873705f72756e74696d651c67656e657269630c6572610c4572610001010420496d6d6f7274616c0000001c4d6f7274616c31040008000001001c4d6f7274616c32040008000002001c4d6f7274616c33040008000003001c4d6f7274616c34040008000004001c4d6f7274616c35040008000005001c4d6f7274616c36040008000006001c4d6f7274616c37040008000007001c4d6f7274616c38040008000008001c4d6f7274616c3904000800000900204d6f7274616c313004000800000a00204d6f7274616c313104000800000b00204d6f7274616c313204000800000c00204d6f7274616c313304000800000d00204d6f7274616c313404000800000e00204d6f7274616c313504000800000f00204d6f7274616c313604000800001000204d6f7274616c313704000800001100204d6f7274616c313804000800001200204d6f7274616c313904000800001300204d6f7274616c323004000800001400204d6f7274616c323104000800001500204d6f7274616c323204000800001600204d6f7274616c323304000800001700204d6f7274616c323404000800001800204d6f7274616c323504000800001900204d6f7274616c323604000800001a00204d6f7274616c323704000800001b00204d6f7274616c323804000800001c00204d6f7274616c323904000800001d00204d6f7274616c333004000800001e00204d6f7274616c333104000800001f00204d6f7274616c333204000800002000204d6f7274616c333304000800002100204d6f7274616c333404000800002200204d6f7274616c333504000800002300204d6f7274616c333604000800002400204d6f7274616c333704000800002500204d6f7274616c333804000800002600204d6f7274616c333904000800002700204d6f7274616c343004000800002800204d6f7274616c343104000800002900204d6f7274616c343204000800002a00204d6f7274616c343304000800002b00204d6f7274616c343404000800002c00204d6f7274616c343504000800002d00204d6f7274616c343604000800002e00204d6f7274616c343704000800002f00204d6f7274616c343804000800003000204d6f7274616c343904000800003100204d6f7274616c353004000800003200204d6f7274616c353104000800003300204d6f7274616c353204000800003400204d6f7274616c353304000800003500204d6f7274616c353404000800003600204d6f7274616c353504000800003700204d6f7274616c353604000800003800204d6f7274616c353704000800003900204d6f7274616c353804000800003a00204d6f7274616c353904000800003b00204d6f7274616c363004000800003c00204d6f7274616c363104000800003d00204d6f7274616c363204000800003e00204d6f7274616c363304000800003f00204d6f7274616c363404000800004000204d6f7274616c363504000800004100204d6f7274616c363604000800004200204d6f7274616c363704000800004300204d6f7274616c363804000800004400204d6f7274616c363904000800004500204d6f7274616c373004000800004600204d6f7274616c373104000800004700204d6f7274616c373204000800004800204d6f7274616c373304000800004900204d6f7274616c373404000800004a00204d6f7274616c373504000800004b00204d6f7274616c373604000800004c00204d6f7274616c373704000800004d00204d6f7274616c373804000800004e00204d6f7274616c373904000800004f00204d6f7274616c383004000800005000204d6f7274616c383104000800005100204d6f7274616c383204000800005200204d6f7274616c383304000800005300204d6f7274616c383404000800005400204d6f7274616c383504000800005500204d6f7274616c383604000800005600204d6f7274616c383704000800005700204d6f7274616c383804000800005800204d6f7274616c383904000800005900204d6f7274616c393004000800005a00204d6f7274616c393104000800005b00204d6f7274616c393204000800005c00204d6f7274616c393304000800005d00204d6f7274616c393404000800005e00204d6f7274616c393504000800005f00204d6f7274616c393604000800006000204d6f7274616c393704000800006100204d6f7274616c393804000800006200204d6f7274616c393904000800006300244d6f7274616c31303004000800006400244d6f7274616c31303104000800006500244d6f7274616c31303204000800006600244d6f7274616c31303304000800006700244d6f7274616c31303404000800006800244d6f7274616c31303504000800006900244d6f7274616c31303604000800006a00244d6f7274616c31303704000800006b00244d6f7274616c31303804000800006c00244d6f7274616c31303904000800006d00244d6f7274616c31313004000800006e00244d6f7274616c31313104000800006f00244d6f7274616c31313204000800007000244d6f7274616c31313304000800007100244d6f7274616c31313404000800007200244d6f7274616c31313504000800007300244d6f7274616c31313604000800007400244d6f7274616c31313704000800007500244d6f7274616c31313804000800007600244d6f7274616c31313904000800007700244d6f7274616c31323004000800007800244d6f7274616c31323104000800007900244d6f7274616c31323204000800007a00244d6f7274616c31323304000800007b00244d6f7274616c31323404000800007c00244d6f7274616c31323504000800007d00244d6f7274616c31323604000800007e00244d6f7274616c31323704000800007f00244d6f7274616c31323804000800008000244d6f7274616c31323904000800008100244d6f7274616c31333004000800008200244d6f7274616c31333104000800008300244d6f7274616c31333204000800008400244d6f7274616c31333304000800008500244d6f7274616c31333404000800008600244d6f7274616c31333504000800008700244d6f7274616c31333604000800008800244d6f7274616c31333704000800008900244d6f7274616c31333804000800008a00244d6f7274616c31333904000800008b00244d6f7274616c31343004000800008c00244d6f7274616c31343104000800008d00244d6f7274616c31343204000800008e00244d6f7274616c31343304000800008f00244d6f7274616c31343404000800009000244d6f7274616c31343504000800009100244d6f7274616c31343604000800009200244d6f7274616c31343704000800009300244d6f7274616c31343804000800009400244d6f7274616c31343904000800009500244d6f7274616c31353004000800009600244d6f7274616c31353104000800009700244d6f7274616c31353204000800009800244d6f7274616c31353304000800009900244d6f7274616c31353404000800009a00244d6f7274616c31353504000800009b00244d6f7274616c31353604000800009c00244d6f7274616c31353704000800009d00244d6f7274616c31353804000800009e00244d6f7274616c31353904000800009f00244d6f7274616c3136300400080000a000244d6f7274616c3136310400080000a100244d6f7274616c3136320400080000a200244d6f7274616c3136330400080000a300244d6f7274616c3136340400080000a400244d6f7274616c3136350400080000a500244d6f7274616c3136360400080000a600244d6f7274616c3136370400080000a700244d6f7274616c3136380400080000a800244d6f7274616c3136390400080000a900244d6f7274616c3137300400080000aa00244d6f7274616c3137310400080000ab00244d6f7274616c3137320400080000ac00244d6f7274616c3137330400080000ad00244d6f7274616c3137340400080000ae00244d6f7274616c3137350400080000af00244d6f7274616c3137360400080000b000244d6f7274616c3137370400080000b100244d6f7274616c3137380400080000b200244d6f7274616c3137390400080000b300244d6f7274616c3138300400080000b400244d6f7274616c3138310400080000b500244d6f7274616c3138320400080000b600244d6f7274616c3138330400080000b700244d6f7274616c3138340400080000b800244d6f7274616c3138350400080000b900244d6f7274616c3138360400080000ba00244d6f7274616c3138370400080000bb00244d6f7274616c3138380400080000bc00244d6f7274616c3138390400080000bd00244d6f7274616c3139300400080000be00244d6f7274616c3139310400080000bf00244d6f7274616c3139320400080000c000244d6f7274616c3139330400080000c100244d6f7274616c3139340400080000c200244d6f7274616c3139350400080000c300244d6f7274616c3139360400080000c400244d6f7274616c3139370400080000c500244d6f7274616c3139380400080000c600244d6f7274616c3139390400080000c700244d6f7274616c3230300400080000c800244d6f7274616c3230310400080000c900244d6f7274616c3230320400080000ca00244d6f7274616c3230330400080000cb00244d6f7274616c3230340400080000cc00244d6f7274616c3230350400080000cd00244d6f7274616c3230360400080000ce00244d6f7274616c3230370400080000cf00244d6f7274616c3230380400080000d000244d6f7274616c3230390400080000d100244d6f7274616c3231300400080000d200244d6f7274616c3231310400080000d300244d6f7274616c3231320400080000d400244d6f7274616c3231330400080000d500244d6f7274616c3231340400080000d600244d6f7274616c3231350400080000d700244d6f7274616c3231360400080000d800244d6f7274616c3231370400080000d900244d6f7274616c3231380400080000da00244d6f7274616c3231390400080000db00244d6f7274616c3232300400080000dc00244d6f7274616c3232310400080000dd00244d6f7274616c3232320400080000de00244d6f7274616c3232330400080000df00244d6f7274616c3232340400080000e000244d6f7274616c3232350400080000e100244d6f7274616c3232360400080000e200244d6f7274616c3232370400080000e300244d6f7274616c3232380400080000e400244d6f7274616c3232390400080000e500244d6f7274616c3233300400080000e600244d6f7274616c3233310400080000e700244d6f7274616c3233320400080000e800244d6f7274616c3233330400080000e900244d6f7274616c3233340400080000ea00244d6f7274616c3233350400080000eb00244d6f7274616c3233360400080000ec00244d6f7274616c3233370400080000ed00244d6f7274616c3233380400080000ee00244d6f7274616c3233390400080000ef00244d6f7274616c3234300400080000f000244d6f7274616c3234310400080000f100244d6f7274616c3234320400080000f200244d6f7274616c3234330400080000f300244d6f7274616c3234340400080000f400244d6f7274616c3234350400080000f500244d6f7274616c3234360400080000f600244d6f7274616c3234370400080000f700244d6f7274616c3234380400080000f800244d6f7274616c3234390400080000f900244d6f7274616c3235300400080000fa00244d6f7274616c3235310400080000fb00244d6f7274616c3235320400080000fc00244d6f7274616c3235330400080000fd00244d6f7274616c3235340400080000fe00244d6f7274616c3235350400080000ff0000490610306672616d655f73797374656d28657874656e73696f6e732c636865636b5f6e6f6e636528436865636b4e6f6e636504045400000400c5010120543a3a496e64657800004d0610306672616d655f73797374656d28657874656e73696f6e7330636865636b5f7765696768742c436865636b576569676874040454000000005106086870616c6c65745f7472616e73616374696f6e5f7061796d656e74604368617267655472616e73616374696f6e5061796d656e7404045400000400cc013042616c616e63654f663c543e00005506085c637265646974636f696e5f6e6f64655f72756e74696d651c52756e74696d6500000000641853797374656d011853797374656d401c4163636f756e7401010402000c4101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004e8205468652066756c6c206163636f756e7420696e666f726d6174696f6e20666f72206120706172746963756c6172206163636f756e742049442e3845787472696e736963436f756e74000010040004b820546f74616c2065787472696e7369637320636f756e7420666f72207468652063757272656e7420626c6f636b2e2c426c6f636b57656967687401001c180000000000000488205468652063757272656e742077656967687420666f722074686520626c6f636b2e40416c6c45787472696e736963734c656e000010040004410120546f74616c206c656e6774682028696e2062797465732920666f7220616c6c2065787472696e736963732070757420746f6765746865722c20666f72207468652063757272656e7420626c6f636b2e24426c6f636b4861736801010405102c8000000000000000000000000000000000000000000000000000000000000000000498204d6170206f6620626c6f636b206e756d6265727320746f20626c6f636b206861736865732e3445787472696e736963446174610101040510300400043d012045787472696e73696373206461746120666f72207468652063757272656e7420626c6f636b20286d61707320616e2065787472696e736963277320696e64657820746f206974732064617461292e184e756d6265720100101000000000040901205468652063757272656e7420626c6f636b206e756d626572206265696e672070726f6365737365642e205365742062792060657865637574655f626c6f636b602e28506172656e744861736801002c80000000000000000000000000000000000000000000000000000000000000000004702048617368206f66207468652070726576696f757320626c6f636b2e18446967657374010034040004f020446967657374206f66207468652063757272656e7420626c6f636b2c20616c736f2070617274206f662074686520626c6f636b206865616465722e184576656e747301004404001ca0204576656e7473206465706f736974656420666f72207468652063757272656e7420626c6f636b2e001d01204e4f54453a20546865206974656d20697320756e626f756e6420616e642073686f756c64207468657265666f7265206e657665722062652072656164206f6e20636861696e2ed020497420636f756c64206f746865727769736520696e666c6174652074686520506f562073697a65206f66206120626c6f636b2e002d01204576656e747320686176652061206c6172676520696e2d6d656d6f72792073697a652e20426f7820746865206576656e747320746f206e6f7420676f206f75742d6f662d6d656d6f7279fc206a75737420696e206361736520736f6d656f6e65207374696c6c207265616473207468656d2066726f6d2077697468696e207468652072756e74696d652e284576656e74436f756e74010010100000000004b820546865206e756d626572206f66206576656e747320696e2074686520604576656e74733c543e60206c6973742e2c4576656e74546f70696373010104022cbd010400282501204d617070696e67206265747765656e206120746f7069632028726570726573656e74656420627920543a3a486173682920616e64206120766563746f72206f6620696e646578657394206f66206576656e747320696e2074686520603c4576656e74733c543e3e60206c6973742e00510120416c6c20746f70696320766563746f727320686176652064657465726d696e69737469632073746f72616765206c6f636174696f6e7320646570656e64696e67206f6e2074686520746f7069632e2054686973450120616c6c6f7773206c696768742d636c69656e747320746f206c6576657261676520746865206368616e67657320747269652073746f7261676520747261636b696e67206d656368616e69736d20616e64e420696e2063617365206f66206368616e67657320666574636820746865206c697374206f66206576656e7473206f6620696e7465726573742e004d01205468652076616c756520686173207468652074797065206028543a3a426c6f636b4e756d6265722c204576656e74496e646578296020626563617573652069662077652075736564206f6e6c79206a7573744d012074686520604576656e74496e64657860207468656e20696e20636173652069662074686520746f70696320686173207468652073616d6520636f6e74656e7473206f6e20746865206e65787420626c6f636b0101206e6f206e6f74696669636174696f6e2077696c6c20626520747269676765726564207468757320746865206576656e74206d69676874206265206c6f73742e484c61737452756e74696d65557067726164650000c10104000455012053746f726573207468652060737065635f76657273696f6e6020616e642060737065635f6e616d6560206f66207768656e20746865206c6173742072756e74696d6520757067726164652068617070656e65642e545570677261646564546f553332526566436f756e7401008c0400044d012054727565206966207765206861766520757067726164656420736f207468617420607479706520526566436f756e74602069732060753332602e2046616c7365202864656661756c7429206966206e6f742e605570677261646564546f547269706c65526566436f756e7401008c0400085d012054727565206966207765206861766520757067726164656420736f2074686174204163636f756e74496e666f20636f6e7461696e73207468726565207479706573206f662060526566436f756e74602e2046616c736548202864656661756c7429206966206e6f742e38457865637574696f6e50686173650000b501040004882054686520657865637574696f6e207068617365206f662074686520626c6f636b2e01cd0101501830426c6f636b57656967687473dd01fd01624fd75a000b005039278c0413ffffffffffffffff02c0cd1700010b000425adf4021366666666666666a6010b00fc6a1d690313ffffffffffffffbf01000002c0cd1700010b0058f3b617041366666666666666e6010b005039278c0413ffffffffffffffff010b0054ce09230113000000000000004002c0cd170000000004d020426c6f636b20262065787472696e7369637320776569676874733a20626173652076616c75657320616e64206c696d6974732e2c426c6f636b4c656e677468ed013000003c00000050000000500004a820546865206d6178696d756d206c656e677468206f66206120626c6f636b2028696e206279746573292e38426c6f636b48617368436f756e74101060090000045501204d6178696d756d206e756d626572206f6620626c6f636b206e756d62657220746f20626c6f636b2068617368206d617070696e677320746f206b65657020286f6c64657374207072756e6564206669727374292e204462576569676874f5014000127a000000000080f0fa02000000000409012054686520776569676874206f662072756e74696d65206461746162617365206f7065726174696f6e73207468652072756e74696d652063616e20696e766f6b652e1c56657273696f6ef90139033c637265646974636f696e2d6e6f64653c637265646974636f696e2d6e6f646501000000f00000000000000034df6acb689907609b0400000037e397fc7c91f5e40100000040fe3ad401f8959a06000000d2bc9897eed08f1503000000f78b278be53f454c02000000ab3c0572291feb8b01000000bc9d89904f5b923f0100000037c8bb1350a9a2a8030000001ea173a1db199b3b010000006c7049b21e24441101000000ed99c5acb25eedf503000000cbca25e39f14238702000000426f359225537dc6010000000b000000010484204765742074686520636861696e27732063757272656e742076657273696f6e2e28535335385072656669789501082a0014a8205468652064657369676e61746564205353353820707265666978206f66207468697320636861696e2e0039012054686973207265706c6163657320746865202273733538466f726d6174222070726f7065727479206465636c6172656420696e2074686520636861696e20737065632e20526561736f6e20697331012074686174207468652072756e74696d652073686f756c64206b6e6f772061626f7574207468652070726566697820696e206f7264657220746f206d616b6520757365206f662069742061737020616e206964656e746966696572206f662074686520636861696e2e010d02002454696d657374616d70012454696d657374616d70080c4e6f7701002820000000000000000004902043757272656e742074696d6520666f72207468652063757272656e7420626c6f636b2e2444696455706461746501008c040004b420446964207468652074696d657374616d7020676574207570646174656420696e207468697320626c6f636b3f0111020004344d696e696d756d506572696f642820c409000000000000104d0120546865206d696e696d756d20706572696f64206265747765656e20626c6f636b732e204265776172652074686174207468697320697320646966666572656e7420746f20746865202a65787065637465642a5d0120706572696f6420746861742074686520626c6f636b2070726f64756374696f6e206170706172617475732070726f76696465732e20596f75722063686f73656e20636f6e73656e7375732073797374656d2077696c6c5d012067656e6572616c6c7920776f726b2077697468207468697320746f2064657465726d696e6520612073656e7369626c6520626c6f636b2074696d652e20652e672e20466f7220417572612c2069742077696c6c206265a020646f75626c65207468697320706572696f64206f6e2064656661756c742073657474696e67732e000124506f735377697463680124506f735377697463680444537769746368426c6f636b4e756d62657200001d0104000000000000021042616265011042616265442845706f6368496e64657801002820000000000000000004542043757272656e742065706f636820696e6465782e2c417574686f726974696573010015020400046c2043757272656e742065706f636820617574686f7269746965732e2c47656e65736973536c6f740100250220000000000000000008f82054686520736c6f74206174207768696368207468652066697273742065706f63682061637475616c6c7920737461727465642e205468697320697320309020756e74696c2074686520666972737420626c6f636b206f662074686520636861696e2e2c43757272656e74536c6f740100250220000000000000000004542043757272656e7420736c6f74206e756d6265722e2852616e646f6d6e65737301000480000000000000000000000000000000000000000000000000000000000000000028b8205468652065706f63682072616e646f6d6e65737320666f7220746865202a63757272656e742a2065706f63682e002c20232053656375726974790005012054686973204d555354204e4f54206265207573656420666f722067616d626c696e672c2061732069742063616e20626520696e666c75656e6365642062792061f8206d616c6963696f75732076616c696461746f7220696e207468652073686f7274207465726d2e204974204d4159206265207573656420696e206d616e7915012063727970746f677261706869632070726f746f636f6c732c20686f77657665722c20736f206c6f6e67206173206f6e652072656d656d6265727320746861742074686973150120286c696b652065766572797468696e6720656c7365206f6e2d636861696e29206974206973207075626c69632e20466f72206578616d706c652c2069742063616e206265050120757365642077686572652061206e756d626572206973206e656564656420746861742063616e6e6f742068617665206265656e2063686f73656e20627920616e0d01206164766572736172792c20666f7220707572706f7365732073756368206173207075626c69632d636f696e207a65726f2d6b6e6f776c656467652070726f6f66732e6050656e64696e6745706f6368436f6e6669674368616e67650000290204000461012050656e64696e672065706f636820636f6e66696775726174696f6e206368616e676520746861742077696c6c206265206170706c696564207768656e20746865206e6578742065706f636820697320656e61637465642e384e65787452616e646f6d6e657373010004800000000000000000000000000000000000000000000000000000000000000000045c204e6578742065706f63682072616e646f6d6e6573732e3c4e657874417574686f7269746965730100150204000460204e6578742065706f636820617574686f7269746965732e305365676d656e74496e6465780100101000000000247c2052616e646f6d6e65737320756e64657220636f6e737472756374696f6e2e00f8205765206d616b6520612074726164652d6f6666206265747765656e2073746f7261676520616363657373657320616e64206c697374206c656e6774682e01012057652073746f72652074686520756e6465722d636f6e737472756374696f6e2072616e646f6d6e65737320696e207365676d656e7473206f6620757020746f942060554e4445525f434f4e535452554354494f4e5f5345474d454e545f4c454e475448602e00ec204f6e63652061207365676d656e7420726561636865732074686973206c656e6774682c20776520626567696e20746865206e657874206f6e652e090120576520726573657420616c6c207365676d656e747320616e642072657475726e20746f206030602061742074686520626567696e6e696e67206f662065766572791c2065706f63682e44556e646572436f6e737472756374696f6e0101040510350204000415012054574f582d4e4f54453a20605365676d656e74496e6465786020697320616e20696e6372656173696e6720696e74656765722c20736f2074686973206973206f6b61792e2c496e697469616c697a656400003d0204000801012054656d706f726172792076616c75652028636c656172656420617420626c6f636b2066696e616c697a6174696f6e292077686963682069732060536f6d65601d01206966207065722d626c6f636b20696e697469616c697a6174696f6e2068617320616c7265616479206265656e2063616c6c656420666f722063757272656e7420626c6f636b2e4c417574686f7256726652616e646f6d6e6573730100810104001015012054686973206669656c642073686f756c6420616c7761797320626520706f70756c6174656420647572696e6720626c6f636b2070726f63657373696e6720756e6c6573731901207365636f6e6461727920706c61696e20736c6f74732061726520656e61626c65642028776869636820646f6e277420636f6e7461696e206120565246206f7574707574292e0049012049742069732073657420696e20606f6e5f66696e616c697a65602c206265666f72652069742077696c6c20636f6e7461696e207468652076616c75652066726f6d20746865206c61737420626c6f636b2e2845706f6368537461727401007d01200000000000000000145d012054686520626c6f636b206e756d62657273207768656e20746865206c61737420616e642063757272656e742065706f6368206861766520737461727465642c20726573706563746976656c7920604e2d316020616e641420604e602e4901204e4f54453a20576520747261636b207468697320697320696e206f7264657220746f20616e6e6f746174652074686520626c6f636b206e756d626572207768656e206120676976656e20706f6f6c206f66590120656e74726f7079207761732066697865642028692e652e20697420776173206b6e6f776e20746f20636861696e206f6273657276657273292e2053696e63652065706f6368732061726520646566696e656420696e590120736c6f74732c207768696368206d617920626520736b69707065642c2074686520626c6f636b206e756d62657273206d6179206e6f74206c696e6520757020776974682074686520736c6f74206e756d626572732e204c6174656e657373010010100000000014d820486f77206c617465207468652063757272656e7420626c6f636b20697320636f6d706172656420746f2069747320706172656e742e001501205468697320656e74727920697320706f70756c617465642061732070617274206f6620626c6f636b20657865637574696f6e20616e6420697320636c65616e65642075701101206f6e20626c6f636b2066696e616c697a6174696f6e2e205175657279696e6720746869732073746f7261676520656e747279206f757473696465206f6620626c6f636bb020657865637574696f6e20636f6e746578742073686f756c6420616c77617973207969656c64207a65726f2e2c45706f6368436f6e6669670000550204000861012054686520636f6e66696775726174696f6e20666f72207468652063757272656e742065706f63682e2053686f756c64206e6576657220626520604e6f6e656020617320697420697320696e697469616c697a656420696e242067656e657369732e3c4e65787445706f6368436f6e666967000055020400082d012054686520636f6e66696775726174696f6e20666f7220746865206e6578742065706f63682c20604e6f6e65602069662074686520636f6e6669672077696c6c206e6f74206368616e6765e82028796f752063616e2066616c6c6261636b20746f206045706f6368436f6e6669676020696e737465616420696e20746861742063617365292e34536b697070656445706f6368730100590204002029012041206c697374206f6620746865206c6173742031303020736b69707065642065706f63687320616e642074686520636f72726573706f6e64696e672073657373696f6e20696e64657870207768656e207468652065706f63682077617320736b69707065642e0031012054686973206973206f6e6c79207573656420666f722076616c69646174696e672065717569766f636174696f6e2070726f6f66732e20416e2065717569766f636174696f6e2070726f6f663501206d75737420636f6e7461696e732061206b65792d6f776e6572736869702070726f6f6620666f72206120676976656e2073657373696f6e2c207468657265666f7265207765206e656564206139012077617920746f2074696520746f6765746865722073657373696f6e7320616e642065706f636820696e64696365732c20692e652e207765206e65656420746f2076616c69646174652074686174290120612076616c696461746f722077617320746865206f776e6572206f66206120676976656e206b6579206f6e206120676976656e2073657373696f6e2c20616e64207768617420746865b0206163746976652065706f636820696e6465782077617320647572696e6720746861742073657373696f6e2e016502000c3445706f63684475726174696f6e28200f000000000000000cec2054686520616d6f756e74206f662074696d652c20696e20736c6f74732c207468617420656163682065706f63682073686f756c64206c6173742e1901204e4f54453a2043757272656e746c79206974206973206e6f7420706f737369626c6520746f206368616e6765207468652065706f6368206475726174696f6e20616674657221012074686520636861696e2068617320737461727465642e20417474656d7074696e6720746f20646f20736f2077696c6c20627269636b20626c6f636b2070726f64756374696f6e2e444578706563746564426c6f636b54696d652820881300000000000014050120546865206578706563746564206176657261676520626c6f636b2074696d6520617420776869636820424142452073686f756c64206265206372656174696e67110120626c6f636b732e2053696e636520424142452069732070726f626162696c6973746963206974206973206e6f74207472697669616c20746f20666967757265206f75740501207768617420746865206578706563746564206176657261676520626c6f636b2074696d652073686f756c64206265206261736564206f6e2074686520736c6f740901206475726174696f6e20616e642074686520736563757269747920706172616d657465722060636020287768657265206031202d20636020726570726573656e7473a0207468652070726f626162696c697479206f66206120736c6f74206265696e6720656d707479292e384d6178417574686f7269746965731010a08601000488204d6178206e756d626572206f6620617574686f72697469657320616c6c6f776564017902032042616c616e636573012042616c616e6365731434546f74616c49737375616e6365010018400000000000000000000000000000000004982054686520746f74616c20756e6974732069737375656420696e207468652073797374656d2e40496e61637469766549737375616e636501001840000000000000000000000000000000000409012054686520746f74616c20756e697473206f66206f75747374616e64696e672064656163746976617465642062616c616e636520696e207468652073797374656d2e1c4163636f756e74010104020014010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600901205468652042616c616e6365732070616c6c6574206578616d706c65206f662073746f72696e67207468652062616c616e6365206f6620616e206163636f756e742e00282023204578616d706c650034206060606e6f636f6d70696c65b02020696d706c2070616c6c65745f62616c616e6365733a3a436f6e66696720666f722052756e74696d65207b19022020202074797065204163636f756e7453746f7265203d2053746f726167654d61705368696d3c53656c663a3a4163636f756e743c52756e74696d653e2c206672616d655f73797374656d3a3a50726f76696465723c52756e74696d653e2c204163636f756e7449642c2053656c663a3a4163636f756e74446174613c42616c616e63653e3e0c20207d102060606000150120596f752063616e20616c736f2073746f7265207468652062616c616e6365206f6620616e206163636f756e7420696e20746865206053797374656d602070616c6c65742e00282023204578616d706c650034206060606e6f636f6d70696c65b02020696d706c2070616c6c65745f62616c616e6365733a3a436f6e66696720666f722052756e74696d65207b7420202074797065204163636f756e7453746f7265203d2053797374656d0c20207d102060606000510120427574207468697320636f6d657320776974682074726164656f6666732c2073746f72696e67206163636f756e742062616c616e63657320696e207468652073797374656d2070616c6c65742073746f7265736d0120606672616d655f73797374656d60206461746120616c6f6e677369646520746865206163636f756e74206461746120636f6e747261727920746f2073746f72696e67206163636f756e742062616c616e63657320696e207468652901206042616c616e636573602070616c6c65742c20776869636820757365732061206053746f726167654d61706020746f2073746f72652062616c616e6365732064617461206f6e6c792e4101204e4f54453a2054686973206973206f6e6c79207573656420696e207468652063617365207468617420746869732070616c6c6574206973207573656420746f2073746f72652062616c616e6365732e144c6f636b7301010402007d02040008b820416e79206c6971756964697479206c6f636b73206f6e20736f6d65206163636f756e742062616c616e6365732e2501204e4f54453a2053686f756c64206f6e6c79206265206163636573736564207768656e2073657474696e672c206368616e67696e6720616e642066726565696e672061206c6f636b2e20526573657276657301010402008d02040004a4204e616d6564207265736572766573206f6e20736f6d65206163636f756e742062616c616e6365732e01990201740c484578697374656e7469616c4465706f7369741840f401000000000000000000000000000004d420546865206d696e696d756d20616d6f756e7420726571756972656420746f206b65657020616e206163636f756e74206f70656e2e204d61784c6f636b7310103200000008f420546865206d6178696d756d206e756d626572206f66206c6f636b7320746861742073686f756c64206578697374206f6e20616e206163636f756e742edc204e6f74207374726963746c7920656e666f726365642c20627574207573656420666f722077656967687420657374696d6174696f6e2e2c4d61785265736572766573101000000000040d0120546865206d6178696d756d206e756d626572206f66206e616d656420726573657276657320746861742063616e206578697374206f6e20616e206163636f756e742e01a9020428417574686f72736869700128417574686f72736869700418417574686f720000000400046420417574686f72206f662063757272656e7420626c6f636b2e00000000051c5374616b696e67011c5374616b696e67943856616c696461746f72436f756e740100101000000000049c2054686520696465616c206e756d626572206f66206163746976652076616c696461746f72732e544d696e696d756d56616c696461746f72436f756e740100101000000000044101204d696e696d756d206e756d626572206f66207374616b696e67207061727469636970616e7473206265666f726520656d657267656e637920636f6e646974696f6e732061726520696d706f7365642e34496e76756c6e657261626c65730100ad0204000c590120416e792076616c696461746f72732074686174206d6179206e6576657220626520736c6173686564206f7220666f726369626c79206b69636b65642e20497427732061205665632073696e636520746865792772654d01206561737920746f20696e697469616c697a6520616e642074686520706572666f726d616e636520686974206973206d696e696d616c2028776520657870656374206e6f206d6f7265207468616e20666f7572ac20696e76756c6e657261626c65732920616e64207265737472696374656420746f20746573746e6574732e18426f6e64656400010405000004000c0101204d61702066726f6d20616c6c206c6f636b65642022737461736822206163636f756e747320746f2074686520636f6e74726f6c6c6572206163636f756e742e00d02054574f582d4e4f54453a20534146452073696e636520604163636f756e7449646020697320612073656375726520686173682e404d696e4e6f6d696e61746f72426f6e64010018400000000000000000000000000000000004210120546865206d696e696d756d2061637469766520626f6e6420746f206265636f6d6520616e64206d61696e7461696e2074686520726f6c65206f662061206e6f6d696e61746f722e404d696e56616c696461746f72426f6e64010018400000000000000000000000000000000004210120546865206d696e696d756d2061637469766520626f6e6420746f206265636f6d6520616e64206d61696e7461696e2074686520726f6c65206f6620612076616c696461746f722e484d696e696d756d4163746976655374616b65010018400000000000000000000000000000000004110120546865206d696e696d756d20616374697665206e6f6d696e61746f72207374616b65206f6620746865206c617374207375636365737366756c20656c656374696f6e2e344d696e436f6d6d697373696f6e01008010000000000ce820546865206d696e696d756d20616d6f756e74206f6620636f6d6d697373696f6e20746861742076616c696461746f72732063616e207365742e00802049662073657420746f206030602c206e6f206c696d6974206578697374732e184c65646765720001040200b1020400044501204d61702066726f6d20616c6c2028756e6c6f636b6564292022636f6e74726f6c6c657222206163636f756e747320746f2074686520696e666f20726567617264696e6720746865207374616b696e672e1450617965650101040500c50204000ce42057686572652074686520726577617264207061796d656e742073686f756c64206265206d6164652e204b657965642062792073746173682e00d02054574f582d4e4f54453a20534146452073696e636520604163636f756e7449646020697320612073656375726520686173682e2856616c696461746f72730101040500840800000c450120546865206d61702066726f6d202877616e6e616265292076616c696461746f72207374617368206b657920746f2074686520707265666572656e636573206f6620746861742076616c696461746f722e00d02054574f582d4e4f54453a20534146452073696e636520604163636f756e7449646020697320612073656375726520686173682e50436f756e746572466f7256616c696461746f7273010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d6170484d617856616c696461746f7273436f756e7400001004000c310120546865206d6178696d756d2076616c696461746f7220636f756e74206265666f72652077652073746f7020616c6c6f77696e67206e65772076616c696461746f727320746f206a6f696e2e00d0205768656e20746869732076616c7565206973206e6f74207365742c206e6f206c696d6974732061726520656e666f726365642e284e6f6d696e61746f72730001040500c902040048750120546865206d61702066726f6d206e6f6d696e61746f72207374617368206b657920746f207468656972206e6f6d696e6174696f6e20707265666572656e6365732c206e616d656c79207468652076616c696461746f72732074686174582074686579207769736820746f20737570706f72742e003901204e6f7465207468617420746865206b657973206f6620746869732073746f72616765206d6170206d69676874206265636f6d65206e6f6e2d6465636f6461626c6520696e2063617365207468656d01205b60436f6e6669673a3a4d61784e6f6d696e6174696f6e73605d20636f6e66696775726174696f6e206973206465637265617365642e20496e2074686973207261726520636173652c207468657365206e6f6d696e61746f7273650120617265207374696c6c206578697374656e7420696e2073746f726167652c207468656972206b657920697320636f727265637420616e64207265747269657661626c652028692e652e2060636f6e7461696e735f6b657960710120696e6469636174657320746861742074686579206578697374292c206275742074686569722076616c75652063616e6e6f74206265206465636f6465642e205468657265666f72652c20746865206e6f6e2d6465636f6461626c656d01206e6f6d696e61746f72732077696c6c206566666563746976656c79206e6f742d65786973742c20756e74696c20746865792072652d7375626d697420746865697220707265666572656e6365732073756368207468617420697401012069732077697468696e2074686520626f756e6473206f6620746865206e65776c79207365742060436f6e6669673a3a4d61784e6f6d696e6174696f6e73602e006101205468697320696d706c696573207468617420603a3a697465725f6b65797328292e636f756e7428296020616e6420603a3a6974657228292e636f756e74282960206d696768742072657475726e20646966666572656e746d012076616c75657320666f722074686973206d61702e204d6f72656f7665722c20746865206d61696e20603a3a636f756e7428296020697320616c69676e656420776974682074686520666f726d65722c206e616d656c79207468656c206e756d626572206f66206b65797320746861742065786973742e006d01204c6173746c792c20696620616e79206f6620746865206e6f6d696e61746f7273206265636f6d65206e6f6e2d6465636f6461626c652c20746865792063616e206265206368696c6c656420696d6d6564696174656c7920766961b8205b6043616c6c3a3a6368696c6c5f6f74686572605d20646973706174636861626c6520627920616e796f6e652e00d02054574f582d4e4f54453a20534146452073696e636520604163636f756e7449646020697320612073656375726520686173682e50436f756e746572466f724e6f6d696e61746f7273010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d6170484d61784e6f6d696e61746f7273436f756e7400001004000c310120546865206d6178696d756d206e6f6d696e61746f7220636f756e74206265666f72652077652073746f7020616c6c6f77696e67206e65772076616c696461746f727320746f206a6f696e2e00d0205768656e20746869732076616c7565206973206e6f74207365742c206e6f206c696d6974732061726520656e666f726365642e2843757272656e744572610000100400105c205468652063757272656e742065726120696e6465782e006501205468697320697320746865206c617465737420706c616e6e6564206572612c20646570656e64696e67206f6e20686f77207468652053657373696f6e2070616c6c657420717565756573207468652076616c696461746f7280207365742c206974206d6967687420626520616374697665206f72206e6f742e244163746976654572610000d102040010d820546865206163746976652065726120696e666f726d6174696f6e2c20697420686f6c647320696e64657820616e642073746172742e0059012054686520616374697665206572612069732074686520657261206265696e672063757272656e746c792072657761726465642e2056616c696461746f7220736574206f66207468697320657261206d757374206265ac20657175616c20746f205b6053657373696f6e496e746572666163653a3a76616c696461746f7273605d2e5445726173537461727453657373696f6e496e6465780001040510100400103101205468652073657373696f6e20696e646578206174207768696368207468652065726120737461727420666f7220746865206c6173742060484953544f52595f44455054486020657261732e006101204e6f74653a205468697320747261636b7320746865207374617274696e672073657373696f6e2028692e652e2073657373696f6e20696e646578207768656e20657261207374617274206265696e672061637469766529f020666f7220746865206572617320696e20605b43757272656e74457261202d20484953544f52595f44455054482c2043757272656e744572615d602e2c457261735374616b6572730101080505d502c80c0000001878204578706f73757265206f662076616c696461746f72206174206572612e0061012054686973206973206b65796564206669727374206279207468652065726120696e64657820746f20616c6c6f772062756c6b2064656c6574696f6e20616e64207468656e20746865207374617368206163636f756e742e00a82049732069742072656d6f7665642061667465722060484953544f52595f44455054486020657261732e4101204966207374616b657273206861736e2774206265656e20736574206f7220686173206265656e2072656d6f766564207468656e20656d707479206578706f737572652069732072657475726e65642e48457261735374616b657273436c69707065640101080505d502c80c0000002c9820436c6970706564204578706f73757265206f662076616c696461746f72206174206572612e00590120546869732069732073696d696c617220746f205b60457261735374616b657273605d20627574206e756d626572206f66206e6f6d696e61746f7273206578706f736564206973207265647563656420746f20746865dc2060543a3a4d61784e6f6d696e61746f72526577617264656450657256616c696461746f72602062696767657374207374616b6572732e1d0120284e6f74653a20746865206669656c642060746f74616c6020616e6420606f776e60206f6620746865206578706f737572652072656d61696e7320756e6368616e676564292ef42054686973206973207573656420746f206c696d69742074686520692f6f20636f737420666f7220746865206e6f6d696e61746f72207061796f75742e005d012054686973206973206b657965642066697374206279207468652065726120696e64657820746f20616c6c6f772062756c6b2064656c6574696f6e20616e64207468656e20746865207374617368206163636f756e742e00a82049732069742072656d6f7665642061667465722060484953544f52595f44455054486020657261732e4101204966207374616b657273206861736e2774206265656e20736574206f7220686173206265656e2072656d6f766564207468656e20656d707479206578706f737572652069732072657475726e65642e484572617356616c696461746f7250726566730101080505d502840800001411012053696d696c617220746f2060457261735374616b657273602c207468697320686f6c64732074686520707265666572656e636573206f662076616c696461746f72732e0061012054686973206973206b65796564206669727374206279207468652065726120696e64657820746f20616c6c6f772062756c6b2064656c6574696f6e20616e64207468656e20746865207374617368206163636f756e742e00a82049732069742072656d6f7665642061667465722060484953544f52595f44455054486020657261732e4c4572617356616c696461746f7252657761726400010405101804000c09012054686520746f74616c2076616c696461746f7220657261207061796f757420666f7220746865206c6173742060484953544f52595f44455054486020657261732e0021012045726173207468617420686176656e27742066696e697368656420796574206f7220686173206265656e2072656d6f76656420646f65736e27742068617665207265776172642e4045726173526577617264506f696e74730101040510d90214000000000008ac205265776172647320666f7220746865206c6173742060484953544f52595f44455054486020657261732e250120496620726577617264206861736e2774206265656e20736574206f7220686173206265656e2072656d6f766564207468656e2030207265776172642069732072657475726e65642e3845726173546f74616c5374616b65010104051018400000000000000000000000000000000008ec2054686520746f74616c20616d6f756e74207374616b656420666f7220746865206c6173742060484953544f52595f44455054486020657261732e1d0120496620746f74616c206861736e2774206265656e20736574206f7220686173206265656e2072656d6f766564207468656e2030207374616b652069732072657475726e65642e20466f72636545726101009004000454204d6f6465206f662065726120666f7263696e672e4c536c6173685265776172644672616374696f6e01008010000000000cf8205468652070657263656e74616765206f662074686520736c617368207468617420697320646973747269627574656420746f207265706f72746572732e00e4205468652072657374206f662074686520736c61736865642076616c75652069732068616e646c6564206279207468652060536c617368602e4c43616e63656c6564536c6173685061796f757401001840000000000000000000000000000000000815012054686520616d6f756e74206f662063757272656e637920676976656e20746f207265706f7274657273206f66206120736c617368206576656e7420776869636820776173ec2063616e63656c65642062792065787472616f7264696e6172792063697263756d7374616e6365732028652e672e20676f7665726e616e6365292e40556e6170706c696564536c61736865730101040510e902040004c420416c6c20756e6170706c69656420736c61736865732074686174206172652071756575656420666f72206c617465722e28426f6e646564457261730100bd0104001025012041206d617070696e672066726f6d207374696c6c2d626f6e646564206572617320746f207468652066697273742073657373696f6e20696e646578206f662074686174206572612e00c8204d75737420636f6e7461696e7320696e666f726d6174696f6e20666f72206572617320666f72207468652072616e67653abc20605b6163746976655f657261202d20626f756e64696e675f6475726174696f6e3b206163746976655f6572615d604c56616c696461746f72536c617368496e4572610001080505d502f902040008450120416c6c20736c617368696e67206576656e7473206f6e2076616c696461746f72732c206d61707065642062792065726120746f20746865206869676865737420736c6173682070726f706f7274696f6e7020616e6420736c6173682076616c7565206f6620746865206572612e4c4e6f6d696e61746f72536c617368496e4572610001080505d50218040004610120416c6c20736c617368696e67206576656e7473206f6e206e6f6d696e61746f72732c206d61707065642062792065726120746f20746865206869676865737420736c6173682076616c7565206f6620746865206572612e34536c617368696e675370616e730001040500fd020400048c20536c617368696e67207370616e7320666f72207374617368206163636f756e74732e245370616e536c61736801010405e5020103800000000000000000000000000000000000000000000000000000000000000000083d01205265636f72647320696e666f726d6174696f6e2061626f757420746865206d6178696d756d20736c617368206f6620612073746173682077697468696e206120736c617368696e67207370616e2cb82061732077656c6c20617320686f77206d7563682072657761726420686173206265656e2070616964206f75742e5443757272656e74506c616e6e656453657373696f6e01001010000000000ce820546865206c61737420706c616e6e65642073657373696f6e207363686564756c6564206279207468652073657373696f6e2070616c6c65742e0071012054686973206973206261736963616c6c7920696e2073796e632077697468207468652063616c6c20746f205b6070616c6c65745f73657373696f6e3a3a53657373696f6e4d616e616765723a3a6e65775f73657373696f6e605d2e4c4f6666656e64696e6756616c696461746f727301000503040024690120496e6469636573206f662076616c696461746f727320746861742068617665206f6666656e64656420696e20746865206163746976652065726120616e6420776865746865722074686579206172652063757272656e746c79282064697361626c65642e00690120546869732076616c75652073686f756c642062652061207375706572736574206f662064697361626c65642076616c696461746f72732073696e6365206e6f7420616c6c206f6666656e636573206c65616420746f2074686571012076616c696461746f72206265696e672064697361626c65642028696620746865726520776173206e6f20736c617368292e2054686973206973206e656564656420746f20747261636b207468652070657263656e74616765206f6649012076616c696461746f727320746861742068617665206f6666656e64656420696e207468652063757272656e74206572612c20656e737572696e672061206e65772065726120697320666f72636564206966750120604f6666656e64696e6756616c696461746f72735468726573686f6c646020697320726561636865642e205468652076656320697320616c77617973206b65707420736f7274656420736f20746861742077652063616e2066696e6471012077686574686572206120676976656e2076616c696461746f72206861732070726576696f75736c79206f6666656e646564207573696e672062696e617279207365617263682e204974206765747320636c6561726564207768656e38207468652065726120656e64732e384368696c6c5468726573686f6c6400000d0304000c510120546865207468726573686f6c6420666f72207768656e2075736572732063616e2073746172742063616c6c696e6720606368696c6c5f6f746865726020666f72206f746865722076616c696461746f7273202f5901206e6f6d696e61746f72732e20546865207468726573686f6c6420697320636f6d706172656420746f207468652061637475616c206e756d626572206f662076616c696461746f7273202f206e6f6d696e61746f72732901202860436f756e74466f722a602920696e207468652073797374656d20636f6d706172656420746f2074686520636f6e66696775726564206d61782028604d61782a436f756e7460292e011103017c1c384d61784e6f6d696e6174696f6e731010e803000004b4204d6178696d756d206e756d626572206f66206e6f6d696e6174696f6e7320706572206e6f6d696e61746f722e30486973746f72794465707468101054000000508c204e756d626572206f66206572617320746f206b65657020696e20686973746f72792e00e820466f6c6c6f77696e6720696e666f726d6174696f6e206973206b65707420666f72206572617320696e20605b63757272656e745f657261202d090120486973746f727944657074682c2063757272656e745f6572615d603a2060457261735374616b657273602c2060457261735374616b657273436c6970706564602c050120604572617356616c696461746f725072656673602c20604572617356616c696461746f72526577617264602c206045726173526577617264506f696e7473602cac206045726173546f74616c5374616b65602c206045726173537461727453657373696f6e496e646578602c8420605374616b696e674c65646765722e636c61696d65645f72657761726473602e00e4204d757374206265206d6f7265207468616e20746865206e756d626572206f6620657261732064656c617965642062792073657373696f6e2ef820492e652e2061637469766520657261206d75737420616c7761797320626520696e20686973746f72792e20492e652e20606163746976655f657261203ec42063757272656e745f657261202d20686973746f72795f646570746860206d7573742062652067756172616e746565642e001101204966206d6967726174696e6720616e206578697374696e672070616c6c65742066726f6d2073746f726167652076616c756520746f20636f6e6669672076616c75652cec20746869732073686f756c642062652073657420746f2073616d652076616c7565206f72206772656174657220617320696e2073746f726167652e001501204e6f74653a2060486973746f727944657074686020697320757365642061732074686520757070657220626f756e6420666f72207468652060426f756e646564566563601101206974656d20605374616b696e674c65646765722e636c61696d65645f72657761726473602e2053657474696e6720746869732076616c7565206c6f776572207468616ed820746865206578697374696e672076616c75652063616e206c65616420746f20696e636f6e73697374656e6369657320696e20746865150120605374616b696e674c65646765726020616e642077696c6c206e65656420746f2062652068616e646c65642070726f7065726c7920696e2061206d6967726174696f6e2ef020546865207465737420607265647563696e675f686973746f72795f64657074685f616272757074602073686f77732074686973206566666563742e3853657373696f6e735065724572611010020000000470204e756d626572206f662073657373696f6e7320706572206572612e3c426f6e64696e674475726174696f6e10100700000004e4204e756d626572206f6620657261732074686174207374616b65642066756e6473206d7573742072656d61696e20626f6e64656420666f722e48536c61736844656665724475726174696f6e101006000000100101204e756d626572206f662065726173207468617420736c6173686573206172652064656665727265642062792c20616674657220636f6d7075746174696f6e2e000d0120546869732073686f756c64206265206c657373207468616e2074686520626f6e64696e67206475726174696f6e2e2053657420746f203020696620736c617368657315012073686f756c64206265206170706c69656420696d6d6564696174656c792c20776974686f7574206f70706f7274756e69747920666f7220696e74657276656e74696f6e2e804d61784e6f6d696e61746f72526577617264656450657256616c696461746f7210100002000010f820546865206d6178696d756d206e756d626572206f66206e6f6d696e61746f727320726577617264656420666f7220656163682076616c696461746f722e00510120466f7220656163682076616c696461746f72206f6e6c79207468652060244d61784e6f6d696e61746f72526577617264656450657256616c696461746f72602062696767657374207374616b6572732063616e390120636c61696d207468656972207265776172642e2054686973207573656420746f206c696d69742074686520692f6f20636f737420666f7220746865206e6f6d696e61746f72207061796f75742e484d6178556e6c6f636b696e674368756e6b7310102000000028050120546865206d6178696d756d206e756d626572206f662060756e6c6f636b696e6760206368756e6b732061205b605374616b696e674c6564676572605d2063616e090120686176652e204566666563746976656c792064657465726d696e657320686f77206d616e7920756e6971756520657261732061207374616b6572206d61792062653820756e626f6e64696e6720696e2e00f8204e6f74653a20604d6178556e6c6f636b696e674368756e6b736020697320757365642061732074686520757070657220626f756e6420666f722074686501012060426f756e64656456656360206974656d20605374616b696e674c65646765722e756e6c6f636b696e67602e2053657474696e6720746869732076616c75650501206c6f776572207468616e20746865206578697374696e672076616c75652063616e206c65616420746f20696e636f6e73697374656e6369657320696e20746865090120605374616b696e674c65646765726020616e642077696c6c206e65656420746f2062652068616e646c65642070726f7065726c7920696e20612072756e74696d650501206d6967726174696f6e2e20546865207465737420607265647563696e675f6d61785f756e6c6f636b696e675f6368756e6b735f616272757074602073686f7773342074686973206566666563742e01290306204f6666656e63657301204f6666656e6365730c1c5265706f727473000104052c2d03040004490120546865207072696d61727920737472756374757265207468617420686f6c647320616c6c206f6666656e6365207265636f726473206b65796564206279207265706f7274206964656e746966696572732e58436f6e63757272656e745265706f727473496e64657801010805053103b9010400042901204120766563746f72206f66207265706f727473206f66207468652073616d65206b696e6420746861742068617070656e6564206174207468652073616d652074696d6520736c6f742e485265706f72747342794b696e64496e646578010104059830040018110120456e756d65726174657320616c6c207265706f727473206f662061206b696e6420616c6f6e672077697468207468652074696d6520746865792068617070656e65642e00bc20416c6c207265706f7274732061726520736f72746564206279207468652074696d65206f66206f6666656e63652e004901204e6f74652074686174207468652061637475616c2074797065206f662074686973206d617070696e6720697320605665633c75383e602c207468697320697320626563617573652076616c756573206f66690120646966666572656e7420747970657320617265206e6f7420737570706f7274656420617420746865206d6f6d656e7420736f2077652061726520646f696e6720746865206d616e75616c2073657269616c697a6174696f6e2e00019400000728486973746f726963616c0128486973746f726963616c0848486973746f726963616c53657373696f6e73000104051035030400045d01204d617070696e672066726f6d20686973746f726963616c2073657373696f6e20696e646963657320746f2073657373696f6e2d6461746120726f6f74206861736820616e642076616c696461746f7220636f756e742e2c53746f72656452616e676500007d01040004e4205468652072616e6765206f6620686973746f726963616c2073657373696f6e732077652073746f72652e205b66697273742c206c6173742900000000081c53657373696f6e011c53657373696f6e1c2856616c696461746f72730100ad020400047c205468652063757272656e7420736574206f662076616c696461746f72732e3043757272656e74496e646578010010100000000004782043757272656e7420696e646578206f66207468652073657373696f6e2e345175657565644368616e67656401008c040008390120547275652069662074686520756e6465726c79696e672065636f6e6f6d6963206964656e746974696573206f7220776569676874696e6720626568696e64207468652076616c696461746f7273a420686173206368616e67656420696e20746865207175657565642076616c696461746f72207365742e285175657565644b657973010039030400083d012054686520717565756564206b65797320666f7220746865206e6578742073657373696f6e2e205768656e20746865206e6578742073657373696f6e20626567696e732c207468657365206b657973e02077696c6c206265207573656420746f2064657465726d696e65207468652076616c696461746f7227732073657373696f6e206b6579732e4844697361626c656456616c696461746f727301009d010400148020496e6469636573206f662064697361626c65642076616c696461746f72732e003d01205468652076656320697320616c77617973206b65707420736f7274656420736f20746861742077652063616e2066696e642077686574686572206120676976656e2076616c696461746f722069733d012064697361626c6564207573696e672062696e617279207365617263682e204974206765747320636c6561726564207768656e20606f6e5f73657373696f6e5f656e64696e67602072657475726e73642061206e657720736574206f66206964656e7469746965732e204e6578744b657973000104050041030400049c20546865206e6578742073657373696f6e206b65797320666f7220612076616c696461746f722e204b65794f776e657200010405450300040004090120546865206f776e6572206f662061206b65792e20546865206b65792069732074686520604b657954797065496460202b2074686520656e636f646564206b65792e014d03019c00015103091c4772616e647061011c4772616e647061181453746174650100550304000490205374617465206f66207468652063757272656e7420617574686f72697479207365742e3450656e64696e674368616e676500005903040004c42050656e64696e67206368616e67653a20287369676e616c65642061742c207363686564756c6564206368616e6765292e284e657874466f72636564000010040004bc206e65787420626c6f636b206e756d6265722077686572652077652063616e20666f7263652061206368616e67652e1c5374616c6c656400007d010400049020607472756560206966207765206172652063757272656e746c79207374616c6c65642e3043757272656e745365744964010028200000000000000000085d0120546865206e756d626572206f66206368616e6765732028626f746820696e207465726d73206f66206b65797320616e6420756e6465726c79696e672065636f6e6f6d696320726573706f6e736962696c697469657329c420696e20746865202273657422206f66204772616e6470612076616c696461746f72732066726f6d2067656e657369732e30536574496453657373696f6e00010405281004002859012041206d617070696e672066726f6d206772616e6470612073657420494420746f2074686520696e646578206f6620746865202a6d6f737420726563656e742a2073657373696f6e20666f722077686963682069747368206d656d62657273207765726520726573706f6e7369626c652e0045012054686973206973206f6e6c79207573656420666f722076616c69646174696e672065717569766f636174696f6e2070726f6f66732e20416e2065717569766f636174696f6e2070726f6f66206d7573744d0120636f6e7461696e732061206b65792d6f776e6572736869702070726f6f6620666f72206120676976656e2073657373696f6e2c207468657265666f7265207765206e65656420612077617920746f20746965450120746f6765746865722073657373696f6e7320616e64204752414e44504120736574206964732c20692e652e207765206e65656420746f2076616c6964617465207468617420612076616c696461746f7241012077617320746865206f776e6572206f66206120676976656e206b6579206f6e206120676976656e2073657373696f6e2c20616e642077686174207468652061637469766520736574204944207761735420647572696e6720746861742073657373696f6e2e00b82054574f582d4e4f54453a2060536574496460206973206e6f7420756e646572207573657220636f6e74726f6c2e01610301a008384d6178417574686f7269746965731010a0860100045c204d617820417574686f72697469657320696e20757365584d6178536574496453657373696f6e456e74726965732820000000000000000018390120546865206d6178696d756d206e756d626572206f6620656e747269657320746f206b65657020696e207468652073657420696420746f2073657373696f6e20696e646578206d617070696e672e0031012053696e6365207468652060536574496453657373696f6e60206d6170206973206f6e6c79207573656420666f722076616c69646174696e672065717569766f636174696f6e73207468697329012076616c75652073686f756c642072656c61746520746f2074686520626f6e64696e67206475726174696f6e206f66207768617465766572207374616b696e672073797374656d2069733501206265696e6720757365642028696620616e79292e2049662065717569766f636174696f6e2068616e646c696e67206973206e6f7420656e61626c6564207468656e20746869732076616c7565342063616e206265207a65726f2e018d030a20496d4f6e6c696e650120496d4f6e6c696e651038486561727462656174416674657201001010000000002c1d012054686520626c6f636b206e756d6265722061667465722077686963682069742773206f6b20746f2073656e64206865617274626561747320696e207468652063757272656e74242073657373696f6e2e0025012041742074686520626567696e6e696e67206f6620656163682073657373696f6e20776520736574207468697320746f20612076616c756520746861742073686f756c642066616c6c350120726f7567686c7920696e20746865206d6964646c65206f66207468652073657373696f6e206475726174696f6e2e20546865206964656120697320746f206669727374207761697420666f721901207468652076616c696461746f727320746f2070726f64756365206120626c6f636b20696e207468652063757272656e742073657373696f6e2c20736f207468617420746865a820686561727462656174206c61746572206f6e2077696c6c206e6f74206265206e65636573736172792e00390120546869732076616c75652077696c6c206f6e6c79206265207573656420617320612066616c6c6261636b206966207765206661696c20746f2067657420612070726f7065722073657373696f6e2d012070726f677265737320657374696d6174652066726f6d20604e65787453657373696f6e526f746174696f6e602c2061732074686f736520657374696d617465732073686f756c642062650101206d6f7265206163637572617465207468656e207468652076616c75652077652063616c63756c61746520666f7220604865617274626561744166746572602e104b65797301009103040004d0205468652063757272656e7420736574206f66206b6579732074686174206d61792069737375652061206865617274626561742e4852656365697665644865617274626561747300010805057d0199030400083d0120466f7220656163682073657373696f6e20696e6465782c207765206b6565702061206d617070696e67206f66206053657373696f6e496e6465786020616e64206041757468496e6465786020746fb02060577261707065724f70617175653c426f756e6465644f70617175654e6574776f726b53746174653e602e38417574686f726564426c6f636b730101080505d50210100000000008150120466f7220656163682073657373696f6e20696e6465782c207765206b6565702061206d617070696e67206f66206056616c696461746f7249643c543e6020746f20746865c8206e756d626572206f6620626c6f636b7320617574686f7265642062792074686520676976656e20617574686f726974792e01ad0301b40440556e7369676e65645072696f726974792820ffffffffffffffff10f0204120636f6e66696775726174696f6e20666f722062617365207072696f72697479206f6620756e7369676e6564207472616e73616374696f6e732e0015012054686973206973206578706f73656420736f20746861742069742063616e2062652074756e656420666f7220706172746963756c61722072756e74696d652c207768656eb4206d756c7469706c652070616c6c6574732073656e6420756e7369676e6564207472616e73616374696f6e732e01cd030b24566f7465724c6973740124566f7465724c6973740c244c6973744e6f6465730001040500d10304000c8020412073696e676c65206e6f64652c2077697468696e20736f6d65206261672e000501204e6f6465732073746f7265206c696e6b7320666f727761726420616e64206261636b2077697468696e207468656972207265737065637469766520626167732e4c436f756e746572466f724c6973744e6f646573010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d6170204c697374426167730001040528d50304000c642041206261672073746f72656420696e2073746f726167652e0019012053746f7265732061206042616760207374727563742c2077686963682073746f726573206865616420616e64207461696c20706f696e7465727320746f20697473656c662e01d90301d804344261675468726573686f6c6473dd03c9181903010000000000000002000000000000000300000000000000040000000000000005000000000000000600000000000000070000000000000009000000000000000b000000000000000e00000000000000110000000000000015000000000000001a000000000000002000000000000000280000000000000032000000000000003e000000000000004d00000000000000600000000000000078000000000000009600000000000000bb00000000000000ea0000000000000024010000000000006d01000000000000c8010000000000003a02000000000000c8020000000000007a0300000000000058040000000000006e05000000000000c9060000000000007b08000000000000990a0000000000003e0d0000000000008d10000000000000af14000000000000d9190000000000004d200000000000005e2800000000000073320000000000000c3f000000000000cb4e00000000000078620000000000000f7b000000000000ca9900000000000032c000000000000031f00000000000002c2c0100000000002277010000000000d0d4010000000000e34902000000000032dc0200000000000b930300000000008d770400000000001f9505000000000001fa06000000000002b808000000000064e50a0000000000f79d0d00000000007d041100000000006744150000000000fe931a00000000001b37210000000000868229000000000035e033000000000094d44000000000001f05510000000000a640650000000000a0897e00000000000d239e000000000097a0c50000000000b6faf60000000000dca7340100000000eabb810100000000830fe201000000002c715a0200000000b4e2f00200000000f0e5ac0300000000a2dc9704000000005380bd050000000019782c0700000000c413f70800000000cc35340b00000000a777000e0000000022977f1100000000f23ede15000000004e41541b000000000561272200000000a6ccae2a000000003378573500000000f38ca94200000000d5344f53000000002e181d680000000052fa1c82000000008cfc9aa200000000e53036cb000000007450f5fd00000000c29d603d01000000f73da28c0100000004a6aeef010000003720776b02000000a3ef280603000000e1377cc7030000002a9916b9040000007a6c06e705000000f6c55c600700000006eded3709000000c2e441850b0000007005c1650e00000005a72bfe110000009f9b6f7c160000004be7f2191c00000015fc701e230000000e118fe32b0000000f4e55d9360000001cf1c58b440000008dd7d9a9550000008faa3b0e6b000000183831ca85000000d35b3e33a70000007caa2ff4d000000067926622050100002501775846010000ef8e6ad7970100007c1852b0fd010000f0cb38f87c020000044910091c0300007d2dd3d2e20300006982ea40db0400002252e5b8110600003025d5b895070000b960369d7a09000041b04498d80b000080fb12e7cd0e0000fb68d35380120000eef595181f170000ff6f943ae51c0000899a267c1c240000bdd8fd0a212d00007ce0ac196638000061c43d9f7b460000540b4586155800003e0337a7146e00002844af00928900007232febcecab0000f2151bb8dbd600005b4ad465830c0100bf8afd2f914f0100f27e38aa5da3010051ea4150170c0200e56fc9f0f78e0200ca9a346f873203009e951531effe0300128e136162fe0400d09a263ba03d060028e5a2e296cc070016a237e22ebf0900bfe17b7d492e0c008a37d184fe380f0035a2af872906130059c352375ac61700e14fd6be40b61d00c4025105b52125003cac6e897f672e0082242b2f14fe3900a4d4096b7b794800008bb24cb5925a008c68fac5f430710010adee1b29758d0088ab7de268c8b000202f0bb1f6eddc001013bebcc5191401109e31009e0c590120b5b46d4737af010008076f7de61a02409e5c26dc79a102a0d2871985a8490340949328e8d61b0480fc2babf88122050064413928c56a0600f736a3d60105088028850592b0050a8000df069866860c0077efd5a41ca70f00d6e9b35ec78f1300602064bf557218001f8abcf32e8d1e006848d3854f2e260052da21992db72f00fa00faee95a13b00c8feb7d3bf854a00e4d6cf98e5215d00c0bf57a3c2637400b05ab7517074910010aa314339c7b500187feb63202ce3ffffffffffffffffacd020546865206c697374206f66207468726573686f6c64732073657061726174696e672074686520766172696f757320626167732e00490120496473206172652073657061726174656420696e746f20756e736f727465642062616773206163636f7264696e6720746f2074686569722073636f72652e205468697320737065636966696573207468656101207468726573686f6c64732073657061726174696e672074686520626167732e20416e20696427732062616720697320746865206c6172676573742062616720666f722077686963682074686520696427732073636f7265b8206973206c657373207468616e206f7220657175616c20746f20697473207570706572207468726573686f6c642e006501205768656e20696473206172652069746572617465642c2068696768657220626167732061726520697465726174656420636f6d706c6574656c79206265666f7265206c6f77657220626167732e2054686973206d65616e735901207468617420697465726174696f6e206973205f73656d692d736f727465645f3a20696473206f66206869676865722073636f72652074656e6420746f20636f6d65206265666f726520696473206f66206c6f7765722d012073636f72652c206275742070656572206964732077697468696e206120706172746963756c6172206261672061726520736f7274656420696e20696e73657274696f6e206f726465722e006820232045787072657373696e672074686520636f6e7374616e74004d01205468697320636f6e7374616e74206d75737420626520736f7274656420696e207374726963746c7920696e6372656173696e67206f726465722e204475706c6963617465206974656d7320617265206e6f742c207065726d69747465642e00410120546865726520697320616e20696d706c696564207570706572206c696d6974206f66206053636f72653a3a4d4158603b20746861742076616c756520646f6573206e6f74206e65656420746f2062652101207370656369666965642077697468696e20746865206261672e20466f7220616e792074776f207468726573686f6c64206c697374732c206966206f6e6520656e647320776974683101206053636f72653a3a4d4158602c20746865206f74686572206f6e6520646f6573206e6f742c20616e64207468657920617265206f746865727769736520657175616c2c207468652074776f7c206c697374732077696c6c20626568617665206964656e746963616c6c792e003820232043616c63756c6174696f6e005501204974206973207265636f6d6d656e64656420746f2067656e65726174652074686520736574206f66207468726573686f6c647320696e20612067656f6d6574726963207365726965732c2073756368207468617441012074686572652065786973747320736f6d6520636f6e7374616e7420726174696f2073756368207468617420607468726573686f6c645b6b202b20315d203d3d20287468726573686f6c645b6b5d202ad020636f6e7374616e745f726174696f292e6d6178287468726573686f6c645b6b5d202b2031296020666f7220616c6c20606b602e005901205468652068656c7065727320696e2074686520602f7574696c732f6672616d652f67656e65726174652d6261677360206d6f64756c652063616e2073696d706c69667920746869732063616c63756c6174696f6e2e002c2023204578616d706c6573005101202d20496620604261675468726573686f6c64733a3a67657428292e69735f656d7074792829602c207468656e20616c6c20696473206172652070757420696e746f207468652073616d65206261672c20616e64b0202020697465726174696f6e206973207374726963746c7920696e20696e73657274696f6e206f726465722e6101202d20496620604261675468726573686f6c64733a3a67657428292e6c656e2829203d3d203634602c20616e6420746865207468726573686f6c6473206172652064657465726d696e6564206163636f7264696e6720746f11012020207468652070726f63656475726520676976656e2061626f76652c207468656e2074686520636f6e7374616e7420726174696f20697320657175616c20746f20322e6501202d20496620604261675468726573686f6c64733a3a67657428292e6c656e2829203d3d20323030602c20616e6420746865207468726573686f6c6473206172652064657465726d696e6564206163636f7264696e6720746f59012020207468652070726f63656475726520676976656e2061626f76652c207468656e2074686520636f6e7374616e7420726174696f20697320617070726f78696d6174656c7920657175616c20746f20312e3234382e6101202d20496620746865207468726573686f6c64206c69737420626567696e7320605b312c20322c20332c202e2e2e5d602c207468656e20616e20696420776974682073636f72652030206f7220312077696c6c2066616c6cf0202020696e746f2062616720302c20616e20696420776974682073636f726520322077696c6c2066616c6c20696e746f2062616720312c206574632e00302023204d6967726174696f6e00610120496e20746865206576656e7420746861742074686973206c6973742065766572206368616e6765732c206120636f7079206f6620746865206f6c642062616773206c697374206d7573742062652072657461696e65642e5d012057697468207468617420604c6973743a3a6d696772617465602063616e2062652063616c6c65642c2077686963682077696c6c20706572666f726d2074686520617070726f707269617465206d6967726174696f6e2e01e1030c485472616e73616374696f6e5061796d656e7401485472616e73616374696f6e5061796d656e7408444e6578744665654d756c7469706c6965720100e90340000064a7b3b6e00d0000000000000000003853746f7261676556657273696f6e0100ed030400000001dc04604f7065726174696f6e616c4665654d756c7469706c696572080401545901204120666565206d756c6974706c69657220666f7220604f7065726174696f6e616c602065787472696e7369637320746f20636f6d7075746520227669727475616c207469702220746f20626f6f73742074686569722c20607072696f7269747960004d0120546869732076616c7565206973206d756c7469706c656420627920746865206066696e616c5f6665656020746f206f627461696e206120227669727475616c20746970222074686174206973206c61746572f420616464656420746f20612074697020636f6d706f6e656e7420696e20726567756c617220607072696f72697479602063616c63756c6174696f6e732e4d01204974206d65616e732074686174206120604e6f726d616c60207472616e73616374696f6e2063616e2066726f6e742d72756e20612073696d696c61726c792d73697a656420604f7065726174696f6e616c6041012065787472696e736963202877697468206e6f20746970292c20627920696e636c7564696e672061207469702076616c75652067726561746572207468616e20746865207669727475616c207469702e003c20606060727573742c69676e6f726540202f2f20466f7220604e6f726d616c608c206c6574207072696f72697479203d207072696f726974795f63616c6328746970293b0054202f2f20466f7220604f7065726174696f6e616c601101206c6574207669727475616c5f746970203d2028696e636c7573696f6e5f666565202b2074697029202a204f7065726174696f6e616c4665654d756c7469706c6965723bc4206c6574207072696f72697479203d207072696f726974795f63616c6328746970202b207669727475616c5f746970293b1020606060005101204e6f746520746861742073696e636520776520757365206066696e616c5f6665656020746865206d756c7469706c696572206170706c69657320616c736f20746f2074686520726567756c61722060746970605d012073656e74207769746820746865207472616e73616374696f6e2e20536f2c206e6f74206f6e6c7920646f657320746865207472616e73616374696f6e206765742061207072696f726974792062756d702062617365646101206f6e207468652060696e636c7573696f6e5f666565602c2062757420776520616c736f20616d706c6966792074686520696d70616374206f662074697073206170706c69656420746f20604f7065726174696f6e616c6038207472616e73616374696f6e732e000d105375646f01105375646f040c4b6579000000040004842054686520604163636f756e74496460206f6620746865207375646f206b65792e01f10301e0000105050e28437265646974636f696e0128437265646974636f696e40344c656761637957616c6c657473000104036501180400004c4c656761637942616c616e63654b6565706572000000040000284465616c4f72646572730001080506090559010400002441646472657373657300010402f4f804000024557365644775696473000104020101e80400002441736b4f7264657273000108050609052d01040000244269644f7264657273000108050609054901040000184f6666657273000108050609055501040000245472616e7366657273000104060501090104000038436f6c6c6563746564436f696e73000104060d05110504000050436f6c6c656374436f696e73436f6e74726163740100190554a3ee21c306a700e682abcdfe9baa6a08f382041900003047415445436f6e74726163740100190554a3ee21c306a700e682abcdfe9baa6a08f3820419000044474154454661756365744163636f756e7400000004000030436c65616e75705374617465000021050400002c4275726e656446756e6473000104067101310504000054436f756e746572466f724275726e656446756e6473010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d617001f90301f00854556e76657269666965645461736b54696d656f757410103c0000000050506572426c6f636b436c65616e75704c696d697410105fa80000000135050f28446966666963756c74790128446966666963756c7479108450726576696f7573446966666963756c74696573416e6454696d657374616d7073010039050400004443757272656e74446966666963756c747901001d01800000000000000000000000000000000000000000000000000000000000000000003c546172676574426c6f636b54696d650100282000000000000000000068446966666963756c747941646a7573746d656e74506572696f640100450520000000000000000000000000014905101c52657761726473011c52657761726473042c426c6f636b417574686f7200000004000000017501000011245363686564756c657201245363686564756c65720c3c496e636f6d706c65746553696e6365000010040000184167656e646101010405104d050400044d01204974656d7320746f2062652065786563757465642c20696e64657865642062792074686520626c6f636b206e756d626572207468617420746865792073686f756c64206265206578656375746564206f6e2e184c6f6f6b757000010405047d01040010f8204c6f6f6b75702066726f6d2061206e616d6520746f2074686520626c6f636b206e756d62657220616e6420696e646578206f6620746865207461736b2e00590120466f72207633202d3e207634207468652070726576696f75736c7920756e626f756e646564206964656e7469746965732061726520426c616b65322d3235362068617368656420746f20666f726d2074686520763430206964656e7469746965732e01210401790108344d6178696d756d57656967687420400b00409452a30313cccccccccccccccc04290120546865206d6178696d756d207765696768742074686174206d6179206265207363686564756c65642070657220626c6f636b20666f7220616e7920646973706174636861626c65732e504d61785363686564756c6564506572426c6f636b101032000000041d0120546865206d6178696d756d206e756d626572206f66207363686564756c65642063616c6c7320696e2074686520717565756520666f7220612073696e676c6520626c6f636b2e01650512345461736b5363686564756c657201345461736b5363686564756c6572083050656e64696e675461736b730001080606090569050400002c417574686f7269746965730001040200e8040000000185010001710513204964656e7469747901204964656e7469747910284964656e746974794f660001040500750504000c210120496e666f726d6174696f6e20746861742069732070657274696e656e7420746f206964656e746966792074686520656e7469747920626568696e6420616e206163636f756e742e00c02054574f582d4e4f54453a204f4b20e2809520604163636f756e7449646020697320612073656375726520686173682e1c53757065724f660001040200b9040400086101205468652073757065722d6964656e74697479206f6620616e20616c7465726e6174697665202273756222206964656e7469747920746f676574686572207769746820697473206e616d652c2077697468696e2074686174510120636f6e746578742e20496620746865206163636f756e74206973206e6f7420736f6d65206f74686572206163636f756e742773207375622d6964656e746974792c207468656e206a75737420604e6f6e65602e18537562734f660101040500850544000000000000000000000000000000000014b820416c7465726e6174697665202273756222206964656e746974696573206f662074686973206163636f756e742e001d0120546865206669727374206974656d20697320746865206465706f7369742c20746865207365636f6e64206973206120766563746f72206f6620746865206163636f756e74732e00c02054574f582d4e4f54453a204f4b20e2809520604163636f756e7449646020697320612073656375726520686173682e285265676973747261727301008d050400104d012054686520736574206f6620726567697374726172732e204e6f7420657870656374656420746f206765742076657279206269672061732063616e206f6e6c79206265206164646564207468726f7567682061a8207370656369616c206f726967696e20286c696b656c79206120636f756e63696c206d6f74696f6e292e0029012054686520696e64657820696e746f20746869732063616e206265206361737420746f2060526567697374726172496e6465786020746f2067657420612076616c69642076616c75652e012904018901183042617369634465706f7369741840f401000000000000000000000000000004d42054686520616d6f756e742068656c64206f6e206465706f73697420666f7220612072656769737465726564206964656e74697479304669656c644465706f7369741840f4010000000000000000000000000000042d012054686520616d6f756e742068656c64206f6e206465706f73697420706572206164646974696f6e616c206669656c6420666f7220612072656769737465726564206964656e746974792e445375624163636f756e744465706f7369741840f40100000000000000000000000000000c65012054686520616d6f756e742068656c64206f6e206465706f73697420666f7220612072656769737465726564207375626163636f756e742e20546869732073686f756c64206163636f756e7420666f7220746865206661637465012074686174206f6e652073746f72616765206974656d27732076616c75652077696c6c20696e637265617365206279207468652073697a65206f6620616e206163636f756e742049442c20616e642074686572652077696c6c350120626520616e6f746865722074726965206974656d2077686f73652076616c7565206973207468652073697a65206f6620616e206163636f756e7420494420706c75732033322062797465732e384d61785375624163636f756e747310100a000000040d0120546865206d6178696d756d206e756d626572206f66207375622d6163636f756e747320616c6c6f77656420706572206964656e746966696564206163636f756e742e4c4d61784164646974696f6e616c4669656c647310100a000000086501204d6178696d756d206e756d626572206f66206164646974696f6e616c206669656c64732074686174206d61792062652073746f72656420696e20616e2049442e204e656564656420746f20626f756e642074686520492f4fe020726571756972656420746f2061636365737320616e206964656e746974792c206275742063616e2062652070726574747920686967682e344d61785265676973747261727310100f000000085101204d61786d696d756d206e756d626572206f66207265676973747261727320616c6c6f77656420696e207468652073797374656d2e204e656564656420746f20626f756e642074686520636f6d706c65786974797c206f662c20652e672e2c207570646174696e67206a756467656d656e74732e019d05141c5574696c6974790001c904018d01044c626174636865645f63616c6c735f6c696d69741010aa2a000004a820546865206c696d6974206f6e20746865206e756d626572206f6620626174636865642063616c6c732e01a105151450726f7879011450726f7879081c50726f786965730101040500a5054400000000000000000000000000000000000845012054686520736574206f66206163636f756e742070726f786965732e204d61707320746865206163636f756e74207768696368206861732064656c65676174656420746f20746865206163636f756e7473210120776869636820617265206265696e672064656c65676174656420746f2c20746f67657468657220776974682074686520616d6f756e742068656c64206f6e206465706f7369742e34416e6e6f756e63656d656e74730101040500b50544000000000000000000000000000000000004ac2054686520616e6e6f756e63656d656e7473206d616465206279207468652070726f787920286b6579292e01dd04019101184050726f78794465706f736974426173651840f401000000000000000000000000000010110120546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e6720612070726f78792e00010120546869732069732068656c6420666f7220616e206164646974696f6e616c2073746f72616765206974656d2077686f73652076616c75652073697a652069732501206073697a656f662842616c616e6365296020627974657320616e642077686f7365206b65792073697a65206973206073697a656f66284163636f756e74496429602062797465732e4850726f78794465706f736974466163746f721840f401000000000000000000000000000014bc2054686520616d6f756e74206f662063757272656e6379206e6565646564207065722070726f78792061646465642e00350120546869732069732068656c6420666f7220616464696e6720333220627974657320706c757320616e20696e7374616e6365206f66206050726f78795479706560206d6f726520696e746f20616101207072652d6578697374696e672073746f726167652076616c75652e20546875732c207768656e20636f6e6669677572696e67206050726f78794465706f736974466163746f7260206f6e652073686f756c642074616b65f420696e746f206163636f756e7420603332202b2070726f78795f747970652e656e636f646528292e6c656e282960206279746573206f6620646174612e284d617850726f7869657310104000000004f020546865206d6178696d756d20616d6f756e74206f662070726f7869657320616c6c6f77656420666f7220612073696e676c65206163636f756e742e284d617850656e64696e6710104000000004450120546865206d6178696d756d20616d6f756e74206f662074696d652d64656c6179656420616e6e6f756e63656d656e747320746861742061726520616c6c6f77656420746f2062652070656e64696e672e5c416e6e6f756e63656d656e744465706f736974426173651840f401000000000000000000000000000010310120546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e6720616e20616e6e6f756e63656d656e742e00490120546869732069732068656c64207768656e2061206e65772073746f72616765206974656d20686f6c64696e672061206042616c616e636560206973206372656174656420287479706963616c6c7920313620206279746573292e64416e6e6f756e63656d656e744465706f736974466163746f721840f401000000000000000000000000000010d42054686520616d6f756e74206f662063757272656e6379206e65656465642070657220616e6e6f756e63656d656e74206d6164652e00590120546869732069732068656c6420666f7220616464696e6720616e20604163636f756e744964602c2060486173686020616e642060426c6f636b4e756d6265726020287479706963616c6c79203638206279746573298c20696e746f2061207072652d6578697374696e672073746f726167652076616c75652e01c505162c46617374556e7374616b65012c46617374556e7374616b651010486561640000c905040004c0205468652063757272656e74202268656164206f662074686520717565756522206265696e6720756e7374616b65642e145175657565000104050018040014c020546865206d6170206f6620616c6c206163636f756e74732077697368696e6720746f20626520756e7374616b65642e003901204b6565707320747261636b206f6620604163636f756e744964602077697368696e6720746f20756e7374616b6520616e64206974277320636f72726573706f6e64696e67206465706f7369742e00d02054574f582d4e4f54453a20534146452073696e636520604163636f756e7449646020697320612073656375726520686173682e3c436f756e746572466f725175657565010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d61704c45726173546f436865636b506572426c6f636b0100101000000000188c204e756d626572206f66206572617320746f20636865636b2070657220626c6f636b2e00c82049662073657420746f20302c20746869732070616c6c657420646f6573206162736f6c7574656c79206e6f7468696e672e005d01204261736564206f6e2074686520616d6f756e74206f662077656967687420617661696c61626c6520617420606f6e5f69646c65602c20757020746f2074686973206d616e792065726173206f6620612073696e676c6570206e6f6d696e61746f72206d6967687420626520636865636b65642e01e504019901041c4465706f7369741840f4010000000000000000000000000000086501204465706f73697420746f2074616b6520666f7220756e7374616b696e672c20746f206d616b6520737572652077652772652061626c6520746f20736c6173682074686520697420696e206f7264657220746f20636f766572c02074686520636f737473206f66207265736f7572636573206f6e20756e7375636365737366756c20756e7374616b652e01d505173c4e6f6d696e6174696f6e506f6f6c73013c4e6f6d696e6174696f6e506f6f6c73502c4d696e4a6f696e426f6e640100184000000000000000000000000000000000049c204d696e696d756d20616d6f756e7420746f20626f6e6420746f206a6f696e206120706f6f6c2e344d696e437265617465426f6e6401001840000000000000000000000000000000001ca0204d696e696d756d20626f6e6420726571756972656420746f20637265617465206120706f6f6c2e00650120546869732069732074686520616d6f756e74207468617420746865206465706f7369746f72206d7573742070757420617320746865697220696e697469616c207374616b6520696e2074686520706f6f6c2c20617320616e8820696e6469636174696f6e206f662022736b696e20696e207468652067616d65222e0069012054686973206973207468652076616c756520746861742077696c6c20616c7761797320657869737420696e20746865207374616b696e67206c6564676572206f662074686520706f6f6c20626f6e646564206163636f756e7480207768696c6520616c6c206f74686572206163636f756e7473206c656176652e204d6178506f6f6c730000100400086901204d6178696d756d206e756d626572206f66206e6f6d696e6174696f6e20706f6f6c7320746861742063616e2065786973742e20496620604e6f6e65602c207468656e20616e20756e626f756e646564206e756d626572206f664420706f6f6c732063616e2065786973742e384d6178506f6f6c4d656d626572730000100400084901204d6178696d756d206e756d626572206f66206d656d6265727320746861742063616e20657869737420696e207468652073797374656d2e20496620604e6f6e65602c207468656e2074686520636f756e74b8206d656d6265727320617265206e6f7420626f756e64206f6e20612073797374656d20776964652062617369732e544d6178506f6f6c4d656d62657273506572506f6f6c0000100400084101204d6178696d756d206e756d626572206f66206d656d626572732074686174206d61792062656c6f6e6720746f20706f6f6c2e20496620604e6f6e65602c207468656e2074686520636f756e74206f66a8206d656d62657273206973206e6f7420626f756e64206f6e20612070657220706f6f6c2062617369732e4c476c6f62616c4d6178436f6d6d697373696f6e00008004000c690120546865206d6178696d756d20636f6d6d697373696f6e20746861742063616e2062652063686172676564206279206120706f6f6c2e2055736564206f6e20636f6d6d697373696f6e207061796f75747320746f20626f756e64250120706f6f6c20636f6d6d697373696f6e73207468617420617265203e2060476c6f62616c4d6178436f6d6d697373696f6e602c206e65636573736172792069662061206675747572650d012060476c6f62616c4d6178436f6d6d697373696f6e60206973206c6f776572207468616e20736f6d652063757272656e7420706f6f6c20636f6d6d697373696f6e732e2c506f6f6c4d656d626572730001040500d90504000c4020416374697665206d656d626572732e00d02054574f582d4e4f54453a20534146452073696e636520604163636f756e7449646020697320612073656375726520686173682e54436f756e746572466f72506f6f6c4d656d62657273010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d61702c426f6e646564506f6f6c730001040510ed05040004682053746f7261676520666f7220626f6e64656420706f6f6c732e54436f756e746572466f72426f6e646564506f6f6c73010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d61702c526577617264506f6f6c730001040510010604000875012052657761726420706f6f6c732e2054686973206973207768657265207468657265207265776172647320666f72206561636820706f6f6c20616363756d756c6174652e205768656e2061206d656d62657273207061796f7574206973590120636c61696d65642c207468652062616c616e636520636f6d6573206f757420666f207468652072657761726420706f6f6c2e204b657965642062792074686520626f6e64656420706f6f6c73206163636f756e742e54436f756e746572466f72526577617264506f6f6c73010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d61703c537562506f6f6c7353746f726167650001040510050604000819012047726f757073206f6620756e626f6e64696e6720706f6f6c732e20456163682067726f7570206f6620756e626f6e64696e6720706f6f6c732062656c6f6e677320746f2061290120626f6e64656420706f6f6c2c2068656e636520746865206e616d65207375622d706f6f6c732e204b657965642062792074686520626f6e64656420706f6f6c73206163636f756e742e64436f756e746572466f72537562506f6f6c7353746f72616765010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d6170204d65746164617461010104051001010400045c204d6574616461746120666f722074686520706f6f6c2e48436f756e746572466f724d65746164617461010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d6170284c617374506f6f6c4964010010100000000004d0204576657220696e6372656173696e67206e756d626572206f6620616c6c20706f6f6c73206372656174656420736f206661722e4c52657665727365506f6f6c49644c6f6f6b7570000104050010040010dc20412072657665727365206c6f6f6b75702066726f6d2074686520706f6f6c2773206163636f756e7420696420746f206974732069642e0055012054686973206973206f6e6c79207573656420666f7220736c617368696e672e20496e20616c6c206f7468657220696e7374616e6365732c2074686520706f6f6c20696420697320757365642c20616e6420746865c0206163636f756e7473206172652064657465726d696e6973746963616c6c7920646572697665642066726f6d2069742e74436f756e746572466f7252657665727365506f6f6c49644c6f6f6b7570010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d617040436c61696d5065726d697373696f6e73010104050001050400040101204d61702066726f6d206120706f6f6c206d656d626572206163636f756e7420746f207468656972206f7074656420636c61696d207065726d697373696f6e2e01e90401a101082050616c6c657449641d0620637265646974636f048420546865206e6f6d696e6174696f6e20706f6f6c27732070616c6c65742069642e484d6178506f696e7473546f42616c616e6365080464301d0120546865206d6178696d756d20706f6f6c20706f696e74732d746f2d62616c616e636520726174696f207468617420616e20606f70656e6020706f6f6c2063616e20686176652e005501205468697320697320696d706f7274616e7420696e20746865206576656e7420736c617368696e672074616b657320706c61636520616e642074686520706f6f6c277320706f696e74732d746f2d62616c616e63657c20726174696f206265636f6d65732064697370726f706f7274696f6e616c2e006501204d6f72656f7665722c20746869732072656c6174657320746f207468652060526577617264436f756e7465726020747970652061732077656c6c2c206173207468652061726974686d65746963206f7065726174696f6e7355012061726520612066756e6374696f6e206f66206e756d626572206f6620706f696e74732c20616e642062792073657474696e6720746869732076616c756520746f20652e672e2031302c20796f7520656e73757265650120746861742074686520746f74616c206e756d626572206f6620706f696e747320696e207468652073797374656d20617265206174206d6f73742031302074696d65732074686520746f74616c5f69737375616e6365206f669c2074686520636861696e2c20696e20746865206162736f6c75746520776f72736520636173652e00490120466f7220612076616c7565206f662031302c20746865207468726573686f6c6420776f756c64206265206120706f6f6c20706f696e74732d746f2d62616c616e636520726174696f206f662031303a312e310120537563682061207363656e6172696f20776f756c6420616c736f20626520746865206571756976616c656e74206f662074686520706f6f6c206265696e672039302520736c61736865642e012106182906042048436865636b4e6f6e5a65726f53656e6465723106e840436865636b5370656356657273696f6e35061038436865636b547856657273696f6e39061030436865636b47656e657369733d062c38436865636b4d6f7274616c69747941062c28436865636b4e6f6e63654906e82c436865636b5765696768744d06e8604368617267655472616e73616374696f6e5061796d656e745106e85506","id":"1"} diff --git a/creditcoin-js/package.json b/creditcoin-js/package.json index ddff975cc7..cfeeec89d6 100644 --- a/creditcoin-js/package.json +++ b/creditcoin-js/package.json @@ -1,6 +1,6 @@ { "name": "creditcoin-js", - "version": "0.10.1", + "version": "0.10.4", "author": "Jeremy Frank ", "license": "MIT", "main": "lib/index.js", @@ -22,14 +22,14 @@ }, "devDependencies": { "@polkadot/typegen": "9.14.2", - "@typescript-eslint/eslint-plugin": "^5.59.2", + "@typescript-eslint/eslint-plugin": "^5.62.0", "@typescript-eslint/parser": "^5.62.0", - "eslint": "^8.48.0", - "eslint-config-prettier": "^9.0.0", - "prettier": "^3.0.3", + "eslint": "^8.57.0", + "eslint-config-prettier": "^9.1.0", + "prettier": "^3.3.2", "ts-node": "^10.9.1", "tsconfig-paths": "^4.2.0", - "typescript": "^5.1.3" + "typescript": "^5.5.2" }, "dependencies": { "@polkadot/api": "9.14.2", diff --git a/creditcoin-js/src/ctc-deploy.ts b/creditcoin-js/src/ctc-deploy.ts index 02c2c32a5b..2b7ccb885b 100644 --- a/creditcoin-js/src/ctc-deploy.ts +++ b/creditcoin-js/src/ctc-deploy.ts @@ -24,7 +24,7 @@ const deployCtcToken = async (deployer: Signer, existingAddress: string | undefi return ctcToken; }; -const burnCtc = async (ctcToken: GluwaCreditVestingToken, howMuch: string) => { +export const burnCtc = async (ctcToken: GluwaCreditVestingToken, howMuch: string, writeToEnv = false) => { const tx = await ctcToken.burn(howMuch); const txHash = tx.hash; @@ -32,7 +32,10 @@ const burnCtc = async (ctcToken: GluwaCreditVestingToken, howMuch: string) => { await tx.wait(); console.log('Burn Tx hash', txHash); - process.env.CREDITCOIN_CTC_BURN_TX_HASH = txHash; + if (writeToEnv) { + process.env.CREDITCOIN_CTC_BURN_TX_HASH = txHash; + } + return txHash; }; export const deployCtcContract = async ( @@ -45,7 +48,9 @@ export const deployCtcContract = async ( const deployer = new Wallet(deployerPrivateKey, provider); const ctcToken = await deployCtcToken(deployer, existingAddress); - await burnCtc(ctcToken, howMuchToBurn); + await burnCtc(ctcToken, howMuchToBurn, true); + + return ctcToken; }; export const deployGATEToken = async (deployer: Signer, existingAddress: string | undefined): Promise => { diff --git a/creditcoin-js/src/examples/loan-cycle.ts b/creditcoin-js/src/examples/loan-cycle.ts index 41b29d9ddc..e54231b142 100644 --- a/creditcoin-js/src/examples/loan-cycle.ts +++ b/creditcoin-js/src/examples/loan-cycle.ts @@ -80,7 +80,9 @@ export const fullLoanCycleExample = async ( }; }; - const expBlock = 100_000_000; + // AskOrder/BidOrder/Offer will expire 1M blocks from the current one + const lastHeader = await api.rpc.chain.getHeader(); + const expBlock = lastHeader.number.toNumber() + 1_000_000; const loanTerms: LoanTerms = { amount: new BN(100), interestRate: { diff --git a/creditcoin-js/src/extrinsics/extrinsics.ts b/creditcoin-js/src/extrinsics/extrinsics.ts index c6c45eca7a..fc3451ddd7 100644 --- a/creditcoin-js/src/extrinsics/extrinsics.ts +++ b/creditcoin-js/src/extrinsics/extrinsics.ts @@ -19,17 +19,13 @@ import { TransferKind, DealOrderId, TransferId, - ExternalAddress, OwnershipProof, - CollectCoinsContract, } from '../model'; import { KeyringPair } from '@polkadot/keyring/types'; import { lockDealOrderAsync } from './lock-deal-order'; import { closeDealOrderAsync } from './close-deal-order'; import { exemptLoanAsync } from './exempt'; -import { requestCollectCoinsAsync } from './request-collect-coins'; import { registerAddressV2Async } from './register-address-v2'; -import { requestCollectCoinvsV2Async } from './request-collect-coins-v2'; export const extrinsics = (api: ApiPromise) => { const registerAddress = ( @@ -111,9 +107,6 @@ export const extrinsics = (api: ApiPromise) => { const exemptLoan = (dealOrderId: DealOrderId, lender: KeyringPair) => exemptLoanAsync(api, dealOrderId, lender); - const requestCollectCoins = (evmAddress: ExternalAddress, collector: KeyringPair, txHash: string) => - requestCollectCoinsAsync(api, evmAddress, collector, txHash); - const registerAddressV2 = ( externalAddress: string, blockchain: Blockchain, @@ -121,9 +114,6 @@ export const extrinsics = (api: ApiPromise) => { signer: KeyringPair, ) => registerAddressV2Async(api, externalAddress, blockchain, ownershipProof, signer); - const requestCollectCoinsV2 = (contract: CollectCoinsContract, signer: KeyringPair) => - requestCollectCoinvsV2Async(api, contract, signer); - return { registerAddress, registerAddressV2, @@ -138,7 +128,5 @@ export const extrinsics = (api: ApiPromise) => { registerRepaymentTransfer, closeDealOrder, exemptLoan, - requestCollectCoins, - requestCollectCoinsV2, }; }; diff --git a/creditcoin-js/src/extrinsics/request-collect-coins-v2.ts b/creditcoin-js/src/extrinsics/request-collect-coins-v2.ts deleted file mode 100644 index 7e26eca66a..0000000000 --- a/creditcoin-js/src/extrinsics/request-collect-coins-v2.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { ApiPromise, SubmittableResult } from '@polkadot/api'; -import { ExternalAddress, CollectCoinsContract } from '../model'; -import { KeyringPair } from '@polkadot/keyring/types'; -import { handleTransaction } from './common'; -import { TxCallback, TxFailureCallback } from '..'; -import { PalletCreditcoinCollectCoinsBurnDetails } from '@polkadot/types/lookup'; -import { CollectCoinsEvent, createCollectCoinsRegisteredEvent } from './request-collect-coins'; - -export const createTokenContract = ( - api: ApiPromise, - contract: CollectCoinsContract, -): PalletCreditcoinCollectCoinsBurnDetails => { - const toType = () => { - switch (contract.kind) { - case 'GCRE': - // eslint-disable-next-line @typescript-eslint/naming-convention - return { GCRE: [contract.evmAddress, contract.txHash] }; - case 'GATE': - // eslint-disable-next-line @typescript-eslint/naming-convention - return { GATE: [contract.evmAddress, contract.txHash] }; - } - }; - - return api.createType('PalletCreditcoinCollectCoinsBurnDetails', toType()); -}; - -// eslint-disable-next-line @typescript-eslint/naming-convention -export const GATEContract = (evmAddress: ExternalAddress, txHash: string): CollectCoinsContract => { - return { kind: 'GATE', evmAddress, txHash }; -}; - -// eslint-disable-next-line @typescript-eslint/naming-convention -export const GCREContract = (evmAddress: ExternalAddress, txHash: string): CollectCoinsContract => { - return { kind: 'GCRE', evmAddress, txHash }; -}; - -export const requestCollectCoinsV2 = async ( - api: ApiPromise, - contract: CollectCoinsContract, - signer: KeyringPair, - onSuccess: TxCallback, - onFail: TxFailureCallback, -) => { - const formattedContract = createTokenContract(api, contract); - - const unsubscribe: () => void = await api.tx.creditcoin - .requestCollectCoinsV2(formattedContract) - .signAndSend(signer, { nonce: -1 }, (result) => handleTransaction(api, unsubscribe, result, onSuccess, onFail)); -}; - -export const requestCollectCoinvsV2Async = async ( - api: ApiPromise, - contract: CollectCoinsContract, - signer: KeyringPair, -) => { - return new Promise((resolve, reject) => { - const onSuccess = (result: SubmittableResult) => - resolve(createCollectCoinsRegisteredEvent(api, result, 'CollectCoinsRegistered')); - - requestCollectCoinsV2(api, contract, signer, onSuccess, reject).catch((reason) => { - reject(reason); - }); - }); -}; diff --git a/creditcoin-js/src/extrinsics/request-collect-coins.ts b/creditcoin-js/src/extrinsics/request-collect-coins.ts deleted file mode 100644 index 15beefeda1..0000000000 --- a/creditcoin-js/src/extrinsics/request-collect-coins.ts +++ /dev/null @@ -1,106 +0,0 @@ -import { ApiPromise, SubmittableResult } from '@polkadot/api'; -import { - CollectedCoins, - UnverifiedCollectedCoins, - CollectedCoinsId, - ExternalAddress, - EventReturnJoinType, -} from '../model'; -import { u8aConcat, u8aToU8a } from '@polkadot/util'; -import { blake2AsHex } from '@polkadot/util-crypto'; -import { KeyringPair } from '@polkadot/keyring/types'; -import { handleTransaction, processEvents, listenForVerificationOutcome } from './common'; -import { TxCallback, TxFailureCallback, VerificationError } from '..'; -import { createCollectedCoins, createUnverifiedCollectedCoins } from '../transforms'; - -export type CollectCoinsEventKind = 'CollectCoinsRegistered' | 'CollectedCoinsMinted' | 'CollectCoinsFailed'; - -export type CollectCoinsEvent = { - collectedCoinsId: CollectedCoinsId; - collectedCoins?: CollectedCoins; - unverifiedCollectedCoins?: UnverifiedCollectedCoins; - - waitForVerification: (timeout?: number) => Promise; -}; - -export const createCollectedCoinsId = (txHash: string) => { - const blockchainBytes = Buffer.from('ethereum'); - const key = u8aConcat(blockchainBytes, u8aToU8a(txHash)); - return blake2AsHex(key); -}; - -export const requestCollectCoins = async ( - api: ApiPromise, - evmAddress: ExternalAddress, - collector: KeyringPair, - txHash: string, - onSuccess: TxCallback, - onFail: TxFailureCallback, -) => { - const unsubscribe: () => void = await api.tx.creditcoin - .requestCollectCoins(evmAddress, txHash) - .signAndSend(collector, { nonce: -1 }, (result) => - handleTransaction(api, unsubscribe, result, onSuccess, onFail), - ); -}; - -type CollectCoinsRegisteredEvent = EventReturnJoinType; - -const persistedCollectCoins = (api: ApiPromise, collectedCoinsId: CollectedCoinsId, timeout = 20_000) => { - return listenForVerificationOutcome( - api, - { - successEvent: api.events.creditcoin.CollectedCoinsMinted, - failEvent: api.events.creditcoin.CollectCoinsFailedVerification, - processSuccessEvent: async ([id]) => { - if (id.toString() === collectedCoinsId) { - const result = await api.query.creditcoin.collectedCoins(collectedCoinsId); - return createCollectedCoins(result.unwrap()); - } - }, - processFailEvent: ([id, cause]) => { - if (id.toString() === collectedCoinsId) { - return new VerificationError(`CollectCoins ${collectedCoinsId} failed: ${cause.toString()}`, cause); - } - }, - }, - timeout, - ); -}; - -export const createCollectCoinsRegisteredEvent = ( - api: ApiPromise, - result: SubmittableResult, - kind: CollectCoinsEventKind, -): CollectCoinsEvent => { - const { itemId, item } = processEvents( - api, - result, - kind, - 'PalletCreditcoinCollectCoinsUnverifiedCollectedCoins', - createUnverifiedCollectedCoins, - ) as CollectCoinsRegisteredEvent; - - const collectedCoinsEventData = { - collectedCoinsId: itemId, - unverifiedCollectCoins: item, - waitForVerification: (timeout = 180_000) => persistedCollectCoins(api, itemId, timeout), - }; - - return collectedCoinsEventData; -}; - -export const requestCollectCoinsAsync = async ( - api: ApiPromise, - evmAddress: ExternalAddress, - collector: KeyringPair, - txHash: string, -) => { - return new Promise((resolve, reject) => { - const onSuccess = (result: SubmittableResult) => - resolve(createCollectCoinsRegisteredEvent(api, result, 'CollectCoinsRegistered')); - requestCollectCoins(api, evmAddress, collector, txHash, onSuccess, reject).catch((reason) => { - reject(reason); - }); - }); -}; diff --git a/creditcoin-js/src/interfaces/augment-api-consts.ts b/creditcoin-js/src/interfaces/augment-api-consts.ts index 2a909ccf5e..0c2a5bc095 100644 --- a/creditcoin-js/src/interfaces/augment-api-consts.ts +++ b/creditcoin-js/src/interfaces/augment-api-consts.ts @@ -66,6 +66,7 @@ declare module '@polkadot/api-base/types/consts' { }; creditcoin: { perBlockCleanupLimit: u32 & AugmentedConst; + unverifiedTaskTimeout: u32 & AugmentedConst; /** * Generic const **/ diff --git a/creditcoin-js/src/interfaces/augment-api-errors.ts b/creditcoin-js/src/interfaces/augment-api-errors.ts index 61987d2a31..b6f5fae6b4 100644 --- a/creditcoin-js/src/interfaces/augment-api-errors.ts +++ b/creditcoin-js/src/interfaces/augment-api-errors.ts @@ -112,6 +112,14 @@ declare module '@polkadot/api-base/types/errors' { * The faucet has insufficient funds to complete this swap, please retry when the faucet has been reloaded **/ BurnGATEInsufficientFaucetBalance: AugmentedError; + /** + * A call to burn specified more free funds than the account has access to + **/ + BurnInsufficientFunds: AugmentedError; + /** + * During a call to burn or burn_all the settlement of the account balances failed + **/ + BurnSettlementError: AugmentedError; /** * The coin collection has already been registered. **/ diff --git a/creditcoin-js/src/interfaces/augment-api-events.ts b/creditcoin-js/src/interfaces/augment-api-events.ts index 1e6ce95e17..54de2eb0fc 100644 --- a/creditcoin-js/src/interfaces/augment-api-events.ts +++ b/creditcoin-js/src/interfaces/augment-api-events.ts @@ -17,8 +17,6 @@ import type { PalletCreditcoinAskOrderId, PalletCreditcoinBidOrder, PalletCreditcoinBidOrderId, - PalletCreditcoinCollectCoinsCollectedCoins, - PalletCreditcoinCollectCoinsUnverifiedCollectedCoins, PalletCreditcoinDealOrder, PalletCreditcoinDealOrderId, PalletCreditcoinLegacySighash, @@ -136,27 +134,7 @@ declare module '@polkadot/api-base/types/events' { * [bid_order_id, bid_order] **/ BidOrderAdded: AugmentedEvent; - /** - * exchanging vested ERC-20 CC for native CC failed. - * [collected_coins_id, cause] - **/ - CollectCoinsFailedVerification: AugmentedEvent< - ApiType, - [H256, PalletCreditcoinOcwErrorsVerificationFailureCause] - >; - /** - * Collecting coins from Eth ERC-20 has been registered and will be verified. - * [collected_coins_id, registered_collect_coins] - **/ - CollectCoinsRegistered: AugmentedEvent< - ApiType, - [H256, PalletCreditcoinCollectCoinsUnverifiedCollectedCoins] - >; - /** - * CollectCoins has been successfully verified and minted. - * [collected_coins_id, collected_coins] - **/ - CollectedCoinsMinted: AugmentedEvent; + Burned: AugmentedEvent; /** * A deal order has been added by a borrower. This indicates that the borrower * has accepted a lender's offer and intends to enter the loan. diff --git a/creditcoin-js/src/interfaces/augment-api-query.ts b/creditcoin-js/src/interfaces/augment-api-query.ts index 7b5092777e..e6f50b788f 100644 --- a/creditcoin-js/src/interfaces/augment-api-query.ts +++ b/creditcoin-js/src/interfaces/augment-api-query.ts @@ -38,6 +38,7 @@ import type { PalletCreditcoinAddress, PalletCreditcoinAskOrder, PalletCreditcoinBidOrder, + PalletCreditcoinBurnInfo, PalletCreditcoinCleanupStorageCleanupState, PalletCreditcoinCollectCoinsCollectedCoins, PalletCreditcoinDealOrder, @@ -334,6 +335,12 @@ declare module '@polkadot/api-base/types/storage' { [u32, H256] > & QueryableStorageEntry; + burnedFunds: AugmentedQuery< + ApiType, + (arg: u64 | AnyNumber | Uint8Array) => Observable>, + [u64] + > & + QueryableStorageEntry; cleanupState: AugmentedQuery< ApiType, () => Observable>, @@ -352,6 +359,11 @@ declare module '@polkadot/api-base/types/storage' { [H256] > & QueryableStorageEntry; + /** + * Counter for the related counted storage map + **/ + counterForBurnedFunds: AugmentedQuery Observable, []> & + QueryableStorageEntry; dealOrders: AugmentedQuery< ApiType, ( diff --git a/creditcoin-js/src/interfaces/augment-api-tx.ts b/creditcoin-js/src/interfaces/augment-api-tx.ts index 0ab6071a6c..ef4b80dcc7 100644 --- a/creditcoin-js/src/interfaces/augment-api-tx.ts +++ b/creditcoin-js/src/interfaces/augment-api-tx.ts @@ -35,11 +35,9 @@ import type { PalletCreditcoinAskOrderId, PalletCreditcoinBidOrderId, PalletCreditcoinBlockchain, - PalletCreditcoinCollectCoinsBurnDetails, PalletCreditcoinDealOrderId, PalletCreditcoinLoanTerms, PalletCreditcoinOcwErrorsVerificationFailureCause, - PalletCreditcoinOcwTasksCollectCoinsDeployedContract, PalletCreditcoinOfferId, PalletCreditcoinOwnershipProof, PalletCreditcoinTaskId, @@ -390,12 +388,7 @@ declare module '@polkadot/api-base/types/submittable' { failTask: AugmentedSubmittable< ( deadline: u32 | AnyNumber | Uint8Array, - taskId: - | PalletCreditcoinTaskId - | { VerifyTransfer: any } - | { CollectCoins: any } - | string - | Uint8Array, + taskId: PalletCreditcoinTaskId | { VerifyTransfer: any } | string | Uint8Array, cause: | PalletCreditcoinOcwErrorsVerificationFailureCause | 'TaskNonexistent' @@ -437,12 +430,7 @@ declare module '@polkadot/api-base/types/submittable' { persistTaskOutput: AugmentedSubmittable< ( deadline: u32 | AnyNumber | Uint8Array, - taskOutput: - | PalletCreditcoinTaskOutput - | { VerifyTransfer: any } - | { CollectCoins: any } - | string - | Uint8Array, + taskOutput: PalletCreditcoinTaskOutput | { VerifyTransfer: any } | string | Uint8Array, ) => SubmittableExtrinsic, [u32, PalletCreditcoinTaskOutput] >; @@ -564,52 +552,6 @@ declare module '@polkadot/api-base/types/submittable' { (who: AccountId32 | string | Uint8Array) => SubmittableExtrinsic, [AccountId32] >; - requestCollectCoins: AugmentedSubmittable< - ( - evmAddress: Bytes | string | Uint8Array, - txId: Bytes | string | Uint8Array, - ) => SubmittableExtrinsic, - [Bytes, Bytes] - >; - requestCollectCoinsV2: AugmentedSubmittable< - ( - contract: - | PalletCreditcoinCollectCoinsBurnDetails - | { GCRE: any } - | { GATE: any } - | string - | Uint8Array, - ) => SubmittableExtrinsic, - [PalletCreditcoinCollectCoinsBurnDetails] - >; - setCollectCoinsContract: AugmentedSubmittable< - ( - contract: - | PalletCreditcoinOcwTasksCollectCoinsDeployedContract - | { address?: any; chain?: any } - | string - | Uint8Array, - ) => SubmittableExtrinsic, - [PalletCreditcoinOcwTasksCollectCoinsDeployedContract] - >; - /** - * Set the onchain details for the Gluwa GATE Contract, including its address and the blockchain where it is deployed. - * This extrinsic expects the caller to have root permissions. - **/ - setGateContract: AugmentedSubmittable< - ( - contract: - | PalletCreditcoinOcwTasksCollectCoinsDeployedContract - | { address?: any; chain?: any } - | string - | Uint8Array, - ) => SubmittableExtrinsic, - [PalletCreditcoinOcwTasksCollectCoinsDeployedContract] - >; - setGateFaucet: AugmentedSubmittable< - (address: AccountId32 | string | Uint8Array) => SubmittableExtrinsic, - [AccountId32] - >; /** * Generic tx **/ diff --git a/creditcoin-js/src/interfaces/lookup.ts b/creditcoin-js/src/interfaces/lookup.ts index ca2a4d50cc..42df299e05 100644 --- a/creditcoin-js/src/interfaces/lookup.ts +++ b/creditcoin-js/src/interfaces/lookup.ts @@ -419,10 +419,8 @@ export default { PalletCreditcoinEvent: { _enum: { AddressRegistered: '(H256,PalletCreditcoinAddress)', - CollectCoinsRegistered: '(H256,PalletCreditcoinCollectCoinsUnverifiedCollectedCoins)', TransferRegistered: '(H256,PalletCreditcoinTransfer)', TransferVerified: 'H256', - CollectedCoinsMinted: '(H256,PalletCreditcoinCollectCoinsCollectedCoins)', TransferProcessed: 'H256', AskOrderAdded: '(PalletCreditcoinAskOrderId,PalletCreditcoinAskOrder)', BidOrderAdded: '(PalletCreditcoinBidOrderId,PalletCreditcoinBidOrder)', @@ -434,7 +432,7 @@ export default { LoanExempted: 'PalletCreditcoinDealOrderId', LegacyWalletClaimed: '(AccountId32,PalletCreditcoinLegacySighash,u128)', TransferFailedVerification: '(H256,PalletCreditcoinOcwErrorsVerificationFailureCause)', - CollectCoinsFailedVerification: '(H256,PalletCreditcoinOcwErrorsVerificationFailureCause)', + Burned: 'u64', }, }, /** @@ -458,29 +456,7 @@ export default { }, }, /** - * Lookup66: pallet_creditcoin::types::collect_coins::UnverifiedCollectedCoins - **/ - PalletCreditcoinCollectCoinsUnverifiedCollectedCoins: { - to: 'Bytes', - txId: 'Bytes', - contract: 'PalletCreditcoinOcwTasksCollectCoinsDeployedContract', - contractType: 'PalletCreditcoinCollectCoinsContractType', - }, - /** - * Lookup67: pallet_creditcoin::ocw::tasks::collect_coins::DeployedContract - **/ - PalletCreditcoinOcwTasksCollectCoinsDeployedContract: { - address: 'H160', - chain: 'PalletCreditcoinBlockchain', - }, - /** - * Lookup70: pallet_creditcoin::types::collect_coins::ContractType - **/ - PalletCreditcoinCollectCoinsContractType: { - _enum: ['GCRE', 'GATE'], - }, - /** - * Lookup72: pallet_creditcoin::types::transfer::Transfer + * Lookup66: pallet_creditcoin::types::transfer::Transfer **/ PalletCreditcoinTransfer: { blockchain: 'PalletCreditcoinBlockchain', @@ -496,7 +472,7 @@ export default { timestamp: 'Option', }, /** - * Lookup73: pallet_creditcoin::types::TransferKind + * Lookup67: pallet_creditcoin::types::TransferKind **/ PalletCreditcoinTransferKind: { _enum: { @@ -507,7 +483,7 @@ export default { }, }, /** - * Lookup74: pallet_creditcoin::types::OrderId + * Lookup68: pallet_creditcoin::types::OrderId **/ PalletCreditcoinOrderId: { _enum: { @@ -516,28 +492,19 @@ export default { }, }, /** - * Lookup75: pallet_creditcoin::types::DealOrderId + * Lookup69: pallet_creditcoin::types::DealOrderId **/ PalletCreditcoinDealOrderId: '(u32,H256)', /** - * Lookup76: pallet_creditcoin::types::RepaymentOrderId + * Lookup70: pallet_creditcoin::types::RepaymentOrderId **/ PalletCreditcoinRepaymentOrderId: '(u32,H256)', /** - * Lookup80: pallet_creditcoin::types::collect_coins::CollectedCoins - **/ - PalletCreditcoinCollectCoinsCollectedCoins: { - to: 'H256', - amount: 'u128', - txId: 'Bytes', - contractType: 'PalletCreditcoinCollectCoinsContractType', - }, - /** - * Lookup81: pallet_creditcoin::types::AskOrderId + * Lookup74: pallet_creditcoin::types::AskOrderId **/ PalletCreditcoinAskOrderId: '(u32,H256)', /** - * Lookup82: pallet_creditcoin::types::AskOrder + * Lookup75: pallet_creditcoin::types::AskOrder **/ PalletCreditcoinAskOrder: { blockchain: 'PalletCreditcoinBlockchain', @@ -548,11 +515,11 @@ export default { lender: 'AccountId32', }, /** - * Lookup83: pallet_creditcoin::types::loan_terms::AskTerms + * Lookup76: pallet_creditcoin::types::loan_terms::AskTerms **/ PalletCreditcoinLoanTermsAskTerms: 'PalletCreditcoinLoanTerms', /** - * Lookup84: pallet_creditcoin::types::loan_terms::LoanTerms + * Lookup77: pallet_creditcoin::types::loan_terms::LoanTerms **/ PalletCreditcoinLoanTerms: { amount: 'U256', @@ -560,7 +527,7 @@ export default { termLength: 'PalletCreditcoinLoanTermsDuration', }, /** - * Lookup85: pallet_creditcoin::types::loan_terms::InterestRate + * Lookup78: pallet_creditcoin::types::loan_terms::InterestRate **/ PalletCreditcoinLoanTermsInterestRate: { ratePerPeriod: 'u64', @@ -569,24 +536,24 @@ export default { interestType: 'PalletCreditcoinLoanTermsInterestType', }, /** - * Lookup86: pallet_creditcoin::types::loan_terms::Duration + * Lookup79: pallet_creditcoin::types::loan_terms::Duration **/ PalletCreditcoinLoanTermsDuration: { secs: 'u64', nanos: 'u32', }, /** - * Lookup87: pallet_creditcoin::types::loan_terms::InterestType + * Lookup80: pallet_creditcoin::types::loan_terms::InterestType **/ PalletCreditcoinLoanTermsInterestType: { _enum: ['Simple', 'Compound'], }, /** - * Lookup88: pallet_creditcoin::types::BidOrderId + * Lookup81: pallet_creditcoin::types::BidOrderId **/ PalletCreditcoinBidOrderId: '(u32,H256)', /** - * Lookup89: pallet_creditcoin::types::BidOrder + * Lookup82: pallet_creditcoin::types::BidOrder **/ PalletCreditcoinBidOrder: { blockchain: 'PalletCreditcoinBlockchain', @@ -597,15 +564,15 @@ export default { borrower: 'AccountId32', }, /** - * Lookup90: pallet_creditcoin::types::loan_terms::BidTerms + * Lookup83: pallet_creditcoin::types::loan_terms::BidTerms **/ PalletCreditcoinLoanTermsBidTerms: 'PalletCreditcoinLoanTerms', /** - * Lookup91: pallet_creditcoin::types::OfferId + * Lookup84: pallet_creditcoin::types::OfferId **/ PalletCreditcoinOfferId: '(u32,H256)', /** - * Lookup92: pallet_creditcoin::types::Offer + * Lookup85: pallet_creditcoin::types::Offer **/ PalletCreditcoinOffer: { blockchain: 'PalletCreditcoinBlockchain', @@ -616,7 +583,7 @@ export default { lender: 'AccountId32', }, /** - * Lookup93: pallet_creditcoin::types::DealOrder + * Lookup86: pallet_creditcoin::types::DealOrder **/ PalletCreditcoinDealOrder: { blockchain: 'PalletCreditcoinBlockchain', @@ -633,11 +600,11 @@ export default { borrower: 'AccountId32', }, /** - * Lookup96: pallet_creditcoin::types::LegacySighash + * Lookup89: pallet_creditcoin::types::LegacySighash **/ PalletCreditcoinLegacySighash: '[u8;60]', /** - * Lookup98: pallet_creditcoin::ocw::errors::VerificationFailureCause + * Lookup91: pallet_creditcoin::ocw::errors::VerificationFailureCause **/ PalletCreditcoinOcwErrorsVerificationFailureCause: { _enum: [ @@ -664,7 +631,7 @@ export default { ], }, /** - * Lookup99: pallet_rewards::pallet::Event + * Lookup93: pallet_rewards::pallet::Event **/ PalletRewardsEvent: { _enum: { @@ -672,7 +639,7 @@ export default { }, }, /** - * Lookup100: pallet_scheduler::pallet::Event + * Lookup94: pallet_scheduler::pallet::Event **/ PalletSchedulerEvent: { _enum: { @@ -704,11 +671,11 @@ export default { }, }, /** - * Lookup103: pallet_offchain_task_scheduler::pallet::Event + * Lookup97: pallet_offchain_task_scheduler::pallet::Event **/ PalletOffchainTaskSchedulerEvent: 'Null', /** - * Lookup104: pallet_identity::pallet::Event + * Lookup98: pallet_identity::pallet::Event **/ PalletIdentityEvent: { _enum: { @@ -756,7 +723,7 @@ export default { }, }, /** - * Lookup105: pallet_utility::pallet::Event + * Lookup99: pallet_utility::pallet::Event **/ PalletUtilityEvent: { _enum: { @@ -776,7 +743,7 @@ export default { }, }, /** - * Lookup106: pallet_proxy::pallet::Event + * Lookup100: pallet_proxy::pallet::Event **/ PalletProxyEvent: { _enum: { @@ -809,7 +776,7 @@ export default { }, }, /** - * Lookup108: pallet_fast_unstake::pallet::Event + * Lookup102: pallet_fast_unstake::pallet::Event **/ PalletFastUnstakeEvent: { _enum: { @@ -834,7 +801,7 @@ export default { }, }, /** - * Lookup110: pallet_nomination_pools::pallet::Event + * Lookup104: pallet_nomination_pools::pallet::Event **/ PalletNominationPoolsEvent: { _enum: { @@ -910,20 +877,20 @@ export default { }, }, /** - * Lookup111: pallet_nomination_pools::PoolState + * Lookup105: pallet_nomination_pools::PoolState **/ PalletNominationPoolsPoolState: { _enum: ['Open', 'Blocked', 'Destroying'], }, /** - * Lookup114: pallet_nomination_pools::CommissionChangeRate + * Lookup108: pallet_nomination_pools::CommissionChangeRate **/ PalletNominationPoolsCommissionChangeRate: { maxIncrease: 'Perbill', minDelay: 'u32', }, /** - * Lookup115: frame_system::Phase + * Lookup109: frame_system::Phase **/ FrameSystemPhase: { _enum: { @@ -933,14 +900,14 @@ export default { }, }, /** - * Lookup118: frame_system::LastRuntimeUpgradeInfo + * Lookup112: frame_system::LastRuntimeUpgradeInfo **/ FrameSystemLastRuntimeUpgradeInfo: { specVersion: 'Compact', specName: 'Text', }, /** - * Lookup121: frame_system::pallet::Call + * Lookup115: frame_system::pallet::Call **/ FrameSystemCall: { _enum: { @@ -975,7 +942,7 @@ export default { }, }, /** - * Lookup125: frame_system::limits::BlockWeights + * Lookup119: frame_system::limits::BlockWeights **/ FrameSystemLimitsBlockWeights: { baseBlock: 'SpWeightsWeightV2Weight', @@ -983,7 +950,7 @@ export default { perClass: 'FrameSupportDispatchPerDispatchClassWeightsPerClass', }, /** - * Lookup126: frame_support::dispatch::PerDispatchClass + * Lookup120: frame_support::dispatch::PerDispatchClass **/ FrameSupportDispatchPerDispatchClassWeightsPerClass: { normal: 'FrameSystemLimitsWeightsPerClass', @@ -991,7 +958,7 @@ export default { mandatory: 'FrameSystemLimitsWeightsPerClass', }, /** - * Lookup127: frame_system::limits::WeightsPerClass + * Lookup121: frame_system::limits::WeightsPerClass **/ FrameSystemLimitsWeightsPerClass: { baseExtrinsic: 'SpWeightsWeightV2Weight', @@ -1000,13 +967,13 @@ export default { reserved: 'Option', }, /** - * Lookup129: frame_system::limits::BlockLength + * Lookup123: frame_system::limits::BlockLength **/ FrameSystemLimitsBlockLength: { max: 'FrameSupportDispatchPerDispatchClassU32', }, /** - * Lookup130: frame_support::dispatch::PerDispatchClass + * Lookup124: frame_support::dispatch::PerDispatchClass **/ FrameSupportDispatchPerDispatchClassU32: { normal: 'u32', @@ -1014,14 +981,14 @@ export default { mandatory: 'u32', }, /** - * Lookup131: sp_weights::RuntimeDbWeight + * Lookup125: sp_weights::RuntimeDbWeight **/ SpWeightsRuntimeDbWeight: { read: 'u64', write: 'u64', }, /** - * Lookup132: sp_version::RuntimeVersion + * Lookup126: sp_version::RuntimeVersion **/ SpVersionRuntimeVersion: { specName: 'Text', @@ -1034,7 +1001,7 @@ export default { stateVersion: 'u8', }, /** - * Lookup137: frame_system::pallet::Error + * Lookup131: frame_system::pallet::Error **/ FrameSystemError: { _enum: [ @@ -1047,7 +1014,7 @@ export default { ], }, /** - * Lookup138: pallet_timestamp::pallet::Call + * Lookup132: pallet_timestamp::pallet::Call **/ PalletTimestampCall: { _enum: { @@ -1057,11 +1024,11 @@ export default { }, }, /** - * Lookup141: sp_consensus_babe::app::Public + * Lookup135: sp_consensus_babe::app::Public **/ SpConsensusBabeAppPublic: 'SpCoreSr25519Public', /** - * Lookup144: sp_consensus_babe::digests::NextConfigDescriptor + * Lookup138: sp_consensus_babe::digests::NextConfigDescriptor **/ SpConsensusBabeDigestsNextConfigDescriptor: { _enum: { @@ -1073,13 +1040,13 @@ export default { }, }, /** - * Lookup146: sp_consensus_babe::AllowedSlots + * Lookup140: sp_consensus_babe::AllowedSlots **/ SpConsensusBabeAllowedSlots: { _enum: ['PrimarySlots', 'PrimaryAndSecondaryPlainSlots', 'PrimaryAndSecondaryVRFSlots'], }, /** - * Lookup150: sp_consensus_babe::digests::PreDigest + * Lookup144: sp_consensus_babe::digests::PreDigest **/ SpConsensusBabeDigestsPreDigest: { _enum: { @@ -1090,7 +1057,7 @@ export default { }, }, /** - * Lookup151: sp_consensus_babe::digests::PrimaryPreDigest + * Lookup145: sp_consensus_babe::digests::PrimaryPreDigest **/ SpConsensusBabeDigestsPrimaryPreDigest: { authorityIndex: 'u32', @@ -1099,14 +1066,14 @@ export default { vrfProof: '[u8;64]', }, /** - * Lookup153: sp_consensus_babe::digests::SecondaryPlainPreDigest + * Lookup147: sp_consensus_babe::digests::SecondaryPlainPreDigest **/ SpConsensusBabeDigestsSecondaryPlainPreDigest: { authorityIndex: 'u32', slot: 'u64', }, /** - * Lookup154: sp_consensus_babe::digests::SecondaryVRFPreDigest + * Lookup148: sp_consensus_babe::digests::SecondaryVRFPreDigest **/ SpConsensusBabeDigestsSecondaryVRFPreDigest: { authorityIndex: 'u32', @@ -1115,14 +1082,14 @@ export default { vrfProof: '[u8;64]', }, /** - * Lookup155: sp_consensus_babe::BabeEpochConfiguration + * Lookup149: sp_consensus_babe::BabeEpochConfiguration **/ SpConsensusBabeBabeEpochConfiguration: { c: '(u64,u64)', allowedSlots: 'SpConsensusBabeAllowedSlots', }, /** - * Lookup159: pallet_babe::pallet::Call + * Lookup153: pallet_babe::pallet::Call **/ PalletBabeCall: { _enum: { @@ -1140,7 +1107,7 @@ export default { }, }, /** - * Lookup160: sp_consensus_slots::EquivocationProof, sp_consensus_babe::app::Public> + * Lookup154: sp_consensus_slots::EquivocationProof, sp_consensus_babe::app::Public> **/ SpConsensusSlotsEquivocationProof: { offender: 'SpConsensusBabeAppPublic', @@ -1149,7 +1116,7 @@ export default { secondHeader: 'SpRuntimeHeader', }, /** - * Lookup161: sp_runtime::generic::header::Header + * Lookup155: sp_runtime::generic::header::Header **/ SpRuntimeHeader: { parentHash: 'H256', @@ -1159,11 +1126,11 @@ export default { digest: 'SpRuntimeDigest', }, /** - * Lookup162: sp_runtime::traits::BlakeTwo256 + * Lookup156: sp_runtime::traits::BlakeTwo256 **/ SpRuntimeBlakeTwo256: 'Null', /** - * Lookup163: sp_session::MembershipProof + * Lookup157: sp_session::MembershipProof **/ SpSessionMembershipProof: { session: 'u32', @@ -1171,7 +1138,7 @@ export default { validatorCount: 'u32', }, /** - * Lookup164: pallet_babe::pallet::Error + * Lookup158: pallet_babe::pallet::Error **/ PalletBabeError: { _enum: [ @@ -1182,7 +1149,7 @@ export default { ], }, /** - * Lookup166: pallet_balances::BalanceLock + * Lookup160: pallet_balances::BalanceLock **/ PalletBalancesBalanceLock: { id: '[u8;8]', @@ -1190,20 +1157,20 @@ export default { reasons: 'PalletBalancesReasons', }, /** - * Lookup167: pallet_balances::Reasons + * Lookup161: pallet_balances::Reasons **/ PalletBalancesReasons: { _enum: ['Fee', 'Misc', 'All'], }, /** - * Lookup170: pallet_balances::ReserveData + * Lookup164: pallet_balances::ReserveData **/ PalletBalancesReserveData: { id: '[u8;8]', amount: 'u128', }, /** - * Lookup172: pallet_balances::pallet::Call + * Lookup166: pallet_balances::pallet::Call **/ PalletBalancesCall: { _enum: { @@ -1236,7 +1203,7 @@ export default { }, }, /** - * Lookup175: pallet_balances::pallet::Error + * Lookup170: pallet_balances::pallet::Error **/ PalletBalancesError: { _enum: [ @@ -1251,7 +1218,7 @@ export default { ], }, /** - * Lookup177: pallet_staking::StakingLedger + * Lookup172: pallet_staking::StakingLedger **/ PalletStakingStakingLedger: { stash: 'AccountId32', @@ -1261,14 +1228,14 @@ export default { claimedRewards: 'Vec', }, /** - * Lookup179: pallet_staking::UnlockChunk + * Lookup174: pallet_staking::UnlockChunk **/ PalletStakingUnlockChunk: { value: 'Compact', era: 'Compact', }, /** - * Lookup182: pallet_staking::RewardDestination + * Lookup177: pallet_staking::RewardDestination **/ PalletStakingRewardDestination: { _enum: { @@ -1280,7 +1247,7 @@ export default { }, }, /** - * Lookup183: pallet_staking::Nominations + * Lookup178: pallet_staking::Nominations **/ PalletStakingNominations: { targets: 'Vec', @@ -1288,21 +1255,21 @@ export default { suppressed: 'bool', }, /** - * Lookup185: pallet_staking::ActiveEraInfo + * Lookup180: pallet_staking::ActiveEraInfo **/ PalletStakingActiveEraInfo: { index: 'u32', start: 'Option', }, /** - * Lookup187: pallet_staking::EraRewardPoints + * Lookup182: pallet_staking::EraRewardPoints **/ PalletStakingEraRewardPoints: { total: 'u32', individual: 'BTreeMap', }, /** - * Lookup192: pallet_staking::UnappliedSlash + * Lookup187: pallet_staking::UnappliedSlash **/ PalletStakingUnappliedSlash: { validator: 'AccountId32', @@ -1312,7 +1279,7 @@ export default { payout: 'u128', }, /** - * Lookup196: pallet_staking::slashing::SlashingSpans + * Lookup191: pallet_staking::slashing::SlashingSpans **/ PalletStakingSlashingSlashingSpans: { spanIndex: 'u32', @@ -1321,14 +1288,14 @@ export default { prior: 'Vec', }, /** - * Lookup197: pallet_staking::slashing::SpanRecord + * Lookup192: pallet_staking::slashing::SpanRecord **/ PalletStakingSlashingSpanRecord: { slashed: 'u128', paidOut: 'u128', }, /** - * Lookup201: pallet_staking::pallet::pallet::Call + * Lookup196: pallet_staking::pallet::pallet::Call **/ PalletStakingPalletCall: { _enum: { @@ -1422,7 +1389,7 @@ export default { }, }, /** - * Lookup203: pallet_staking::pallet::pallet::ConfigOp + * Lookup198: pallet_staking::pallet::pallet::ConfigOp **/ PalletStakingPalletConfigOpU128: { _enum: { @@ -1432,7 +1399,7 @@ export default { }, }, /** - * Lookup204: pallet_staking::pallet::pallet::ConfigOp + * Lookup199: pallet_staking::pallet::pallet::ConfigOp **/ PalletStakingPalletConfigOpU32: { _enum: { @@ -1442,7 +1409,7 @@ export default { }, }, /** - * Lookup205: pallet_staking::pallet::pallet::ConfigOp + * Lookup200: pallet_staking::pallet::pallet::ConfigOp **/ PalletStakingPalletConfigOpPercent: { _enum: { @@ -1452,7 +1419,7 @@ export default { }, }, /** - * Lookup206: pallet_staking::pallet::pallet::ConfigOp + * Lookup201: pallet_staking::pallet::pallet::ConfigOp **/ PalletStakingPalletConfigOpPerbill: { _enum: { @@ -1462,7 +1429,7 @@ export default { }, }, /** - * Lookup207: pallet_staking::pallet::pallet::Error + * Lookup202: pallet_staking::pallet::pallet::Error **/ PalletStakingPalletError: { _enum: [ @@ -1494,14 +1461,14 @@ export default { ], }, /** - * Lookup208: sp_staking::offence::OffenceDetails + * Lookup203: sp_staking::offence::OffenceDetails **/ SpStakingOffenceOffenceDetails: { offender: '(AccountId32,PalletStakingExposure)', reporters: 'Vec', }, /** - * Lookup213: creditcoin_node_runtime::opaque::SessionKeys + * Lookup208: creditcoin_node_runtime::opaque::SessionKeys **/ CreditcoinNodeRuntimeOpaqueSessionKeys: { grandpa: 'SpConsensusGrandpaAppPublic', @@ -1509,11 +1476,11 @@ export default { imOnline: 'PalletImOnlineSr25519AppSr25519Public', }, /** - * Lookup215: sp_core::crypto::KeyTypeId + * Lookup210: sp_core::crypto::KeyTypeId **/ SpCoreCryptoKeyTypeId: '[u8;4]', /** - * Lookup216: pallet_session::pallet::Call + * Lookup211: pallet_session::pallet::Call **/ PalletSessionCall: { _enum: { @@ -1528,13 +1495,13 @@ export default { }, }, /** - * Lookup217: pallet_session::pallet::Error + * Lookup212: pallet_session::pallet::Error **/ PalletSessionError: { _enum: ['InvalidProof', 'NoAssociatedValidatorId', 'DuplicatedKey', 'NoKeys', 'NoAccount'], }, /** - * Lookup218: pallet_grandpa::StoredState + * Lookup213: pallet_grandpa::StoredState **/ PalletGrandpaStoredState: { _enum: { @@ -1551,7 +1518,7 @@ export default { }, }, /** - * Lookup219: pallet_grandpa::StoredPendingChange + * Lookup214: pallet_grandpa::StoredPendingChange **/ PalletGrandpaStoredPendingChange: { scheduledAt: 'u32', @@ -1560,7 +1527,7 @@ export default { forced: 'Option', }, /** - * Lookup221: pallet_grandpa::pallet::Call + * Lookup216: pallet_grandpa::pallet::Call **/ PalletGrandpaCall: { _enum: { @@ -1579,14 +1546,14 @@ export default { }, }, /** - * Lookup222: sp_consensus_grandpa::EquivocationProof + * Lookup217: sp_consensus_grandpa::EquivocationProof **/ SpConsensusGrandpaEquivocationProof: { setId: 'u64', equivocation: 'SpConsensusGrandpaEquivocation', }, /** - * Lookup223: sp_consensus_grandpa::Equivocation + * Lookup218: sp_consensus_grandpa::Equivocation **/ SpConsensusGrandpaEquivocation: { _enum: { @@ -1595,7 +1562,7 @@ export default { }, }, /** - * Lookup224: finality_grandpa::Equivocation, sp_consensus_grandpa::app::Signature> + * Lookup219: finality_grandpa::Equivocation, sp_consensus_grandpa::app::Signature> **/ FinalityGrandpaEquivocationPrevote: { roundNumber: 'u64', @@ -1604,22 +1571,22 @@ export default { second: '(FinalityGrandpaPrevote,SpConsensusGrandpaAppSignature)', }, /** - * Lookup225: finality_grandpa::Prevote + * Lookup220: finality_grandpa::Prevote **/ FinalityGrandpaPrevote: { targetHash: 'H256', targetNumber: 'u32', }, /** - * Lookup226: sp_consensus_grandpa::app::Signature + * Lookup221: sp_consensus_grandpa::app::Signature **/ SpConsensusGrandpaAppSignature: 'SpCoreEd25519Signature', /** - * Lookup227: sp_core::ed25519::Signature + * Lookup222: sp_core::ed25519::Signature **/ SpCoreEd25519Signature: '[u8;64]', /** - * Lookup229: finality_grandpa::Equivocation, sp_consensus_grandpa::app::Signature> + * Lookup224: finality_grandpa::Equivocation, sp_consensus_grandpa::app::Signature> **/ FinalityGrandpaEquivocationPrecommit: { roundNumber: 'u64', @@ -1628,14 +1595,14 @@ export default { second: '(FinalityGrandpaPrecommit,SpConsensusGrandpaAppSignature)', }, /** - * Lookup230: finality_grandpa::Precommit + * Lookup225: finality_grandpa::Precommit **/ FinalityGrandpaPrecommit: { targetHash: 'H256', targetNumber: 'u32', }, /** - * Lookup232: pallet_grandpa::pallet::Error + * Lookup227: pallet_grandpa::pallet::Error **/ PalletGrandpaError: { _enum: [ @@ -1649,14 +1616,14 @@ export default { ], }, /** - * Lookup236: pallet_im_online::BoundedOpaqueNetworkState + * Lookup231: pallet_im_online::BoundedOpaqueNetworkState **/ PalletImOnlineBoundedOpaqueNetworkState: { peerId: 'Bytes', externalAddresses: 'Vec', }, /** - * Lookup240: pallet_im_online::pallet::Call + * Lookup235: pallet_im_online::pallet::Call **/ PalletImOnlineCall: { _enum: { @@ -1667,7 +1634,7 @@ export default { }, }, /** - * Lookup241: pallet_im_online::Heartbeat + * Lookup236: pallet_im_online::Heartbeat **/ PalletImOnlineHeartbeat: { blockNumber: 'u32', @@ -1677,28 +1644,28 @@ export default { validatorsLen: 'u32', }, /** - * Lookup242: sp_core::offchain::OpaqueNetworkState + * Lookup237: sp_core::offchain::OpaqueNetworkState **/ SpCoreOffchainOpaqueNetworkState: { peerId: 'OpaquePeerId', externalAddresses: 'Vec', }, /** - * Lookup246: pallet_im_online::sr25519::app_sr25519::Signature + * Lookup241: pallet_im_online::sr25519::app_sr25519::Signature **/ PalletImOnlineSr25519AppSr25519Signature: 'SpCoreSr25519Signature', /** - * Lookup247: sp_core::sr25519::Signature + * Lookup242: sp_core::sr25519::Signature **/ SpCoreSr25519Signature: '[u8;64]', /** - * Lookup248: pallet_im_online::pallet::Error + * Lookup243: pallet_im_online::pallet::Error **/ PalletImOnlineError: { _enum: ['InvalidKey', 'DuplicatedHeartbeat'], }, /** - * Lookup249: pallet_bags_list::list::Node + * Lookup244: pallet_bags_list::list::Node **/ PalletBagsListListNode: { id: 'AccountId32', @@ -1708,14 +1675,14 @@ export default { score: 'u64', }, /** - * Lookup250: pallet_bags_list::list::Bag + * Lookup245: pallet_bags_list::list::Bag **/ PalletBagsListListBag: { head: 'Option', tail: 'Option', }, /** - * Lookup251: pallet_bags_list::pallet::Call + * Lookup246: pallet_bags_list::pallet::Call **/ PalletBagsListCall: { _enum: { @@ -1728,7 +1695,7 @@ export default { }, }, /** - * Lookup253: pallet_bags_list::pallet::Error + * Lookup248: pallet_bags_list::pallet::Error **/ PalletBagsListError: { _enum: { @@ -1736,19 +1703,19 @@ export default { }, }, /** - * Lookup254: pallet_bags_list::list::ListError + * Lookup249: pallet_bags_list::list::ListError **/ PalletBagsListListListError: { _enum: ['Duplicate', 'NotHeavier', 'NotInSameBag', 'NodeNotFound'], }, /** - * Lookup256: pallet_transaction_payment::Releases + * Lookup251: pallet_transaction_payment::Releases **/ PalletTransactionPaymentReleases: { _enum: ['V1Ancient', 'V2'], }, /** - * Lookup257: pallet_sudo::pallet::Call + * Lookup252: pallet_sudo::pallet::Call **/ PalletSudoCall: { _enum: { @@ -1772,7 +1739,7 @@ export default { }, }, /** - * Lookup259: pallet_creditcoin::pallet::Call + * Lookup254: pallet_creditcoin::pallet::Call **/ PalletCreditcoinCall: { _enum: { @@ -1826,10 +1793,7 @@ export default { dealOrderId: 'PalletCreditcoinDealOrderId', transferId: 'H256', }, - request_collect_coins: { - evmAddress: 'Bytes', - txId: 'Bytes', - }, + __Unused10: 'Null', register_funding_transfer: { transferKind: 'PalletCreditcoinTransferKind', dealOrderId: 'PalletCreditcoinDealOrderId', @@ -1859,9 +1823,7 @@ export default { who: 'AccountId32', }, __Unused19: 'Null', - set_collect_coins_contract: { - contract: 'PalletCreditcoinOcwTasksCollectCoinsDeployedContract', - }, + __Unused20: 'Null', remove_authority: { who: 'AccountId32', }, @@ -1870,27 +1832,18 @@ export default { address: 'Bytes', ownershipProof: 'PalletCreditcoinOwnershipProof', }, - set_gate_contract: { - contract: 'PalletCreditcoinOcwTasksCollectCoinsDeployedContract', - }, - set_gate_faucet: { - address: 'AccountId32', - }, - request_collect_coins_v2: { - contract: 'PalletCreditcoinCollectCoinsBurnDetails', - }, }, }, /** - * Lookup260: sp_core::ecdsa::Public + * Lookup255: sp_core::ecdsa::Public **/ SpCoreEcdsaPublic: '[u8;33]', /** - * Lookup262: sp_core::ecdsa::Signature + * Lookup257: sp_core::ecdsa::Signature **/ SpCoreEcdsaSignature: '[u8;65]', /** - * Lookup264: sp_runtime::MultiSigner + * Lookup259: sp_runtime::MultiSigner **/ SpRuntimeMultiSigner: { _enum: { @@ -1900,7 +1853,7 @@ export default { }, }, /** - * Lookup265: sp_runtime::MultiSignature + * Lookup260: sp_runtime::MultiSignature **/ SpRuntimeMultiSignature: { _enum: { @@ -1910,25 +1863,23 @@ export default { }, }, /** - * Lookup266: pallet_creditcoin::types::TaskOutput + * Lookup261: pallet_creditcoin::types::TaskOutput **/ PalletCreditcoinTaskOutput: { _enum: { VerifyTransfer: '(H256,PalletCreditcoinTransfer)', - CollectCoins: '(H256,PalletCreditcoinCollectCoinsCollectedCoins)', }, }, /** - * Lookup267: pallet_creditcoin::types::TaskId + * Lookup262: pallet_creditcoin::types::TaskId **/ PalletCreditcoinTaskId: { _enum: { VerifyTransfer: 'H256', - CollectCoins: 'H256', }, }, /** - * Lookup268: pallet_creditcoin::types::OwnershipProof + * Lookup263: pallet_creditcoin::types::OwnershipProof **/ PalletCreditcoinOwnershipProof: { _enum: { @@ -1937,16 +1888,7 @@ export default { }, }, /** - * Lookup269: pallet_creditcoin::types::collect_coins::BurnDetails - **/ - PalletCreditcoinCollectCoinsBurnDetails: { - _enum: { - GCRE: '(Bytes,Bytes)', - GATE: '(Bytes,Bytes)', - }, - }, - /** - * Lookup270: pallet_scheduler::pallet::Call + * Lookup264: pallet_scheduler::pallet::Call **/ PalletSchedulerCall: { _enum: { @@ -1986,7 +1928,7 @@ export default { }, }, /** - * Lookup272: pallet_identity::pallet::Call + * Lookup266: pallet_identity::pallet::Call **/ PalletIdentityCall: { _enum: { @@ -2046,7 +1988,7 @@ export default { }, }, /** - * Lookup273: pallet_identity::types::IdentityInfo + * Lookup267: pallet_identity::types::IdentityInfo **/ PalletIdentityIdentityInfo: { additional: 'Vec<(Data,Data)>', @@ -2060,7 +2002,7 @@ export default { twitter: 'Data', }, /** - * Lookup309: pallet_identity::types::BitFlags + * Lookup303: pallet_identity::types::BitFlags **/ PalletIdentityBitFlags: { _bitLength: 64, @@ -2074,7 +2016,7 @@ export default { Twitter: 128, }, /** - * Lookup310: pallet_identity::types::IdentityField + * Lookup304: pallet_identity::types::IdentityField **/ PalletIdentityIdentityField: { _enum: [ @@ -2210,7 +2152,7 @@ export default { ], }, /** - * Lookup311: pallet_identity::types::Judgement + * Lookup305: pallet_identity::types::Judgement **/ PalletIdentityJudgement: { _enum: { @@ -2224,7 +2166,7 @@ export default { }, }, /** - * Lookup312: pallet_utility::pallet::Call + * Lookup306: pallet_utility::pallet::Call **/ PalletUtilityCall: { _enum: { @@ -2252,7 +2194,7 @@ export default { }, }, /** - * Lookup314: creditcoin_node_runtime::OriginCaller + * Lookup308: creditcoin_node_runtime::OriginCaller **/ CreditcoinNodeRuntimeOriginCaller: { _enum: { @@ -2261,7 +2203,7 @@ export default { }, }, /** - * Lookup315: frame_support::dispatch::RawOrigin + * Lookup309: frame_support::dispatch::RawOrigin **/ FrameSupportDispatchRawOrigin: { _enum: { @@ -2271,11 +2213,11 @@ export default { }, }, /** - * Lookup316: sp_core::Void + * Lookup310: sp_core::Void **/ SpCoreVoid: 'Null', /** - * Lookup317: pallet_proxy::pallet::Call + * Lookup311: pallet_proxy::pallet::Call **/ PalletProxyCall: { _enum: { @@ -2328,7 +2270,7 @@ export default { }, }, /** - * Lookup319: pallet_fast_unstake::pallet::Call + * Lookup313: pallet_fast_unstake::pallet::Call **/ PalletFastUnstakeCall: { _enum: { @@ -2340,7 +2282,7 @@ export default { }, }, /** - * Lookup320: pallet_nomination_pools::pallet::Call + * Lookup314: pallet_nomination_pools::pallet::Call **/ PalletNominationPoolsCall: { _enum: { @@ -2434,7 +2376,7 @@ export default { }, }, /** - * Lookup321: pallet_nomination_pools::BondExtra + * Lookup315: pallet_nomination_pools::BondExtra **/ PalletNominationPoolsBondExtra: { _enum: { @@ -2443,7 +2385,7 @@ export default { }, }, /** - * Lookup322: pallet_nomination_pools::ConfigOp + * Lookup316: pallet_nomination_pools::ConfigOp **/ PalletNominationPoolsConfigOpU128: { _enum: { @@ -2453,7 +2395,7 @@ export default { }, }, /** - * Lookup323: pallet_nomination_pools::ConfigOp + * Lookup317: pallet_nomination_pools::ConfigOp **/ PalletNominationPoolsConfigOpU32: { _enum: { @@ -2463,7 +2405,7 @@ export default { }, }, /** - * Lookup324: pallet_nomination_pools::ConfigOp + * Lookup318: pallet_nomination_pools::ConfigOp **/ PalletNominationPoolsConfigOpPerbill: { _enum: { @@ -2473,7 +2415,7 @@ export default { }, }, /** - * Lookup325: pallet_nomination_pools::ConfigOp + * Lookup319: pallet_nomination_pools::ConfigOp **/ PalletNominationPoolsConfigOpAccountId32: { _enum: { @@ -2483,19 +2425,41 @@ export default { }, }, /** - * Lookup326: pallet_nomination_pools::ClaimPermission + * Lookup320: pallet_nomination_pools::ClaimPermission **/ PalletNominationPoolsClaimPermission: { _enum: ['Permissioned', 'PermissionlessCompound', 'PermissionlessWithdraw', 'PermissionlessAll'], }, /** - * Lookup327: pallet_sudo::pallet::Error + * Lookup321: pallet_sudo::pallet::Error **/ PalletSudoError: { _enum: ['RequireSudo'], }, /** - * Lookup329: pallet_creditcoin::types::cleanup::StorageCleanupState + * Lookup324: pallet_creditcoin::types::collect_coins::CollectedCoins + **/ + PalletCreditcoinCollectCoinsCollectedCoins: { + to: 'H256', + amount: 'u128', + txId: 'Bytes', + contractType: 'PalletCreditcoinCollectCoinsContractType', + }, + /** + * Lookup325: pallet_creditcoin::types::collect_coins::ContractType + **/ + PalletCreditcoinCollectCoinsContractType: { + _enum: ['GCRE', 'GATE'], + }, + /** + * Lookup326: pallet_creditcoin::ocw::tasks::collect_coins::DeployedContract + **/ + PalletCreditcoinOcwTasksCollectCoinsDeployedContract: { + address: 'H160', + chain: 'PalletCreditcoinBlockchain', + }, + /** + * Lookup328: pallet_creditcoin::types::cleanup::StorageCleanupState **/ PalletCreditcoinCleanupStorageCleanupState: { askOrders: 'PalletCreditcoinCleanupStorageItemCleanupState', @@ -2503,12 +2467,20 @@ export default { offers: 'PalletCreditcoinCleanupStorageItemCleanupState', }, /** - * Lookup330: pallet_creditcoin::types::cleanup::StorageItemCleanupState + * Lookup329: pallet_creditcoin::types::cleanup::StorageItemCleanupState **/ PalletCreditcoinCleanupStorageItemCleanupState: { onBlock: 'u32', cursor: 'Option', }, + /** + * Lookup332: pallet_creditcoin::types::BurnInfo + **/ + PalletCreditcoinBurnInfo: { + account: 'AccountId32', + amount: 'u128', + collector: 'AccountId32', + }, /** * Lookup333: pallet_creditcoin::pallet::Error **/ @@ -2574,6 +2546,8 @@ export default { 'UnsupportedBlockchain', 'BurnGATEFaucetNotSet', 'BurnGATEInsufficientFaucetBalance', + 'BurnSettlementError', + 'BurnInsufficientFunds', ], }, /** @@ -2632,7 +2606,6 @@ export default { PalletCreditcoinTask: { _enum: { VerifyTransfer: 'PalletCreditcoinTransferUnverifiedTransfer', - CollectCoins: 'PalletCreditcoinCollectCoinsUnverifiedCollectedCoins', }, }, /** @@ -2803,11 +2776,11 @@ export default { balance: 'u128', }, /** - * Lookup392: frame_support::PalletId + * Lookup391: frame_support::PalletId **/ FrameSupportPalletId: '[u8;8]', /** - * Lookup393: pallet_nomination_pools::pallet::Error + * Lookup392: pallet_nomination_pools::pallet::Error **/ PalletNominationPoolsError: { _enum: { @@ -2844,7 +2817,7 @@ export default { }, }, /** - * Lookup394: pallet_nomination_pools::pallet::DefensiveError + * Lookup393: pallet_nomination_pools::pallet::DefensiveError **/ PalletNominationPoolsDefensiveError: { _enum: [ @@ -2856,35 +2829,35 @@ export default { ], }, /** - * Lookup397: frame_system::extensions::check_non_zero_sender::CheckNonZeroSender + * Lookup396: frame_system::extensions::check_non_zero_sender::CheckNonZeroSender **/ FrameSystemExtensionsCheckNonZeroSender: 'Null', /** - * Lookup398: frame_system::extensions::check_spec_version::CheckSpecVersion + * Lookup397: frame_system::extensions::check_spec_version::CheckSpecVersion **/ FrameSystemExtensionsCheckSpecVersion: 'Null', /** - * Lookup399: frame_system::extensions::check_tx_version::CheckTxVersion + * Lookup398: frame_system::extensions::check_tx_version::CheckTxVersion **/ FrameSystemExtensionsCheckTxVersion: 'Null', /** - * Lookup400: frame_system::extensions::check_genesis::CheckGenesis + * Lookup399: frame_system::extensions::check_genesis::CheckGenesis **/ FrameSystemExtensionsCheckGenesis: 'Null', /** - * Lookup403: frame_system::extensions::check_nonce::CheckNonce + * Lookup402: frame_system::extensions::check_nonce::CheckNonce **/ FrameSystemExtensionsCheckNonce: 'Compact', /** - * Lookup404: frame_system::extensions::check_weight::CheckWeight + * Lookup403: frame_system::extensions::check_weight::CheckWeight **/ FrameSystemExtensionsCheckWeight: 'Null', /** - * Lookup405: pallet_transaction_payment::ChargeTransactionPayment + * Lookup404: pallet_transaction_payment::ChargeTransactionPayment **/ PalletTransactionPaymentChargeTransactionPayment: 'Compact', /** - * Lookup406: creditcoin_node_runtime::Runtime + * Lookup405: creditcoin_node_runtime::Runtime **/ CreditcoinNodeRuntimeRuntime: 'Null', }; diff --git a/creditcoin-js/src/interfaces/registry.ts b/creditcoin-js/src/interfaces/registry.ts index 3fe5bdc9f4..d571c3b78c 100644 --- a/creditcoin-js/src/interfaces/registry.ts +++ b/creditcoin-js/src/interfaces/registry.ts @@ -60,13 +60,12 @@ import type { PalletCreditcoinBidOrder, PalletCreditcoinBidOrderId, PalletCreditcoinBlockchain, + PalletCreditcoinBurnInfo, PalletCreditcoinCall, PalletCreditcoinCleanupStorageCleanupState, PalletCreditcoinCleanupStorageItemCleanupState, - PalletCreditcoinCollectCoinsBurnDetails, PalletCreditcoinCollectCoinsCollectedCoins, PalletCreditcoinCollectCoinsContractType, - PalletCreditcoinCollectCoinsUnverifiedCollectedCoins, PalletCreditcoinDealOrder, PalletCreditcoinDealOrderId, PalletCreditcoinError, @@ -279,13 +278,12 @@ declare module '@polkadot/types/types/registry' { PalletCreditcoinBidOrder: PalletCreditcoinBidOrder; PalletCreditcoinBidOrderId: PalletCreditcoinBidOrderId; PalletCreditcoinBlockchain: PalletCreditcoinBlockchain; + PalletCreditcoinBurnInfo: PalletCreditcoinBurnInfo; PalletCreditcoinCall: PalletCreditcoinCall; PalletCreditcoinCleanupStorageCleanupState: PalletCreditcoinCleanupStorageCleanupState; PalletCreditcoinCleanupStorageItemCleanupState: PalletCreditcoinCleanupStorageItemCleanupState; - PalletCreditcoinCollectCoinsBurnDetails: PalletCreditcoinCollectCoinsBurnDetails; PalletCreditcoinCollectCoinsCollectedCoins: PalletCreditcoinCollectCoinsCollectedCoins; PalletCreditcoinCollectCoinsContractType: PalletCreditcoinCollectCoinsContractType; - PalletCreditcoinCollectCoinsUnverifiedCollectedCoins: PalletCreditcoinCollectCoinsUnverifiedCollectedCoins; PalletCreditcoinDealOrder: PalletCreditcoinDealOrder; PalletCreditcoinDealOrderId: PalletCreditcoinDealOrderId; PalletCreditcoinError: PalletCreditcoinError; diff --git a/creditcoin-js/src/interfaces/types-lookup.ts b/creditcoin-js/src/interfaces/types-lookup.ts index 0f7d908aca..724fbdbbff 100644 --- a/creditcoin-js/src/interfaces/types-lookup.ts +++ b/creditcoin-js/src/interfaces/types-lookup.ts @@ -514,14 +514,10 @@ declare module '@polkadot/types/lookup' { interface PalletCreditcoinEvent extends Enum { readonly isAddressRegistered: boolean; readonly asAddressRegistered: ITuple<[H256, PalletCreditcoinAddress]>; - readonly isCollectCoinsRegistered: boolean; - readonly asCollectCoinsRegistered: ITuple<[H256, PalletCreditcoinCollectCoinsUnverifiedCollectedCoins]>; readonly isTransferRegistered: boolean; readonly asTransferRegistered: ITuple<[H256, PalletCreditcoinTransfer]>; readonly isTransferVerified: boolean; readonly asTransferVerified: H256; - readonly isCollectedCoinsMinted: boolean; - readonly asCollectedCoinsMinted: ITuple<[H256, PalletCreditcoinCollectCoinsCollectedCoins]>; readonly isTransferProcessed: boolean; readonly asTransferProcessed: H256; readonly isAskOrderAdded: boolean; @@ -544,14 +540,12 @@ declare module '@polkadot/types/lookup' { readonly asLegacyWalletClaimed: ITuple<[AccountId32, PalletCreditcoinLegacySighash, u128]>; readonly isTransferFailedVerification: boolean; readonly asTransferFailedVerification: ITuple<[H256, PalletCreditcoinOcwErrorsVerificationFailureCause]>; - readonly isCollectCoinsFailedVerification: boolean; - readonly asCollectCoinsFailedVerification: ITuple<[H256, PalletCreditcoinOcwErrorsVerificationFailureCause]>; + readonly isBurned: boolean; + readonly asBurned: u64; readonly type: | 'AddressRegistered' - | 'CollectCoinsRegistered' | 'TransferRegistered' | 'TransferVerified' - | 'CollectedCoinsMinted' | 'TransferProcessed' | 'AskOrderAdded' | 'BidOrderAdded' @@ -563,7 +557,7 @@ declare module '@polkadot/types/lookup' { | 'LoanExempted' | 'LegacyWalletClaimed' | 'TransferFailedVerification' - | 'CollectCoinsFailedVerification'; + | 'Burned'; } /** @name PalletCreditcoinAddress (62) */ @@ -584,28 +578,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Ethereum' | 'Rinkeby' | 'Luniverse' | 'Bitcoin' | 'Other'; } - /** @name PalletCreditcoinCollectCoinsUnverifiedCollectedCoins (66) */ - interface PalletCreditcoinCollectCoinsUnverifiedCollectedCoins extends Struct { - readonly to: Bytes; - readonly txId: Bytes; - readonly contract: PalletCreditcoinOcwTasksCollectCoinsDeployedContract; - readonly contractType: PalletCreditcoinCollectCoinsContractType; - } - - /** @name PalletCreditcoinOcwTasksCollectCoinsDeployedContract (67) */ - interface PalletCreditcoinOcwTasksCollectCoinsDeployedContract extends Struct { - readonly address: H160; - readonly chain: PalletCreditcoinBlockchain; - } - - /** @name PalletCreditcoinCollectCoinsContractType (70) */ - interface PalletCreditcoinCollectCoinsContractType extends Enum { - readonly isGcre: boolean; - readonly isGate: boolean; - readonly type: 'Gcre' | 'Gate'; - } - - /** @name PalletCreditcoinTransfer (72) */ + /** @name PalletCreditcoinTransfer (66) */ interface PalletCreditcoinTransfer extends Struct { readonly blockchain: PalletCreditcoinBlockchain; readonly kind: PalletCreditcoinTransferKind; @@ -620,7 +593,7 @@ declare module '@polkadot/types/lookup' { readonly timestamp: Option; } - /** @name PalletCreditcoinTransferKind (73) */ + /** @name PalletCreditcoinTransferKind (67) */ interface PalletCreditcoinTransferKind extends Enum { readonly isErc20: boolean; readonly asErc20: Bytes; @@ -632,7 +605,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Erc20' | 'Ethless' | 'Native' | 'Other'; } - /** @name PalletCreditcoinOrderId (74) */ + /** @name PalletCreditcoinOrderId (68) */ interface PalletCreditcoinOrderId extends Enum { readonly isDeal: boolean; readonly asDeal: PalletCreditcoinDealOrderId; @@ -641,24 +614,16 @@ declare module '@polkadot/types/lookup' { readonly type: 'Deal' | 'Repayment'; } - /** @name PalletCreditcoinDealOrderId (75) */ + /** @name PalletCreditcoinDealOrderId (69) */ interface PalletCreditcoinDealOrderId extends ITuple<[u32, H256]> {} - /** @name PalletCreditcoinRepaymentOrderId (76) */ + /** @name PalletCreditcoinRepaymentOrderId (70) */ interface PalletCreditcoinRepaymentOrderId extends ITuple<[u32, H256]> {} - /** @name PalletCreditcoinCollectCoinsCollectedCoins (80) */ - interface PalletCreditcoinCollectCoinsCollectedCoins extends Struct { - readonly to: H256; - readonly amount: u128; - readonly txId: Bytes; - readonly contractType: PalletCreditcoinCollectCoinsContractType; - } - - /** @name PalletCreditcoinAskOrderId (81) */ + /** @name PalletCreditcoinAskOrderId (74) */ interface PalletCreditcoinAskOrderId extends ITuple<[u32, H256]> {} - /** @name PalletCreditcoinAskOrder (82) */ + /** @name PalletCreditcoinAskOrder (75) */ interface PalletCreditcoinAskOrder extends Struct { readonly blockchain: PalletCreditcoinBlockchain; readonly lenderAddressId: H256; @@ -668,17 +633,17 @@ declare module '@polkadot/types/lookup' { readonly lender: AccountId32; } - /** @name PalletCreditcoinLoanTermsAskTerms (83) */ + /** @name PalletCreditcoinLoanTermsAskTerms (76) */ interface PalletCreditcoinLoanTermsAskTerms extends PalletCreditcoinLoanTerms {} - /** @name PalletCreditcoinLoanTerms (84) */ + /** @name PalletCreditcoinLoanTerms (77) */ interface PalletCreditcoinLoanTerms extends Struct { readonly amount: U256; readonly interestRate: PalletCreditcoinLoanTermsInterestRate; readonly termLength: PalletCreditcoinLoanTermsDuration; } - /** @name PalletCreditcoinLoanTermsInterestRate (85) */ + /** @name PalletCreditcoinLoanTermsInterestRate (78) */ interface PalletCreditcoinLoanTermsInterestRate extends Struct { readonly ratePerPeriod: u64; readonly decimals: u64; @@ -686,23 +651,23 @@ declare module '@polkadot/types/lookup' { readonly interestType: PalletCreditcoinLoanTermsInterestType; } - /** @name PalletCreditcoinLoanTermsDuration (86) */ + /** @name PalletCreditcoinLoanTermsDuration (79) */ interface PalletCreditcoinLoanTermsDuration extends Struct { readonly secs: u64; readonly nanos: u32; } - /** @name PalletCreditcoinLoanTermsInterestType (87) */ + /** @name PalletCreditcoinLoanTermsInterestType (80) */ interface PalletCreditcoinLoanTermsInterestType extends Enum { readonly isSimple: boolean; readonly isCompound: boolean; readonly type: 'Simple' | 'Compound'; } - /** @name PalletCreditcoinBidOrderId (88) */ + /** @name PalletCreditcoinBidOrderId (81) */ interface PalletCreditcoinBidOrderId extends ITuple<[u32, H256]> {} - /** @name PalletCreditcoinBidOrder (89) */ + /** @name PalletCreditcoinBidOrder (82) */ interface PalletCreditcoinBidOrder extends Struct { readonly blockchain: PalletCreditcoinBlockchain; readonly borrowerAddressId: H256; @@ -712,13 +677,13 @@ declare module '@polkadot/types/lookup' { readonly borrower: AccountId32; } - /** @name PalletCreditcoinLoanTermsBidTerms (90) */ + /** @name PalletCreditcoinLoanTermsBidTerms (83) */ interface PalletCreditcoinLoanTermsBidTerms extends PalletCreditcoinLoanTerms {} - /** @name PalletCreditcoinOfferId (91) */ + /** @name PalletCreditcoinOfferId (84) */ interface PalletCreditcoinOfferId extends ITuple<[u32, H256]> {} - /** @name PalletCreditcoinOffer (92) */ + /** @name PalletCreditcoinOffer (85) */ interface PalletCreditcoinOffer extends Struct { readonly blockchain: PalletCreditcoinBlockchain; readonly askId: PalletCreditcoinAskOrderId; @@ -728,7 +693,7 @@ declare module '@polkadot/types/lookup' { readonly lender: AccountId32; } - /** @name PalletCreditcoinDealOrder (93) */ + /** @name PalletCreditcoinDealOrder (86) */ interface PalletCreditcoinDealOrder extends Struct { readonly blockchain: PalletCreditcoinBlockchain; readonly offerId: PalletCreditcoinOfferId; @@ -744,10 +709,10 @@ declare module '@polkadot/types/lookup' { readonly borrower: AccountId32; } - /** @name PalletCreditcoinLegacySighash (96) */ + /** @name PalletCreditcoinLegacySighash (89) */ interface PalletCreditcoinLegacySighash extends U8aFixed {} - /** @name PalletCreditcoinOcwErrorsVerificationFailureCause (98) */ + /** @name PalletCreditcoinOcwErrorsVerificationFailureCause (91) */ interface PalletCreditcoinOcwErrorsVerificationFailureCause extends Enum { readonly isTaskNonexistent: boolean; readonly isTaskFailed: boolean; @@ -792,14 +757,14 @@ declare module '@polkadot/types/lookup' { | 'InsufficientFaucetBalance'; } - /** @name PalletRewardsEvent (99) */ + /** @name PalletRewardsEvent (93) */ interface PalletRewardsEvent extends Enum { readonly isRewardIssued: boolean; readonly asRewardIssued: ITuple<[AccountId32, u128]>; readonly type: 'RewardIssued'; } - /** @name PalletSchedulerEvent (100) */ + /** @name PalletSchedulerEvent (94) */ interface PalletSchedulerEvent extends Enum { readonly isScheduled: boolean; readonly asScheduled: { @@ -841,10 +806,10 @@ declare module '@polkadot/types/lookup' { | 'PermanentlyOverweight'; } - /** @name PalletOffchainTaskSchedulerEvent (103) */ + /** @name PalletOffchainTaskSchedulerEvent (97) */ type PalletOffchainTaskSchedulerEvent = Null; - /** @name PalletIdentityEvent (104) */ + /** @name PalletIdentityEvent (98) */ interface PalletIdentityEvent extends Enum { readonly isIdentitySet: boolean; readonly asIdentitySet: { @@ -910,7 +875,7 @@ declare module '@polkadot/types/lookup' { | 'SubIdentityRevoked'; } - /** @name PalletUtilityEvent (105) */ + /** @name PalletUtilityEvent (99) */ interface PalletUtilityEvent extends Enum { readonly isBatchInterrupted: boolean; readonly asBatchInterrupted: { @@ -937,7 +902,7 @@ declare module '@polkadot/types/lookup' { | 'DispatchedAs'; } - /** @name PalletProxyEvent (106) */ + /** @name PalletProxyEvent (100) */ interface PalletProxyEvent extends Enum { readonly isProxyExecuted: boolean; readonly asProxyExecuted: { @@ -973,7 +938,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'ProxyExecuted' | 'PureCreated' | 'Announced' | 'ProxyAdded' | 'ProxyRemoved'; } - /** @name PalletFastUnstakeEvent (108) */ + /** @name PalletFastUnstakeEvent (102) */ interface PalletFastUnstakeEvent extends Enum { readonly isUnstaked: boolean; readonly asUnstaked: { @@ -997,7 +962,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Unstaked' | 'Slashed' | 'InternalError' | 'BatchChecked' | 'BatchFinished'; } - /** @name PalletNominationPoolsEvent (110) */ + /** @name PalletNominationPoolsEvent (104) */ interface PalletNominationPoolsEvent extends Enum { readonly isCreated: boolean; readonly asCreated: { @@ -1101,7 +1066,7 @@ declare module '@polkadot/types/lookup' { | 'PoolCommissionClaimed'; } - /** @name PalletNominationPoolsPoolState (111) */ + /** @name PalletNominationPoolsPoolState (105) */ interface PalletNominationPoolsPoolState extends Enum { readonly isOpen: boolean; readonly isBlocked: boolean; @@ -1109,13 +1074,13 @@ declare module '@polkadot/types/lookup' { readonly type: 'Open' | 'Blocked' | 'Destroying'; } - /** @name PalletNominationPoolsCommissionChangeRate (114) */ + /** @name PalletNominationPoolsCommissionChangeRate (108) */ interface PalletNominationPoolsCommissionChangeRate extends Struct { readonly maxIncrease: Perbill; readonly minDelay: u32; } - /** @name FrameSystemPhase (115) */ + /** @name FrameSystemPhase (109) */ interface FrameSystemPhase extends Enum { readonly isApplyExtrinsic: boolean; readonly asApplyExtrinsic: u32; @@ -1124,13 +1089,13 @@ declare module '@polkadot/types/lookup' { readonly type: 'ApplyExtrinsic' | 'Finalization' | 'Initialization'; } - /** @name FrameSystemLastRuntimeUpgradeInfo (118) */ + /** @name FrameSystemLastRuntimeUpgradeInfo (112) */ interface FrameSystemLastRuntimeUpgradeInfo extends Struct { readonly specVersion: Compact; readonly specName: Text; } - /** @name FrameSystemCall (121) */ + /** @name FrameSystemCall (115) */ interface FrameSystemCall extends Enum { readonly isRemark: boolean; readonly asRemark: { @@ -1176,21 +1141,21 @@ declare module '@polkadot/types/lookup' { | 'RemarkWithEvent'; } - /** @name FrameSystemLimitsBlockWeights (125) */ + /** @name FrameSystemLimitsBlockWeights (119) */ interface FrameSystemLimitsBlockWeights extends Struct { readonly baseBlock: SpWeightsWeightV2Weight; readonly maxBlock: SpWeightsWeightV2Weight; readonly perClass: FrameSupportDispatchPerDispatchClassWeightsPerClass; } - /** @name FrameSupportDispatchPerDispatchClassWeightsPerClass (126) */ + /** @name FrameSupportDispatchPerDispatchClassWeightsPerClass (120) */ interface FrameSupportDispatchPerDispatchClassWeightsPerClass extends Struct { readonly normal: FrameSystemLimitsWeightsPerClass; readonly operational: FrameSystemLimitsWeightsPerClass; readonly mandatory: FrameSystemLimitsWeightsPerClass; } - /** @name FrameSystemLimitsWeightsPerClass (127) */ + /** @name FrameSystemLimitsWeightsPerClass (121) */ interface FrameSystemLimitsWeightsPerClass extends Struct { readonly baseExtrinsic: SpWeightsWeightV2Weight; readonly maxExtrinsic: Option; @@ -1198,25 +1163,25 @@ declare module '@polkadot/types/lookup' { readonly reserved: Option; } - /** @name FrameSystemLimitsBlockLength (129) */ + /** @name FrameSystemLimitsBlockLength (123) */ interface FrameSystemLimitsBlockLength extends Struct { readonly max: FrameSupportDispatchPerDispatchClassU32; } - /** @name FrameSupportDispatchPerDispatchClassU32 (130) */ + /** @name FrameSupportDispatchPerDispatchClassU32 (124) */ interface FrameSupportDispatchPerDispatchClassU32 extends Struct { readonly normal: u32; readonly operational: u32; readonly mandatory: u32; } - /** @name SpWeightsRuntimeDbWeight (131) */ + /** @name SpWeightsRuntimeDbWeight (125) */ interface SpWeightsRuntimeDbWeight extends Struct { readonly read: u64; readonly write: u64; } - /** @name SpVersionRuntimeVersion (132) */ + /** @name SpVersionRuntimeVersion (126) */ interface SpVersionRuntimeVersion extends Struct { readonly specName: Text; readonly implName: Text; @@ -1228,7 +1193,7 @@ declare module '@polkadot/types/lookup' { readonly stateVersion: u8; } - /** @name FrameSystemError (137) */ + /** @name FrameSystemError (131) */ interface FrameSystemError extends Enum { readonly isInvalidSpecName: boolean; readonly isSpecVersionNeedsToIncrease: boolean; @@ -1245,7 +1210,7 @@ declare module '@polkadot/types/lookup' { | 'CallFiltered'; } - /** @name PalletTimestampCall (138) */ + /** @name PalletTimestampCall (132) */ interface PalletTimestampCall extends Enum { readonly isSet: boolean; readonly asSet: { @@ -1254,10 +1219,10 @@ declare module '@polkadot/types/lookup' { readonly type: 'Set'; } - /** @name SpConsensusBabeAppPublic (141) */ + /** @name SpConsensusBabeAppPublic (135) */ interface SpConsensusBabeAppPublic extends SpCoreSr25519Public {} - /** @name SpConsensusBabeDigestsNextConfigDescriptor (144) */ + /** @name SpConsensusBabeDigestsNextConfigDescriptor (138) */ interface SpConsensusBabeDigestsNextConfigDescriptor extends Enum { readonly isV1: boolean; readonly asV1: { @@ -1267,7 +1232,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'V1'; } - /** @name SpConsensusBabeAllowedSlots (146) */ + /** @name SpConsensusBabeAllowedSlots (140) */ interface SpConsensusBabeAllowedSlots extends Enum { readonly isPrimarySlots: boolean; readonly isPrimaryAndSecondaryPlainSlots: boolean; @@ -1275,7 +1240,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'PrimarySlots' | 'PrimaryAndSecondaryPlainSlots' | 'PrimaryAndSecondaryVRFSlots'; } - /** @name SpConsensusBabeDigestsPreDigest (150) */ + /** @name SpConsensusBabeDigestsPreDigest (144) */ interface SpConsensusBabeDigestsPreDigest extends Enum { readonly isPrimary: boolean; readonly asPrimary: SpConsensusBabeDigestsPrimaryPreDigest; @@ -1286,7 +1251,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Primary' | 'SecondaryPlain' | 'SecondaryVRF'; } - /** @name SpConsensusBabeDigestsPrimaryPreDigest (151) */ + /** @name SpConsensusBabeDigestsPrimaryPreDigest (145) */ interface SpConsensusBabeDigestsPrimaryPreDigest extends Struct { readonly authorityIndex: u32; readonly slot: u64; @@ -1294,13 +1259,13 @@ declare module '@polkadot/types/lookup' { readonly vrfProof: U8aFixed; } - /** @name SpConsensusBabeDigestsSecondaryPlainPreDigest (153) */ + /** @name SpConsensusBabeDigestsSecondaryPlainPreDigest (147) */ interface SpConsensusBabeDigestsSecondaryPlainPreDigest extends Struct { readonly authorityIndex: u32; readonly slot: u64; } - /** @name SpConsensusBabeDigestsSecondaryVRFPreDigest (154) */ + /** @name SpConsensusBabeDigestsSecondaryVRFPreDigest (148) */ interface SpConsensusBabeDigestsSecondaryVRFPreDigest extends Struct { readonly authorityIndex: u32; readonly slot: u64; @@ -1308,13 +1273,13 @@ declare module '@polkadot/types/lookup' { readonly vrfProof: U8aFixed; } - /** @name SpConsensusBabeBabeEpochConfiguration (155) */ + /** @name SpConsensusBabeBabeEpochConfiguration (149) */ interface SpConsensusBabeBabeEpochConfiguration extends Struct { readonly c: ITuple<[u64, u64]>; readonly allowedSlots: SpConsensusBabeAllowedSlots; } - /** @name PalletBabeCall (159) */ + /** @name PalletBabeCall (153) */ interface PalletBabeCall extends Enum { readonly isReportEquivocation: boolean; readonly asReportEquivocation: { @@ -1333,7 +1298,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'ReportEquivocation' | 'ReportEquivocationUnsigned' | 'PlanConfigChange'; } - /** @name SpConsensusSlotsEquivocationProof (160) */ + /** @name SpConsensusSlotsEquivocationProof (154) */ interface SpConsensusSlotsEquivocationProof extends Struct { readonly offender: SpConsensusBabeAppPublic; readonly slot: u64; @@ -1341,7 +1306,7 @@ declare module '@polkadot/types/lookup' { readonly secondHeader: SpRuntimeHeader; } - /** @name SpRuntimeHeader (161) */ + /** @name SpRuntimeHeader (155) */ interface SpRuntimeHeader extends Struct { readonly parentHash: H256; readonly number: Compact; @@ -1350,17 +1315,17 @@ declare module '@polkadot/types/lookup' { readonly digest: SpRuntimeDigest; } - /** @name SpRuntimeBlakeTwo256 (162) */ + /** @name SpRuntimeBlakeTwo256 (156) */ type SpRuntimeBlakeTwo256 = Null; - /** @name SpSessionMembershipProof (163) */ + /** @name SpSessionMembershipProof (157) */ interface SpSessionMembershipProof extends Struct { readonly session: u32; readonly trieNodes: Vec; readonly validatorCount: u32; } - /** @name PalletBabeError (164) */ + /** @name PalletBabeError (158) */ interface PalletBabeError extends Enum { readonly isInvalidEquivocationProof: boolean; readonly isInvalidKeyOwnershipProof: boolean; @@ -1373,14 +1338,14 @@ declare module '@polkadot/types/lookup' { | 'InvalidConfiguration'; } - /** @name PalletBalancesBalanceLock (166) */ + /** @name PalletBalancesBalanceLock (160) */ interface PalletBalancesBalanceLock extends Struct { readonly id: U8aFixed; readonly amount: u128; readonly reasons: PalletBalancesReasons; } - /** @name PalletBalancesReasons (167) */ + /** @name PalletBalancesReasons (161) */ interface PalletBalancesReasons extends Enum { readonly isFee: boolean; readonly isMisc: boolean; @@ -1388,13 +1353,13 @@ declare module '@polkadot/types/lookup' { readonly type: 'Fee' | 'Misc' | 'All'; } - /** @name PalletBalancesReserveData (170) */ + /** @name PalletBalancesReserveData (164) */ interface PalletBalancesReserveData extends Struct { readonly id: U8aFixed; readonly amount: u128; } - /** @name PalletBalancesCall (172) */ + /** @name PalletBalancesCall (166) */ interface PalletBalancesCall extends Enum { readonly isTransfer: boolean; readonly asTransfer: { @@ -1437,7 +1402,7 @@ declare module '@polkadot/types/lookup' { | 'ForceUnreserve'; } - /** @name PalletBalancesError (175) */ + /** @name PalletBalancesError (170) */ interface PalletBalancesError extends Enum { readonly isVestingBalance: boolean; readonly isLiquidityRestrictions: boolean; @@ -1458,7 +1423,7 @@ declare module '@polkadot/types/lookup' { | 'TooManyReserves'; } - /** @name PalletStakingStakingLedger (177) */ + /** @name PalletStakingStakingLedger (172) */ interface PalletStakingStakingLedger extends Struct { readonly stash: AccountId32; readonly total: Compact; @@ -1467,13 +1432,13 @@ declare module '@polkadot/types/lookup' { readonly claimedRewards: Vec; } - /** @name PalletStakingUnlockChunk (179) */ + /** @name PalletStakingUnlockChunk (174) */ interface PalletStakingUnlockChunk extends Struct { readonly value: Compact; readonly era: Compact; } - /** @name PalletStakingRewardDestination (182) */ + /** @name PalletStakingRewardDestination (177) */ interface PalletStakingRewardDestination extends Enum { readonly isStaked: boolean; readonly isStash: boolean; @@ -1484,26 +1449,26 @@ declare module '@polkadot/types/lookup' { readonly type: 'Staked' | 'Stash' | 'Controller' | 'Account' | 'None'; } - /** @name PalletStakingNominations (183) */ + /** @name PalletStakingNominations (178) */ interface PalletStakingNominations extends Struct { readonly targets: Vec; readonly submittedIn: u32; readonly suppressed: bool; } - /** @name PalletStakingActiveEraInfo (185) */ + /** @name PalletStakingActiveEraInfo (180) */ interface PalletStakingActiveEraInfo extends Struct { readonly index: u32; readonly start: Option; } - /** @name PalletStakingEraRewardPoints (187) */ + /** @name PalletStakingEraRewardPoints (182) */ interface PalletStakingEraRewardPoints extends Struct { readonly total: u32; readonly individual: BTreeMap; } - /** @name PalletStakingUnappliedSlash (192) */ + /** @name PalletStakingUnappliedSlash (187) */ interface PalletStakingUnappliedSlash extends Struct { readonly validator: AccountId32; readonly own: u128; @@ -1512,7 +1477,7 @@ declare module '@polkadot/types/lookup' { readonly payout: u128; } - /** @name PalletStakingSlashingSlashingSpans (196) */ + /** @name PalletStakingSlashingSlashingSpans (191) */ interface PalletStakingSlashingSlashingSpans extends Struct { readonly spanIndex: u32; readonly lastStart: u32; @@ -1520,13 +1485,13 @@ declare module '@polkadot/types/lookup' { readonly prior: Vec; } - /** @name PalletStakingSlashingSpanRecord (197) */ + /** @name PalletStakingSlashingSpanRecord (192) */ interface PalletStakingSlashingSpanRecord extends Struct { readonly slashed: u128; readonly paidOut: u128; } - /** @name PalletStakingPalletCall (201) */ + /** @name PalletStakingPalletCall (196) */ interface PalletStakingPalletCall extends Enum { readonly isBond: boolean; readonly asBond: { @@ -1660,7 +1625,7 @@ declare module '@polkadot/types/lookup' { | 'SetMinCommission'; } - /** @name PalletStakingPalletConfigOpU128 (203) */ + /** @name PalletStakingPalletConfigOpU128 (198) */ interface PalletStakingPalletConfigOpU128 extends Enum { readonly isNoop: boolean; readonly isSet: boolean; @@ -1669,7 +1634,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Noop' | 'Set' | 'Remove'; } - /** @name PalletStakingPalletConfigOpU32 (204) */ + /** @name PalletStakingPalletConfigOpU32 (199) */ interface PalletStakingPalletConfigOpU32 extends Enum { readonly isNoop: boolean; readonly isSet: boolean; @@ -1678,7 +1643,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Noop' | 'Set' | 'Remove'; } - /** @name PalletStakingPalletConfigOpPercent (205) */ + /** @name PalletStakingPalletConfigOpPercent (200) */ interface PalletStakingPalletConfigOpPercent extends Enum { readonly isNoop: boolean; readonly isSet: boolean; @@ -1687,7 +1652,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Noop' | 'Set' | 'Remove'; } - /** @name PalletStakingPalletConfigOpPerbill (206) */ + /** @name PalletStakingPalletConfigOpPerbill (201) */ interface PalletStakingPalletConfigOpPerbill extends Enum { readonly isNoop: boolean; readonly isSet: boolean; @@ -1696,7 +1661,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Noop' | 'Set' | 'Remove'; } - /** @name PalletStakingPalletError (207) */ + /** @name PalletStakingPalletError (202) */ interface PalletStakingPalletError extends Enum { readonly isNotController: boolean; readonly isNotStash: boolean; @@ -1751,23 +1716,23 @@ declare module '@polkadot/types/lookup' { | 'BoundNotMet'; } - /** @name SpStakingOffenceOffenceDetails (208) */ + /** @name SpStakingOffenceOffenceDetails (203) */ interface SpStakingOffenceOffenceDetails extends Struct { readonly offender: ITuple<[AccountId32, PalletStakingExposure]>; readonly reporters: Vec; } - /** @name CreditcoinNodeRuntimeOpaqueSessionKeys (213) */ + /** @name CreditcoinNodeRuntimeOpaqueSessionKeys (208) */ interface CreditcoinNodeRuntimeOpaqueSessionKeys extends Struct { readonly grandpa: SpConsensusGrandpaAppPublic; readonly babe: SpConsensusBabeAppPublic; readonly imOnline: PalletImOnlineSr25519AppSr25519Public; } - /** @name SpCoreCryptoKeyTypeId (215) */ + /** @name SpCoreCryptoKeyTypeId (210) */ interface SpCoreCryptoKeyTypeId extends U8aFixed {} - /** @name PalletSessionCall (216) */ + /** @name PalletSessionCall (211) */ interface PalletSessionCall extends Enum { readonly isSetKeys: boolean; readonly asSetKeys: { @@ -1778,7 +1743,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'SetKeys' | 'PurgeKeys'; } - /** @name PalletSessionError (217) */ + /** @name PalletSessionError (212) */ interface PalletSessionError extends Enum { readonly isInvalidProof: boolean; readonly isNoAssociatedValidatorId: boolean; @@ -1788,7 +1753,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'InvalidProof' | 'NoAssociatedValidatorId' | 'DuplicatedKey' | 'NoKeys' | 'NoAccount'; } - /** @name PalletGrandpaStoredState (218) */ + /** @name PalletGrandpaStoredState (213) */ interface PalletGrandpaStoredState extends Enum { readonly isLive: boolean; readonly isPendingPause: boolean; @@ -1805,7 +1770,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Live' | 'PendingPause' | 'Paused' | 'PendingResume'; } - /** @name PalletGrandpaStoredPendingChange (219) */ + /** @name PalletGrandpaStoredPendingChange (214) */ interface PalletGrandpaStoredPendingChange extends Struct { readonly scheduledAt: u32; readonly delay: u32; @@ -1813,7 +1778,7 @@ declare module '@polkadot/types/lookup' { readonly forced: Option; } - /** @name PalletGrandpaCall (221) */ + /** @name PalletGrandpaCall (216) */ interface PalletGrandpaCall extends Enum { readonly isReportEquivocation: boolean; readonly asReportEquivocation: { @@ -1833,13 +1798,13 @@ declare module '@polkadot/types/lookup' { readonly type: 'ReportEquivocation' | 'ReportEquivocationUnsigned' | 'NoteStalled'; } - /** @name SpConsensusGrandpaEquivocationProof (222) */ + /** @name SpConsensusGrandpaEquivocationProof (217) */ interface SpConsensusGrandpaEquivocationProof extends Struct { readonly setId: u64; readonly equivocation: SpConsensusGrandpaEquivocation; } - /** @name SpConsensusGrandpaEquivocation (223) */ + /** @name SpConsensusGrandpaEquivocation (218) */ interface SpConsensusGrandpaEquivocation extends Enum { readonly isPrevote: boolean; readonly asPrevote: FinalityGrandpaEquivocationPrevote; @@ -1848,7 +1813,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Prevote' | 'Precommit'; } - /** @name FinalityGrandpaEquivocationPrevote (224) */ + /** @name FinalityGrandpaEquivocationPrevote (219) */ interface FinalityGrandpaEquivocationPrevote extends Struct { readonly roundNumber: u64; readonly identity: SpConsensusGrandpaAppPublic; @@ -1856,19 +1821,19 @@ declare module '@polkadot/types/lookup' { readonly second: ITuple<[FinalityGrandpaPrevote, SpConsensusGrandpaAppSignature]>; } - /** @name FinalityGrandpaPrevote (225) */ + /** @name FinalityGrandpaPrevote (220) */ interface FinalityGrandpaPrevote extends Struct { readonly targetHash: H256; readonly targetNumber: u32; } - /** @name SpConsensusGrandpaAppSignature (226) */ + /** @name SpConsensusGrandpaAppSignature (221) */ interface SpConsensusGrandpaAppSignature extends SpCoreEd25519Signature {} - /** @name SpCoreEd25519Signature (227) */ + /** @name SpCoreEd25519Signature (222) */ interface SpCoreEd25519Signature extends U8aFixed {} - /** @name FinalityGrandpaEquivocationPrecommit (229) */ + /** @name FinalityGrandpaEquivocationPrecommit (224) */ interface FinalityGrandpaEquivocationPrecommit extends Struct { readonly roundNumber: u64; readonly identity: SpConsensusGrandpaAppPublic; @@ -1876,13 +1841,13 @@ declare module '@polkadot/types/lookup' { readonly second: ITuple<[FinalityGrandpaPrecommit, SpConsensusGrandpaAppSignature]>; } - /** @name FinalityGrandpaPrecommit (230) */ + /** @name FinalityGrandpaPrecommit (225) */ interface FinalityGrandpaPrecommit extends Struct { readonly targetHash: H256; readonly targetNumber: u32; } - /** @name PalletGrandpaError (232) */ + /** @name PalletGrandpaError (227) */ interface PalletGrandpaError extends Enum { readonly isPauseFailed: boolean; readonly isResumeFailed: boolean; @@ -1901,13 +1866,13 @@ declare module '@polkadot/types/lookup' { | 'DuplicateOffenceReport'; } - /** @name PalletImOnlineBoundedOpaqueNetworkState (236) */ + /** @name PalletImOnlineBoundedOpaqueNetworkState (231) */ interface PalletImOnlineBoundedOpaqueNetworkState extends Struct { readonly peerId: Bytes; readonly externalAddresses: Vec; } - /** @name PalletImOnlineCall (240) */ + /** @name PalletImOnlineCall (235) */ interface PalletImOnlineCall extends Enum { readonly isHeartbeat: boolean; readonly asHeartbeat: { @@ -1917,7 +1882,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Heartbeat'; } - /** @name PalletImOnlineHeartbeat (241) */ + /** @name PalletImOnlineHeartbeat (236) */ interface PalletImOnlineHeartbeat extends Struct { readonly blockNumber: u32; readonly networkState: SpCoreOffchainOpaqueNetworkState; @@ -1926,26 +1891,26 @@ declare module '@polkadot/types/lookup' { readonly validatorsLen: u32; } - /** @name SpCoreOffchainOpaqueNetworkState (242) */ + /** @name SpCoreOffchainOpaqueNetworkState (237) */ interface SpCoreOffchainOpaqueNetworkState extends Struct { readonly peerId: OpaquePeerId; readonly externalAddresses: Vec; } - /** @name PalletImOnlineSr25519AppSr25519Signature (246) */ + /** @name PalletImOnlineSr25519AppSr25519Signature (241) */ interface PalletImOnlineSr25519AppSr25519Signature extends SpCoreSr25519Signature {} - /** @name SpCoreSr25519Signature (247) */ + /** @name SpCoreSr25519Signature (242) */ interface SpCoreSr25519Signature extends U8aFixed {} - /** @name PalletImOnlineError (248) */ + /** @name PalletImOnlineError (243) */ interface PalletImOnlineError extends Enum { readonly isInvalidKey: boolean; readonly isDuplicatedHeartbeat: boolean; readonly type: 'InvalidKey' | 'DuplicatedHeartbeat'; } - /** @name PalletBagsListListNode (249) */ + /** @name PalletBagsListListNode (244) */ interface PalletBagsListListNode extends Struct { readonly id: AccountId32; readonly prev: Option; @@ -1954,13 +1919,13 @@ declare module '@polkadot/types/lookup' { readonly score: u64; } - /** @name PalletBagsListListBag (250) */ + /** @name PalletBagsListListBag (245) */ interface PalletBagsListListBag extends Struct { readonly head: Option; readonly tail: Option; } - /** @name PalletBagsListCall (251) */ + /** @name PalletBagsListCall (246) */ interface PalletBagsListCall extends Enum { readonly isRebag: boolean; readonly asRebag: { @@ -1973,14 +1938,14 @@ declare module '@polkadot/types/lookup' { readonly type: 'Rebag' | 'PutInFrontOf'; } - /** @name PalletBagsListError (253) */ + /** @name PalletBagsListError (248) */ interface PalletBagsListError extends Enum { readonly isList: boolean; readonly asList: PalletBagsListListListError; readonly type: 'List'; } - /** @name PalletBagsListListListError (254) */ + /** @name PalletBagsListListListError (249) */ interface PalletBagsListListListError extends Enum { readonly isDuplicate: boolean; readonly isNotHeavier: boolean; @@ -1989,14 +1954,14 @@ declare module '@polkadot/types/lookup' { readonly type: 'Duplicate' | 'NotHeavier' | 'NotInSameBag' | 'NodeNotFound'; } - /** @name PalletTransactionPaymentReleases (256) */ + /** @name PalletTransactionPaymentReleases (251) */ interface PalletTransactionPaymentReleases extends Enum { readonly isV1Ancient: boolean; readonly isV2: boolean; readonly type: 'V1Ancient' | 'V2'; } - /** @name PalletSudoCall (257) */ + /** @name PalletSudoCall (252) */ interface PalletSudoCall extends Enum { readonly isSudo: boolean; readonly asSudo: { @@ -2019,7 +1984,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Sudo' | 'SudoUncheckedWeight' | 'SetKey' | 'SudoAs'; } - /** @name PalletCreditcoinCall (259) */ + /** @name PalletCreditcoinCall (254) */ interface PalletCreditcoinCall extends Enum { readonly isClaimLegacyWallet: boolean; readonly asClaimLegacyWallet: { @@ -2081,11 +2046,6 @@ declare module '@polkadot/types/lookup' { readonly dealOrderId: PalletCreditcoinDealOrderId; readonly transferId: H256; } & Struct; - readonly isRequestCollectCoins: boolean; - readonly asRequestCollectCoins: { - readonly evmAddress: Bytes; - readonly txId: Bytes; - } & Struct; readonly isRegisterFundingTransfer: boolean; readonly asRegisterFundingTransfer: { readonly transferKind: PalletCreditcoinTransferKind; @@ -2118,10 +2078,6 @@ declare module '@polkadot/types/lookup' { readonly asAddAuthority: { readonly who: AccountId32; } & Struct; - readonly isSetCollectCoinsContract: boolean; - readonly asSetCollectCoinsContract: { - readonly contract: PalletCreditcoinOcwTasksCollectCoinsDeployedContract; - } & Struct; readonly isRemoveAuthority: boolean; readonly asRemoveAuthority: { readonly who: AccountId32; @@ -2132,18 +2088,6 @@ declare module '@polkadot/types/lookup' { readonly address: Bytes; readonly ownershipProof: PalletCreditcoinOwnershipProof; } & Struct; - readonly isSetGateContract: boolean; - readonly asSetGateContract: { - readonly contract: PalletCreditcoinOcwTasksCollectCoinsDeployedContract; - } & Struct; - readonly isSetGateFaucet: boolean; - readonly asSetGateFaucet: { - readonly address: AccountId32; - } & Struct; - readonly isRequestCollectCoinsV2: boolean; - readonly asRequestCollectCoinsV2: { - readonly contract: PalletCreditcoinCollectCoinsBurnDetails; - } & Struct; readonly type: | 'ClaimLegacyWallet' | 'RegisterAddress' @@ -2155,28 +2099,23 @@ declare module '@polkadot/types/lookup' { | 'FundDealOrder' | 'RegisterDealOrder' | 'CloseDealOrder' - | 'RequestCollectCoins' | 'RegisterFundingTransfer' | 'RegisterRepaymentTransfer' | 'Exempt' | 'PersistTaskOutput' | 'FailTask' | 'AddAuthority' - | 'SetCollectCoinsContract' | 'RemoveAuthority' - | 'RegisterAddressV2' - | 'SetGateContract' - | 'SetGateFaucet' - | 'RequestCollectCoinsV2'; + | 'RegisterAddressV2'; } - /** @name SpCoreEcdsaPublic (260) */ + /** @name SpCoreEcdsaPublic (255) */ interface SpCoreEcdsaPublic extends U8aFixed {} - /** @name SpCoreEcdsaSignature (262) */ + /** @name SpCoreEcdsaSignature (257) */ interface SpCoreEcdsaSignature extends U8aFixed {} - /** @name SpRuntimeMultiSigner (264) */ + /** @name SpRuntimeMultiSigner (259) */ interface SpRuntimeMultiSigner extends Enum { readonly isEd25519: boolean; readonly asEd25519: SpCoreEd25519Public; @@ -2187,7 +2126,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Ed25519' | 'Sr25519' | 'Ecdsa'; } - /** @name SpRuntimeMultiSignature (265) */ + /** @name SpRuntimeMultiSignature (260) */ interface SpRuntimeMultiSignature extends Enum { readonly isEd25519: boolean; readonly asEd25519: SpCoreEd25519Signature; @@ -2198,25 +2137,21 @@ declare module '@polkadot/types/lookup' { readonly type: 'Ed25519' | 'Sr25519' | 'Ecdsa'; } - /** @name PalletCreditcoinTaskOutput (266) */ + /** @name PalletCreditcoinTaskOutput (261) */ interface PalletCreditcoinTaskOutput extends Enum { readonly isVerifyTransfer: boolean; readonly asVerifyTransfer: ITuple<[H256, PalletCreditcoinTransfer]>; - readonly isCollectCoins: boolean; - readonly asCollectCoins: ITuple<[H256, PalletCreditcoinCollectCoinsCollectedCoins]>; - readonly type: 'VerifyTransfer' | 'CollectCoins'; + readonly type: 'VerifyTransfer'; } - /** @name PalletCreditcoinTaskId (267) */ + /** @name PalletCreditcoinTaskId (262) */ interface PalletCreditcoinTaskId extends Enum { readonly isVerifyTransfer: boolean; readonly asVerifyTransfer: H256; - readonly isCollectCoins: boolean; - readonly asCollectCoins: H256; - readonly type: 'VerifyTransfer' | 'CollectCoins'; + readonly type: 'VerifyTransfer'; } - /** @name PalletCreditcoinOwnershipProof (268) */ + /** @name PalletCreditcoinOwnershipProof (263) */ interface PalletCreditcoinOwnershipProof extends Enum { readonly isPersonalSign: boolean; readonly asPersonalSign: SpCoreEcdsaSignature; @@ -2225,16 +2160,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'PersonalSign' | 'EthSign'; } - /** @name PalletCreditcoinCollectCoinsBurnDetails (269) */ - interface PalletCreditcoinCollectCoinsBurnDetails extends Enum { - readonly isGcre: boolean; - readonly asGcre: ITuple<[Bytes, Bytes]>; - readonly isGate: boolean; - readonly asGate: ITuple<[Bytes, Bytes]>; - readonly type: 'Gcre' | 'Gate'; - } - - /** @name PalletSchedulerCall (270) */ + /** @name PalletSchedulerCall (264) */ interface PalletSchedulerCall extends Enum { readonly isSchedule: boolean; readonly asSchedule: { @@ -2278,7 +2204,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Schedule' | 'Cancel' | 'ScheduleNamed' | 'CancelNamed' | 'ScheduleAfter' | 'ScheduleNamedAfter'; } - /** @name PalletIdentityCall (272) */ + /** @name PalletIdentityCall (266) */ interface PalletIdentityCall extends Enum { readonly isAddRegistrar: boolean; readonly asAddRegistrar: { @@ -2361,7 +2287,7 @@ declare module '@polkadot/types/lookup' { | 'QuitSub'; } - /** @name PalletIdentityIdentityInfo (273) */ + /** @name PalletIdentityIdentityInfo (267) */ interface PalletIdentityIdentityInfo extends Struct { readonly additional: Vec>; readonly display: Data; @@ -2374,7 +2300,7 @@ declare module '@polkadot/types/lookup' { readonly twitter: Data; } - /** @name PalletIdentityBitFlags (309) */ + /** @name PalletIdentityBitFlags (303) */ interface PalletIdentityBitFlags extends Set { readonly isDisplay: boolean; readonly isLegal: boolean; @@ -2386,7 +2312,7 @@ declare module '@polkadot/types/lookup' { readonly isTwitter: boolean; } - /** @name PalletIdentityIdentityField (310) */ + /** @name PalletIdentityIdentityField (304) */ interface PalletIdentityIdentityField extends Enum { readonly isDisplay: boolean; readonly isLegal: boolean; @@ -2399,7 +2325,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Display' | 'Legal' | 'Web' | 'Riot' | 'Email' | 'PgpFingerprint' | 'Image' | 'Twitter'; } - /** @name PalletIdentityJudgement (311) */ + /** @name PalletIdentityJudgement (305) */ interface PalletIdentityJudgement extends Enum { readonly isUnknown: boolean; readonly isFeePaid: boolean; @@ -2412,7 +2338,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Unknown' | 'FeePaid' | 'Reasonable' | 'KnownGood' | 'OutOfDate' | 'LowQuality' | 'Erroneous'; } - /** @name PalletUtilityCall (312) */ + /** @name PalletUtilityCall (306) */ interface PalletUtilityCall extends Enum { readonly isBatch: boolean; readonly asBatch: { @@ -2444,7 +2370,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Batch' | 'AsDerivative' | 'BatchAll' | 'DispatchAs' | 'ForceBatch' | 'WithWeight'; } - /** @name CreditcoinNodeRuntimeOriginCaller (314) */ + /** @name CreditcoinNodeRuntimeOriginCaller (308) */ interface CreditcoinNodeRuntimeOriginCaller extends Enum { readonly isSystem: boolean; readonly asSystem: FrameSupportDispatchRawOrigin; @@ -2452,7 +2378,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'System' | 'Void'; } - /** @name FrameSupportDispatchRawOrigin (315) */ + /** @name FrameSupportDispatchRawOrigin (309) */ interface FrameSupportDispatchRawOrigin extends Enum { readonly isRoot: boolean; readonly isSigned: boolean; @@ -2461,10 +2387,10 @@ declare module '@polkadot/types/lookup' { readonly type: 'Root' | 'Signed' | 'None'; } - /** @name SpCoreVoid (316) */ + /** @name SpCoreVoid (310) */ type SpCoreVoid = Null; - /** @name PalletProxyCall (317) */ + /** @name PalletProxyCall (311) */ interface PalletProxyCall extends Enum { readonly isProxy: boolean; readonly asProxy: { @@ -2534,7 +2460,7 @@ declare module '@polkadot/types/lookup' { | 'ProxyAnnounced'; } - /** @name PalletFastUnstakeCall (319) */ + /** @name PalletFastUnstakeCall (313) */ interface PalletFastUnstakeCall extends Enum { readonly isRegisterFastUnstake: boolean; readonly isDeregister: boolean; @@ -2545,7 +2471,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'RegisterFastUnstake' | 'Deregister' | 'Control'; } - /** @name PalletNominationPoolsCall (320) */ + /** @name PalletNominationPoolsCall (314) */ interface PalletNominationPoolsCall extends Enum { readonly isJoin: boolean; readonly asJoin: { @@ -2678,7 +2604,7 @@ declare module '@polkadot/types/lookup' { | 'ClaimCommission'; } - /** @name PalletNominationPoolsBondExtra (321) */ + /** @name PalletNominationPoolsBondExtra (315) */ interface PalletNominationPoolsBondExtra extends Enum { readonly isFreeBalance: boolean; readonly asFreeBalance: u128; @@ -2686,7 +2612,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'FreeBalance' | 'Rewards'; } - /** @name PalletNominationPoolsConfigOpU128 (322) */ + /** @name PalletNominationPoolsConfigOpU128 (316) */ interface PalletNominationPoolsConfigOpU128 extends Enum { readonly isNoop: boolean; readonly isSet: boolean; @@ -2695,7 +2621,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Noop' | 'Set' | 'Remove'; } - /** @name PalletNominationPoolsConfigOpU32 (323) */ + /** @name PalletNominationPoolsConfigOpU32 (317) */ interface PalletNominationPoolsConfigOpU32 extends Enum { readonly isNoop: boolean; readonly isSet: boolean; @@ -2704,7 +2630,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Noop' | 'Set' | 'Remove'; } - /** @name PalletNominationPoolsConfigOpPerbill (324) */ + /** @name PalletNominationPoolsConfigOpPerbill (318) */ interface PalletNominationPoolsConfigOpPerbill extends Enum { readonly isNoop: boolean; readonly isSet: boolean; @@ -2713,7 +2639,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Noop' | 'Set' | 'Remove'; } - /** @name PalletNominationPoolsConfigOpAccountId32 (325) */ + /** @name PalletNominationPoolsConfigOpAccountId32 (319) */ interface PalletNominationPoolsConfigOpAccountId32 extends Enum { readonly isNoop: boolean; readonly isSet: boolean; @@ -2722,7 +2648,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Noop' | 'Set' | 'Remove'; } - /** @name PalletNominationPoolsClaimPermission (326) */ + /** @name PalletNominationPoolsClaimPermission (320) */ interface PalletNominationPoolsClaimPermission extends Enum { readonly isPermissioned: boolean; readonly isPermissionlessCompound: boolean; @@ -2731,25 +2657,53 @@ declare module '@polkadot/types/lookup' { readonly type: 'Permissioned' | 'PermissionlessCompound' | 'PermissionlessWithdraw' | 'PermissionlessAll'; } - /** @name PalletSudoError (327) */ + /** @name PalletSudoError (321) */ interface PalletSudoError extends Enum { readonly isRequireSudo: boolean; readonly type: 'RequireSudo'; } - /** @name PalletCreditcoinCleanupStorageCleanupState (329) */ + /** @name PalletCreditcoinCollectCoinsCollectedCoins (324) */ + interface PalletCreditcoinCollectCoinsCollectedCoins extends Struct { + readonly to: H256; + readonly amount: u128; + readonly txId: Bytes; + readonly contractType: PalletCreditcoinCollectCoinsContractType; + } + + /** @name PalletCreditcoinCollectCoinsContractType (325) */ + interface PalletCreditcoinCollectCoinsContractType extends Enum { + readonly isGcre: boolean; + readonly isGate: boolean; + readonly type: 'Gcre' | 'Gate'; + } + + /** @name PalletCreditcoinOcwTasksCollectCoinsDeployedContract (326) */ + interface PalletCreditcoinOcwTasksCollectCoinsDeployedContract extends Struct { + readonly address: H160; + readonly chain: PalletCreditcoinBlockchain; + } + + /** @name PalletCreditcoinCleanupStorageCleanupState (328) */ interface PalletCreditcoinCleanupStorageCleanupState extends Struct { readonly askOrders: PalletCreditcoinCleanupStorageItemCleanupState; readonly bidOrders: PalletCreditcoinCleanupStorageItemCleanupState; readonly offers: PalletCreditcoinCleanupStorageItemCleanupState; } - /** @name PalletCreditcoinCleanupStorageItemCleanupState (330) */ + /** @name PalletCreditcoinCleanupStorageItemCleanupState (329) */ interface PalletCreditcoinCleanupStorageItemCleanupState extends Struct { readonly onBlock: u32; readonly cursor: Option; } + /** @name PalletCreditcoinBurnInfo (332) */ + interface PalletCreditcoinBurnInfo extends Struct { + readonly account: AccountId32; + readonly amount: u128; + readonly collector: AccountId32; + } + /** @name PalletCreditcoinError (333) */ interface PalletCreditcoinError extends Enum { readonly isAddressAlreadyRegistered: boolean; @@ -2812,6 +2766,8 @@ declare module '@polkadot/types/lookup' { readonly isUnsupportedBlockchain: boolean; readonly isBurnGATEFaucetNotSet: boolean; readonly isBurnGATEInsufficientFaucetBalance: boolean; + readonly isBurnSettlementError: boolean; + readonly isBurnInsufficientFunds: boolean; readonly type: | 'AddressAlreadyRegistered' | 'AddressAlreadyRegisteredByCaller' @@ -2872,7 +2828,9 @@ declare module '@polkadot/types/lookup' { | 'PersonalSignPublicKeyRecoveryFailed' | 'UnsupportedBlockchain' | 'BurnGATEFaucetNotSet' - | 'BurnGATEInsufficientFaucetBalance'; + | 'BurnGATEInsufficientFaucetBalance' + | 'BurnSettlementError' + | 'BurnInsufficientFunds'; } /** @name PalletDifficultyDifficultyAndTimestamp (335) */ @@ -2928,9 +2886,7 @@ declare module '@polkadot/types/lookup' { interface PalletCreditcoinTask extends Enum { readonly isVerifyTransfer: boolean; readonly asVerifyTransfer: PalletCreditcoinTransferUnverifiedTransfer; - readonly isCollectCoins: boolean; - readonly asCollectCoins: PalletCreditcoinCollectCoinsUnverifiedCollectedCoins; - readonly type: 'VerifyTransfer' | 'CollectCoins'; + readonly type: 'VerifyTransfer'; } /** @name PalletCreditcoinTransferUnverifiedTransfer (347) */ @@ -3121,10 +3077,10 @@ declare module '@polkadot/types/lookup' { readonly balance: u128; } - /** @name FrameSupportPalletId (392) */ + /** @name FrameSupportPalletId (391) */ interface FrameSupportPalletId extends U8aFixed {} - /** @name PalletNominationPoolsError (393) */ + /** @name PalletNominationPoolsError (392) */ interface PalletNominationPoolsError extends Enum { readonly isPoolNotFound: boolean; readonly isPoolMemberNotFound: boolean; @@ -3190,7 +3146,7 @@ declare module '@polkadot/types/lookup' { | 'BondExtraRestricted'; } - /** @name PalletNominationPoolsDefensiveError (394) */ + /** @name PalletNominationPoolsDefensiveError (393) */ interface PalletNominationPoolsDefensiveError extends Enum { readonly isNotEnoughSpaceInUnbondPool: boolean; readonly isPoolNotFound: boolean; @@ -3205,27 +3161,27 @@ declare module '@polkadot/types/lookup' { | 'BondedStashKilledPrematurely'; } - /** @name FrameSystemExtensionsCheckNonZeroSender (397) */ + /** @name FrameSystemExtensionsCheckNonZeroSender (396) */ type FrameSystemExtensionsCheckNonZeroSender = Null; - /** @name FrameSystemExtensionsCheckSpecVersion (398) */ + /** @name FrameSystemExtensionsCheckSpecVersion (397) */ type FrameSystemExtensionsCheckSpecVersion = Null; - /** @name FrameSystemExtensionsCheckTxVersion (399) */ + /** @name FrameSystemExtensionsCheckTxVersion (398) */ type FrameSystemExtensionsCheckTxVersion = Null; - /** @name FrameSystemExtensionsCheckGenesis (400) */ + /** @name FrameSystemExtensionsCheckGenesis (399) */ type FrameSystemExtensionsCheckGenesis = Null; - /** @name FrameSystemExtensionsCheckNonce (403) */ + /** @name FrameSystemExtensionsCheckNonce (402) */ interface FrameSystemExtensionsCheckNonce extends Compact {} - /** @name FrameSystemExtensionsCheckWeight (404) */ + /** @name FrameSystemExtensionsCheckWeight (403) */ type FrameSystemExtensionsCheckWeight = Null; - /** @name PalletTransactionPaymentChargeTransactionPayment (405) */ + /** @name PalletTransactionPaymentChargeTransactionPayment (404) */ interface PalletTransactionPaymentChargeTransactionPayment extends Compact {} - /** @name CreditcoinNodeRuntimeRuntime (406) */ + /** @name CreditcoinNodeRuntimeRuntime (405) */ type CreditcoinNodeRuntimeRuntime = Null; } // declare module diff --git a/creditcoin-js/src/testUtils/index.ts b/creditcoin-js/src/testUtils/index.ts index 622e36524f..d39bd32e2a 100644 --- a/creditcoin-js/src/testUtils/index.ts +++ b/creditcoin-js/src/testUtils/index.ts @@ -26,6 +26,8 @@ export type TestData = { export const testData = (ethereumChain: Blockchain, createWalletF: CreateWalletFunc): TestData => { return { blockchain: ethereumChain, + // WARNING: don't hard-code this, see examples/loan-cycle.ts + // NOTICE: this function is only used during testing before the Creditcoin API has been initialized expirationBlock: 10_000_000, createWallet: createWalletF, keyring: new Keyring({ type: 'sr25519' }), diff --git a/creditcoin-js/src/transforms.ts b/creditcoin-js/src/transforms.ts index 292394d8e0..57aa1c2e6f 100644 --- a/creditcoin-js/src/transforms.ts +++ b/creditcoin-js/src/transforms.ts @@ -12,7 +12,6 @@ import { PalletCreditcoinTransfer, PalletCreditcoinTransferKind, PalletCreditcoinCollectCoinsCollectedCoins, - PalletCreditcoinCollectCoinsUnverifiedCollectedCoins, } from '@polkadot/types/lookup'; import { Address, @@ -29,7 +28,6 @@ import { DealOrderId, Transfer, TransferKind, - UnverifiedCollectedCoins, CollectedCoins, } from './model'; @@ -199,16 +197,6 @@ export const createTransfer = (transfer: PalletCreditcoinTransfer): Transfer => }; }; -export const createUnverifiedCollectedCoins = ( - collectedCoins: PalletCreditcoinCollectCoinsUnverifiedCollectedCoins, -): UnverifiedCollectedCoins => { - const { to, txId } = collectedCoins; - return { - to: to.toString(), - txHash: txId.toString(), - }; -}; - export const createCollectedCoins = (collectedCoins: PalletCreditcoinCollectCoinsCollectedCoins): CollectedCoins => { const { to, txId, amount } = collectedCoins; return { diff --git a/creditcoin-js/src/types.ts b/creditcoin-js/src/types.ts index fb2a537de9..aab592c378 100644 --- a/creditcoin-js/src/types.ts +++ b/creditcoin-js/src/types.ts @@ -13,14 +13,12 @@ import { DealOrderFunded, DealOrderId, DealOrderLocked, - ExternalAddress, LoanTerms, OfferId, TransferId, TransferKind, TransferProcessed, OwnershipProof, - CollectCoinsContract, } from './model'; import { AddressRegistered } from './extrinsics/register-address'; import { AddressRegisteredV2 } from './extrinsics/register-address-v2'; @@ -31,7 +29,6 @@ import { DealOrderRegistered } from './extrinsics/register-deal-order'; import { TransferEvent } from './extrinsics/register-transfers'; import { LoanExempted } from './extrinsics/exempt'; import { Wallet } from 'ethers'; -import { CollectCoinsEvent } from './extrinsics/request-collect-coins'; import { PalletCreditcoinOcwErrorsVerificationFailureCause } from '@polkadot/types/lookup'; export type TxCallback = (result: SubmittableResult) => void; @@ -120,13 +117,6 @@ export interface Extrinsics { borrower: KeyringPair, ) => Promise<[DealOrderClosed, TransferProcessed]>; exemptLoan: (dealOrderId: DealOrderId, lender: KeyringPair) => Promise; - requestCollectCoins: ( - evmAddress: ExternalAddress, - collector: KeyringPair, - txHash: string, - ) => Promise; - - requestCollectCoinsV2: (contract: CollectCoinsContract, signer: KeyringPair) => Promise; } export interface CreditcoinApi { diff --git a/creditcoin-js/yarn.lock b/creditcoin-js/yarn.lock index 1f205218d9..aae4c84736 100644 --- a/creditcoin-js/yarn.lock +++ b/creditcoin-js/yarn.lock @@ -233,10 +233,10 @@ resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.8.0.tgz#11195513186f68d42fbf449f9a7136b2c0c92005" integrity sha512-JylOEEzDiOryeUnFbQz+oViCXS0KsvR1mvHkoMiu5+UiBvy+RYX7tzlIIIEstF/gVa2tj9AQXk3dgnxv6KxhFg== -"@eslint/eslintrc@^2.1.2": - version "2.1.2" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.2.tgz#c6936b4b328c64496692f76944e755738be62396" - integrity sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g== +"@eslint/eslintrc@^2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad" + integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== dependencies: ajv "^6.12.4" debug "^4.3.2" @@ -248,10 +248,10 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@8.48.0": - version "8.48.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.48.0.tgz#642633964e217905436033a2bd08bf322849b7fb" - integrity sha512-ZSjtmelB7IJfWD2Fvb7+Z+ChTIKWq6kjda95fLcQKNS5aheVHn4IkfgRQE3sIIzTcSLwLcLZUD9UBt+V7+h+Pw== +"@eslint/js@8.57.0": + version "8.57.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.0.tgz#a5417ae8427873f1dd08b70b3574b453e67b5f7f" + integrity sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g== "@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.7.0": version "5.7.0" @@ -595,13 +595,13 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/strings" "^5.7.0" -"@humanwhocodes/config-array@^0.11.10": - version "0.11.10" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.10.tgz#5a3ffe32cc9306365fb3fd572596cd602d5e12d2" - integrity sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ== +"@humanwhocodes/config-array@^0.11.14": + version "0.11.14" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b" + integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg== dependencies: - "@humanwhocodes/object-schema" "^1.2.1" - debug "^4.1.1" + "@humanwhocodes/object-schema" "^2.0.2" + debug "^4.3.1" minimatch "^3.0.5" "@humanwhocodes/module-importer@^1.0.1": @@ -609,10 +609,10 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== -"@humanwhocodes/object-schema@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" - integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== +"@humanwhocodes/object-schema@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz#d9fae00a2d5cb40f92cfe64b47ad749fbc38f917" + integrity sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw== "@jridgewell/gen-mapping@^0.1.0": version "0.1.1" @@ -1132,17 +1132,17 @@ dependencies: "@types/node" "*" -"@typescript-eslint/eslint-plugin@^5.59.2": - version "5.59.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.2.tgz#684a2ce7182f3b4dac342eef7caa1c2bae476abd" - integrity sha512-yVrXupeHjRxLDcPKL10sGQ/QlVrA8J5IYOEWVqk0lJaSZP7X5DfnP7Ns3cc74/blmbipQ1htFNVGsHX6wsYm0A== +"@typescript-eslint/eslint-plugin@^5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz#aeef0328d172b9e37d9bab6dbc13b87ed88977db" + integrity sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag== dependencies: "@eslint-community/regexpp" "^4.4.0" - "@typescript-eslint/scope-manager" "5.59.2" - "@typescript-eslint/type-utils" "5.59.2" - "@typescript-eslint/utils" "5.59.2" + "@typescript-eslint/scope-manager" "5.62.0" + "@typescript-eslint/type-utils" "5.62.0" + "@typescript-eslint/utils" "5.62.0" debug "^4.3.4" - grapheme-splitter "^1.0.4" + graphemer "^1.4.0" ignore "^5.2.0" natural-compare-lite "^1.4.0" semver "^7.3.7" @@ -1158,14 +1158,6 @@ "@typescript-eslint/typescript-estree" "5.62.0" debug "^4.3.4" -"@typescript-eslint/scope-manager@5.59.2": - version "5.59.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.59.2.tgz#f699fe936ee4e2c996d14f0fdd3a7da5ba7b9a4c" - integrity sha512-dB1v7ROySwQWKqQ8rEWcdbTsFjh2G0vn8KUyvTXdPoyzSL6lLGkiXEV5CvpJsEe9xIdKV+8Zqb7wif2issoOFA== - dependencies: - "@typescript-eslint/types" "5.59.2" - "@typescript-eslint/visitor-keys" "5.59.2" - "@typescript-eslint/scope-manager@5.62.0": version "5.62.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz#d9457ccc6a0b8d6b37d0eb252a23022478c5460c" @@ -1174,39 +1166,21 @@ "@typescript-eslint/types" "5.62.0" "@typescript-eslint/visitor-keys" "5.62.0" -"@typescript-eslint/type-utils@5.59.2": - version "5.59.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.59.2.tgz#0729c237503604cd9a7084b5af04c496c9a4cdcf" - integrity sha512-b1LS2phBOsEy/T381bxkkywfQXkV1dWda/z0PhnIy3bC5+rQWQDS7fk9CSpcXBccPY27Z6vBEuaPBCKCgYezyQ== +"@typescript-eslint/type-utils@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz#286f0389c41681376cdad96b309cedd17d70346a" + integrity sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew== dependencies: - "@typescript-eslint/typescript-estree" "5.59.2" - "@typescript-eslint/utils" "5.59.2" + "@typescript-eslint/typescript-estree" "5.62.0" + "@typescript-eslint/utils" "5.62.0" debug "^4.3.4" tsutils "^3.21.0" -"@typescript-eslint/types@5.59.2": - version "5.59.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.59.2.tgz#b511d2b9847fe277c5cb002a2318bd329ef4f655" - integrity sha512-LbJ/HqoVs2XTGq5shkiKaNTuVv5tTejdHgfdjqRUGdYhjW1crm/M7og2jhVskMt8/4wS3T1+PfFvL1K3wqYj4w== - "@typescript-eslint/types@5.62.0": version "5.62.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f" integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== -"@typescript-eslint/typescript-estree@5.59.2": - version "5.59.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.2.tgz#6e2fabd3ba01db5d69df44e0b654c0b051fe9936" - integrity sha512-+j4SmbwVmZsQ9jEyBMgpuBD0rKwi9RxRpjX71Brr73RsYnEr3Lt5QZ624Bxphp8HUkSKfqGnPJp1kA5nl0Sh7Q== - dependencies: - "@typescript-eslint/types" "5.59.2" - "@typescript-eslint/visitor-keys" "5.59.2" - debug "^4.3.4" - globby "^11.1.0" - is-glob "^4.0.3" - semver "^7.3.7" - tsutils "^3.21.0" - "@typescript-eslint/typescript-estree@5.62.0": version "5.62.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz#7d17794b77fabcac615d6a48fb143330d962eb9b" @@ -1220,28 +1194,20 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/utils@5.59.2": - version "5.59.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.59.2.tgz#0c45178124d10cc986115885688db6abc37939f4" - integrity sha512-kSuF6/77TZzyGPhGO4uVp+f0SBoYxCDf+lW3GKhtKru/L8k/Hd7NFQxyWUeY7Z/KGB2C6Fe3yf2vVi4V9TsCSQ== +"@typescript-eslint/utils@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.62.0.tgz#141e809c71636e4a75daa39faed2fb5f4b10df86" + integrity sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@types/json-schema" "^7.0.9" "@types/semver" "^7.3.12" - "@typescript-eslint/scope-manager" "5.59.2" - "@typescript-eslint/types" "5.59.2" - "@typescript-eslint/typescript-estree" "5.59.2" + "@typescript-eslint/scope-manager" "5.62.0" + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/typescript-estree" "5.62.0" eslint-scope "^5.1.1" semver "^7.3.7" -"@typescript-eslint/visitor-keys@5.59.2": - version "5.59.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.2.tgz#37a419dc2723a3eacbf722512b86d6caf7d3b750" - integrity sha512-EEpsO8m3RASrKAHI9jpavNv9NlEUebV4qmF1OWxSTtKSFBpC1NCmWazDQHFivRf0O1DV11BA645yrLEVQ0/Lig== - dependencies: - "@typescript-eslint/types" "5.59.2" - eslint-visitor-keys "^3.3.0" - "@typescript-eslint/visitor-keys@5.62.0": version "5.62.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz#2174011917ce582875954ffe2f6912d5931e353e" @@ -1250,6 +1216,11 @@ "@typescript-eslint/types" "5.62.0" eslint-visitor-keys "^3.3.0" +"@ungap/structured-clone@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" + integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== + acorn-jsx@^5.3.2: version "5.3.2" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" @@ -1511,7 +1482,7 @@ debug@^2.2.0: dependencies: ms "2.0.0" -debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: +debug@^4.1.0, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -1618,10 +1589,10 @@ escape-string-regexp@^4.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== -eslint-config-prettier@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-9.0.0.tgz#eb25485946dd0c66cd216a46232dc05451518d1f" - integrity sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw== +eslint-config-prettier@^9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz#31af3d94578645966c082fcb71a5846d3c94867f" + integrity sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw== eslint-scope@^5.1.1: version "5.1.1" @@ -1644,18 +1615,19 @@ eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4 resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== -eslint@^8.48.0: - version "8.48.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.48.0.tgz#bf9998ba520063907ba7bfe4c480dc8be03c2155" - integrity sha512-sb6DLeIuRXxeM1YljSe1KEx9/YYeZFQWcV8Rq9HfigmdDEugjLEVEa1ozDjL6YDjBpQHPJxJzze+alxi4T3OLg== +eslint@^8.57.0: + version "8.57.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.0.tgz#c786a6fd0e0b68941aaf624596fb987089195668" + integrity sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@eslint-community/regexpp" "^4.6.1" - "@eslint/eslintrc" "^2.1.2" - "@eslint/js" "8.48.0" - "@humanwhocodes/config-array" "^0.11.10" + "@eslint/eslintrc" "^2.1.4" + "@eslint/js" "8.57.0" + "@humanwhocodes/config-array" "^0.11.14" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" + "@ungap/structured-clone" "^1.2.0" ajv "^6.12.4" chalk "^4.0.0" cross-spawn "^7.0.2" @@ -1951,11 +1923,6 @@ globby@^11.1.0: merge2 "^1.4.1" slash "^3.0.0" -grapheme-splitter@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" - integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== - graphemer@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" @@ -2429,10 +2396,10 @@ prelude-ls@^1.2.1: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== -prettier@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.0.3.tgz#432a51f7ba422d1469096c0fdc28e235db8f9643" - integrity sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg== +prettier@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.3.2.tgz#03ff86dc7c835f2d2559ee76876a3914cec4a90a" + integrity sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA== propagate@^2.0.0: version "2.0.1" @@ -2685,10 +2652,10 @@ typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" -typescript@^5.1.3: - version "5.1.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.1.3.tgz#8d84219244a6b40b6fb2b33cc1c062f715b9e826" - integrity sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw== +typescript@^5.5.2: + version "5.5.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.5.2.tgz#c26f023cb0054e657ce04f72583ea2d85f8d0507" + integrity sha512-NcRtPEOsPFFWjobJEtfihkLCZCXZt/os3zf8nTxjVH3RvTSxjrCamJpbExGvYOF+tFHc3pA65qpdwPbzjohhew== uglify-js@^3.1.4: version "3.17.4" diff --git a/docs/dev-guide/src/architecture/client.md b/docs/dev-guide/src/architecture/client.md index 8792c4d6bd..48d6a40b5f 100644 --- a/docs/dev-guide/src/architecture/client.md +++ b/docs/dev-guide/src/architecture/client.md @@ -24,67 +24,22 @@ the client. This is where we put together all of the pieces of the client - configuring storage, kicking off networking, setting up the RPC server, connecting to telemetry, setting up the block import pipeline (and consensus, which is part of the import pipeline), and more. -This is also the entrypoint to mining (we just spawn a bunch of threads which are tasked with mining and submitting results). This code lives in [`node/src/service.rs`](https://github.com/gluwa/creditcoin/tree/dev/node/src/service.rs). ## RPC This is where we define custom RPC methods and extend the standard RPC server with our custom method handlers. -For example, we expose a custom RPC method for retrieving -your node's current hashrate so node operators can monitor their mining performance. The code for extending the RPC server with custom handlers lives in [`node/src/rpc.rs`](https://github.com/gluwa/creditcoin/tree/dev/node/src/rpc.rs). Once you've defined your custom RPC methods and their handlers, you would need to edit this code to register your new handlers. The code for _defining_ new RPC methods is currently located in [`node/rpc`](https://github.com/gluwa/creditcoin/tree/dev/node/rpc). -## Consensus / PoW +## Consensus / NPoS -The client also contains consensus-related code. Creditcoin uses Proof of Work, which requires block authors -to generate solutions to a problem (mining) and if a "good enough" solution is produced then a block can be authored. The majority of the actual -consensus is implemented in substrate, so the only parts we have to worry about are providing the difficulty, verifying -a given solution, and generating solutions (mining). +The client also contains consensus-related code. -### Difficulty +Creditcoin uses Nominated Proof of Stake (NPoS), a variation of the Proof of Stake (PoS) consensus algorithm. NPoS introduces a nominator-validator model where nominators can select and back validators. Nominators delegate their stake to validators, and in return, they can receive a portion of the validator's rewards. This system allows token holders, who may not have enough stake or technical expertise to become a validator, to nonetheless participate in the network and earn rewards by supporting trusted validators instead. Thereby, it promotes a more inclusive and secure network, as the nomination process enables a broader set of token holders to participate in consensus and governance than under a traditional PoS model. -The difficulty is actually determined in runtime logic, so on the client-side we use a runtime API to call into the runtime -logic and get the difficulty for the current block. More specifically, the difficulty adjustment and management occurs in the -difficulty pallet (detailed in the `runtime` section). - -### Verifying a Solution - -First to clarify, in our case the "problem" miners are solving is the following: - -```pseudocode -encode(arg) = SCALE encode arg to bytes -sha3(bytes) = calculate sha3 hash of the given bytes -concat(a, b,...) = concatenate a, b, ... - -// H256 is a 256-bit hash type, U256 is a 256-bit unsigned integer type - -def do_work(difficulty: U256, pre_hash: H256, nonce: H256) -> H256: - return sha3(concat(encode(difficulty), encode(pre_hash), encode(nonce))) - -def is_solution(work: H256, nonce: H256, difficulty: U256, pre_hash: H256) -> bool: - calculated = do_work(difficulty) - - // U256.MAX is the maximum value for an unsigned 256-bit integer, i.e. 2^256 - 1 - - return work == calculated and U256(work) * difficulty <= U256.MAX - -// choose a nonce such that is_solution(do_work(difficulty, pre_hash, nonce), nonce, difficulty, pre_hash) == True -``` - -Given a proposed solution, we consider it valid if - -1. The hash is correct (matches the value obtained by recalculating the hash from input data) -2. The product of the hash and difficulty do not overflow a 256-bit unsigned integer. In other words `hash * difficulty <= 2^256 - 1` - -This code lives in the [`sha3pow` crate](https://github.com/gluwa/creditcoin/tree/dev/sha3pow). - -### Generating Solutions (Mining) - -Mining comes down to essentially picking random nonce values until you find one with the correct properties. -Once we find an appropriate nonce, we submit the solution to a `MiningHandle` which then proceeds with verification and moving forward -with publishing the block. This occurs in [`service.rs`](https://github.com/gluwa/creditcoin/tree/dev/node/src/service.rs) in the `creditcoin-node` crate. +Read more about the Nominated Proof of Stake system in the [Creditcoin Docs](https://docs.creditcoin.org/staking). diff --git a/docs/dev-guide/src/architecture/runtime/pallet-difficulty.md b/docs/dev-guide/src/architecture/runtime/pallet-difficulty.md index f719550c2b..c5cec7ab52 100644 --- a/docs/dev-guide/src/architecture/runtime/pallet-difficulty.md +++ b/docs/dev-guide/src/architecture/runtime/pallet-difficulty.md @@ -1,4 +1,4 @@ # Difficulty Pallet -The difficulty pallet is responsible for storing the difficulty of the current block, and calculating the difficulty for the next block. -The fact that this logic lives in a pallet means that we canchange our difficulty adjustment algorithm with a runtime upgrade, which is cool. +The difficulty pallet is responsible for calculating and storing the difficulty for blocks produced using the old Proof of Work system. +The fact that this logic lives in a pallet means that could change our difficulty adjustment algorithm with a runtime upgrade, which is cool. diff --git a/docs/dev-guide/src/architecture/runtime/runtime.md b/docs/dev-guide/src/architecture/runtime/runtime.md index 2619fb454f..ae840ec2e3 100644 --- a/docs/dev-guide/src/architecture/runtime/runtime.md +++ b/docs/dev-guide/src/architecture/runtime/runtime.md @@ -41,9 +41,11 @@ These pallets are all part of substrate and aren't maintained by the creditcoin - [Balances](https://paritytech.github.io/polkadot-sdk/master/pallet_balances/index.html) - [FRAME System](https://paritytech.github.io/polkadot-sdk/master/frame_system/index.html) - [Scheduler](https://paritytech.github.io/polkadot-sdk/master/pallet_scheduler/index.html) +- [Staking](https://paritytech.github.io/polkadot-sdk/master/pallet_staking/index.html) - [Sudo](https://paritytech.github.io/polkadot-sdk/master/pallet_sudo/index.html) - [Timestamp](https://paritytech.github.io/polkadot-sdk/master/pallet_timestamp/index.html) - [Transaction Payment](https://paritytech.github.io/polkadot-sdk/master/pallet_transaction_payment/index.html) +- [Utility](https://paritytech.github.io/polkadot-sdk/master/pallet_utility/index.html) ### Internal Pallets diff --git a/docs/dev-guide/src/getting-started/building.md b/docs/dev-guide/src/getting-started/building.md index d15886e003..bc3c3e9d03 100644 --- a/docs/dev-guide/src/getting-started/building.md +++ b/docs/dev-guide/src/getting-started/building.md @@ -2,7 +2,7 @@ # Building the `creditcoin-node` from source _Note on development platforms: development is easiest from a unix environment (whether that be linux, macOS, or WSL). It should be possible to -develop natively in windows but you'll most likely be on your own._ +develop natively on Windows, [however that is unsupported](https://github.com/gluwa/creditcoin/security/advisories/GHSA-cx5c-xwcv-vhmq)._ ## Build prerequisites @@ -13,24 +13,9 @@ not by installing your distro's `rust` package which will most likely be too old For the installation you can refer to [these instructions](https://www.rust-lang.org/tools/install). -Once you have a working rust installation, you'll need to add the `wasm32-unknown-unknown` target and install the nightly toolchain - -```bash -rustup update -rustup toolchain install nightly -rustup target add wasm32-unknown-unknown --nightly -``` - -Note: So that you don't have to specify the toolchain every build, you can set `nightly` as your default toolchain while working on creditcoin. - -You can also check -[./ci/env](https://github.com/gluwa/creditcoin/blob/dev/ci/env) -for the toolchain being used in our CI in case you run into issues with newer version before we notice them. - -```bash -# set nightly as default for your creditcoin checkout -rustup override set nightly -``` +Once you have rustup, you don't need to do anymore setup because this repository uses a +[rust-toolchain.toml](https://github.com/gluwa/creditcoin/blob/dev/rust-toolchain.toml) file. +**NOTE:** Creditcoin uses the feature `stdsimd` which has been removed in later nightly versions. ### System build dependencies diff --git a/docs/dev-guide/src/getting-started/observing-your-chain.md b/docs/dev-guide/src/getting-started/observing-your-chain.md index 94f92500db..a0fa4cc6dd 100644 --- a/docs/dev-guide/src/getting-started/observing-your-chain.md +++ b/docs/dev-guide/src/getting-started/observing-your-chain.md @@ -15,6 +15,6 @@ In the newly opened menu, expand the `Development` section at the bottom, then s Finally click the Switch button at the top of the chain selection menu: !["Switch"](../img/switch-chain.png) -The explorer should now show the chain running on your local node, and new blocks should be appearing regularly (every 5-30 seconds): +The explorer should now show the chain running on your local node, and new blocks should be appearing regularly (every 15 seconds): ![It should look something like this](../img/local-node-explorer.png) diff --git a/docs/dev-guide/src/getting-started/running-a-node.md b/docs/dev-guide/src/getting-started/running-a-node.md index 56140c8bb6..66c2b4754b 100644 --- a/docs/dev-guide/src/getting-started/running-a-node.md +++ b/docs/dev-guide/src/getting-started/running-a-node.md @@ -1,11 +1,14 @@ # Running a Creditcoin node +_Note on runtime platforms: running a Creditcoin node is easiest on a Unix-like environment (whether that be Linux, MacOS, or WSL). +Running natively on Windows [is unsupported](https://github.com/gluwa/creditcoin/security/advisories/GHSA-cx5c-xwcv-vhmq)._ + ## Running a development node Now that you've built a `creditcoin-node` from source, you can get a minimal development node running with: ```bash -./target/release/creditcoin-node --dev --mining-key 5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY --mining-threads 1 +./target/release/creditcoin-node --dev ``` The node should start running and produce output similar to below: @@ -39,8 +42,8 @@ The node should start running and produce output similar to below: ``` By default this is a temporary chain, so when you stop your development node the chain will be wiped out. If you want a local development -chain that is persistent, you can use the `local` chain specification: +chain that is persistent, you can use the `--base-path` flag to specify a directory where the chain's data will be stored: ```bash -./target/release/creditcoin-node --chain local --validator --mining-key 5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY --mining-threads 2 +./target/release/creditcoin-node --dev --base-path persistent-chain ``` diff --git a/docs/dev-guide/src/getting-started/substrate-resources.md b/docs/dev-guide/src/getting-started/substrate-resources.md index 3fe564f4dc..31c25ed9fc 100644 --- a/docs/dev-guide/src/getting-started/substrate-resources.md +++ b/docs/dev-guide/src/getting-started/substrate-resources.md @@ -1,7 +1,7 @@ # Learning about substrate The Creditcoin blockchain is built on the [substrate framework](https://docs.substrate.io/), which provides most of the underlying -blockchain functionality (P2P networking, block production, RPC server, storage, etc.). This allows us +blockchain functionality (P2P networking, block production, block finalizaiton, RPC server, storage, etc.). This allows us to focus on the functionality specific to creditcoin and additionally we benefit from existing tooling developed for the polkadot/substrate ecosystem (such as the polkadot explorer, polkadotJS, telemetry, etc.). @@ -12,6 +12,6 @@ all of the material in the [Learn section](https://docs.substrate.io/learn/). That should give you a rough understanding of substrate's architecture, and how the pieces fit together. -For learning about FRAME and best practices, the [substrate repository](https://github.com/paritytech/substrate) has a bunch of pallets of varying complexity that serve as good reference points. -For starters, the [sudo pallet](https://github.com/paritytech/substrate/tree/polkadot-v0.9.32/frame/sudo) is fairly small and +For learning about FRAME and best practices, the [substrate repository](https://github.com/gluwa/substrate) has a bunch of pallets of varying complexity that serve as good reference points. +For starters, the [sudo pallet](https://github.com/gluwa/substrate/tree/master/frame/sudo) is fairly small and digestible. diff --git a/docs/miner-setup.md b/docs/miner-setup.md deleted file mode 100644 index 0aec7bbfff..0000000000 --- a/docs/miner-setup.md +++ /dev/null @@ -1,78 +0,0 @@ -# Creditcoin Mining Node Setup - -## Prerequisites - -- Working [Docker](https://www.docker.com) installation - -**Notes:** - -For testing runtime upgrade/migrations Gluwa is using a 4 vCPU, 32 GiB RAM, -Memory optimized virtual machine in Azure. The size spec is `Standard_E4as_v4`. -See the `vmSize` parameter in -[.github/runner.bicep](https://github.com/gluwa/creditcoin/blob/dev/.github/runner.bicep) -for reference. - -## Setup Steps - -1) In order to receive mining rewards you will need an account on the Creditcoin network. Each account has an address and a balance associated with it. - The account is backed by a keypair. You can use an existing ECDSA keypair (e.g. from pre-Creditcoin 2.0) or you can generate a new keypair. - You can use [subkey](https://docs.substrate.io/v3/tools/subkey/) to retrieve the account address from an existing private key - (e.g. from pre-Creditcoin 2.0) or to generate a new keypair. - - - Using an existing ECDSA keypair: - - Your private key should be formatted as hex and start with `0x`, for example `0x3351b11eca7b5c78c0f55c681d9a2e8a0630bcc7a95a35a4a87615c916771774` - - Note: if your existing private key starts with `00`, remove the leading `00` first. - - Run `docker run -it docker.io/parity/subkey inspect --scheme Ecdsa ` which will display the account information fot the keypair. For example: - - ```bash - Secret Key URI `0x3351b11eca7b5c78c0f55c681d9a2e8a0630bcc7a95a35a4a87615c916771774` is account: - Secret seed: 0x3351b11eca7b5c78c0f55c681d9a2e8a0630bcc7a95a35a4a87615c916771774 - Public key (hex): 0x02abf7befd96f80ce3a27772e7903f45a930c54ede2f0b9e052bfb21e90e0a4b40 - Account ID: 0xe37a568057962e95990cbba46c68f8d5b0d0d614abc8bc9f4e46af3e7aa8880c - Public key (SS58): KW6p8XTkd6pLhTnwfSfr3hUcVSKTQhJHZxTVD8RrpfUhUTrvn - SS58 Address: 5HCy4x9b5mW28EYheGn14bWidQkhab5VMiNakia7i4VfxTKs - ``` - - - Copy the `SS58 Address` for later use - - Generate a new keypair - - Run `docker run -it docker.io/parity/subkey:latest generate`. This will generate a new keypair and print the account information, for example: - - ```bash - Secret phrase: toss frown run relief book lift aunt guard reduce shell genuine alarm - Network ID: substrate - Secret seed: 0x5ad92bddf82eae47f5c9cc77a749fd175d9d80aadeab6555e3126a087f5eb5f1 - Public key (hex): 0x03084078b5d3633f53ceb103199332aaf86e7ebc1b2975e697dd5dc8653692b7b9 - Account ID: 0x7bbf1daa8ccb9aedccade233879f299a5485fbd0922d9458b19a5dbfde71da3c - Public key (SS58): KW8u8Y1GgAGWtTfU5o92imPsYVkowfbsKE7hosQHwJ2E7gF9h - SS58 Address: 5ErxX8PgVYVE3WbCkSs9mvioFHVrsc4uXFwkF3G9Pyv4FC2w - ``` - - - Store your secret phrase (a 12-word mnemonic) in a secure location. We won’t use this phrase directly, but you’ll need it to access the account or recover your private key. - - Copy the `SS58 Address` for later use -2) Start mining node - - Make make sure that your port 30333 is accessible by external connections - - Obtain your public IP address - - Run (remove comment lines first) - - ```bash - - docker run -p 30333:30333 -v :/data gluwa/creditcoin:2.0.0-runtime-210 \ - # running a mining node - --validator \ - # (optional) REPLACE with a name for your node, to make it easier to identify - --name \ - # allow prometheus metrics to be scraped - --prometheus-external \ - # (optional) opt in to telemetry - --telemetry-url "wss://telemetry.polkadot.io/submit/ 0" "wss://telemetry.creditcoin.network/submit/ 0" \ - # node to connect to on boot, in order to join the network - --bootnodes "/dns4/bootnode.creditcoin.network/tcp/30333/p2p/12D3KooWAEgDL126EUFxFfdQKiUhmx3BJPdszQHu9PsYsLCuavhb" "/dns4/bootnode2.creditcoin.network/tcp/30333/p2p/12D3KooWSQye3uN3bZQRRC4oZbpiAZXkP2o5UZh6S8pqyh24bF3k" "/dns4/bootnode3.creditcoin.network/tcp/30333/p2p/12D3KooWFrsEZ2aSfiigAxs6ir2kU6en4BewotyCXPhrJ7T1AzjN" \ - # REPLACE with the public IP address or host name that your node can be reached at - --public-addr "/dns4//tcp/30333" \ - # we want to connect to the mainnet - --chain mainnet \ - # REPLACE with your mining public key/address to receive rewards at - --mining-key \ - # the port to use for node-to-node communication - --port 30333 - ``` diff --git a/integration-tests/README.md b/integration-tests/README.md index 17feadca49..204e8527f8 100644 --- a/integration-tests/README.md +++ b/integration-tests/README.md @@ -2,7 +2,7 @@ Install Node.js and Yarn. You can do so from here: -**WARNING:** Node.js 14.x || 16.x is required +**WARNING:** Node.js 20.x is required Alternatively, a convenient tool to manage Node/npm installations is `nvm`. You can get it here: @@ -10,9 +10,9 @@ You can get it here: And then install the required version as follows. ```bash -nvm install 16 -nvm alias default 16 -nvm use 16 +nvm install 20 +nvm alias default 20 +nvm use 20 ``` We use Yarn for our package management and build scripts. To install Yarn enter: @@ -28,7 +28,7 @@ This test suite is built with creditcoin-js, Polkadot.js and Jest! for more information: ```bash -cargo run --release -- --dev --mining-key 5DkPYq8hFiCeGxFBkz6DAwnTrvKevAJfTYrzFtr9hpDsEAU1 --monitor-nonce auto +cargo run --release --bin creditcoin-node -- --dev --monitor-nonce auto ``` 1. Execute a local Ethereum node: @@ -79,8 +79,8 @@ options replace `test` with `jest`. For example: yarn jest src/test/collect-coins.test.ts ``` -You can use `CREDITCOIN_WS_PORT` and `CREDITCOIN_METRICS_PORT` environment variables -to adjust the port values when running this test suite against a local node. That's mainly +You can use `CREDITCOIN_API_URL`, `CREDITCOIN_WS_PORT` and `CREDITCOIN_METRICS_PORT` environment variables +to adjust the some values when running this test suite against a local node. That's mainly useful for executing the loan cycle against a Zombienet chain running locally. diff --git a/integration-tests/package.json b/integration-tests/package.json index 388d32ba15..cca48667c9 100644 --- a/integration-tests/package.json +++ b/integration-tests/package.json @@ -15,16 +15,16 @@ "author": "", "license": "ISC", "dependencies": { - "@polkadot/keyring": "12.4.2", + "@polkadot/keyring": "13.0.2", "@types/ws": "^8.5.3", "axios": "^1.0.0", - "creditcoin-js": "file:../creditcoin-js/creditcoin-js-v0.10.1.tgz", + "creditcoin-js": "file:../creditcoin-js/creditcoin-js-v0.10.4.tgz", "ws": "^8.5.0" }, "devDependencies": { "@types/jest": "^29.0.1", - "@typescript-eslint/eslint-plugin": "^6.5.0", - "@typescript-eslint/parser": "^6.3.0", + "@typescript-eslint/eslint-plugin": "^7.1.1", + "@typescript-eslint/parser": "^8.0.0", "eslint": "^8.16.0", "eslint-config-prettier": "^9.0.0", "jest": "^29.0.3", diff --git a/integration-tests/src/creditcoinForkSetup.ts b/integration-tests/src/creditcoinForkSetup.ts index 60cd1b62e2..93d93fb316 100644 --- a/integration-tests/src/creditcoinForkSetup.ts +++ b/integration-tests/src/creditcoinForkSetup.ts @@ -10,6 +10,8 @@ const setup = async () => { (global as any).CREDITCOIN_SWITCH_TO_POS_ALREADY_CALLED = process.env.SWITCH_TO_POS_ALREADY_CALLED === '1'; + (global as any).CREDITCOIN_USES_FAST_RUNTIME = false; + await globalSetup(); }; diff --git a/integration-tests/src/devnetSetup.ts b/integration-tests/src/devnetSetup.ts index 90bbcd8d6c..e84028efad 100644 --- a/integration-tests/src/devnetSetup.ts +++ b/integration-tests/src/devnetSetup.ts @@ -33,13 +33,13 @@ const setup = async () => { (global as any).CREDITCOIN_ETHEREUM_USE_HARDHAT_WALLET = false; (global as any).CREDITCOIN_EXECUTE_SETUP_AUTHORITY = false; - (global as any).CREDITCOIN_NETWORK_LONG_NAME = 'Creditcoin Dev'; - (global as any).CREDITCOIN_NETWORK_SHORT_NAME = 'creditcoin_dev'; + (global as any).CREDITCOIN_NETWORK_LONG_NAME = 'PoS Devnet'; + (global as any).CREDITCOIN_NETWORK_SHORT_NAME = 'creditcoin_pos_devnet'; (global as any).CREDITCOIN_METRICS_BASE = 'http://dev-rpc-creditcoin-rpc-2.centralus.cloudapp.azure.com:9615'; (global as any).CREDITCOIN_REUSE_EXISTING_ADDRESSES = true; - // This is on Goerli, https://sepolia.etherscan.io/address/0xa30fac8b364a2893927bd77fcea1279779e3586b - (global as any).CREDITCOIN_CTC_CONTRACT_ADDRESS = '0xa30fac8b364a2893927bd77fcea1279779e3586b'; + // This is on Goerli, https://sepolia.etherscan.io/address/0xd2f6CBE058b7233FE5fd1a790A8D85328e3a5d3D + (global as any).CREDITCOIN_CTC_CONTRACT_ADDRESS = '0xd2f6CBE058b7233FE5fd1a790A8D85328e3a5d3D'; // we need a new tx hash every time so we call .burn() in globalSetup()! See ctc-deploy.ts (global as any).CREDITCOIN_CTC_BURN_TX_HASH = undefined; diff --git a/integration-tests/src/globalSetup.ts b/integration-tests/src/globalSetup.ts index 6105381c75..6180b47a41 100644 --- a/integration-tests/src/globalSetup.ts +++ b/integration-tests/src/globalSetup.ts @@ -1,6 +1,7 @@ import { ApiPromise, WsProvider, Keyring, KeyringPair, Wallet, POINT_01_CTC } from 'creditcoin-js'; import { setupAuthority } from 'creditcoin-js/lib/examples/setup-authority'; import { deployCtcContract } from 'creditcoin-js/lib/ctc-deploy'; +import { GluwaCreditVestingToken } from 'creditcoin-js/lib/examples/ctc/typechain'; const createSigner = (keyring: Keyring, who: 'lender' | 'borrower' | 'sudo'): KeyringPair => { switch (who) { @@ -15,6 +16,15 @@ const createSigner = (keyring: Keyring, who: 'lender' | 'borrower' | 'sudo'): Ke } }; +declare global { + // eslint-disable-next-line no-var + var CREDITCOIN_CTC_CONTRACT: GluwaCreditVestingToken; +} + +export const creditcoinApiUrl = (defaultUrl: string) => { + return process.env.CREDITCOIN_API_URL || defaultUrl; +}; + const setup = async () => { process.env.NODE_ENV = 'test'; @@ -33,7 +43,7 @@ const setup = async () => { if ((global as any).CREDITCOIN_API_URL === undefined) { const wsPort = process.env.CREDITCOIN_WS_PORT || '9944'; - (global as any).CREDITCOIN_API_URL = `ws://127.0.0.1:${wsPort}`; + (global as any).CREDITCOIN_API_URL = creditcoinApiUrl(`ws://127.0.0.1:${wsPort}`); } if ((global as any).CREDITCOIN_METRICS_BASE === undefined) { @@ -87,11 +97,12 @@ const setup = async () => { } // Note: in case address is defined will attach to already deployed contract - await deployCtcContract( + const contract = await deployCtcContract( (global as any).CREDITCOIN_CTC_CONTRACT_ADDRESS, (global as any).CREDITCOIN_ETHEREUM_NODE_URL, (global as any).CREDITCOIN_CTC_DEPLOYER_PRIVATE_KEY, ); + global.CREDITCOIN_CTC_CONTRACT = contract; (global as any).CREDITCOIN_CTC_CONTRACT_ADDRESS = process.env.CREDITCOIN_CTC_CONTRACT_ADDRESS; if ((global as any).CREDITCOIN_CTC_BURN_TX_HASH === undefined) { diff --git a/integration-tests/src/test/collect-coins.test.ts b/integration-tests/src/test/collect-coins.test.ts deleted file mode 100644 index 3372f77ea8..0000000000 --- a/integration-tests/src/test/collect-coins.test.ts +++ /dev/null @@ -1,197 +0,0 @@ -import { KeyringPair } from '@polkadot/keyring/types'; -import { AUTHORITY_SURI } from 'creditcoin-js/lib/examples/setup-authority'; -import { createCollectedCoinsId } from 'creditcoin-js/lib/extrinsics/request-collect-coins'; -import { AddressRegistered, createAddressId } from 'creditcoin-js/lib/extrinsics/register-address'; -import { creditcoinApi, providers, Wallet } from 'creditcoin-js'; -import { Blockchain } from 'creditcoin-js/lib/model'; -import { CreditcoinApi } from 'creditcoin-js/lib/types'; -import { testData, tryRegisterAddress } from 'creditcoin-js/lib/testUtils'; -import { testIf } from '../utils'; - -describe('CollectCoins', (): void => { - let ccApi: CreditcoinApi; - let authority: KeyringPair; - - const { keyring, blockchain } = testData( - (global as any).CREDITCOIN_ETHEREUM_CHAIN as Blockchain, - (global as any).CREDITCOIN_CREATE_WALLET, - ); - const evmAddress = '0xffffffffffffffffffffffffffffffffffffffff'; - const badHash = '0xbad'; - const addressId = createAddressId(blockchain, evmAddress); - - beforeAll(async () => { - ccApi = await creditcoinApi((global as any).CREDITCOIN_API_URL); - if ((global as any).CREDITCOIN_EXECUTE_SETUP_AUTHORITY) { - authority = keyring.createFromUri(AUTHORITY_SURI); - } - }); - - afterAll(async () => { - await ccApi.api.disconnect(); - }); - - describe('request', (): void => { - let collector: KeyringPair; - let deployerWallet: Wallet; - let deployerRegAddr: AddressRegistered; - - beforeAll(async () => { - const { - api, - utils: { signAccountId }, - } = ccApi; - - collector = (global as any).CREDITCOIN_CREATE_SIGNER(keyring, 'lender'); - - /* eslint-disable @typescript-eslint/naming-convention */ - const contract = api.createType('PalletCreditcoinOcwTasksCollectCoinsDeployedContract', { - address: (global as any).CREDITCOIN_CTC_CONTRACT_ADDRESS, - chain: blockchain, - }); - - await api.tx.sudo - .sudo(api.tx.creditcoin.setCollectCoinsContract(contract)) - .signAndSend(collector, { nonce: -1 }); - - const provider = new providers.JsonRpcProvider((global as any).CREDITCOIN_ETHEREUM_NODE_URL); - deployerWallet = new Wallet((global as any).CREDITCOIN_CTC_DEPLOYER_PRIVATE_KEY, provider); - deployerRegAddr = await tryRegisterAddress( - ccApi, - deployerWallet.address, - blockchain, - signAccountId(deployerWallet, collector.address), - collector, - (global as any).CREDITCOIN_REUSE_EXISTING_ADDRESSES, - ); - }, 300_000); - - testIf((global as any).CREDITCOIN_EXECUTE_SETUP_AUTHORITY, 'fee is min 0.01 CTC', async (): Promise => { - const { api } = ccApi; - - const { partialFee } = await api.tx.creditcoin - .requestCollectCoins(evmAddress, badHash) - .paymentInfo(authority, { nonce: -1 }); - expect(partialFee.toBigInt()).toBeGreaterThanOrEqual((global as any).CREDITCOIN_MINIMUM_TXN_FEE); - }); - - it('000 - with mixed up Ethereum addresses should throw IncorrectSender error', async (): Promise => { - const { - extrinsics: { requestCollectCoins }, - utils: { signAccountId }, - } = ccApi; - - // register a second Ethereum Wallet with the same Creditcoin account - const secondWallet = Wallet.createRandom(); - const secondRegAddr = await tryRegisterAddress( - ccApi, - secondWallet.address, - blockchain, - signAccountId(secondWallet, collector.address), - collector, - (global as any).CREDITCOIN_REUSE_EXISTING_ADDRESSES, - ); - // the two external addresses must be different - expect(secondRegAddr.item.externalAddress).not.toBe(deployerRegAddr.item.externalAddress); - - // send a collect coins transaction using the 2nd Ethereum address - // and the burn tx hash from the 1st Ethereum address. - // IMPORTANT: Both Ethereum wallets are registered to collector on Creditcoin. - const collectCoinsEvent = await requestCollectCoins( - secondRegAddr.item.externalAddress, - collector, - (global as any).CREDITCOIN_CTC_BURN_TX_HASH, - ); - - // eventhough collector (a Creditcoin account) has control over both Ethereum wallets - // they can't collect coins using a burn tx hash which was sent from a their 1st wallet - await expect(collectCoinsEvent.waitForVerification(800_000)).rejects.toThrow(/IncorrectSender/); - }, 900_000); - - // WARNING: this scenario should always be executed *AFTER* the one above because - // they use the same burn tx hash value ! If this is executed first the above one - // will fail with CollectCoinsAlreadyRegistered instead of the expected IncorrectSender !!! - it('001 - end-to-end', async (): Promise => { - const { - extrinsics: { requestCollectCoins }, - } = ccApi; - - const collectCoinsEvent = await requestCollectCoins( - deployerRegAddr.item.externalAddress, - collector, - (global as any).CREDITCOIN_CTC_BURN_TX_HASH, - ); - - const collectCoinsVerified = await collectCoinsEvent.waitForVerification(800_000).catch(); - expect(collectCoinsVerified).toBeTruthy(); - - // try again - should fail - await expect( - requestCollectCoins( - deployerRegAddr.item.externalAddress, - collector, - (global as any).CREDITCOIN_CTC_BURN_TX_HASH, - ), - ).rejects.toThrow( - 'creditcoin.CollectCoinsAlreadyRegistered: The coin collection has already been registered', - ); - }, 900_000); - - it('should throw TransactionNotFound when txHash not found', async (): Promise => { - const { - extrinsics: { requestCollectCoins }, - } = ccApi; - - const collectCoinsEvent = await requestCollectCoins( - deployerRegAddr.item.externalAddress, - collector, - '0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', - ); - await expect(collectCoinsEvent.waitForVerification(800_000)).rejects.toThrow(/TransactionNotFound/); - }, 900_000); - }); - - describe('fail', (): void => { - testIf((global as any).CREDITCOIN_EXECUTE_SETUP_AUTHORITY, 'fee is min 0.01 CTC', async (): Promise => { - const { api } = ccApi; - const collectedCoinsId = createCollectedCoinsId(evmAddress); - const cause = api.createType('PalletCreditcoinOcwErrorsVerificationFailureCause', 'TaskFailed'); - - // eslint-disable-next-line @typescript-eslint/naming-convention - const taskId = api.createType('PalletCreditcoinTaskId', { CollectCoins: collectedCoinsId }); - - const { partialFee } = await api.tx.creditcoin - .failTask(1000, taskId, cause) - .paymentInfo(authority, { nonce: -1 }); - - expect(partialFee.toBigInt()).toBeGreaterThanOrEqual((global as any).CREDITCOIN_MINIMUM_TXN_FEE); - }); - }); - - describe('persist', (): void => { - testIf( - (global as any).CREDITCOIN_EXECUTE_SETUP_AUTHORITY, - 'fee is min 0.01 CTC but bypassed by OCW', - async (): Promise => { - const { api } = ccApi; - const collectedCoins = { - to: addressId, - amount: 1000, - txHash: badHash, - }; - - const collectedCoinsId = createCollectedCoinsId(evmAddress); - /* eslint-disable @typescript-eslint/naming-convention */ - const taskOutput = api.createType('PalletCreditcoinTaskOutput', { - CollectCoins: [collectedCoinsId, collectedCoins], - }); - - const { partialFee } = await api.tx.creditcoin - .persistTaskOutput(1000, taskOutput) - .paymentInfo(authority, { nonce: -1 }); - /* eslint-enable */ - expect(partialFee.toBigInt()).toBeGreaterThanOrEqual((global as any).CREDITCOIN_MINIMUM_TXN_FEE); - }, - ); - }); -}); diff --git a/integration-tests/src/test/gate-token.test.ts b/integration-tests/src/test/gate-token.test.ts deleted file mode 100644 index 573f1289b6..0000000000 --- a/integration-tests/src/test/gate-token.test.ts +++ /dev/null @@ -1,110 +0,0 @@ -import { KeyringPair, creditcoinApi, Keyring } from 'creditcoin-js'; -import { Blockchain } from 'creditcoin-js/lib/model'; -import { CreditcoinApi } from 'creditcoin-js/lib/types'; -import { testData, tryRegisterAddress } from 'creditcoin-js/lib/testUtils'; - -import { deployGATEToken } from 'creditcoin-js/lib/ctc-deploy'; -import { JsonRpcProvider } from '@ethersproject/providers'; -import { Wallet } from 'ethers'; -import { mnemonicGenerate } from '@polkadot/util-crypto'; -import { signAccountId } from 'creditcoin-js/lib/utils'; -import { GATEContract } from 'creditcoin-js/lib/extrinsics/request-collect-coins-v2'; -import { testIf } from '../utils'; - -describe('Test GATE Token', (): void => { - let ccApi: CreditcoinApi; - let sudoSigner: KeyringPair; - - // Needed to interact with the ethererum private node - const testingData = testData( - (global as any).CREDITCOIN_ETHEREUM_CHAIN as Blockchain, - (global as any).CREDITCOIN_CREATE_WALLET, - ); - const { keyring } = testingData; - const provider = new JsonRpcProvider((global as any).CREDITCOIN_ETHEREUM_NODE_URL); - const deployer = new Wallet((global as any).CREDITCOIN_CTC_DEPLOYER_PRIVATE_KEY, provider); - const burnAmount = 200; - - // Holds the reference to the deployed GATE contract - let gateToken: any; - const gateKeyring = new Keyring({ type: 'ed25519', ss58Format: 3 }); - const gateFaucet = gateKeyring.addFromUri(mnemonicGenerate(12)); - - beforeAll(async () => { - gateToken = await deployGATEToken(deployer, undefined); - - ccApi = await creditcoinApi((global as any).CREDITCOIN_API_URL); - if ((global as any).CREDITCOIN_EXECUTE_SETUP_AUTHORITY) { - sudoSigner = (global as any).CREDITCOIN_CREATE_SIGNER(keyring, 'lender'); - } - }); - - afterAll(async () => { - await ccApi.api.disconnect(); - }); - - testIf( - (global as any).CREDITCOIN_EXECUTE_SETUP_AUTHORITY, - 'End to end', - async () => { - const { - api, - extrinsics: { requestCollectCoinsV2 }, - } = ccApi; - - await api.tx.sudo - .sudo(api.tx.balances.setBalance(gateFaucet.address, 1000, 0)) - .signAndSend(sudoSigner, { nonce: -1 }); - - // Set the on chain location for the burn contract to be the address of the deployer wallet - const contract = api.createType('PalletCreditcoinOcwTasksCollectCoinsDeployedContract', { - address: gateToken.address, - chain: testingData.blockchain, - }); - await api.tx.sudo.sudo(api.tx.creditcoin.setGateContract(contract)).signAndSend(sudoSigner, { nonce: -1 }); - - const mintTx = await gateToken.mint(deployer.address, 2500); - await mintTx.wait(3); - const balance = await gateToken.balanceOf(deployer.address); - expect(balance.eq(2500)).toBe(true); - - const burnTx = await gateToken.burn(burnAmount); - await burnTx.wait(3); - - // We are using the same deployer address as GCRE so the address may already be registered - await tryRegisterAddress( - ccApi, - deployer.address, - testingData.blockchain, - signAccountId(api, deployer, sudoSigner.address), - sudoSigner, - (global as any).CREDITCOIN_REUSE_EXISTING_ADDRESSES, - ); - const gateContract = GATEContract(deployer.address, burnTx.hash); - - // Test #1: The extrinsic should erorr when the faucet address has not been set - await expect(requestCollectCoinsV2(gateContract, sudoSigner)).rejects.toThrow( - 'creditcoin.BurnGATEFaucetNotSet', - ); - - await api.tx.sudo - .sudo(api.tx.creditcoin.setGateFaucet(gateFaucet.address)) - .signAndSend(sudoSigner, { nonce: -1 }); - - const swapGATEEvent = await requestCollectCoinsV2(gateContract, sudoSigner); - const swapGATEVerified = await swapGATEEvent.waitForVerification(800_000).catch(); - - // Test #2: This is a successful transfer and should proceed normally - expect(swapGATEVerified).toBeTruthy(); - - // Test #3: GATE -> CTC should be swapped in a 2:1 ratio - expect(swapGATEVerified.amount.toNumber()).toEqual(burnAmount / 2); - - // Test #4: You cannot resubmit previously used burn transactions - await expect(requestCollectCoinsV2(gateContract, sudoSigner)).rejects.toThrow( - 'creditcoin.CollectCoinsAlreadyRegistered: The coin collection has already been registered', - ); - }, - 900_000, - ); -}); diff --git a/integration-tests/src/test/metrics.test.ts b/integration-tests/src/test/metrics.test.ts index 62da1ed118..bb4b2bbc67 100644 --- a/integration-tests/src/test/metrics.test.ts +++ b/integration-tests/src/test/metrics.test.ts @@ -27,4 +27,19 @@ testIf((global as any).CREDITCOIN_API_URL === 'ws://127.0.0.1:9944', 'Nonce metr expect(data).toContain('authority_offchain_nonce'); expect(data).toContain('authority_onchain_nonce'); + + const shortName: string = (global as any).CREDITCOIN_NETWORK_SHORT_NAME; + ['authority_onchain_nonce', 'authority_offchain_nonce'].forEach((metricName) => { + const re = new RegExp(`${metricName}\\{chain="${shortName}"\\} (\\d+)`); + + const match = data.match(re); + expect(match).not.toBeNull(); + if (match) { + // so TS sees the match is non-null + const value = parseInt(match[1], 10); + // WARNING: for this metric to be >0 the node needs to have + // processed some extrinsics related to the off-chain worker + expect(value).toBeGreaterThan(0); + } + }); }); diff --git a/integration-tests/src/test/remove-authority.test.ts b/integration-tests/src/test/remove-authority.test.ts index 9df5add539..b5277f0193 100644 --- a/integration-tests/src/test/remove-authority.test.ts +++ b/integration-tests/src/test/remove-authority.test.ts @@ -22,7 +22,7 @@ describe('RemoveAuthority', (): void => { beforeAll(async () => { api = (await creditcoinApi((global as any).CREDITCOIN_API_URL)).api; if (globals.CREDITCOIN_EXECUTE_SETUP_AUTHORITY) { - sudoSigner = (global as any).CREDITCOIN_CREATE_SIGNER(keyring, 'lender'); + sudoSigner = (global as any).CREDITCOIN_CREATE_SIGNER(keyring, 'sudo'); authority = keyring.addFromUri('//Auth'); await addAuthorityAsync(api, authority.address, sudoSigner); } diff --git a/integration-tests/src/test/rpc/creditcoin.test.ts b/integration-tests/src/test/rpc/creditcoin.test.ts index 3a3cb3683f..5f4c8913fc 100644 --- a/integration-tests/src/test/rpc/creditcoin.test.ts +++ b/integration-tests/src/test/rpc/creditcoin.test.ts @@ -63,6 +63,39 @@ describe('Creditcoin RPC', (): void => { }, ); + testIf( + (global as any).CREDITCOIN_API_URL === 'ws://127.0.0.1:9944', + 'after 5:00 mins of inactivity connection will still be open and able to transmit messages', + (done: any): void => { + const ws = new WebSocket((global as any).CREDITCOIN_API_URL); + + ws.on('open', () => { + setTimeout(() => { + const rpc = { + id: 1, + jsonrpc: '2.0', + method: 'task_getOffchainNonceKey', + params: ['0xThisIsNotValid'], + }; + // connection is still open + expect(ws.readyState).toEqual(WebSocket.OPEN); + + ws.send(JSON.stringify(rpc)); + }, 300_000); // wait for 5 min before sending a message + }) + .on('message', (data) => { + // eslint-disable-next-line @typescript-eslint/no-base-to-string + const utf8Str = data.toString('utf-8'); + + const error = JSON.parse(utf8Str).error; + expect(error.message).toContain('Not a valid hex-string or SS58 address'); + ws.close(); + }) + .on('close', () => done()); + }, + 350_000, + ); + testIf( (global as any).CREDITCOIN_API_URL === 'ws://127.0.0.1:9944', 'getOffchainNonceKey() should work when passed a valid AccountId', diff --git a/integration-tests/src/test/set-collect-coins-contract.test.ts b/integration-tests/src/test/set-collect-coins-contract.test.ts deleted file mode 100644 index 9e69a28c71..0000000000 --- a/integration-tests/src/test/set-collect-coins-contract.test.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { KeyringPair, creditcoinApi } from 'creditcoin-js'; -import { Blockchain } from 'creditcoin-js/lib/model'; -import { CreditcoinApi } from 'creditcoin-js/lib/types'; -import { testData } from 'creditcoin-js/lib/testUtils'; - -import { extractFee, testIf } from '../utils'; - -describe('SetCollectCoinsContract', (): void => { - let ccApi: CreditcoinApi; - let sudoSigner: KeyringPair; - const testingData = testData( - (global as any).CREDITCOIN_ETHEREUM_CHAIN as Blockchain, - (global as any).CREDITCOIN_CREATE_WALLET, - ); - const { keyring } = testingData; - - beforeAll(async () => { - ccApi = await creditcoinApi((global as any).CREDITCOIN_API_URL); - if ((global as any).CREDITCOIN_EXECUTE_SETUP_AUTHORITY) { - sudoSigner = (global as any).CREDITCOIN_CREATE_SIGNER(keyring, 'lender'); - } - }); - - afterAll(async () => { - await ccApi.api.disconnect(); - }); - - testIf((global as any).CREDITCOIN_EXECUTE_SETUP_AUTHORITY, 'fee is min 0.01 CTC', async (): Promise => { - const { api } = ccApi; - - /* eslint-disable @typescript-eslint/naming-convention */ - const contract = api.createType('PalletCreditcoinOcwTasksCollectCoinsDeployedContract', { - address: '0xa3EE21C306A700E682AbCdfe9BaA6A08F3820419', - chain: testingData.blockchain, - }); - - return new Promise((resolve, reject): void => { - const unsubscribe = api.tx.sudo - .sudo(api.tx.creditcoin.setCollectCoinsContract(contract)) - .signAndSend(sudoSigner, { nonce: -1 }, async ({ dispatchError, events, status }) => { - await extractFee(resolve, reject, unsubscribe, api, dispatchError, events, status); - }) - .catch((error) => reject(error)); - }).then((fee) => { - expect(fee).toBeGreaterThanOrEqual((global as any).CREDITCOIN_MINIMUM_TXN_FEE); - }); - }); -}); diff --git a/integration-tests/src/test/set-gate-contract.test.ts b/integration-tests/src/test/set-gate-contract.test.ts deleted file mode 100644 index b73480ecee..0000000000 --- a/integration-tests/src/test/set-gate-contract.test.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { KeyringPair, creditcoinApi } from 'creditcoin-js'; -import { Blockchain } from 'creditcoin-js/lib/model'; -import { CreditcoinApi } from 'creditcoin-js/lib/types'; -import { testData } from 'creditcoin-js/lib/testUtils'; - -import { extractFee, describeIf } from '../utils'; - -describeIf((global as any).CREDITCOIN_EXECUTE_SETUP_AUTHORITY, 'SetGateContract', (): void => { - let ccApi: CreditcoinApi; - let sudoSigner: KeyringPair; - const testingData = testData( - (global as any).CREDITCOIN_ETHEREUM_CHAIN as Blockchain, - (global as any).CREDITCOIN_CREATE_WALLET, - ); - const { keyring } = testingData; - - beforeAll(async () => { - ccApi = await creditcoinApi((global as any).CREDITCOIN_API_URL); - sudoSigner = (global as any).CREDITCOIN_CREATE_SIGNER(keyring, 'lender'); - }); - - afterAll(async () => { - await ccApi.api.disconnect(); - }); - - it('fee is min 0.01 CTC', async (): Promise => { - const { api } = ccApi; - - /* eslint-disable @typescript-eslint/naming-convention */ - const contract = api.createType('PalletCreditcoinOcwTasksCollectCoinsDeployedContract', { - // for testing purposes I can use any address b/c I'm only interested in the transaction fee - address: '0xa3EE21C306A700E682AbCdfe9BaA6A08F3820419', - chain: testingData.blockchain, - }); - - return new Promise((resolve, reject): void => { - const unsubscribe = api.tx.sudo - .sudo(api.tx.creditcoin.setGateContract(contract)) - .signAndSend(sudoSigner, { nonce: -1 }, async ({ dispatchError, events, status }) => { - await extractFee(resolve, reject, unsubscribe, api, dispatchError, events, status); - }) - .catch((error) => reject(error)); - }).then((fee) => { - expect(fee).toBeGreaterThanOrEqual((global as any).CREDITCOIN_MINIMUM_TXN_FEE); - }); - }); -}); diff --git a/integration-tests/src/test/set-gate-faucet.test.ts b/integration-tests/src/test/set-gate-faucet.test.ts deleted file mode 100644 index 81d1063768..0000000000 --- a/integration-tests/src/test/set-gate-faucet.test.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { KeyringPair, creditcoinApi } from 'creditcoin-js'; -import { Blockchain } from 'creditcoin-js/lib/model'; -import { CreditcoinApi } from 'creditcoin-js/lib/types'; -import { testData } from 'creditcoin-js/lib/testUtils'; - -import { extractFee, describeIf } from '../utils'; - -describeIf((global as any).CREDITCOIN_EXECUTE_SETUP_AUTHORITY, 'SetGateFaucet', (): void => { - let ccApi: CreditcoinApi; - let sudoSigner: KeyringPair; - const testingData = testData( - (global as any).CREDITCOIN_ETHEREUM_CHAIN as Blockchain, - (global as any).CREDITCOIN_CREATE_WALLET, - ); - const { keyring } = testingData; - - beforeAll(async () => { - ccApi = await creditcoinApi((global as any).CREDITCOIN_API_URL); - sudoSigner = (global as any).CREDITCOIN_CREATE_SIGNER(keyring, 'lender'); - }); - - afterAll(async () => { - await ccApi.api.disconnect(); - }); - - it('fee is min 0.01 CTC', async (): Promise => { - const { api } = ccApi; - - return new Promise((resolve, reject): void => { - const unsubscribe = api.tx.sudo - // for testing purposes I can use any address b/c I'm only interested in the transaction fee - .sudo(api.tx.creditcoin.setGateFaucet(sudoSigner.address)) - .signAndSend(sudoSigner, { nonce: -1 }, async ({ dispatchError, events, status }) => { - await extractFee(resolve, reject, unsubscribe, api, dispatchError, events, status); - }) - .catch((error) => reject(error)); - }).then((fee) => { - expect(fee).toBeGreaterThanOrEqual((global as any).CREDITCOIN_MINIMUM_TXN_FEE); - }); - }); -}); diff --git a/integration-tests/src/testnetSetup.ts b/integration-tests/src/testnetSetup.ts index 57ce7b01a4..9c7c02d4c9 100644 --- a/integration-tests/src/testnetSetup.ts +++ b/integration-tests/src/testnetSetup.ts @@ -1,5 +1,5 @@ import { providers, Keyring, KeyringPair, Wallet } from 'creditcoin-js'; -import { default as globalSetup } from './globalSetup'; +import { default as globalSetup, creditcoinApiUrl } from './globalSetup'; const createSigner = (keyring: Keyring, who: 'lender' | 'borrower' | 'sudo'): KeyringPair => { switch (who) { @@ -38,8 +38,7 @@ const createWallet = (who: 'lender' | 'borrower') => { }; const setup = async () => { - (global as any).CREDITCOIN_SWITCH_TO_POS_ALREADY_CALLED = true; - (global as any).CREDITCOIN_API_URL = 'wss://rpc.testnet.creditcoin.network/ws'; + (global as any).CREDITCOIN_API_URL = creditcoinApiUrl('wss://rpc.testnet.creditcoin.network/ws'); (global as any).CREDITCOIN_USES_FAST_RUNTIME = false; (global as any).CREDITCOIN_CREATE_SIGNER = createSigner; (global as any).CREDITCOIN_CREATE_WALLET = createWallet; diff --git a/integration-tests/yarn.lock b/integration-tests/yarn.lock index 985b3ddc3e..8b023e9f05 100644 --- a/integration-tests/yarn.lock +++ b/integration-tests/yarn.lock @@ -285,9 +285,9 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/runtime@^7.20.13", "@babel/runtime@^7.20.6": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.15.tgz#38f46494ccf6cf020bd4eed7124b425e83e523b8" - integrity sha512-T0O+aa+4w0u06iNmapipJXMV4HoUir03hpx3/YqXXhu9xim3w+dVphjFWl1OH8NbZHw5Lbm9k45drDkgq2VNNA== + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.25.0.tgz#3af9a91c1b739c569d5d80cc917280919c544ecb" + integrity sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw== dependencies: regenerator-runtime "^0.14.0" @@ -344,15 +344,15 @@ dependencies: eslint-visitor-keys "^3.3.0" -"@eslint-community/regexpp@^4.5.1", "@eslint-community/regexpp@^4.6.1": - version "4.8.0" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.8.0.tgz#11195513186f68d42fbf449f9a7136b2c0c92005" - integrity sha512-JylOEEzDiOryeUnFbQz+oViCXS0KsvR1mvHkoMiu5+UiBvy+RYX7tzlIIIEstF/gVa2tj9AQXk3dgnxv6KxhFg== +"@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.6.1": + version "4.10.0" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63" + integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== -"@eslint/eslintrc@^2.1.2": - version "2.1.2" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.2.tgz#c6936b4b328c64496692f76944e755738be62396" - integrity sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g== +"@eslint/eslintrc@^2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad" + integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== dependencies: ajv "^6.12.4" debug "^4.3.2" @@ -364,10 +364,10 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@8.48.0": - version "8.48.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.48.0.tgz#642633964e217905436033a2bd08bf322849b7fb" - integrity sha512-ZSjtmelB7IJfWD2Fvb7+Z+ChTIKWq6kjda95fLcQKNS5aheVHn4IkfgRQE3sIIzTcSLwLcLZUD9UBt+V7+h+Pw== +"@eslint/js@8.57.0": + version "8.57.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.0.tgz#a5417ae8427873f1dd08b70b3574b453e67b5f7f" + integrity sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g== "@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.7.0": version "5.7.0" @@ -711,13 +711,13 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/strings" "^5.7.0" -"@humanwhocodes/config-array@^0.11.10": - version "0.11.10" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.10.tgz#5a3ffe32cc9306365fb3fd572596cd602d5e12d2" - integrity sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ== +"@humanwhocodes/config-array@^0.11.14": + version "0.11.14" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b" + integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg== dependencies: - "@humanwhocodes/object-schema" "^1.2.1" - debug "^4.1.1" + "@humanwhocodes/object-schema" "^2.0.2" + debug "^4.3.1" minimatch "^3.0.5" "@humanwhocodes/module-importer@^1.0.1": @@ -725,10 +725,10 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== -"@humanwhocodes/object-schema@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" - integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== +"@humanwhocodes/object-schema@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz#d9fae00a2d5cb40f92cfe64b47ad749fbc38f917" + integrity sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw== "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" @@ -758,7 +758,7 @@ jest-util "^29.7.0" slash "^3.0.0" -"@jest/core@^29.5.0", "@jest/core@^29.7.0": +"@jest/core@^29.7.0": version "29.7.0" resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.7.0.tgz#b6cccc239f30ff36609658c5a5e2291757ce448f" integrity sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg== @@ -802,13 +802,6 @@ "@types/node" "*" jest-mock "^29.7.0" -"@jest/expect-utils@^29.5.0": - version "29.5.0" - resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.5.0.tgz#f74fad6b6e20f924582dc8ecbf2cb800fe43a036" - integrity sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg== - dependencies: - jest-get-type "^29.4.3" - "@jest/expect-utils@^29.7.0": version "29.7.0" resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.7.0.tgz#023efe5d26a8a70f21677d0a1afc0f0a44e3a1c6" @@ -876,13 +869,6 @@ strip-ansi "^6.0.0" v8-to-istanbul "^9.0.1" -"@jest/schemas@^29.4.3": - version "29.4.3" - resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.4.3.tgz#39cf1b8469afc40b6f5a2baaa146e332c4151788" - integrity sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg== - dependencies: - "@sinclair/typebox" "^0.25.16" - "@jest/schemas@^29.6.3": version "29.6.3" resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" @@ -940,18 +926,6 @@ slash "^3.0.0" write-file-atomic "^4.0.2" -"@jest/types@^29.5.0": - version "29.5.0" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.5.0.tgz#f59ef9b031ced83047c67032700d8c807d6e1593" - integrity sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog== - dependencies: - "@jest/schemas" "^29.4.3" - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^3.0.0" - "@types/node" "*" - "@types/yargs" "^17.0.8" - chalk "^4.0.0" - "@jest/types@^29.6.3": version "29.6.3" resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59" @@ -1004,22 +978,22 @@ "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" -"@noble/curves@1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.1.0.tgz#f13fc667c89184bc04cccb9b11e8e7bae27d8c3d" - integrity sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA== +"@noble/curves@^1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.3.0.tgz#01be46da4fd195822dab821e72f71bf4aeec635e" + integrity sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA== dependencies: - "@noble/hashes" "1.3.1" + "@noble/hashes" "1.3.3" "@noble/hashes@1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.2.0.tgz#a3150eeb09cc7ab207ebf6d7b9ad311a9bdbed12" integrity sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ== -"@noble/hashes@1.3.1": - version "1.3.1" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.1.tgz#8831ef002114670c603c458ab8b11328406953a9" - integrity sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA== +"@noble/hashes@1.3.3", "@noble/hashes@^1.3.3": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.3.tgz#39908da56a4adc270147bb07968bf3b16cfe1699" + integrity sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA== "@noble/secp256k1@1.7.1": version "1.7.1" @@ -1110,13 +1084,13 @@ eventemitter3 "^5.0.0" rxjs "^7.8.0" -"@polkadot/keyring@12.4.2": - version "12.4.2" - resolved "https://registry.yarnpkg.com/@polkadot/keyring/-/keyring-12.4.2.tgz#ff66c531ff29c1c9cb7c0f8411930bc18c76e2d3" - integrity sha512-VH91feSL6GiVVLcJ6V8h6jIAuq62bfvhM75AMcjTFol6MDqFl25jdjkHfZ2bQhig330LIhLw89nKdYr2/OfwjA== +"@polkadot/keyring@13.0.2": + version "13.0.2" + resolved "https://registry.yarnpkg.com/@polkadot/keyring/-/keyring-13.0.2.tgz#05a655eb06c965ae5ee5f181d25916797ea50849" + integrity sha512-NeLbhyKDT5W8LI9seWTZGePxNTOVpDhv2018HSrEDwJq9Ie0C4TZhUf3KNERCkSveuThXjfQJMs+1CF33ZXPWw== dependencies: - "@polkadot/util" "12.4.2" - "@polkadot/util-crypto" "12.4.2" + "@polkadot/util" "13.0.2" + "@polkadot/util-crypto" "13.0.2" tslib "^2.6.2" "@polkadot/keyring@^10.4.2": @@ -1137,13 +1111,13 @@ "@polkadot/util" "10.4.2" "@substrate/ss58-registry" "^1.38.0" -"@polkadot/networks@12.4.2": - version "12.4.2" - resolved "https://registry.yarnpkg.com/@polkadot/networks/-/networks-12.4.2.tgz#6b3dcbdd016beb0ea585009fd61b048b99b17d1c" - integrity sha512-dd7vss+86kpOyy/C+DuCWChGfhwHBHtrzJ9ArbbpY75qc8SqdP90lj/c13ZCHr5I1l+coy31gyyMj5i6ja1Dpg== +"@polkadot/networks@13.0.2": + version "13.0.2" + resolved "https://registry.yarnpkg.com/@polkadot/networks/-/networks-13.0.2.tgz#0f8fc896b8fb2141212b6448739f4a00bc72b29c" + integrity sha512-ABAL+vug/gIwkdFEzeh87JoJd0YKrxSYg/HjUrZ+Zis2ucxQEKpvtCpJ34ku+YrjacBfVqIAkkwd3ZdIPGq9aQ== dependencies: - "@polkadot/util" "12.4.2" - "@substrate/ss58-registry" "^1.43.0" + "@polkadot/util" "13.0.2" + "@substrate/ss58-registry" "^1.46.0" tslib "^2.6.2" "@polkadot/rpc-augment@9.14.2": @@ -1268,20 +1242,20 @@ ed2curve "^0.3.0" tweetnacl "^1.0.3" -"@polkadot/util-crypto@12.4.2": - version "12.4.2" - resolved "https://registry.yarnpkg.com/@polkadot/util-crypto/-/util-crypto-12.4.2.tgz#e19258dab5f2d4fe49f2d074d36d33a445e50b74" - integrity sha512-JP7OrEKYx35P3wWc2Iu9F6BfYMIkywXik908zQqPxwoQhr8uDLP1Qoyu9Sws+hE97Yz1O4jBVvryS2le0yusog== - dependencies: - "@noble/curves" "1.1.0" - "@noble/hashes" "1.3.1" - "@polkadot/networks" "12.4.2" - "@polkadot/util" "12.4.2" - "@polkadot/wasm-crypto" "^7.2.2" - "@polkadot/wasm-util" "^7.2.2" - "@polkadot/x-bigint" "12.4.2" - "@polkadot/x-randomvalues" "12.4.2" - "@scure/base" "1.1.1" +"@polkadot/util-crypto@13.0.2": + version "13.0.2" + resolved "https://registry.yarnpkg.com/@polkadot/util-crypto/-/util-crypto-13.0.2.tgz#fee602bcb39e9424300410f4144f170ee2a29292" + integrity sha512-woUsJJ6zd/caL7U+D30a5oM/+WK9iNI00Y8aNUHSj6Zq/KPzK9uqDBaLGWwlgrejoMQkxxiU2X0f2LzP15AtQg== + dependencies: + "@noble/curves" "^1.3.0" + "@noble/hashes" "^1.3.3" + "@polkadot/networks" "13.0.2" + "@polkadot/util" "13.0.2" + "@polkadot/wasm-crypto" "^7.3.2" + "@polkadot/wasm-util" "^7.3.2" + "@polkadot/x-bigint" "13.0.2" + "@polkadot/x-randomvalues" "13.0.2" + "@scure/base" "^1.1.5" tslib "^2.6.2" "@polkadot/util@10.4.2", "@polkadot/util@^10.4.2": @@ -1297,16 +1271,16 @@ "@types/bn.js" "^5.1.1" bn.js "^5.2.1" -"@polkadot/util@12.4.2": - version "12.4.2" - resolved "https://registry.yarnpkg.com/@polkadot/util/-/util-12.4.2.tgz#65759f4b366c2a787fd21abacab8cf8ab1aebbf9" - integrity sha512-NcTCbnIzMb/3TvJNEbaiu/9EvYIBuzDwZfqQ4hzL0GAptkF8aDkKMDCfQ/j3FI38rR+VTPQHNky9fvWglGKGRw== +"@polkadot/util@13.0.2": + version "13.0.2" + resolved "https://registry.yarnpkg.com/@polkadot/util/-/util-13.0.2.tgz#f0a2572d74730fda8dfd690b60d53c131a688f3b" + integrity sha512-/6bS9sfhJLhs8QuqWaR1eRapzfDdGC5XAQZEPL9NN5sTTA7HxWos8rVleai0UERm8QUMabjZ9rK9KpzbXl7ojg== dependencies: - "@polkadot/x-bigint" "12.4.2" - "@polkadot/x-global" "12.4.2" - "@polkadot/x-textdecoder" "12.4.2" - "@polkadot/x-textencoder" "12.4.2" - "@types/bn.js" "^5.1.1" + "@polkadot/x-bigint" "13.0.2" + "@polkadot/x-global" "13.0.2" + "@polkadot/x-textdecoder" "13.0.2" + "@polkadot/x-textencoder" "13.0.2" + "@types/bn.js" "^5.1.5" bn.js "^5.2.1" tslib "^2.6.2" @@ -1317,13 +1291,13 @@ dependencies: "@babel/runtime" "^7.20.6" -"@polkadot/wasm-bridge@7.2.2": - version "7.2.2" - resolved "https://registry.yarnpkg.com/@polkadot/wasm-bridge/-/wasm-bridge-7.2.2.tgz#957b82b17927fe080729e8930b5b5c554f77b8df" - integrity sha512-CgNENd65DVYtackOVXXRA0D1RPoCv5+77IdBCf7kNqu6LeAnR4nfTI6qjaApUdN1xRweUsQjSH7tu7VjkMOA0A== +"@polkadot/wasm-bridge@7.3.2": + version "7.3.2" + resolved "https://registry.yarnpkg.com/@polkadot/wasm-bridge/-/wasm-bridge-7.3.2.tgz#e1b01906b19e06cbca3d94f10f5666f2ae0baadc" + integrity sha512-AJEXChcf/nKXd5Q/YLEV5dXQMle3UNT7jcXYmIffZAo/KI394a+/24PaISyQjoNC0fkzS1Q8T5pnGGHmXiVz2g== dependencies: - "@polkadot/wasm-util" "7.2.2" - tslib "^2.6.1" + "@polkadot/wasm-util" "7.3.2" + tslib "^2.6.2" "@polkadot/wasm-crypto-asmjs@6.4.1": version "6.4.1" @@ -1332,12 +1306,12 @@ dependencies: "@babel/runtime" "^7.20.6" -"@polkadot/wasm-crypto-asmjs@7.2.2": - version "7.2.2" - resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-7.2.2.tgz#25243a4d5d8d997761141b616623cacff4329f13" - integrity sha512-wKg+cpsWQCTSVhjlHuNeB/184rxKqY3vaklacbLOMbUXieIfuDBav5PJdzS3yeiVE60TpYaHW4iX/5OYHS82gg== +"@polkadot/wasm-crypto-asmjs@7.3.2": + version "7.3.2" + resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-7.3.2.tgz#c6d41bc4b48b5359d57a24ca3066d239f2d70a34" + integrity sha512-QP5eiUqUFur/2UoF2KKKYJcesc71fXhQFLT3D4ZjG28Mfk2ZPI0QNRUfpcxVQmIUpV5USHg4geCBNuCYsMm20Q== dependencies: - tslib "^2.6.1" + tslib "^2.6.2" "@polkadot/wasm-crypto-init@6.4.1": version "6.4.1" @@ -1349,16 +1323,16 @@ "@polkadot/wasm-crypto-asmjs" "6.4.1" "@polkadot/wasm-crypto-wasm" "6.4.1" -"@polkadot/wasm-crypto-init@7.2.2": - version "7.2.2" - resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto-init/-/wasm-crypto-init-7.2.2.tgz#ffd105b87fc1b679c06c85c0848183c27bc539e3" - integrity sha512-vD4iPIp9x+SssUIWUenxWLPw4BVIwhXHNMpsV81egK990tvpyIxL205/EF5QRb1mKn8WfWcNFm5tYwwh9NdnnA== +"@polkadot/wasm-crypto-init@7.3.2": + version "7.3.2" + resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto-init/-/wasm-crypto-init-7.3.2.tgz#7e1fe79ba978fb0a4a0f74a92d976299d38bc4b8" + integrity sha512-FPq73zGmvZtnuJaFV44brze3Lkrki3b4PebxCy9Fplw8nTmisKo9Xxtfew08r0njyYh+uiJRAxPCXadkC9sc8g== dependencies: - "@polkadot/wasm-bridge" "7.2.2" - "@polkadot/wasm-crypto-asmjs" "7.2.2" - "@polkadot/wasm-crypto-wasm" "7.2.2" - "@polkadot/wasm-util" "7.2.2" - tslib "^2.6.1" + "@polkadot/wasm-bridge" "7.3.2" + "@polkadot/wasm-crypto-asmjs" "7.3.2" + "@polkadot/wasm-crypto-wasm" "7.3.2" + "@polkadot/wasm-util" "7.3.2" + tslib "^2.6.2" "@polkadot/wasm-crypto-wasm@6.4.1": version "6.4.1" @@ -1368,13 +1342,13 @@ "@babel/runtime" "^7.20.6" "@polkadot/wasm-util" "6.4.1" -"@polkadot/wasm-crypto-wasm@7.2.2": - version "7.2.2" - resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-7.2.2.tgz#9e49a1565bda2bc830708693b491b37ad8a2144d" - integrity sha512-3efoIB6jA3Hhv6k0YIBwCtlC8gCSWCk+R296yIXRLLr3cGN415KM/PO/d1JIXYI64lbrRzWRmZRhllw3jf6Atg== +"@polkadot/wasm-crypto-wasm@7.3.2": + version "7.3.2" + resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-7.3.2.tgz#44e08ed5cf6499ce4a3aa7247071a5d01f6a74f4" + integrity sha512-15wd0EMv9IXs5Abp1ZKpKKAVyZPhATIAHfKsyoWCEFDLSOA0/K0QGOxzrAlsrdUkiKZOq7uzSIgIDgW8okx2Mw== dependencies: - "@polkadot/wasm-util" "7.2.2" - tslib "^2.6.1" + "@polkadot/wasm-util" "7.3.2" + tslib "^2.6.2" "@polkadot/wasm-crypto@^6.4.1": version "6.4.1" @@ -1388,17 +1362,17 @@ "@polkadot/wasm-crypto-wasm" "6.4.1" "@polkadot/wasm-util" "6.4.1" -"@polkadot/wasm-crypto@^7.2.2": - version "7.2.2" - resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto/-/wasm-crypto-7.2.2.tgz#3c4b300c0997f4f7e2ddcdf8101d97fa1f5d1a7f" - integrity sha512-1ZY1rxUTawYm0m1zylvBMFovNIHYgG2v/XoASNp/EMG5c8FQIxCbhJRaTBA983GVq4lN/IAKREKEp9ZbLLqssA== +"@polkadot/wasm-crypto@^7.3.2": + version "7.3.2" + resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto/-/wasm-crypto-7.3.2.tgz#61bbcd9e591500705c8c591e6aff7654bdc8afc9" + integrity sha512-+neIDLSJ6jjVXsjyZ5oLSv16oIpwp+PxFqTUaZdZDoA2EyFRQB8pP7+qLsMNk+WJuhuJ4qXil/7XiOnZYZ+wxw== dependencies: - "@polkadot/wasm-bridge" "7.2.2" - "@polkadot/wasm-crypto-asmjs" "7.2.2" - "@polkadot/wasm-crypto-init" "7.2.2" - "@polkadot/wasm-crypto-wasm" "7.2.2" - "@polkadot/wasm-util" "7.2.2" - tslib "^2.6.1" + "@polkadot/wasm-bridge" "7.3.2" + "@polkadot/wasm-crypto-asmjs" "7.3.2" + "@polkadot/wasm-crypto-init" "7.3.2" + "@polkadot/wasm-crypto-wasm" "7.3.2" + "@polkadot/wasm-util" "7.3.2" + tslib "^2.6.2" "@polkadot/wasm-util@6.4.1": version "6.4.1" @@ -1407,12 +1381,12 @@ dependencies: "@babel/runtime" "^7.20.6" -"@polkadot/wasm-util@7.2.2", "@polkadot/wasm-util@^7.2.2": - version "7.2.2" - resolved "https://registry.yarnpkg.com/@polkadot/wasm-util/-/wasm-util-7.2.2.tgz#f8aa62eba9a35466aa23f3c5634f3e8dbd398bbf" - integrity sha512-N/25960ifCc56sBlJZ2h5UBpEPvxBmMLgwYsl7CUuT+ea2LuJW9Xh8VHDN/guYXwmm92/KvuendYkEUykpm/JQ== +"@polkadot/wasm-util@7.3.2", "@polkadot/wasm-util@^7.3.2": + version "7.3.2" + resolved "https://registry.yarnpkg.com/@polkadot/wasm-util/-/wasm-util-7.3.2.tgz#4fe6370d2b029679b41a5c02cd7ebf42f9b28de1" + integrity sha512-bmD+Dxo1lTZyZNxbyPE380wd82QsX+43mgCm40boyKrRppXEyQmWT98v/Poc7chLuskYb6X8IQ6lvvK2bGR4Tg== dependencies: - tslib "^2.6.1" + tslib "^2.6.2" "@polkadot/x-bigint@10.4.2", "@polkadot/x-bigint@^10.4.2": version "10.4.2" @@ -1422,12 +1396,12 @@ "@babel/runtime" "^7.20.13" "@polkadot/x-global" "10.4.2" -"@polkadot/x-bigint@12.4.2": - version "12.4.2" - resolved "https://registry.yarnpkg.com/@polkadot/x-bigint/-/x-bigint-12.4.2.tgz#a63c9c926443231206726103d06c117ac2248de8" - integrity sha512-VRbkhdIf7CyWiUSyHemYi2fFWjBetUGyqpzsIHEclmzvqhKPfs7Kd2ZRdoXKU5QM56eD0sV2pyJxL34dv36/rw== +"@polkadot/x-bigint@13.0.2": + version "13.0.2" + resolved "https://registry.yarnpkg.com/@polkadot/x-bigint/-/x-bigint-13.0.2.tgz#25adca9ce0c5ed691f9bced283f44f7e7d824300" + integrity sha512-h2jKT/UaxiEal8LhQeH6+GCjO7GwEqVAD2SNYteCOXff6yNttqAZYJuHZsndbVjVNwqRNf8D5q/zZkD0HUd6xQ== dependencies: - "@polkadot/x-global" "12.4.2" + "@polkadot/x-global" "13.0.2" tslib "^2.6.2" "@polkadot/x-fetch@^10.4.2": @@ -1447,10 +1421,10 @@ dependencies: "@babel/runtime" "^7.20.13" -"@polkadot/x-global@12.4.2": - version "12.4.2" - resolved "https://registry.yarnpkg.com/@polkadot/x-global/-/x-global-12.4.2.tgz#cc6ed596698678f98a53547b9adb712eadfd5175" - integrity sha512-CwbjSt1Grmn56xAj+hGC8ZB0uZxMl92K+VkBH0KxjgcbAX/D24ZD/0ds8pAnUYrO4aYHYq2j2MAGVSMdHcMBAQ== +"@polkadot/x-global@13.0.2": + version "13.0.2" + resolved "https://registry.yarnpkg.com/@polkadot/x-global/-/x-global-13.0.2.tgz#77afc4fbd4cfac8ba78cf120836f30ecc7322a74" + integrity sha512-OoNIXLB5y8vIKpk4R+XmpDPhipNXWSUvEwUnpQT7NAxNLmzgMq1FhbrwBWWPRNHPrQonp7mqxV/X+v5lv1HW/g== dependencies: tslib "^2.6.2" @@ -1462,12 +1436,12 @@ "@babel/runtime" "^7.20.13" "@polkadot/x-global" "10.4.2" -"@polkadot/x-randomvalues@12.4.2": - version "12.4.2" - resolved "https://registry.yarnpkg.com/@polkadot/x-randomvalues/-/x-randomvalues-12.4.2.tgz#399a7f831e465e6cd5aea64f8220693b07be86fa" - integrity sha512-HVlXRWY9RfN54RgfDroDy2itWmtTUtr119DfPl3wjnBf9i4wl/M+848OYlmCZCTpViTJrvWVSEJH9zVgchlNnw== +"@polkadot/x-randomvalues@13.0.2": + version "13.0.2" + resolved "https://registry.yarnpkg.com/@polkadot/x-randomvalues/-/x-randomvalues-13.0.2.tgz#78ae28b345895cc816ffcad0b336c31cadfcf928" + integrity sha512-SGj+L0H/7TWZtSmtkWlixO4DFzXDdluI0UscN2h285os2Ns8PnmBbue+iJ8PVSzpY1BOxd66gvkkpboPz+jXFQ== dependencies: - "@polkadot/x-global" "12.4.2" + "@polkadot/x-global" "13.0.2" tslib "^2.6.2" "@polkadot/x-textdecoder@10.4.2": @@ -1478,12 +1452,12 @@ "@babel/runtime" "^7.20.13" "@polkadot/x-global" "10.4.2" -"@polkadot/x-textdecoder@12.4.2": - version "12.4.2" - resolved "https://registry.yarnpkg.com/@polkadot/x-textdecoder/-/x-textdecoder-12.4.2.tgz#fea941decbe32d24aa3f951a511bf576dc104826" - integrity sha512-cyUoKwdSIiBXAaWnGdMYqnaNHc5NV9skQh/fITis3ufKKi3pMwxJ5IwhhfDZpuKDl/3fDXF40Z3fqtTeUnoRXA== +"@polkadot/x-textdecoder@13.0.2": + version "13.0.2" + resolved "https://registry.yarnpkg.com/@polkadot/x-textdecoder/-/x-textdecoder-13.0.2.tgz#662a6855af8e7a5af17f86890e59ab44f829243a" + integrity sha512-mauglOkTJxLGmLwLc3J5Jlq/W+SHP53eiy3F8/8JxxfnXrZKgWoQXGpvXYPjFnMZj0MzDSy/6GjyGWnDCgdQFA== dependencies: - "@polkadot/x-global" "12.4.2" + "@polkadot/x-global" "13.0.2" tslib "^2.6.2" "@polkadot/x-textencoder@10.4.2": @@ -1494,12 +1468,12 @@ "@babel/runtime" "^7.20.13" "@polkadot/x-global" "10.4.2" -"@polkadot/x-textencoder@12.4.2": - version "12.4.2" - resolved "https://registry.yarnpkg.com/@polkadot/x-textencoder/-/x-textencoder-12.4.2.tgz#a717fe2701ade5648600ff3a34d4d1224d916ee3" - integrity sha512-xrcwx55B2K7j9CnVucGLFl0qd5sb7W5Ei6dOsWgDnZNjZPBqsx9jTBQSBv9HmyHE4GEnF4z0rpO0msy3S7Sj9Q== +"@polkadot/x-textencoder@13.0.2": + version "13.0.2" + resolved "https://registry.yarnpkg.com/@polkadot/x-textencoder/-/x-textencoder-13.0.2.tgz#5e178e0f759df50592e6870346c8db2a445af957" + integrity sha512-Lq08H2OnVXj97uaOwg7tcmRS7a4VJYkHEeWO4FyEMOk6P6lU6W8OVNjjxG0se9PCEgmyZPUDbJI//1ynzP4cXw== dependencies: - "@polkadot/x-global" "12.4.2" + "@polkadot/x-global" "13.0.2" tslib "^2.6.2" "@polkadot/x-ws@^10.4.2": @@ -1517,10 +1491,10 @@ resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.1.tgz#ebb651ee52ff84f420097055f4bf46cfba403938" integrity sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA== -"@sinclair/typebox@^0.25.16": - version "0.25.24" - resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.25.24.tgz#8c7688559979f7079aacaf31aa881c3aa410b718" - integrity sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ== +"@scure/base@^1.1.5": + version "1.1.5" + resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.5.tgz#1d85d17269fe97694b9c592552dd9e5e33552157" + integrity sha512-Brj9FiG2W1MRQSTB212YVPRrcbjkv48FoZi/u4l/zds/ieRrqsh7aUf6CLwkAq61oKXr/ZlTzlY66gLIj3TFTQ== "@sinclair/typebox@^0.27.8": version "0.27.8" @@ -1563,10 +1537,10 @@ pako "^2.0.4" ws "^8.8.1" -"@substrate/ss58-registry@^1.38.0", "@substrate/ss58-registry@^1.43.0": - version "1.43.0" - resolved "https://registry.yarnpkg.com/@substrate/ss58-registry/-/ss58-registry-1.43.0.tgz#93108e45cb7ef6d82560c153e3692c2aa1c711b3" - integrity sha512-USEkXA46P9sqClL7PZv0QFsit4S8Im97wchKG0/H/9q3AT/S76r40UHfCr4Un7eBJPE23f7fU9BZ0ITpP9MCsA== +"@substrate/ss58-registry@^1.38.0", "@substrate/ss58-registry@^1.46.0": + version "1.49.0" + resolved "https://registry.yarnpkg.com/@substrate/ss58-registry/-/ss58-registry-1.49.0.tgz#ed9507316d13f49b2bccb65f08ec97180f71fc39" + integrity sha512-leW6Ix4LD7XgvxT7+aobPWSw+WvPcN2Rxof1rmd0mNC5t2n99k1N7UNEvz7YEFSOUeHWmKIY7F5q8KeIqYoHfA== "@tsconfig/node10@^1.0.7": version "1.0.9" @@ -1621,10 +1595,10 @@ dependencies: "@babel/types" "^7.20.7" -"@types/bn.js@^5.1.1": - version "5.1.1" - resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.1.tgz#b51e1b55920a4ca26e9285ff79936bbdec910682" - integrity sha512-qNrYbZqMx0uJAfKnKclPh+dTwK33KfLHYqtyODwd5HnXOjnkhc4qgn3BrK6RWyGZm5+sIFE7Q7Vz6QQtJB7w7g== +"@types/bn.js@^5.1.1", "@types/bn.js@^5.1.5": + version "5.1.5" + resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.5.tgz#2e0dacdcce2c0f16b905d20ff87aedbc6f7b4bf0" + integrity sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A== dependencies: "@types/node" "*" @@ -1655,35 +1629,27 @@ "@types/istanbul-lib-report" "*" "@types/jest@^29.0.1": - version "29.5.0" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.0.tgz#337b90bbcfe42158f39c2fb5619ad044bbb518ac" - integrity sha512-3Emr5VOl/aoBwnWcH/EFQvlSAmjV+XtV9GGu5mwdYew5vhQh0IUZx/60x0TzHDu09Bi7HMx10t/namdJw5QIcg== + version "29.5.12" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.12.tgz#7f7dc6eb4cf246d2474ed78744b05d06ce025544" + integrity sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw== dependencies: expect "^29.0.0" pretty-format "^29.0.0" -"@types/json-schema@^7.0.12": - version "7.0.12" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.12.tgz#d70faba7039d5fca54c83c7dbab41051d2b6f6cb" - integrity sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA== - "@types/node-fetch@^2.6.2": - version "2.6.5" - resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.5.tgz#972756a9a0fe354b2886bf3defe667ddb4f0d30a" - integrity sha512-OZsUlr2nxvkqUFLSaY2ZbA+P1q22q+KrlxWOn/38RX+u5kTkYL2mTujEpzUhGkS+K/QCYp9oagfXG39XOzyySg== + version "2.6.11" + resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.11.tgz#9b39b78665dae0e82a08f02f4967d62c66f95d24" + integrity sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g== dependencies: "@types/node" "*" form-data "^4.0.0" "@types/node@*": - version "20.6.1" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.6.1.tgz#8b589bba9b2af0128796461a0979764562687e6f" - integrity sha512-4LcJvuXQlv4lTHnxwyHQZ3uR9Zw2j7m1C9DfuwoTFQQP4Pmu04O6IfLYgMmHoOCt0nosItLLZAH+sOrRE0Bo8g== - -"@types/semver@^7.5.0": - version "7.5.1" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.1.tgz#0480eeb7221eb9bc398ad7432c9d7e14b1a5a367" - integrity sha512-cJRQXpObxfNKkFAZbJl2yjWtJCqELQIdShsogr1d2MilP8dKD9TE/nEKHkJgUNHdGKCQaf9HbIynuV2csLGVLg== + version "22.2.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.2.0.tgz#7cf046a99f0ba4d628ad3088cb21f790df9b0c5b" + integrity sha512-bm6EG6/pCpkxDf/0gDNDdtDILMOHgaQBVOJGdwsqClnxA3xL6jtMv76rLBc006RVMWbmaf0xbmom4Z/5o2nRkQ== + dependencies: + undici-types "~6.13.0" "@types/stack-utils@^2.0.0": version "2.0.1" @@ -1691,16 +1657,16 @@ integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== "@types/websocket@^1.0.5": - version "1.0.6" - resolved "https://registry.yarnpkg.com/@types/websocket/-/websocket-1.0.6.tgz#ec8dce5915741632ac3a4b1f951b6d4156e32d03" - integrity sha512-JXkliwz93B2cMWOI1ukElQBPN88vMg3CruvW4KVSKpflt3NyNCJImnhIuB/f97rG7kakqRJGFiwkA895Kn02Dg== + version "1.0.10" + resolved "https://registry.yarnpkg.com/@types/websocket/-/websocket-1.0.10.tgz#804b1a02780da522f5742bc184a6d16a2eb78c7c" + integrity sha512-svjGZvPB7EzuYS94cI7a+qhwgGU1y89wUgjT6E2wVUfmAGIvRfT7obBvRtnhXCSsoMdlG4gBFGE7MfkIXZLoww== dependencies: "@types/node" "*" "@types/ws@^8.5.3": - version "8.5.4" - resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.4.tgz#bb10e36116d6e570dd943735f86c933c1587b8a5" - integrity sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg== + version "8.5.12" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.12.tgz#619475fe98f35ccca2a2f6c137702d85ec247b7e" + integrity sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ== dependencies: "@types/node" "*" @@ -1716,90 +1682,126 @@ dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/eslint-plugin@^6.5.0": - version "6.5.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.5.0.tgz#5cee33edf0d45d5ec773e3b3111206b098ac8599" - integrity sha512-2pktILyjvMaScU6iK3925uvGU87E+N9rh372uGZgiMYwafaw9SXq86U04XPq3UH6tzRvNgBsub6x2DacHc33lw== +"@typescript-eslint/eslint-plugin@^7.1.1": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.15.0.tgz#8eaf396ac2992d2b8f874b68eb3fcd6b179cb7f3" + integrity sha512-uiNHpyjZtFrLwLDpHnzaDlP3Tt6sGMqTCiqmxaN4n4RP0EfYZDODJyddiFDF44Hjwxr5xAcaYxVKm9QKQFJFLA== dependencies: - "@eslint-community/regexpp" "^4.5.1" - "@typescript-eslint/scope-manager" "6.5.0" - "@typescript-eslint/type-utils" "6.5.0" - "@typescript-eslint/utils" "6.5.0" - "@typescript-eslint/visitor-keys" "6.5.0" - debug "^4.3.4" + "@eslint-community/regexpp" "^4.10.0" + "@typescript-eslint/scope-manager" "7.15.0" + "@typescript-eslint/type-utils" "7.15.0" + "@typescript-eslint/utils" "7.15.0" + "@typescript-eslint/visitor-keys" "7.15.0" graphemer "^1.4.0" - ignore "^5.2.4" + ignore "^5.3.1" natural-compare "^1.4.0" - semver "^7.5.4" - ts-api-utils "^1.0.1" + ts-api-utils "^1.3.0" -"@typescript-eslint/parser@^6.3.0": - version "6.5.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.5.0.tgz#3d6ed231c5e307c5f5f4a0d86893ec01e92b8c77" - integrity sha512-LMAVtR5GN8nY0G0BadkG0XIe4AcNMeyEy3DyhKGAh9k4pLSMBO7rF29JvDBpZGCmp5Pgz5RLHP6eCpSYZJQDuQ== +"@typescript-eslint/parser@^8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.0.0.tgz#5a5030cf8123176b5a0abd966f99e5f9f110652d" + integrity sha512-pS1hdZ+vnrpDIxuFXYQpLTILglTjSYJ9MbetZctrUawogUsPdz31DIIRZ9+rab0LhYNTsk88w4fIzVheiTbWOQ== dependencies: - "@typescript-eslint/scope-manager" "6.5.0" - "@typescript-eslint/types" "6.5.0" - "@typescript-eslint/typescript-estree" "6.5.0" - "@typescript-eslint/visitor-keys" "6.5.0" + "@typescript-eslint/scope-manager" "8.0.0" + "@typescript-eslint/types" "8.0.0" + "@typescript-eslint/typescript-estree" "8.0.0" + "@typescript-eslint/visitor-keys" "8.0.0" debug "^4.3.4" -"@typescript-eslint/scope-manager@6.5.0": - version "6.5.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.5.0.tgz#f2cb20895aaad41b3ad27cc3a338ce8598f261c5" - integrity sha512-A8hZ7OlxURricpycp5kdPTH3XnjG85UpJS6Fn4VzeoH4T388gQJ/PGP4ole5NfKt4WDVhmLaQ/dBLNDC4Xl/Kw== +"@typescript-eslint/scope-manager@7.15.0": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.15.0.tgz#201b34b0720be8b1447df17b963941bf044999b2" + integrity sha512-Q/1yrF/XbxOTvttNVPihxh1b9fxamjEoz2Os/Pe38OHwxC24CyCqXxGTOdpb4lt6HYtqw9HetA/Rf6gDGaMPlw== + dependencies: + "@typescript-eslint/types" "7.15.0" + "@typescript-eslint/visitor-keys" "7.15.0" + +"@typescript-eslint/scope-manager@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.0.0.tgz#d14df46c9e43c53af7699dfa800cd615d7dfc118" + integrity sha512-V0aa9Csx/ZWWv2IPgTfY7T4agYwJyILESu/PVqFtTFz9RIS823mAze+NbnBI8xiwdX3iqeQbcTYlvB04G9wyQw== dependencies: - "@typescript-eslint/types" "6.5.0" - "@typescript-eslint/visitor-keys" "6.5.0" + "@typescript-eslint/types" "8.0.0" + "@typescript-eslint/visitor-keys" "8.0.0" -"@typescript-eslint/type-utils@6.5.0": - version "6.5.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.5.0.tgz#6d246c93739282bc0d2e623f28d0dec6cfcc38d7" - integrity sha512-f7OcZOkRivtujIBQ4yrJNIuwyCQO1OjocVqntl9dgSIZAdKqicj3xFDqDOzHDlGCZX990LqhLQXWRnQvsapq8A== +"@typescript-eslint/type-utils@7.15.0": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-7.15.0.tgz#5b83c904c6de91802fb399305a50a56d10472c39" + integrity sha512-SkgriaeV6PDvpA6253PDVep0qCqgbO1IOBiycjnXsszNTVQe5flN5wR5jiczoEoDEnAqYFSFFc9al9BSGVltkg== dependencies: - "@typescript-eslint/typescript-estree" "6.5.0" - "@typescript-eslint/utils" "6.5.0" + "@typescript-eslint/typescript-estree" "7.15.0" + "@typescript-eslint/utils" "7.15.0" debug "^4.3.4" - ts-api-utils "^1.0.1" + ts-api-utils "^1.3.0" -"@typescript-eslint/types@6.5.0": - version "6.5.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.5.0.tgz#f4e55cfd99ac5346ea772770bf212a3e689a8f04" - integrity sha512-eqLLOEF5/lU8jW3Bw+8auf4lZSbbljHR2saKnYqON12G/WsJrGeeDHWuQePoEf9ro22+JkbPfWQwKEC5WwLQ3w== +"@typescript-eslint/types@7.15.0": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.15.0.tgz#fb894373a6e3882cbb37671ffddce44f934f62fc" + integrity sha512-aV1+B1+ySXbQH0pLK0rx66I3IkiZNidYobyfn0WFsdGhSXw+P3YOqeTq5GED458SfB24tg+ux3S+9g118hjlTw== -"@typescript-eslint/typescript-estree@6.5.0": - version "6.5.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.5.0.tgz#1cef6bc822585e9ef89d88834bc902d911d747ed" - integrity sha512-q0rGwSe9e5Kk/XzliB9h2LBc9tmXX25G0833r7kffbl5437FPWb2tbpIV9wAATebC/018pGa9fwPDuvGN+LxWQ== +"@typescript-eslint/types@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.0.0.tgz#7195ea9369fe5ee46b958d7ffca6bd26511cce18" + integrity sha512-wgdSGs9BTMWQ7ooeHtu5quddKKs5Z5dS+fHLbrQI+ID0XWJLODGMHRfhwImiHoeO2S5Wir2yXuadJN6/l4JRxw== + +"@typescript-eslint/typescript-estree@7.15.0": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.15.0.tgz#e323bfa3966e1485b638ce751f219fc1f31eba37" + integrity sha512-gjyB/rHAopL/XxfmYThQbXbzRMGhZzGw6KpcMbfe8Q3nNQKStpxnUKeXb0KiN/fFDR42Z43szs6rY7eHk0zdGQ== dependencies: - "@typescript-eslint/types" "6.5.0" - "@typescript-eslint/visitor-keys" "6.5.0" + "@typescript-eslint/types" "7.15.0" + "@typescript-eslint/visitor-keys" "7.15.0" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" - semver "^7.5.4" - ts-api-utils "^1.0.1" + minimatch "^9.0.4" + semver "^7.6.0" + ts-api-utils "^1.3.0" -"@typescript-eslint/utils@6.5.0": - version "6.5.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.5.0.tgz#6668bee4f7f24978b11df8a2ea42d56eebc4662c" - integrity sha512-9nqtjkNykFzeVtt9Pj6lyR9WEdd8npPhhIPM992FWVkZuS6tmxHfGVnlUcjpUP2hv8r4w35nT33mlxd+Be1ACQ== +"@typescript-eslint/typescript-estree@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.0.0.tgz#d172385ced7cb851a038b5c834c245a97a0f9cf6" + integrity sha512-5b97WpKMX+Y43YKi4zVcCVLtK5F98dFls3Oxui8LbnmRsseKenbbDinmvxrWegKDMmlkIq/XHuyy0UGLtpCDKg== + dependencies: + "@typescript-eslint/types" "8.0.0" + "@typescript-eslint/visitor-keys" "8.0.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + minimatch "^9.0.4" + semver "^7.6.0" + ts-api-utils "^1.3.0" + +"@typescript-eslint/utils@7.15.0": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-7.15.0.tgz#9e6253c4599b6e7da2fb64ba3f549c73eb8c1960" + integrity sha512-hfDMDqaqOqsUVGiEPSMLR/AjTSCsmJwjpKkYQRo1FNbmW4tBwBspYDwO9eh7sKSTwMQgBw9/T4DHudPaqshRWA== dependencies: "@eslint-community/eslint-utils" "^4.4.0" - "@types/json-schema" "^7.0.12" - "@types/semver" "^7.5.0" - "@typescript-eslint/scope-manager" "6.5.0" - "@typescript-eslint/types" "6.5.0" - "@typescript-eslint/typescript-estree" "6.5.0" - semver "^7.5.4" + "@typescript-eslint/scope-manager" "7.15.0" + "@typescript-eslint/types" "7.15.0" + "@typescript-eslint/typescript-estree" "7.15.0" -"@typescript-eslint/visitor-keys@6.5.0": - version "6.5.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.5.0.tgz#1a6f474a0170a447b76f0699ce6700110fd11436" - integrity sha512-yCB/2wkbv3hPsh02ZS8dFQnij9VVQXJMN/gbQsaaY+zxALkZnxa/wagvLEFsAWMPv7d7lxQmNsIzGU1w/T/WyA== +"@typescript-eslint/visitor-keys@7.15.0": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.15.0.tgz#1da0726201a859343fe6a05742a7c1792fff5b66" + integrity sha512-Hqgy/ETgpt2L5xueA/zHHIl4fJI2O4XUE9l4+OIfbJIRSnTJb/QscncdqqZzofQegIJugRIF57OJea1khw2SDw== dependencies: - "@typescript-eslint/types" "6.5.0" - eslint-visitor-keys "^3.4.1" + "@typescript-eslint/types" "7.15.0" + eslint-visitor-keys "^3.4.3" + +"@typescript-eslint/visitor-keys@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.0.0.tgz#224a67230190d267e6e78586bd7d8dfbd32ae4f3" + integrity sha512-oN0K4nkHuOyF3PVMyETbpP5zp6wfyOvm7tWhTMfoqxSSsPmJIh6JNASuZDlODE8eE+0EB9uar+6+vxr9DBTYOA== + dependencies: + "@typescript-eslint/types" "8.0.0" + eslint-visitor-keys "^3.4.3" + +"@ungap/structured-clone@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" + integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== acorn-jsx@^5.3.2: version "5.3.2" @@ -1897,17 +1899,22 @@ array-union@^2.1.0: resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== +async@^3.2.3: + version "3.2.5" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.5.tgz#ebd52a8fdaf7a2289a24df399f8d8485c8a46b66" + integrity sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg== + asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== axios@^1.0.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.4.0.tgz#38a7bf1224cd308de271146038b551d725f0be1f" - integrity sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA== + version "1.7.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.2.tgz#b625db8a7051fbea61c35a3cbb3a1daa7b9c7621" + integrity sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw== dependencies: - follow-redirects "^1.15.0" + follow-redirects "^1.15.6" form-data "^4.0.0" proxy-from-env "^1.1.0" @@ -1999,6 +2006,13 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + braces@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" @@ -2041,9 +2055,9 @@ buffer-from@^1.0.0: integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== bufferutil@^4.0.1: - version "4.0.7" - resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.7.tgz#60c0d19ba2c992dd8273d3f73772ffc894c153ad" - integrity sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw== + version "4.0.8" + resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.8.tgz#1de6a71092d65d7766c4d8a522b261a6e787e8ea" + integrity sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw== dependencies: node-gyp-build "^4.3.0" @@ -2076,7 +2090,7 @@ chalk@^2.0.0, chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^4.0.0: +chalk@^4.0.0, chalk@^4.0.2: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -2182,9 +2196,9 @@ create-require@^1.1.0: resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== -"creditcoin-js@file:../creditcoin-js/creditcoin-js-v0.10.1.tgz": - version "0.10.1" - resolved "file:../creditcoin-js/creditcoin-js-v0.10.1.tgz#5d63d2f9ac55175870f0a07e58ab05564867d80c" +"creditcoin-js@file:../creditcoin-js/creditcoin-js-v0.10.4.tgz": + version "0.10.4" + resolved "file:../creditcoin-js/creditcoin-js-v0.10.4.tgz#ef12eb584554c123064da756f5d208ceb882b76a" dependencies: "@polkadot/api" "9.14.2" ethers "^5.7.1" @@ -2199,13 +2213,13 @@ cross-spawn@^7.0.2, cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" -d@1, d@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" - integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== +d@1, d@^1.0.1, d@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/d/-/d-1.0.2.tgz#2aefd554b81981e7dccf72d6842ae725cb17e5de" + integrity sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw== dependencies: - es5-ext "^0.10.50" - type "^1.0.1" + es5-ext "^0.10.64" + type "^2.7.2" data-uri-to-buffer@^4.0.0: version "4.0.1" @@ -2219,7 +2233,14 @@ debug@^2.2.0: dependencies: ms "2.0.0" -debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: +debug@^4.1.0: + version "4.3.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.6.tgz#2ab2c38fbaffebf8aa95fdfe6d88438c7a13c52b" + integrity sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg== + dependencies: + ms "2.1.2" + +debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -2251,11 +2272,6 @@ detect-newline@^3.0.0: resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== -diff-sequences@^29.4.3: - version "29.4.3" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.4.3.tgz#9314bc1fabe09267ffeca9cbafc457d8499a13f2" - integrity sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA== - diff-sequences@^29.6.3: version "29.6.3" resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" @@ -2287,6 +2303,13 @@ ed2curve@^0.3.0: dependencies: tweetnacl "1.x.x" +ejs@^3.1.10: + version "3.1.10" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.10.tgz#69ab8358b14e896f80cc39e62087b88500c3ac3b" + integrity sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA== + dependencies: + jake "^10.8.5" + electron-to-chromium@^1.4.477: version "1.4.522" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.522.tgz#ef29e5508571d52cf45806536dba5d397492667d" @@ -2322,13 +2345,14 @@ error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es5-ext@^0.10.35, es5-ext@^0.10.50: - version "0.10.62" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.62.tgz#5e6adc19a6da524bf3d1e02bbc8960e5eb49a9a5" - integrity sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA== +es5-ext@^0.10.35, es5-ext@^0.10.62, es5-ext@^0.10.63, es5-ext@^0.10.64, es5-ext@~0.10.14: + version "0.10.64" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.64.tgz#12e4ffb48f1ba2ea777f1fcdd1918ef73ea21714" + integrity sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg== dependencies: es6-iterator "^2.0.3" es6-symbol "^3.1.3" + esniff "^2.0.1" next-tick "^1.1.0" es6-iterator@^2.0.3: @@ -2341,12 +2365,12 @@ es6-iterator@^2.0.3: es6-symbol "^3.1.1" es6-symbol@^3.1.1, es6-symbol@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" - integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== + version "3.1.4" + resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.4.tgz#f4e7d28013770b4208ecbf3e0bf14d3bcb557b8c" + integrity sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg== dependencies: - d "^1.0.1" - ext "^1.1.2" + d "^1.0.2" + ext "^1.7.0" escalade@^3.1.1: version "3.1.1" @@ -2369,9 +2393,9 @@ escape-string-regexp@^4.0.0: integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== eslint-config-prettier@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-9.0.0.tgz#eb25485946dd0c66cd216a46232dc05451518d1f" - integrity sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw== + version "9.1.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz#31af3d94578645966c082fcb71a5846d3c94867f" + integrity sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw== eslint-scope@^7.2.2: version "7.2.2" @@ -2387,17 +2411,18 @@ eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4 integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== eslint@^8.16.0: - version "8.48.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.48.0.tgz#bf9998ba520063907ba7bfe4c480dc8be03c2155" - integrity sha512-sb6DLeIuRXxeM1YljSe1KEx9/YYeZFQWcV8Rq9HfigmdDEugjLEVEa1ozDjL6YDjBpQHPJxJzze+alxi4T3OLg== + version "8.57.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.0.tgz#c786a6fd0e0b68941aaf624596fb987089195668" + integrity sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@eslint-community/regexpp" "^4.6.1" - "@eslint/eslintrc" "^2.1.2" - "@eslint/js" "8.48.0" - "@humanwhocodes/config-array" "^0.11.10" + "@eslint/eslintrc" "^2.1.4" + "@eslint/js" "8.57.0" + "@humanwhocodes/config-array" "^0.11.14" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" + "@ungap/structured-clone" "^1.2.0" ajv "^6.12.4" chalk "^4.0.0" cross-spawn "^7.0.2" @@ -2429,6 +2454,16 @@ eslint@^8.16.0: strip-ansi "^6.0.1" text-table "^0.2.0" +esniff@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/esniff/-/esniff-2.0.1.tgz#a4d4b43a5c71c7ec51c51098c1d8a29081f9b308" + integrity sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg== + dependencies: + d "^1.0.1" + es5-ext "^0.10.62" + event-emitter "^0.3.5" + type "^2.7.2" + espree@^9.6.0, espree@^9.6.1: version "9.6.1" resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" @@ -2503,6 +2538,14 @@ ethers@^5.7.1: "@ethersproject/web" "5.7.1" "@ethersproject/wordlists" "5.7.0" +event-emitter@^0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" + integrity sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA== + dependencies: + d "1" + es5-ext "~0.10.14" + eventemitter3@^4.0.7: version "4.0.7" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" @@ -2533,18 +2576,7 @@ exit@^0.1.2: resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== -expect@^29.0.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/expect/-/expect-29.5.0.tgz#68c0509156cb2a0adb8865d413b137eeaae682f7" - integrity sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg== - dependencies: - "@jest/expect-utils" "^29.5.0" - jest-get-type "^29.4.3" - jest-matcher-utils "^29.5.0" - jest-message-util "^29.5.0" - jest-util "^29.5.0" - -expect@^29.7.0: +expect@^29.0.0, expect@^29.7.0: version "29.7.0" resolved "https://registry.yarnpkg.com/expect/-/expect-29.7.0.tgz#578874590dcb3214514084c08115d8aee61e11bc" integrity sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw== @@ -2555,7 +2587,7 @@ expect@^29.7.0: jest-message-util "^29.7.0" jest-util "^29.7.0" -ext@^1.1.2: +ext@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/ext/-/ext-1.7.0.tgz#0ea4383c0103d60e70be99e9a7f11027a33c4f5f" integrity sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw== @@ -2617,6 +2649,13 @@ file-entry-cache@^6.0.1: dependencies: flat-cache "^3.0.4" +filelist@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" + integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== + dependencies: + minimatch "^5.0.1" + fill-range@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" @@ -2653,10 +2692,10 @@ flatted@^3.1.0: resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== -follow-redirects@^1.15.0: - version "1.15.2" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" - integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== +follow-redirects@^1.15.6: + version "1.15.6" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b" + integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA== form-data@^4.0.0: version "4.0.0" @@ -2813,10 +2852,10 @@ human-signals@^2.1.0: resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== -ignore@^5.2.0, ignore@^5.2.4: - version "5.2.4" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" - integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== +ignore@^5.2.0, ignore@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" + integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== import-fresh@^3.2.1: version "3.3.0" @@ -2964,6 +3003,16 @@ istanbul-reports@^3.1.3: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" +jake@^10.8.5: + version "10.9.2" + resolved "https://registry.yarnpkg.com/jake/-/jake-10.9.2.tgz#6ae487e6a69afec3a5e167628996b59f35ae2b7f" + integrity sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA== + dependencies: + async "^3.2.3" + chalk "^4.0.2" + filelist "^1.0.4" + minimatch "^3.1.2" + jest-changed-files@^29.7.0: version "29.7.0" resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.7.0.tgz#1c06d07e77c78e1585d020424dedc10d6e17ac3a" @@ -2999,7 +3048,7 @@ jest-circus@^29.7.0: slash "^3.0.0" stack-utils "^2.0.3" -jest-cli@^29.5.0: +jest-cli@^29.7.0: version "29.7.0" resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.7.0.tgz#5592c940798e0cae677eec169264f2d839a37995" integrity sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg== @@ -3044,16 +3093,6 @@ jest-config@^29.7.0: slash "^3.0.0" strip-json-comments "^3.1.1" -jest-diff@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.5.0.tgz#e0d83a58eb5451dcc1fa61b1c3ee4e8f5a290d63" - integrity sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw== - dependencies: - chalk "^4.0.0" - diff-sequences "^29.4.3" - jest-get-type "^29.4.3" - pretty-format "^29.5.0" - jest-diff@^29.7.0: version "29.7.0" resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.7.0.tgz#017934a66ebb7ecf6f205e84699be10afd70458a" @@ -3094,11 +3133,6 @@ jest-environment-node@^29.7.0: jest-mock "^29.7.0" jest-util "^29.7.0" -jest-get-type@^29.4.3: - version "29.4.3" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.4.3.tgz#1ab7a5207c995161100b5187159ca82dd48b3dd5" - integrity sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg== - jest-get-type@^29.6.3: version "29.6.3" resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.6.3.tgz#36f499fdcea197c1045a127319c0481723908fd1" @@ -3131,16 +3165,6 @@ jest-leak-detector@^29.7.0: jest-get-type "^29.6.3" pretty-format "^29.7.0" -jest-matcher-utils@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.5.0.tgz#d957af7f8c0692c5453666705621ad4abc2c59c5" - integrity sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw== - dependencies: - chalk "^4.0.0" - jest-diff "^29.5.0" - jest-get-type "^29.4.3" - pretty-format "^29.5.0" - jest-matcher-utils@^29.7.0: version "29.7.0" resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz#ae8fec79ff249fd592ce80e3ee474e83a6c44f12" @@ -3151,21 +3175,6 @@ jest-matcher-utils@^29.7.0: jest-get-type "^29.6.3" pretty-format "^29.7.0" -jest-message-util@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.5.0.tgz#1f776cac3aca332ab8dd2e3b41625435085c900e" - integrity sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA== - dependencies: - "@babel/code-frame" "^7.12.13" - "@jest/types" "^29.5.0" - "@types/stack-utils" "^2.0.0" - chalk "^4.0.0" - graceful-fs "^4.2.9" - micromatch "^4.0.4" - pretty-format "^29.5.0" - slash "^3.0.0" - stack-utils "^2.0.3" - jest-message-util@^29.7.0: version "29.7.0" resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.7.0.tgz#8bc392e204e95dfe7564abbe72a404e28e51f7f3" @@ -3304,19 +3313,7 @@ jest-snapshot@^29.7.0: pretty-format "^29.7.0" semver "^7.5.3" -jest-util@^29.0.0, jest-util@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.5.0.tgz#24a4d3d92fc39ce90425311b23c27a6e0ef16b8f" - integrity sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ== - dependencies: - "@jest/types" "^29.5.0" - "@types/node" "*" - chalk "^4.0.0" - ci-info "^3.2.0" - graceful-fs "^4.2.9" - picomatch "^2.2.3" - -jest-util@^29.7.0: +jest-util@^29.0.0, jest-util@^29.7.0: version "29.7.0" resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc" integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== @@ -3365,14 +3362,14 @@ jest-worker@^29.7.0: supports-color "^8.0.0" jest@^29.0.3: - version "29.5.0" - resolved "https://registry.yarnpkg.com/jest/-/jest-29.5.0.tgz#f75157622f5ce7ad53028f2f8888ab53e1f1f24e" - integrity sha512-juMg3he2uru1QoXX078zTa7pO85QyB9xajZc6bU+d9yEGwrKX6+vGmJQ3UdVZsvTEUARIdObzH68QItim6OSSQ== + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest/-/jest-29.7.0.tgz#994676fc24177f088f1c5e3737f5697204ff2613" + integrity sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw== dependencies: - "@jest/core" "^29.5.0" - "@jest/types" "^29.5.0" + "@jest/core" "^29.7.0" + "@jest/types" "^29.6.3" import-local "^3.0.2" - jest-cli "^29.5.0" + jest-cli "^29.7.0" js-guid@^1.0.0: version "1.0.2" @@ -3481,11 +3478,6 @@ lodash.merge@^4.6.2: resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== -lodash@^4.17.21: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - lru-cache@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" @@ -3571,6 +3563,20 @@ minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: dependencies: brace-expansion "^1.1.7" +minimatch@^5.0.1: + version "5.1.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^9.0.4: + version "9.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.4.tgz#8e49c731d1749cbec05050ee5145147b32496a51" + integrity sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw== + dependencies: + brace-expansion "^2.0.1" + mock-socket@^9.2.1: version "9.3.1" resolved "https://registry.yarnpkg.com/mock-socket/-/mock-socket-9.3.1.tgz#24fb00c2f573c84812aa4a24181bb025de80cc8e" @@ -3597,13 +3603,12 @@ next-tick@^1.1.0: integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ== nock@^13.3.0: - version "13.3.3" - resolved "https://registry.yarnpkg.com/nock/-/nock-13.3.3.tgz#179759c07d3f88ad3e794ace885629c1adfd3fe7" - integrity sha512-z+KUlILy9SK/RjpeXDiDUEAq4T94ADPHE3qaRkf66mpEhzc/ytOMm3Bwdrbq6k1tMWkbdujiKim3G2tfQARuJw== + version "13.5.4" + resolved "https://registry.yarnpkg.com/nock/-/nock-13.5.4.tgz#8918f0addc70a63736170fef7106a9721e0dc479" + integrity sha512-yAyTfdeNJGGBFxWdzSKCBYxs5FxLbCg5X5Q4ets974hcQzG1+qCxvIyOo4j2Ry6MUlhWVMX4OoYDefAIIwupjw== dependencies: debug "^4.1.0" json-stringify-safe "^5.0.1" - lodash "^4.17.21" propagate "^2.0.0" node-domexception@^1.0.0: @@ -3621,9 +3626,9 @@ node-fetch@^3.3.0: formdata-polyfill "^4.0.10" node-gyp-build@^4.3.0: - version "4.6.1" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.6.1.tgz#24b6d075e5e391b8d5539d98c7fc5c210cac8a3e" - integrity sha512-24vnklJmyRS8ViBNI8KbtK/r/DmXQMRiOMXTNz2nrTnAYUwjmEEbnnpB/+kt+yWRv73bPsSPRFddrcIbAxSiMQ== + version "4.8.1" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.8.1.tgz#976d3ad905e71b76086f4f0b0d3637fe79b6cda5" + integrity sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw== node-int64@^0.4.0: version "0.4.0" @@ -3781,20 +3786,11 @@ prelude-ls@^1.2.1: integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== prettier@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.0.0.tgz#e7b19f691245a21d618c68bc54dc06122f6105ae" - integrity sha512-zBf5eHpwHOGPC47h0zrPyNn+eAEIdEzfywMoYn2XPi0P44Zp0tSq64rq0xAREh4auw2cJZHo9QUob+NqCQky4g== - -pretty-format@^29.0.0, pretty-format@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.5.0.tgz#283134e74f70e2e3e7229336de0e4fce94ccde5a" - integrity sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw== - dependencies: - "@jest/schemas" "^29.4.3" - ansi-styles "^5.0.0" - react-is "^18.0.0" + version "3.3.2" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.3.2.tgz#03ff86dc7c835f2d2559ee76876a3914cec4a90a" + integrity sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA== -pretty-format@^29.7.0: +pretty-format@^29.0.0, pretty-format@^29.7.0: version "29.7.0" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== @@ -3842,9 +3838,9 @@ react-is@^18.0.0: integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== regenerator-runtime@^0.14.0: - version "0.14.0" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45" - integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA== + version "0.14.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" + integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== require-directory@^2.1.1: version "2.1.1" @@ -3913,18 +3909,18 @@ scrypt-js@3.0.1: resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== -semver@7.x, semver@^7.5.3, semver@^7.5.4: - version "7.5.4" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" - integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== - dependencies: - lru-cache "^6.0.0" - semver@^6.3.0, semver@^6.3.1: version "6.3.1" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== +semver@^7.5.3, semver@^7.5.4, semver@^7.6.0: + version "7.6.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" + integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== + dependencies: + lru-cache "^6.0.0" + shebang-command@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" @@ -4073,23 +4069,24 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" -ts-api-utils@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.0.1.tgz#8144e811d44c749cd65b2da305a032510774452d" - integrity sha512-lC/RGlPmwdrIBFTX59wwNzqh7aR2otPNPR/5brHZm/XKFYKsfqxihXUe9pU3JI+3vGkl+vyCoNNnPhJn3aLK1A== +ts-api-utils@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.3.0.tgz#4b490e27129f1e8e686b45cc4ab63714dc60eea1" + integrity sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ== ts-jest@^29.0.0: - version "29.1.0" - resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-29.1.0.tgz#4a9db4104a49b76d2b368ea775b6c9535c603891" - integrity sha512-ZhNr7Z4PcYa+JjMl62ir+zPiNJfXJN6E8hSLnaUKhOgqcn8vb3e537cpkd0FuAfRK3sR1LSqM1MOhliXNgOFPA== + version "29.2.4" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-29.2.4.tgz#38ccf487407d7a63054a72689f6f99b075e296e5" + integrity sha512-3d6tgDyhCI29HlpwIq87sNuI+3Q6GLTTCeYRHCs7vDz+/3GCMwEtV9jezLyl4ZtnBgx00I7hm8PCP8cTksMGrw== dependencies: bs-logger "0.x" + ejs "^3.1.10" fast-json-stable-stringify "2.x" jest-util "^29.0.0" json5 "^2.2.3" lodash.memoize "4.x" make-error "1.x" - semver "7.x" + semver "^7.5.3" yargs-parser "^21.0.1" ts-node@^10.8.0: @@ -4111,7 +4108,12 @@ ts-node@^10.8.0: v8-compile-cache-lib "^3.0.1" yn "3.1.1" -tslib@^2.1.0, tslib@^2.6.1, tslib@^2.6.2: +tslib@^2.1.0: + version "2.6.3" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.3.tgz#0438f810ad7a9edcde7a241c3d80db693c8cbfe0" + integrity sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ== + +tslib@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== @@ -4143,15 +4145,10 @@ type-fest@^0.21.3: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== -type@^1.0.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" - integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== - type@^2.7.2: - version "2.7.2" - resolved "https://registry.yarnpkg.com/type/-/type-2.7.2.tgz#2376a15a3a28b1efa0f5350dcf72d24df6ef98d0" - integrity sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw== + version "2.7.3" + resolved "https://registry.yarnpkg.com/type/-/type-2.7.3.tgz#436981652129285cc3ba94f392886c2637ea0486" + integrity sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ== typedarray-to-buffer@^3.1.5: version "3.1.5" @@ -4161,9 +4158,14 @@ typedarray-to-buffer@^3.1.5: is-typedarray "^1.0.0" typescript@^5.0.4: - version "5.1.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.1.3.tgz#8d84219244a6b40b6fb2b33cc1c062f715b9e826" - integrity sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw== + version "5.5.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.5.2.tgz#c26f023cb0054e657ce04f72583ea2d85f8d0507" + integrity sha512-NcRtPEOsPFFWjobJEtfihkLCZCXZt/os3zf8nTxjVH3RvTSxjrCamJpbExGvYOF+tFHc3pA65qpdwPbzjohhew== + +undici-types@~6.13.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.13.0.tgz#e3e79220ab8c81ed1496b5812471afd7cf075ea5" + integrity sha512-xtFJHudx8S2DSoujjMd1WeWvn7KKWFRESZTMeL1RptAYERu29D6jphMjjY+vn96jvN3kVPDNxU/E13VTaXj6jg== update-browserslist-db@^1.0.11: version "1.0.11" @@ -4209,18 +4211,18 @@ walker@^1.0.8: makeerror "1.0.12" web-streams-polyfill@^3.0.3: - version "3.2.1" - resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz#71c2718c52b45fd49dbeee88634b3a60ceab42a6" - integrity sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q== + version "3.3.3" + resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz#2073b91a2fdb1fbfbd401e7de0ac9f8214cecb4b" + integrity sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw== websocket@^1.0.34: - version "1.0.34" - resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.34.tgz#2bdc2602c08bf2c82253b730655c0ef7dcab3111" - integrity sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ== + version "1.0.35" + resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.35.tgz#374197207d7d4cc4c36cbf8a1bb886ee52a07885" + integrity sha512-/REy6amwPZl44DDzvRCkaI1q1bIiQB0mEFQLUrhz3z2EK91cp3n72rAjUlrTP0zV22HJIUOVHQGPxhFRjxjt+Q== dependencies: bufferutil "^4.0.1" debug "^2.2.0" - es5-ext "^0.10.50" + es5-ext "^0.10.63" typedarray-to-buffer "^3.1.5" utf-8-validate "^5.0.2" yaeti "^0.0.6" @@ -4259,15 +4261,10 @@ ws@7.4.6: resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== -ws@^8.5.0: - version "8.13.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0" - integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== - -ws@^8.8.1: - version "8.14.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.14.1.tgz#4b9586b4f70f9e6534c7bb1d3dc0baa8b8cf01e0" - integrity sha512-4OOseMUq8AzRBI/7SLMUwO+FEDnguetSk7KMb1sHwvF2w2Wv5Hoj0nlifx8vtGsftE/jWHojPy8sMMzYLJ2G/A== +ws@^8.5.0, ws@^8.8.1: + version "8.18.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.0.tgz#0d7505a6eafe2b0e712d232b42279f53bc289bbc" + integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw== y18n@^5.0.5: version "5.0.8" diff --git a/node/Cargo.toml b/node/Cargo.toml index 185c1290a6..00fe2dae7b 100644 --- a/node/Cargo.toml +++ b/node/Cargo.toml @@ -24,7 +24,7 @@ creditcoin-node-rpc = { path = "./rpc" } creditcoin-node-runtime = { workspace = true } frame-benchmarking = { features = ["std"], workspace = true } frame-benchmarking-cli = { workspace = true } -futures-lite = "1.13.0" +futures-lite = "2.3.0" hex = { workspace = true } jsonrpc-core = { workspace = true } log = { workspace = true } @@ -58,15 +58,15 @@ sp-timestamp = { workspace = true } substrate-frame-rpc-system = { workspace = true } substrate-prometheus-endpoint = { workspace = true } task-scheduler-runtime-api = { workspace = true } -thiserror = "1.0.38" +thiserror = "1.0.63" try-runtime-cli = { workspace = true, optional = true } jsonrpsee = { workspace = true, features = ["server"] } -serde_json = "1.0.96" +serde_json = "1.0.119" frame-system = { workspace = true } pallet-transaction-payment = { workspace = true } sp-io = { workspace = true, optional = true } sp-keyring = { workspace = true } -futures = "0.3.26" +futures = "0.3.30" sc-consensus-babe = { workspace = true } sp-consensus-babe = { workspace = true } sp-consensus = { workspace = true } @@ -82,7 +82,7 @@ serde = { workspace = true } sc-chain-spec = { workspace = true } [dependencies.tokio] -version = "1.28.2" +version = "1.39.2" default-features = false features = ["time"] diff --git a/node/rpc/Cargo.toml b/node/rpc/Cargo.toml index 7474fe8c38..c102c2b1a4 100644 --- a/node/rpc/Cargo.toml +++ b/node/rpc/Cargo.toml @@ -23,7 +23,7 @@ task-scheduler-runtime-api = { workspace = true } [dev-dependencies] assert_matches = { workspace = true } test-client = { path = "../../test/client" } -tokio = { version = "1.28.2", features = ["full"] } +tokio = { version = "1.39.2", features = ["full"] } [features] diff --git a/node/src/service/nonce_monitor.rs b/node/src/service/nonce_monitor.rs index 8bbfca2f52..5ed4c8d109 100644 --- a/node/src/service/nonce_monitor.rs +++ b/node/src/service/nonce_monitor.rs @@ -2,9 +2,11 @@ use std::{convert::TryInto, time::Duration}; use creditcoin_node_runtime::AccountId; use futures::join; +use jsonrpsee::types::Response as RpcResponse; use parity_scale_codec::Decode; use sc_client_api::Backend; use sc_service::{Arc, RpcHandlers}; +use serde::de::DeserializeOwned; use sp_keystore::CryptoStore; use sp_runtime::{ app_crypto::Ss58Codec, offchain::OffchainStorage, traits::IdentifyAccount, MultiSigner, @@ -33,12 +35,18 @@ impl From for Error { } } -async fn rpc_request(handlers: &RpcHandlers, request: &str) -> Result { +async fn rpc_request( + handlers: &RpcHandlers, + request: &str, +) -> Result, Error> { let (response, _stream) = handlers.rpc_query(request).await?; - let result = serde_json::from_str(&response).map_err(Error::Serde)?; + log::trace!(target: "nonce-monitor", "Got response: {:?}", response); + + let result: RpcResponse<'_, Option> = + serde_json::from_str(&response).map_err(Error::Serde)?; - Ok(result) + Ok(result.result) } async fn get_on_chain_nonce(handlers: &RpcHandlers, acct: &AccountId) -> Result { @@ -52,9 +60,9 @@ async fn get_on_chain_nonce(handlers: &RpcHandlers, acct: &AccountId) -> Result< acct.to_ss58check() ); - let result = rpc_request(handlers, &request).await?; + let result = rpc_request::(handlers, &request).await?; - result.as_u64().ok_or_else(|| Error::Rpc("expected u64 response".into())) + result.ok_or_else(|| Error::Rpc("expected u64 response".into())) } async fn get_off_chain_nonce_key( @@ -71,9 +79,11 @@ async fn get_off_chain_nonce_key( acct.to_ss58check() ); - let result = rpc_request(handlers, &request).await?; + let key = rpc_request(handlers, &request) + .await? + .ok_or_else(|| Error::Rpc("expected offchain nonce key response".into()))?; - let key: Vec = jsonrpc_core::serde_json::from_value(result).map_err(Error::Serde)?; + log::trace!(target: "nonce-monitor", "Got offchain nonce key: {:?}", key); Ok(key) } diff --git a/pallets/creditcoin/Cargo.toml b/pallets/creditcoin/Cargo.toml index 18afd2006f..3f37cb9467 100644 --- a/pallets/creditcoin/Cargo.toml +++ b/pallets/creditcoin/Cargo.toml @@ -34,26 +34,26 @@ log = { workspace = true } pallet-balances = { workspace = true } pallet-timestamp = { workspace = true } parity-scale-codec = { workspace = true } -paste = "1.0.14" +paste = "1.0.15" scale-info = { workspace = true } serde = { workspace = true } -serde_json = { version = "1.0.96", features = [ +serde_json = { version = "1.0.119", features = [ "alloc", ], default-features = false } -sha2 = { version = "0.10.6", default-features = false } +sha2 = { version = "0.10.8", default-features = false } sp-core = { workspace = true } sp-io = { workspace = true } sp-runtime = { workspace = true } sp-std = { workspace = true } -strum = { version = "0.25.0", features = ["derive"], default-features = false } +strum = { version = "0.26.1", features = ["derive"], default-features = false } tracing = { workspace = true } pallet-offchain-task-scheduler = { workspace = true } [dev-dependencies] assert_matches = { workspace = true } -bstr = { version = "1.6.2", default-features = false } -parking_lot = "0.12.1" +bstr = { version = "1.10.0", default-features = false } +parking_lot = "0.12.3" sp-core = { workspace = true } sp-keystore = { workspace = true } traced-test = { workspace = true } diff --git a/pallets/creditcoin/src/benchmarking.rs b/pallets/creditcoin/src/benchmarking.rs index 0fc422fe78..7e9a10075e 100644 --- a/pallets/creditcoin/src/benchmarking.rs +++ b/pallets/creditcoin/src/benchmarking.rs @@ -3,32 +3,26 @@ use super::*; use crate::benchmarking::alloc::format; use crate::helpers::{extensions::IntoBounded, EVMAddress, PublicToAddress}; use crate::migrations::Migrate; -use crate::ocw::errors::VerificationFailureCause as Cause; -use crate::ocw::tasks::collect_coins::testing_constants::CHAIN; use crate::test_utils::{ fake_address_id, fake_ask_id, fake_bid_id, fake_loan_terms, fake_offer_id, insert_fake_ask, insert_fake_bid, insert_fake_offer, }; -use crate::types::{Blockchain, BurnDetails, ContractType, OwnershipProof}; +use crate::types::{Blockchain, OwnershipProof}; use crate::Pallet as Creditcoin; use crate::{AskOrderId, LoanTerms}; use frame_benchmarking::{account, benchmarks, whitelist_account, Zero}; -use frame_support::{ - pallet_prelude::*, - traits::{Currency, Get}, -}; +use frame_support::{pallet_prelude::*, traits::Currency}; use frame_system::pallet_prelude::*; use frame_system::Config as SystemConfig; use frame_system::Pallet as System; use frame_system::RawOrigin; use pallet_balances::Pallet as Balances; -use pallet_offchain_task_scheduler::tasks::TaskScheduler; use pallet_timestamp::Config as TimestampConfig; use pallet_timestamp::Pallet as Timestamp; use sp_core::ecdsa; use sp_io::crypto::{ecdsa_generate, ecdsa_sign}; +use sp_runtime::traits::IdentifyAccount; use sp_runtime::traits::One; -use sp_runtime::traits::{IdentifyAccount, UniqueSaturatedFrom}; use sp_runtime::KeyTypeId; #[derive(Clone, Copy, PartialEq, Eq)] @@ -39,26 +33,9 @@ enum DealKind { benchmarks! { migration_v6 { - let t in 0..1024; - - let pending = types::UnverifiedCollectedCoins { - to: [0u8; 256].into_bounded(), - tx_id: [0u8; 256].into_bounded(), - contract: Default::default(), - contract_type: ContractType::GCRE, - }; - for t in 0..t { - let collected_coins_id = CollectedCoinsId::new::(&CHAIN, &t.encode()); - T::TaskScheduler::insert( - &T::BlockNumber::one(), - &collected_coins_id.into_inner(), - crate::Task::from(pending.clone()), - ); - } - - let m = crate::migrations::v7::Migration::::new(); - - }: {m.migrate()} + let t in 0..1; + T::DbWeight::get().reads_writes(1, 1); + }: {} migration_v7 { let t in 0..1024; @@ -292,54 +269,12 @@ benchmarks! { }: _(RawOrigin::Signed(lender),lender_addr_id,borrower_addr_id,terms,expiry,ask_guid.into_bounded(),bid_guid.into_bounded(),pkey.into(),signature.into()) - request_collect_coins { - >::set_timestamp(1u32.into()); - let collector: T::AccountId = lender_account::(true); - let collector_addr_id = register_eth_addr::(&collector, "collector"); - let address = Creditcoin::::addresses(collector_addr_id).unwrap(); - let tx_id = "40be73b6ea10ef3da3ab33a2d5184c8126c5b64b21ae1e083ee005f18e3f5fab" - .as_bytes() - .into_bounded(); - }: _( RawOrigin::Signed(collector), address.value, tx_id) - - fail_collect_coins { - >::set_timestamp(1u32.into()); - let authority = authority_account::(true); - >::add_authority(RawOrigin::Root.into(), authority.clone()).unwrap(); - let tx_id = "40be73b6ea10ef3da3ab33a2d5184c8126c5b64b21ae1e083ee005f18e3f5fab".as_bytes(); - let collected_coins_id = crate::CollectedCoinsId::new::(&CHAIN, tx_id); - let deadline = System::::block_number() + <::UnverifiedTaskTimeout as Get>::get(); - let task_id = crate::TaskId::from(collected_coins_id); - }: fail_task(RawOrigin::Signed(authority), deadline, task_id, Cause::AbiMismatch) - - persist_collect_coins { - >::set_timestamp(1u32.into()); - let authority = authority_account::(true); - >::add_authority(RawOrigin::Root.into(), authority.clone()).unwrap(); - let collector: T::AccountId = lender_account::(true); - let collector_addr_id = register_eth_addr::(&collector, "collector"); - let tx_id = "40be73b6ea10ef3da3ab33a2d5184c8126c5b64b21ae1e083ee005f18e3f5fab" - .as_bytes() - .into_bounded(); - let collected_coins_id = crate::CollectedCoinsId::new::(&CHAIN, &tx_id); - let amount = T::Balance::unique_saturated_from(Balances::::minimum_balance()); - let collected_coins = - crate::types::CollectedCoinsStruct:: { to: collector_addr_id, amount, tx_id, contract_type: ContractType::GCRE}; - let deadline = System::::block_number() + <::UnverifiedTaskTimeout as Get>::get(); - let task_output = crate::TaskOutput::from((collected_coins_id, collected_coins)); - }: persist_task_output(RawOrigin::Signed(authority), deadline, task_output) - remove_authority { let root = RawOrigin::Root; let who = authority_account::(false); >::add_authority(root.clone().into(), who.clone()).unwrap(); }: _(root, who) - set_collect_coins_contract { - let root = RawOrigin::Root; - let contract = DeployedContract::default(); - }: _(root, contract) - register_address_v2 { let who: T::AccountId = lender_account::(false); let ktypeid = KeyTypeId(*b"dumy"); @@ -350,33 +285,8 @@ benchmarks! { let signature = ecdsa_sign(ktypeid, &pkey, &message).expect("ecdsa signature"); let proof = OwnershipProof::EthSign(signature); }: _(RawOrigin::Signed(who), Blockchain::Ethereum, address, proof) - - set_gate_contract { - let root = RawOrigin::Root; - let contract = DeployedContract::default(); - }: _(root, contract) - - - set_gate_faucet { - let root = RawOrigin::Root; - let addr: T::AccountId = lender_account::(false); - }: _(root, addr) - - request_collect_coins_v2 { - >::set_timestamp(1u32.into()); - let collector: T::AccountId = lender_account::(true); - let collector_addr_id = register_eth_addr::(&collector, "collector"); - let address = Creditcoin::::addresses(collector_addr_id).unwrap(); - let tx_id = "40be73b6ea10ef3da3ab33a2d5184c8126c5b64b21ae1e083ee005f18e3f5fab" - .as_bytes() - .into_bounded(); - - let contract = BurnDetails::GCRE(address.value, tx_id); - }: _( RawOrigin::Signed(collector), contract) } -//impl_benchmark_test_suite!(Creditcoin, crate::mock::new_test_ext(), crate::mock::Test); - fn generate_funded_deal( fund: bool, seed: u8, diff --git a/pallets/creditcoin/src/lib.rs b/pallets/creditcoin/src/lib.rs index 21f1c051d5..2fa1ff00ef 100644 --- a/pallets/creditcoin/src/lib.rs +++ b/pallets/creditcoin/src/lib.rs @@ -31,27 +31,27 @@ mod tests; #[macro_use] mod helpers; + pub mod migrations; + pub mod ocw; mod types; #[cfg(any(test, feature = "runtime-benchmarks"))] pub mod test_utils; +use crate::types::{BurnId, BurnInfo}; use ocw::tasks::collect_coins::DeployedContract; pub use types::{ loan_terms, Address, AddressId, AskOrder, AskOrderId, AskTerms, BidOrder, BidOrderId, BidTerms, - Blockchain, BurnDetails, CollectedCoinsId, CollectedCoinsStruct, ContractType, DealOrder, - DealOrderId, Duration, ExternalAddress, ExternalAmount, ExternalTxId, Guid, InterestRate, - InterestType, LegacySighash, LoanTerms, Offer, OfferId, OrderId, RatePerPeriod, Task, TaskId, - TaskOutput, Transfer, TransferId, TransferKind, UnverifiedCollectedCoins, UnverifiedTransfer, + Blockchain, CollectedCoinsId, CollectedCoinsStruct, DealOrder, DealOrderId, Duration, + ExternalAddress, ExternalAmount, ExternalTxId, Guid, InterestRate, InterestType, LegacySighash, + LoanTerms, Offer, OfferId, OrderId, RatePerPeriod, Task, TaskId, TaskOutput, Transfer, + TransferId, TransferKind, UnverifiedTransfer, }; pub(crate) use types::{DoubleMapExt, Id}; -#[cfg(test)] -pub(crate) use types::test; - pub type BalanceFor = ::Balance; pub const STORAGE_VERSION: StorageVersion = StorageVersion::new(8); @@ -65,13 +65,13 @@ pub mod pallet { dispatch::{DispatchResult, PostDispatchInfo}, fail, pallet_prelude::*, - traits::tokens::{currency::Currency as CurrencyT, fungible::Mutate, ExistenceRequirement}, + traits::tokens::{currency::Currency as CurrencyT, ExistenceRequirement}, transactional, }; use frame_system::{ensure_signed, offchain::CreateSignedTransaction, pallet_prelude::*}; use ocw::errors::VerificationFailureCause; use pallet_offchain_task_scheduler::authority::AuthorityController; - use pallet_offchain_task_scheduler::tasks::{TaskScheduler, TaskV2}; + use pallet_offchain_task_scheduler::tasks::TaskScheduler; use sp_runtime::traits::{IdentifyAccount, UniqueSaturatedFrom, UniqueSaturatedInto, Verify}; use tracing as log; use types::StorageCleanupState; @@ -111,6 +111,7 @@ pub mod pallet { + ethereum_types::BigEndianHash + Clone; + #[pallet::constant] type UnverifiedTaskTimeout: Get<::BlockNumber>; type WeightInfo: WeightInfo; @@ -145,15 +146,8 @@ pub mod pallet { fn close_deal_order() -> Weight; fn exempt() -> Weight; fn register_deal_order() -> Weight; - fn request_collect_coins() -> Weight; - fn persist_collect_coins() -> Weight; - fn fail_collect_coins() -> Weight; fn remove_authority() -> Weight; - fn set_collect_coins_contract() -> Weight; fn register_address_v2() -> Weight; - fn set_gate_contract() -> Weight; - fn set_gate_faucet() -> Weight; - fn request_collect_coins_v2() -> Weight; } #[pallet::pallet] @@ -253,6 +247,11 @@ pub mod pallet { pub type CleanupState = StorageValue<_, StorageCleanupState, OptionQuery>; + #[pallet::storage] + #[pallet::getter(fn burned_funds)] + pub type BurnedFunds = + CountedStorageMap<_, Identity, BurnId, BurnInfo>; + #[pallet::event] #[pallet::generate_deposit(pub(super) fn deposit_event)] pub enum Event { @@ -260,10 +259,6 @@ pub mod pallet { /// [registered_address_id, registered_address] AddressRegistered(AddressId, Address), - /// Collecting coins from Eth ERC-20 has been registered and will be verified. - /// [collected_coins_id, registered_collect_coins] - CollectCoinsRegistered(CollectedCoinsId, types::UnverifiedCollectedCoins), - /// An external transfer has been registered and will be verified. /// [registered_transfer_id, registered_transfer] TransferRegistered( @@ -275,13 +270,6 @@ pub mod pallet { /// [verified_transfer_id] TransferVerified(TransferId), - /// CollectCoins has been successfully verified and minted. - /// [collected_coins_id, collected_coins] - CollectedCoinsMinted( - types::CollectedCoinsId, - types::CollectedCoinsStruct, - ), - /// An external transfer has been processed and marked as part of a loan. /// [processed_transfer_id] TransferProcessed(TransferId), @@ -345,9 +333,7 @@ pub mod pallet { TransferFailedVerification(TransferId, VerificationFailureCause), - /// exchanging vested ERC-20 CC for native CC failed. - /// [collected_coins_id, cause] - CollectCoinsFailedVerification(CollectedCoinsId, VerificationFailureCause), + Burned(BurnId), } // Errors inform users that something went wrong. @@ -538,6 +524,12 @@ pub mod pallet { /// The faucet has insufficient funds to complete this swap, please retry when the faucet has been reloaded BurnGATEInsufficientFaucetBalance, + + /// During a call to burn or burn_all the settlement of the account balances failed + BurnSettlementError, + + /// A call to burn specified more free funds than the account has access to + BurnInsufficientFunds, } #[pallet::genesis_config] @@ -1151,53 +1143,6 @@ pub mod pallet { Ok(()) } - #[transactional] - #[pallet::call_index(10)] - #[pallet::weight(::WeightInfo::request_collect_coins())] - pub fn request_collect_coins( - origin: OriginFor, - evm_address: ExternalAddress, - tx_id: ExternalTxId, - ) -> DispatchResult { - let who = ensure_signed(origin)?; - - let contract = Self::collect_coins_contract(); - - let pending = types::UnverifiedCollectedCoins { - to: evm_address, - tx_id, - contract, - contract_type: crate::types::ContractType::GCRE, - }; - - let collect_coins_id = TaskV2::::to_id(&pending); - - ensure!( - !>::is_persisted(&collect_coins_id), - Error::::CollectCoinsAlreadyRegistered - ); - - let deadline = T::TaskScheduler::deadline(); - - ensure!( - !T::TaskScheduler::is_scheduled(&deadline, &collect_coins_id), - Error::::CollectCoinsAlreadyRegistered - ); - - let address_id = AddressId::new::(&pending.contract.chain, &pending.to); - let address = Self::addresses(address_id).ok_or(Error::::NonExistentAddress)?; - ensure!(address.owner == who, Error::::NotAddressOwner); - - T::TaskScheduler::insert(&deadline, &collect_coins_id, Task::from(pending.clone())); - - Self::deposit_event(Event::::CollectCoinsRegistered( - collect_coins_id.into(), - pending, - )); - - Ok(()) - } - #[transactional] #[pallet::call_index(11)] #[pallet::weight(::WeightInfo::register_funding_transfer())] @@ -1305,14 +1250,11 @@ pub mod pallet { #[transactional] #[pallet::call_index(16)] - #[pallet::weight(match &task_output { - crate::TaskOutput::CollectCoins(..) => ::WeightInfo::persist_collect_coins(), - crate::TaskOutput::VerifyTransfer(..) => ::WeightInfo::persist_transfer(), - })] + #[pallet::weight(::WeightInfo::persist_transfer())] pub fn persist_task_output( origin: OriginFor, deadline: T::BlockNumber, - task_output: TaskOutput, + task_output: TaskOutput, ) -> DispatchResultWithPostInfo { let who = ensure_signed(origin)?; @@ -1331,62 +1273,6 @@ pub mod pallet { Transfers::::insert(&id, transfer); (id.clone().into_inner(), Event::::TransferVerified(id)) }, - TaskOutput::CollectCoins(id, collected_coins) => { - ensure!( - !CollectedCoins::::contains_key(&id), - non_paying_error(Error::::CollectCoinsAlreadyRegistered) - ); - - let address = Self::addresses(&collected_coins.to) - .ok_or(Error::::NonExistentAddress)?; - - match collected_coins.contract_type { - ContractType::GCRE => { - as Mutate>::mint_into( - &address.owner, - collected_coins.amount, - )?; - - CollectedCoins::::insert(&id, collected_coins.clone()); - ( - id.clone().into_inner(), - Event::::CollectedCoinsMinted(id, collected_coins), - ) - }, - ContractType::GATE => { - let faucet_address = Self::gate_faucet_account() - .ok_or(Error::::BurnGATEFaucetNotSet)?; - - let dest = Self::addresses(&collected_coins.to) - .ok_or(Error::::NonExistentAddress)?; - - let transfer = - as CurrencyT>::transfer( - &faucet_address, - &dest.owner, - collected_coins.amount, - ExistenceRequirement::AllowDeath, - ); - - match transfer { - Ok(_) => { - CollectedCoins::::insert(&id, collected_coins.clone()); - ( - id.clone().into_inner(), - Event::::CollectedCoinsMinted(id, collected_coins), - ) - }, - Err(_) => ( - id.clone().into_inner(), - Event::::CollectCoinsFailedVerification( - id, - VerificationFailureCause::InsufficientFaucetBalance, - ), - ), - } - }, - } - }, }; T::TaskScheduler::remove(&deadline, &task_id); @@ -1396,10 +1282,7 @@ pub mod pallet { } #[pallet::call_index(17)] - #[pallet::weight(match &task_id { - crate::TaskId::VerifyTransfer(..) => ::WeightInfo::fail_transfer(), - crate::TaskId::CollectCoins(..) => ::WeightInfo::fail_collect_coins(), - })] + #[pallet::weight(::WeightInfo::fail_transfer())] pub fn fail_task( origin: OriginFor, deadline: T::BlockNumber, @@ -1421,16 +1304,6 @@ pub mod pallet { Event::::TransferFailedVerification(transfer_id, cause), ) }, - TaskId::CollectCoins(collected_coins_id) => { - ensure!( - !CollectedCoins::::contains_key(&collected_coins_id), - Error::::CollectCoinsAlreadyRegistered - ); - ( - collected_coins_id.clone().into_inner(), - Event::::CollectCoinsFailedVerification(collected_coins_id, cause), - ) - }, }; T::TaskScheduler::remove(&deadline, &task_id); Self::deposit_event(event); @@ -1453,18 +1326,6 @@ pub mod pallet { Ok(PostDispatchInfo { actual_weight: None, pays_fee: Pays::No }) } - #[transactional] - #[pallet::call_index(20)] - #[pallet::weight(::WeightInfo::set_collect_coins_contract())] - pub fn set_collect_coins_contract( - origin: OriginFor, - contract: DeployedContract, - ) -> DispatchResult { - ensure_root(origin)?; - CollectCoinsContract::::put(contract); - Ok(()) - } - #[transactional] #[pallet::call_index(21)] #[pallet::weight(::WeightInfo::remove_authority())] @@ -1536,89 +1397,5 @@ pub mod pallet { }, } } - - /// Set the onchain details for the Gluwa GATE Contract, including its address and the blockchain where it is deployed. - /// This extrinsic expects the caller to have root permissions. - #[pallet::call_index(23)] - #[pallet::weight(::WeightInfo::set_gate_contract())] - pub fn set_gate_contract( - origin: OriginFor, - contract: DeployedContract, - ) -> DispatchResult { - ensure_root(origin)?; - GATEContract::::put(contract); - Ok(()) - } - - #[pallet::call_index(24)] - #[pallet::weight(::WeightInfo::set_gate_faucet())] - pub fn set_gate_faucet(origin: OriginFor, address: T::AccountId) -> DispatchResult { - ensure_root(origin)?; - GATEFaucetAccount::::put(address); - Ok(()) - } - - #[pallet::call_index(25)] - #[pallet::weight(::WeightInfo::request_collect_coins_v2())] - pub fn request_collect_coins_v2( - origin: OriginFor, - contract: BurnDetails, - ) -> DispatchResult { - let who = ensure_signed(origin)?; - let contract_type; - let deployed_contract; - let tx_id; - let evm_address; - - match contract { - BurnDetails::GCRE(ext_addr, tx_hash) => { - deployed_contract = Self::collect_coins_contract(); - contract_type = ContractType::GCRE; - tx_id = tx_hash; - evm_address = ext_addr; - }, - BurnDetails::GATE(ext_addr, tx_hash) => { - deployed_contract = Self::gate_contract(); - contract_type = ContractType::GATE; - tx_id = tx_hash; - evm_address = ext_addr; - Self::gate_faucet_account().ok_or(Error::::BurnGATEFaucetNotSet)?; - }, - } - - let pending = types::UnverifiedCollectedCoins { - to: evm_address, - tx_id, - contract: deployed_contract, - contract_type, - }; - - let collect_coins_id = TaskV2::::to_id(&pending); - - ensure!( - !>::is_persisted(&collect_coins_id), - Error::::CollectCoinsAlreadyRegistered - ); - - let deadline = T::TaskScheduler::deadline(); - - ensure!( - !T::TaskScheduler::is_scheduled(&deadline, &collect_coins_id), - Error::::CollectCoinsAlreadyRegistered - ); - - let address_id = AddressId::new::(&pending.contract.chain, &pending.to); - let address = Self::addresses(address_id).ok_or(Error::::NonExistentAddress)?; - ensure!(address.owner == who, Error::::NotAddressOwner); - - T::TaskScheduler::insert(&deadline, &collect_coins_id, Task::from(pending.clone())); - - Self::deposit_event(Event::::CollectCoinsRegistered( - collect_coins_id.into(), - pending, - )); - - Ok(()) - } } } diff --git a/pallets/creditcoin/src/migrations/v5.rs b/pallets/creditcoin/src/migrations/v5.rs index 80c7eb7347..b58cc2b9be 100644 --- a/pallets/creditcoin/src/migrations/v5.rs +++ b/pallets/creditcoin/src/migrations/v5.rs @@ -92,12 +92,6 @@ impl Migrate for Migration { PendingTasks::::insert(deadline, TaskId::from(id), Task::from(transfer)); } - for (deadline, id, collect_coins) in UnverifiedCollectedCoins::::iter() { - weight = weight.saturating_add(weight_each); - - PendingTasks::::insert(deadline, TaskId::from(id), Task::from(collect_coins)); - } - let _results = UnverifiedTransfers::::clear(u32::MAX, None); let _results = UnverifiedCollectedCoins::::clear(u32::MAX, None); weight @@ -182,17 +176,12 @@ mod tests { ::Hashing::hash(&tx_id), ); - UnverifiedCollectedCoins::::insert(deadline, &collect_coins_id, &collect_coins); + UnverifiedCollectedCoins::::insert(deadline, &collect_coins_id, collect_coins); assert!(UnverifiedCollectedCoins::::contains_key(deadline, &collect_coins_id)); super::Migration::::new().migrate(); - assert_eq!( - PendingTasks::::get(deadline, TaskId::CollectCoins(collect_coins_id.clone())), - Some(Task::CollectCoins(collect_coins)) - ); - assert!( UnverifiedCollectedCoins::::contains_key(deadline, collect_coins_id).not() ); diff --git a/pallets/creditcoin/src/migrations/v6.rs b/pallets/creditcoin/src/migrations/v6.rs index 05b70f5927..47a9ef9e06 100644 --- a/pallets/creditcoin/src/migrations/v6.rs +++ b/pallets/creditcoin/src/migrations/v6.rs @@ -26,7 +26,6 @@ pub struct OldUnverifiedCollectedCoins { #[derive(Clone, Encode, Decode, Eq, PartialEq, RuntimeDebug, TypeInfo, MaxEncodedLen)] pub enum Task { VerifyTransfer(UnverifiedTransfer), - CollectCoins(OldUnverifiedCollectedCoins), } impl TaskV2 for OldUnverifiedCollectedCoins @@ -54,14 +53,6 @@ where } } -impl From - for Task -{ - fn from(coins: OldUnverifiedCollectedCoins) -> Self { - Task::CollectCoins(coins) - } -} - impl From> for Task { @@ -121,9 +112,6 @@ impl Migrate for Migration { for (i, (k1, _, v)) in PendingTasks::::drain().enumerate() { n = i.unique_saturated_into(); let id: TaskId = match &v { - Task::CollectCoins(pending) => TaskId::CollectCoins( - crate::types::CollectedCoinsId::from(TaskV2::::to_id(pending)), - ), Task::VerifyTransfer(pending) => TaskId::VerifyTransfer( crate::types::TransferId::from(TaskV2::::to_id(pending)), ), @@ -145,38 +133,9 @@ impl Migrate for Migration { pub mod tests { use super::Migrate; use super::*; - use crate::helpers::extensions::IntoBounded; use crate::mock::ExtBuilder; use crate::mock::Test; - use crate::test::create_unverified_transfer; - - #[test] - fn migrate_collect_coins() { - ExtBuilder::default().build_and_execute(|| { - let pending = OldUnverifiedCollectedCoins { - to: [0u8; 256].into_bounded(), - tx_id: [0u8; 256].into_bounded(), - contract: Default::default(), - }; - let id = TaskId::CollectCoins(crate::types::CollectedCoinsId::from( - TaskV2::::to_id(&pending), - )); - - PendingTasks::::insert(1u64, id.clone(), Task::from(pending.clone())); - - super::Migration::::new().migrate(); - - let migrated_pending = { - if let Task::CollectCoins(pending) = new::PendingTasks::::get(1, id).unwrap() - { - pending - } else { - unreachable!() - } - }; - assert_eq!(pending, migrated_pending); - }); - } + use crate::types::test::create_unverified_transfer; #[test] fn migrate_verify_transfer() { @@ -192,13 +151,8 @@ pub mod tests { super::Migration::::new().migrate(); let migrated_pending = { - if let Task::VerifyTransfer(pending) = - new::PendingTasks::::get(1, id).unwrap() - { - pending - } else { - unreachable!() - } + let Task::VerifyTransfer(pending) = new::PendingTasks::::get(1, id).unwrap(); + pending }; assert_eq!(pending, migrated_pending); }); diff --git a/pallets/creditcoin/src/migrations/v8.rs b/pallets/creditcoin/src/migrations/v8.rs index 6b111380e6..14deb2d170 100644 --- a/pallets/creditcoin/src/migrations/v8.rs +++ b/pallets/creditcoin/src/migrations/v8.rs @@ -3,8 +3,9 @@ use super::{AccountIdOf, BlockNumberOf, HashOf, Migrate, MomentOf, PhantomData}; use crate::types::CollectedCoinsStruct; -use super::v6::Task as OldTask; -use crate::{AddressId, Config, TaskId, UnverifiedCollectedCoins, UnverifiedTransfer}; +use crate::migrations::v6::Task as OldTask; + +use crate::{AddressId, Config, TaskId, UnverifiedTransfer}; use crate::{CollectedCoinsId, ExternalTxId}; use frame_support::storage_alias; use frame_support::weights::Weight; @@ -77,7 +78,7 @@ impl Migrate for Migration { to: y.to, amount: y.amount, tx_id: y.tx_id, - contract_type: crate::types::ContractType::GCRE, + contract_type: crate::types::collect_coins::ContractType::GCRE, }) }, ); @@ -99,16 +100,6 @@ impl Migrate for Migration { Some(crate::types::Task::VerifyTransfer(new)) }, - OldTask::CollectCoins(pending) => { - let new = UnverifiedCollectedCoins { - to: pending.to, - tx_id: pending.tx_id, - contract: pending.contract, - contract_type: crate::types::ContractType::GCRE, - }; - - Some(crate::types::Task::CollectCoins(new)) - }, } }, ); @@ -119,14 +110,12 @@ impl Migrate for Migration { #[cfg(test)] mod tests { - use crate::helpers::extensions::IntoBounded; use pallet_offchain_task_scheduler::tasks::TaskV2; use super::*; use crate::{ - migrations::v6::OldUnverifiedCollectedCoins, mock::{self, ExtBuilder, Test}, - types::{test::create_unverified_transfer, ContractType}, + types::{collect_coins::ContractType, test::create_unverified_transfer}, Task, }; @@ -171,34 +160,6 @@ mod tests { }) } - #[test] - fn migrate_collect_coins() { - ExtBuilder::default().build_and_execute(|| { - let pending = OldUnverifiedCollectedCoins { - to: [0u8; 256].into_bounded(), - tx_id: [0u8; 256].into_bounded(), - contract: Default::default(), - }; - let id = TaskId::CollectCoins(crate::types::CollectedCoinsId::from( - TaskV2::::to_id(&pending), - )); - - PendingTasks::::insert(1u64, id.clone(), OldTask::from(pending.clone())); - - super::Migration::::new().migrate(); - - let Task::CollectCoins(migrated_pending) = new::PendingTasks::::get(1, id).unwrap() - else { - unreachable!() - }; - - assert_eq!(pending.to, migrated_pending.to); - assert_eq!(pending.tx_id, migrated_pending.tx_id); - assert_eq!(pending.contract, migrated_pending.contract); - assert_eq!(migrated_pending.contract_type, ContractType::GCRE); - }); - } - #[test] fn migrate_verify_transfer() { ExtBuilder::default().build_and_execute(|| { @@ -212,10 +173,8 @@ mod tests { super::Migration::::new().migrate(); - let Task::VerifyTransfer(migrated_pending) = new::PendingTasks::::get(1, id).unwrap() - else { - unreachable!() - }; + let Task::VerifyTransfer(migrated_pending) = + new::PendingTasks::::get(1, id).unwrap(); assert_eq!(pending, migrated_pending); }); diff --git a/pallets/creditcoin/src/ocw/rpc.rs b/pallets/creditcoin/src/ocw/rpc.rs index f37d793ec2..b1d7ac05ba 100644 --- a/pallets/creditcoin/src/ocw/rpc.rs +++ b/pallets/creditcoin/src/ocw/rpc.rs @@ -251,14 +251,6 @@ pub struct EthTransaction { } impl EthTransaction { - pub fn selector(&self) -> &[u8] { - &self.input.0[..4] - } - - pub fn is_input_empty(&self) -> bool { - self.input.0.len() <= 4 - } - pub fn input(&self) -> &[u8] { &self.input.0[4..] } diff --git a/pallets/creditcoin/src/ocw/tasks.rs b/pallets/creditcoin/src/ocw/tasks.rs index 02e1d5da1e..009abbd7b3 100644 --- a/pallets/creditcoin/src/ocw/tasks.rs +++ b/pallets/creditcoin/src/ocw/tasks.rs @@ -4,7 +4,6 @@ pub mod verify_transfer; use crate::ocw::errors::VerificationResult; use crate::types::Task; use crate::Config; -pub use sp_runtime::offchain::storage_lock::{BlockAndTime, Lockable, StorageLock}; pub(crate) trait OffchainVerification { type Output; @@ -35,9 +34,6 @@ where VerifyTransfer(unverified) => { unverified.forward_task(deadline).map(|c: crate::pallet::Call| c.into()) }, - CollectCoins(unverified) => { - unverified.forward_task(deadline).map(|c: crate::pallet::Call| c.into()) - }, } } } diff --git a/pallets/creditcoin/src/ocw/tasks/collect_coins.rs b/pallets/creditcoin/src/ocw/tasks/collect_coins.rs index 0fff4492d0..0280d895e0 100644 --- a/pallets/creditcoin/src/ocw/tasks/collect_coins.rs +++ b/pallets/creditcoin/src/ocw/tasks/collect_coins.rs @@ -1,29 +1,13 @@ -use crate::ocw::{ - self, - errors::{VerificationFailureCause, VerificationResult}, - rpc::{self, EthTransaction, EthTransactionReceipt}, - OffchainResult, ETH_CONFIRMATIONS, -}; -use crate::pallet::{Config as CreditcoinConfig, Pallet}; -use crate::{ - types::{Blockchain, ContractType, UnverifiedCollectedCoins}, - ExternalAddress, ExternalAmount, -}; -use core::default::Default; -use ethabi::{Function, Param, ParamType, StateMutability, Token}; -use ethereum_types::U64; -use frame_support::{ensure, RuntimeDebug}; +use crate::types::Blockchain; +use frame_support::RuntimeDebug; use hex_literal::hex; use parity_scale_codec::{Decode, Encode, MaxEncodedLen}; use scale_info::TypeInfo; use sp_core::H160; -use sp_runtime::SaturatedConversion; -#[cfg_attr(feature = "std", allow(unused_imports))] -use sp_std::prelude::*; #[derive(Clone, Encode, Decode, Eq, PartialEq, RuntimeDebug, TypeInfo, MaxEncodedLen)] pub struct DeployedContract { - pub address: sp_core::H160, + pub address: H160, pub chain: Blockchain, } @@ -34,1355 +18,7 @@ impl DeployedContract { impl Default for DeployedContract { fn default() -> Self { let contract_chain: Blockchain = DeployedContract::DEFAULT_CHAIN; - let contract_address: H160 = - sp_core::H160(hex!("a3EE21C306A700E682AbCdfe9BaA6A08F3820419")); + let contract_address: H160 = H160(hex!("a3EE21C306A700E682AbCdfe9BaA6A08F3820419")); Self { address: contract_address, chain: contract_chain } } } - -impl DeployedContract { - ///exchange has been deprecated, use burn instead - fn burn_vested_cc_abi() -> Function { - #[allow(deprecated)] - Function { - name: "burn".into(), - inputs: vec![Param { - name: "value".into(), - kind: ParamType::Uint(256), - internal_type: None, - }], - outputs: vec![Param { - name: "success".into(), - kind: ParamType::Bool, - internal_type: None, - }], - constant: Some(false), - state_mutability: StateMutability::NonPayable, - } - } -} - -pub fn validate_collect_coins( - external_address: &ExternalAddress, - receipt: &EthTransactionReceipt, - transaction: &EthTransaction, - eth_tip: U64, - contract_address: &H160, -) -> OffchainResult { - ensure!(receipt.is_success(), VerificationFailureCause::TaskFailed); - - let block_number = transaction.block_number.ok_or(VerificationFailureCause::TaskPending)?; - - let diff = (eth_tip) - .checked_sub(block_number) - .ok_or(VerificationFailureCause::TaskInFuture)?; - ensure!(diff.as_u64() >= ETH_CONFIRMATIONS, VerificationFailureCause::TaskUnconfirmed); - - if let Some(recipient) = &transaction.recipient { - ensure!(recipient == contract_address, VerificationFailureCause::IncorrectContract); - } else { - return Err(VerificationFailureCause::MissingReceiver.into()); - } - - if let Some(sender) = &transaction.sender { - ensure!(sender[..] == external_address[..], VerificationFailureCause::IncorrectSender) - } else { - return Err(VerificationFailureCause::MissingSender.into()); - } - - let transfer_fn = DeployedContract::burn_vested_cc_abi(); - ensure!(!transaction.is_input_empty(), VerificationFailureCause::EmptyInput); - - { - let selector = transaction.selector(); - if selector != transfer_fn.short_signature() { - log::error!( - "function selector mismatch, expected: {}, got: {}", - hex::encode(transfer_fn.short_signature()), - hex::encode(selector) - ); - return Err(VerificationFailureCause::AbiMismatch.into()); - } - } - - let inputs = transfer_fn.decode_input(transaction.input()).map_err(|e| { - log::error!("failed to decode inputs: {:?}", e); - VerificationFailureCause::AbiMismatch - })?; - - match inputs.get(0) { - Some(Token::Uint(value)) => Ok(ExternalAmount::from(value)), - _ => Err(VerificationFailureCause::IncorrectInputType.into()), - } -} - -impl Pallet { - ///Amount is saturated to u128, don't exchange more than u128::MAX at once. - pub fn verify_collect_coins_ocw( - u_cc: &UnverifiedCollectedCoins, - ) -> VerificationResult { - log::debug!("verifying OCW Collect Coins"); - let UnverifiedCollectedCoins { - to, - tx_id, - contract: DeployedContract { address, chain }, - contract_type, - } = u_cc; - let rpc_url = &chain.rpc_url()?; - let tx = ocw::eth_get_transaction(tx_id, rpc_url)?; - let tx_receipt = rpc::eth_get_transaction_receipt(tx_id, rpc_url)?; - let eth_tip = rpc::eth_get_block_number(rpc_url)?; - - let mut amount = validate_collect_coins(to, &tx_receipt, &tx, eth_tip, address)?; - - // GATE -> CTC is swapped 2:1 - if *contract_type == ContractType::GATE { - amount /= 2; - } - - let amount = amount.saturated_into::().saturated_into::(); - - Ok(amount) - } -} - -#[cfg(any(test, feature = "runtime-benchmarks"))] -pub(crate) mod testing_constants { - use super::{Blockchain, DeployedContract}; - - pub const CHAIN: Blockchain = DeployedContract::DEFAULT_CHAIN; -} - -#[cfg(test)] -pub(crate) mod tests { - - use super::*; - use crate::mock::{self, PendingRequestExt, RuntimeCall}; - use crate::types::ContractType; - use std::collections::HashMap; - - // txn.from has been overriden by 'generate_address_with_proof("collector")' - static RESPONSES: Lazy>> = Lazy::new(|| { - serde_json::from_slice(include_bytes!("../../tests/collectCoins.json")).unwrap() - }); - - static BLOCK_NUMBER: Lazy = Lazy::new(|| { - let responses = &*RESPONSES; - let bn = - responses["eth_getTransactionByHash"].result.clone().unwrap()["blockNumber"].clone(); - serde_json::from_value(bn).unwrap() - }); - - static BLOCK_NUMBER_STR: Lazy = Lazy::new(|| { - let responses = &*RESPONSES; - let bn = - responses["eth_getTransactionByHash"].result.clone().unwrap()["blockNumber"].clone(); - serde_json::from_value(bn).unwrap() - }); - - static VESTING_CONTRACT: Lazy = Lazy::new(|| { - let responses = &*RESPONSES; - let val = responses["eth_getTransactionByHash"].result.clone().unwrap()["to"].clone(); - let val: String = serde_json::from_value(val).unwrap(); - let vesting_contract = hex::decode(val.trim_start_matches("0x")).unwrap(); - H160::from(<[u8; 20]>::try_from(vesting_contract.as_slice()).unwrap()) - }); - - // txn.from has been overriden by 'generate_address_with_proof("collector")' - static FROM: Lazy = Lazy::new(|| { - let responses = &*RESPONSES; - let val = responses["eth_getTransactionByHash"].result.clone().unwrap()["from"].clone(); - serde_json::from_value(val).unwrap() - }); - - static INPUT: Lazy = Lazy::new(|| { - let responses = &*RESPONSES; - let val = responses["eth_getTransactionByHash"].result.clone().unwrap()["input"].clone(); - let val: String = serde_json::from_value(val).unwrap(); - let input_bytes = hex::decode(val.trim_start_matches("0x")).unwrap(); - input_bytes.into() - }); - - pub(crate) static TX_HASH: Lazy = Lazy::new(|| { - let responses = &*RESPONSES; - let val = responses["eth_getTransactionByHash"].result.clone().unwrap()["hash"].clone(); - serde_json::from_value(val).unwrap() - }); - - pub(crate) static RPC_RESPONSE_AMOUNT: Lazy = Lazy::new(|| { - let transfer_fn = DeployedContract::burn_vested_cc_abi(); - - let inputs = transfer_fn.decode_input(&(INPUT.0)[4..]).unwrap(); - - let amount = inputs.get(0).unwrap(); - if let Token::Uint(value) = amount { - ExternalAmount::from(value) - } else { - panic!("Not Token::Uint"); - } - }); - - use super::testing_constants::CHAIN; - use crate::helpers::extensions::HexToAddress; - use crate::helpers::non_paying_error; - use crate::mock::{ - roll_by_with_ocw, set_rpc_uri, AccountId, Balances, ExtBuilder, MockedRpcRequests, - OffchainState, RuntimeOrigin, RwLock, TaskScheduler, Test, - }; - use crate::ocw::tasks::TaskV2; - use crate::ocw::{ - errors::{OffchainError, VerificationFailureCause as Cause}, - rpc::{EthTransaction, EthTransactionReceipt}, - ETH_CONFIRMATIONS, - }; - use crate::tests::generate_address_with_proof; - use crate::types::{AddressId, CollectedCoinsId, CollectedCoinsStruct}; - use crate::{ocw::rpc::JsonRpcResponse, BurnDetails, ExternalAddress, ExternalTxId}; - use crate::{Pallet as Creditcoin, Task}; - use alloc::sync::Arc; - use assert_matches::assert_matches; - use frame_support::dispatch::Dispatchable; - use frame_support::{assert_noop, assert_ok, once_cell::sync::Lazy, traits::Currency}; - use frame_system::Pallet as System; - use frame_system::RawOrigin; - use pallet_offchain_task_scheduler::tasks::TaskScheduler as TaskSchedulerT; - use pallet_offchain_task_scheduler::Pallet as TaskSchedulerPallet; - use parity_scale_codec::Decode; - use sp_runtime::traits::{BadOrigin, IdentifyAccount}; - use sp_runtime::{ArithmeticError, TokenError}; - use std::convert::TryFrom; - - fn prepare_rpc_mocks() -> MockedRpcRequests { - let dummy_url = "dummy"; - let contract_chain = Creditcoin::::collect_coins_contract(); - set_rpc_uri(&contract_chain.chain, dummy_url); - - MockedRpcRequests::new(dummy_url, &TX_HASH, &BLOCK_NUMBER_STR, &RESPONSES) - } - - /// call from externalities context - pub(crate) fn mock_rpc_for_collect_coins(state: &Arc>) { - let mut rpcs = prepare_rpc_mocks(); - rpcs.mock_get_block_number(&mut state.write()); - } - - struct PassingCollectCoins { - to: ExternalAddress, - receipt: EthTransactionReceipt, - transaction: EthTransaction, - eth_tip: U64, - contract_address: H160, - } - - impl Default for PassingCollectCoins { - fn default() -> Self { - let base_height = *BLOCK_NUMBER; - let vesting_contract = *VESTING_CONTRACT; - let to = FROM.hex_to_address(); - let tx_from = H160::from(<[u8; 20]>::try_from(to.as_slice()).unwrap()); - - let mut transaction = EthTransaction::default(); - transaction.block_number = Some(base_height); - transaction.sender = Some(tx_from); - transaction.recipient = Some(vesting_contract); - transaction.set_input(&INPUT.0); - - Self { - to, - receipt: EthTransactionReceipt { status: Some(1u64.into()), ..Default::default() }, - transaction, - eth_tip: (base_height + ETH_CONFIRMATIONS), - contract_address: DeployedContract::default().address, - } - } - } - - impl PassingCollectCoins { - fn validate(self) -> OffchainResult { - let PassingCollectCoins { to, receipt, transaction, eth_tip, contract_address } = self; - super::validate_collect_coins(&to, &receipt, &transaction, eth_tip, &contract_address) - } - } - - fn assert_invalid(res: OffchainResult, cause: VerificationFailureCause) { - assert_matches!(res, Err(OffchainError::InvalidTask(c)) =>{ assert_eq!(c,cause); }); - } - - #[test] - fn valid() { - assert_matches!(PassingCollectCoins::default().validate(), Ok(_)); - } - - #[test] - fn txn_success() { - let mut pcc = PassingCollectCoins::default(); - pcc.receipt.status = Some(0u64.into()); - assert_invalid(pcc.validate(), Cause::TaskFailed); - } - - #[test] - fn pending() { - let mut transaction = EthTransaction::default(); - transaction.block_number = None; - let pcc = PassingCollectCoins { transaction, ..Default::default() }; - assert_invalid(pcc.validate(), Cause::TaskPending); - } - - #[test] - fn in_the_future() { - let pcc = PassingCollectCoins { eth_tip: 0u64.into(), ..Default::default() }; - assert_invalid(pcc.validate(), Cause::TaskInFuture); - } - - #[test] - fn unconfirmed() { - let mut pcc = PassingCollectCoins::default(); - pcc.eth_tip = pcc.transaction.block_number.unwrap(); - assert_invalid(pcc.validate(), Cause::TaskUnconfirmed); - } - - #[test] - fn missing_receiver() { - let mut pcc = PassingCollectCoins::default(); - pcc.transaction.recipient = None; - assert_invalid(pcc.validate(), Cause::MissingReceiver); - } - - #[test] - fn incorrect_contract() { - let mut pcc = PassingCollectCoins::default(); - let address = [0u8; 20]; - let address = H160::from(<[u8; 20]>::try_from(address.as_slice()).unwrap()); - pcc.transaction.recipient = Some(address); - assert_invalid(pcc.validate(), Cause::IncorrectContract); - } - - #[test] - fn missing_sender() { - let mut pcc = PassingCollectCoins::default(); - pcc.transaction.sender = None; - assert_invalid(pcc.validate(), Cause::MissingSender); - } - - #[test] - fn incorrect_sender() { - let mut pcc = PassingCollectCoins::default(); - let address = [0u8; 20]; - let address = H160::from(<[u8; 20]>::try_from(address.as_slice()).unwrap()); - pcc.transaction.sender = Some(address); - assert_invalid(pcc.validate(), Cause::IncorrectSender); - } - - #[test] - fn empty_input() { - let mut pcc = PassingCollectCoins::default(); - pcc.transaction.set_input(b""); - assert_invalid(pcc.validate(), Cause::EmptyInput); - } - - #[test] - fn amount_set() -> OffchainResult<()> { - let pcc = PassingCollectCoins::default(); - let PassingCollectCoins { to, receipt, transaction, eth_tip, contract_address } = pcc; - let amount = - super::validate_collect_coins(&to, &receipt, &transaction, eth_tip, &contract_address)?; - assert_eq!(amount, *RPC_RESPONSE_AMOUNT); - Ok(()) - } - - #[test] - fn fail_collect_coins_should_error_when_not_signed() { - let ext = ExtBuilder::default(); - let expected_collected_coins_id = - crate::CollectedCoinsId::new::(&CHAIN, &[0]); - - ext.build_offchain_and_execute_with_state(|_state, _pool| { - assert_noop!( - Creditcoin::::fail_task( - RuntimeOrigin::none(), - Test::unverified_transfer_deadline(), - expected_collected_coins_id.clone().into(), - Cause::AbiMismatch, - ), - BadOrigin - ); - }); - } - - #[test] - fn fail_collect_coins_should_error_when_no_authority() { - let ext = ExtBuilder::default(); - let (molly, _, _, _) = generate_address_with_proof("malicious"); - let expected_collected_coins_id = - crate::CollectedCoinsId::new::(&CHAIN, &[0]); - - ext.build_offchain_and_execute_with_state(|_state, _pool| { - assert_noop!( - Creditcoin::::fail_task( - RuntimeOrigin::signed(molly), - Test::unverified_transfer_deadline(), - expected_collected_coins_id.clone().into(), - Cause::AbiMismatch, - ), - crate::Error::::InsufficientAuthority - ); - }); - } - - #[test] - fn fail_collect_coins_should_fail_when_transfer_has_already_been_registered() { - let mut ext = ExtBuilder::default(); - let acct_pubkey = ext.generate_authority(); - let auth = AccountId::from(acct_pubkey.into_account().0); - - ext.build_offchain_and_execute_with_state(|_state, _pool| { - System::::set_block_number(1); - - let (acc, addr, sign, _) = generate_address_with_proof("collector"); - - assert_ok!(Creditcoin::::register_address( - RuntimeOrigin::signed(acc), - CHAIN, - addr, - sign - )); - - let deadline = Test::unverified_transfer_deadline(); - - let pcc = PassingCollectCoins::default(); - - let collected_coins = CollectedCoinsStruct { - to: AddressId::new::(&CHAIN, &pcc.to[..]), - amount: RPC_RESPONSE_AMOUNT.as_u128(), - tx_id: TX_HASH.hex_to_address(), - contract_type: ContractType::GCRE, - }; - let collected_coins_id = - crate::CollectedCoinsId::new::(&CHAIN, &collected_coins.tx_id); - - assert_ok!(Creditcoin::::persist_task_output( - RuntimeOrigin::signed(auth.clone()), - deadline, - (collected_coins_id.clone(), collected_coins).into(), - )); - - assert_noop!( - Creditcoin::::fail_task( - RuntimeOrigin::signed(auth), - Test::unverified_transfer_deadline(), - collected_coins_id.into(), - Cause::AbiMismatch, - ), - crate::Error::::CollectCoinsAlreadyRegistered - ); - }); - } - - #[test] - fn fail_collect_coins_emits_events() { - let mut ext = ExtBuilder::default(); - let acct_pubkey = ext.generate_authority(); - let auth = AccountId::from(acct_pubkey.into_account().0); - let expected_collected_coins_id = - crate::CollectedCoinsId::new::(&CHAIN, &[0]); - - ext.build_offchain_and_execute_with_state(|_state, _pool| { - System::::set_block_number(1); - - assert_ok!(Creditcoin::::fail_task( - RuntimeOrigin::signed(auth), - Test::unverified_transfer_deadline(), - expected_collected_coins_id.clone().into(), - Cause::AbiMismatch, - )); - - let event = System::::events().pop().expect("an event").event; - assert_matches!( - event, - crate::mock::RuntimeEvent::Creditcoin(crate::Event::::CollectCoinsFailedVerification(collected_coins_id, cause)) => { - assert_eq!(collected_coins_id, expected_collected_coins_id); - assert_eq!(cause, Cause::AbiMismatch); - } - ); - }); - } - - #[test] - fn ocw_fail_collect_coins_works() { - let mut ext = ExtBuilder::default(); - let acct_pubkey = ext.generate_authority(); - let expected_collected_coins_id = - crate::CollectedCoinsId::new::(&CHAIN, &[0]); - ext.build_offchain_and_execute_with_state(|_state, pool| { - crate::mock::roll_to(1); - let call = crate::Call::::fail_task { - task_id: expected_collected_coins_id.into(), - cause: Cause::AbiMismatch, - deadline: Test::unverified_transfer_deadline(), - }; - assert_ok!(TaskSchedulerPallet::::offchain_signed_tx(acct_pubkey.into(), |_| { - call.clone().into() - },)); - crate::mock::roll_to(2); - - assert_matches!(pool.write().transactions.pop(), Some(tx) => { - let tx = crate::mock::Extrinsic::decode(&mut &*tx).unwrap(); - assert_eq!(tx.call, crate::mock::RuntimeCall::Creditcoin(call)); - }); - }); - } - - #[test] - fn persist_collect_coins() { - let mut ext = ExtBuilder::default(); - let acct_pubkey = ext.generate_authority(); - let auth = AccountId::from(acct_pubkey.into_account().0); - ext.build_offchain_and_execute_with_state(|_, _| { - System::::set_block_number(1); - - let (acc, addr, sign, _) = generate_address_with_proof("collector"); - - assert_ok!(Creditcoin::::register_address( - RuntimeOrigin::signed(acc.clone()), - CHAIN, - addr, - sign - )); - - let deadline = Test::unverified_transfer_deadline(); - - let pcc = PassingCollectCoins::default(); - - let collected_coins = CollectedCoinsStruct { - to: AddressId::new::(&CHAIN, &pcc.to[..]), - amount: RPC_RESPONSE_AMOUNT.as_u128(), - tx_id: TX_HASH.hex_to_address(), - contract_type: ContractType::GCRE, - }; - - let collected_coins_id = CollectedCoinsId::new::(&CHAIN, &collected_coins.tx_id); - - let balance = >::total_balance; - - let pre_authority_balance = balance(&auth); - let pre_collector_balance = balance(&acc); - - assert_ok!(Creditcoin::::persist_task_output( - RuntimeOrigin::signed(auth.clone()), - deadline, - (collected_coins_id.clone(), collected_coins.clone()).into(), - )); - - let event = >::events().pop().expect("an event").event; - - assert_matches!( - event, - crate::mock::RuntimeEvent::Creditcoin(crate::Event::::CollectedCoinsMinted(id, item)) => { - assert_eq!(id, collected_coins_id); - assert_eq!(item, collected_coins); - } - ); - //do not mint into authority - assert_eq!(pre_authority_balance, balance(&auth)); - // assert on deposit - assert_eq!(pre_collector_balance.saturating_add(collected_coins.amount), balance(&acc)); - }); - } - - #[test] - fn persist_unregistered_address() { - let mut ext = ExtBuilder::default(); - let acct_pubkey = ext.generate_authority(); - let auth = AccountId::from(acct_pubkey.into_account().0); - ext.build_offchain_and_execute_with_state(|_, _| { - let pcc = PassingCollectCoins::default(); - - let collected_coins = CollectedCoinsStruct { - to: AddressId::new::(&CHAIN, &pcc.to[..]), - amount: RPC_RESPONSE_AMOUNT.as_u128(), - tx_id: TX_HASH.hex_to_address(), - contract_type: ContractType::GCRE, - }; - let collected_coins_id = CollectedCoinsId::new::(&CHAIN, &collected_coins.tx_id); - - let deadline = Test::unverified_transfer_deadline(); - - assert_noop!( - Creditcoin::::persist_task_output( - RuntimeOrigin::signed(auth), - deadline, - (collected_coins_id, collected_coins).into(), - ), - crate::Error::::NonExistentAddress - ); - }); - } - - #[test] - fn persist_more_than_max_balance_should_error() { - let mut ext = ExtBuilder::default(); - let acct_pubkey = ext.generate_authority(); - let auth = AccountId::from(acct_pubkey.into_account().0); - ext.build_offchain_and_execute_with_state(|_, _| { - let (acc, addr, sign, _) = generate_address_with_proof("collector"); - assert_ok!(Creditcoin::::register_address( - RuntimeOrigin::signed(acc), - CHAIN, - addr, - sign - )); - - let pcc = PassingCollectCoins::default(); - - // lower free balance so that collect coins would overflow - let cash = >::minimum_balance(); - >::make_free_balance_be(&auth, cash); - - let collected_coins_id = - crate::CollectedCoinsId::new::(&CHAIN, &TX_HASH.hex_to_address()); - let collected_coins = CollectedCoinsStruct { - to: AddressId::new::(&CHAIN, &pcc.to[..]), - amount: u128::MAX, - tx_id: TX_HASH.hex_to_address(), - contract_type: ContractType::GCRE, - }; - - assert_noop!( - Creditcoin::::persist_task_output( - RuntimeOrigin::signed(auth), - Test::unverified_transfer_deadline(), - (collected_coins_id, collected_coins).into(), - ), - ArithmeticError::Overflow - ); - }); - } - - #[test] - fn request_collect_coins_should_fail_when_not_signed() { - let ext = ExtBuilder::default(); - ext.build_offchain_and_execute_with_state(|_, _pool| { - let (_, addr, _, _) = generate_address_with_proof("collector"); - - assert_noop!( - Creditcoin::::request_collect_coins( - RuntimeOrigin::none(), - addr, - TX_HASH.hex_to_address(), - ), - BadOrigin - ); - }); - } - - #[test] - fn request_persisted_not_reentrant() { - let mut ext = ExtBuilder::default(); - let acct_pubkey = ext.generate_authority(); - let auth = AccountId::from(acct_pubkey.into_account().0); - ext.build_offchain_and_execute_with_state(|_, _pool| { - let (acc, addr, sign, _) = generate_address_with_proof("collector"); - - assert_ok!(Creditcoin::::register_address( - RuntimeOrigin::signed(acc.clone()), - CHAIN, - addr.clone(), - sign - )); - - let collected_coins = CollectedCoinsStruct { - to: AddressId::new::(&CHAIN, &addr[..]), - amount: RPC_RESPONSE_AMOUNT.as_u128(), - tx_id: TX_HASH.hex_to_address(), - contract_type: ContractType::GCRE, - }; - let collected_coins_id = CollectedCoinsId::new::(&CHAIN, &collected_coins.tx_id); - - assert_ok!(Creditcoin::::persist_task_output( - RuntimeOrigin::signed(auth), - Test::unverified_transfer_deadline(), - (collected_coins_id, collected_coins).into(), - )); - - roll_by_with_ocw(1); - - assert_noop!( - Creditcoin::::request_collect_coins( - RuntimeOrigin::signed(acc.clone()), - addr.clone(), - TX_HASH.hex_to_address(), - ), - crate::Error::::CollectCoinsAlreadyRegistered - ); - - // trying the same with v2 - let contract = BurnDetails::GCRE(addr, TX_HASH.hex_to_address()); - assert_noop!( - Creditcoin::::request_collect_coins_v2(RuntimeOrigin::signed(acc), contract,), - crate::Error::::CollectCoinsAlreadyRegistered - ); - }); - } - - #[test] - fn request_pending_not_reentrant() { - let mut ext = ExtBuilder::default(); - ext.generate_authority(); - ext.build_offchain_and_execute_with_state(|_, _| { - System::::set_block_number(1); - - let (acc, addr, sign, _) = generate_address_with_proof("collector"); - - assert_ok!(Creditcoin::::register_address( - RuntimeOrigin::signed(acc.clone()), - CHAIN, - addr.clone(), - sign - )); - - assert_ok!(Creditcoin::::request_collect_coins( - RuntimeOrigin::signed(acc.clone()), - addr.clone(), - TX_HASH.hex_to_address() - )); - - let collected_coins_id = - CollectedCoinsId::new::(&CHAIN, TX_HASH.hex_to_address().as_slice()); - - let event = >::events().pop().expect("an event").event; - assert_matches!( - event, - crate::mock::RuntimeEvent::Creditcoin(crate::Event::::CollectCoinsRegistered(collect_coins_id, pending)) => { - assert_eq!(collect_coins_id, collected_coins_id); - - let id = TaskV2::::to_id(&pending); - assert!( TaskScheduler::is_scheduled( &Test::unverified_transfer_deadline(), &id)); - - let UnverifiedCollectedCoins { to, tx_id, .. } = pending; - assert_eq!(to, addr); - assert_eq!(tx_id, TX_HASH.hex_to_address()); - } - ); - - assert_noop!( - Creditcoin::::request_collect_coins( - RuntimeOrigin::signed(acc.clone()), - addr.clone(), - TX_HASH.hex_to_address(), - ), - crate::Error::::CollectCoinsAlreadyRegistered - ); - - assert!(Creditcoin::::collected_coins(collected_coins_id).is_none()); - - // trying the same with v2 - let contract = BurnDetails::GCRE(addr, TX_HASH.hex_to_address()); - assert_noop!( - Creditcoin::::request_collect_coins_v2( - RuntimeOrigin::signed(acc), - contract, - ), - crate::Error::::CollectCoinsAlreadyRegistered - ); - }); - } - - #[test] - fn request_address_not_registered() { - let ext = ExtBuilder::default(); - ext.build_offchain_and_execute_with_state(|_, _| { - let (acc, addr, _, _) = generate_address_with_proof("collector"); - - assert_noop!( - Creditcoin::::request_collect_coins( - RuntimeOrigin::signed(acc.clone()), - addr.clone(), - TX_HASH.hex_to_address(), - ), - crate::Error::::NonExistentAddress - ); - - // trying the same with v2 - let contract = BurnDetails::GCRE(addr, TX_HASH.hex_to_address()); - assert_noop!( - Creditcoin::::request_collect_coins_v2(RuntimeOrigin::signed(acc), contract,), - crate::Error::::NonExistentAddress - ); - }); - } - - #[test] - fn request_not_owner() { - let ext = ExtBuilder::default(); - ext.build_offchain_and_execute_with_state(|_, _| { - let (acc, addr, sign, _) = generate_address_with_proof("collector"); - let (molly, _, _, _) = generate_address_with_proof("malicious"); - - assert_ok!(Creditcoin::::register_address( - RuntimeOrigin::signed(acc), - CHAIN, - addr.clone(), - sign - )); - - assert_noop!( - Creditcoin::::request_collect_coins( - RuntimeOrigin::signed(molly.clone()), - addr.clone(), - TX_HASH.hex_to_address(), - ), - crate::Error::::NotAddressOwner - ); - - // trying the same with v2 - let contract = BurnDetails::GCRE(addr, TX_HASH.hex_to_address()); - assert_noop!( - Creditcoin::::request_collect_coins_v2( - RuntimeOrigin::signed(molly), - contract, - ), - crate::Error::::NotAddressOwner - ); - }); - } - - #[test] - fn persist_not_authority() { - let ext = ExtBuilder::default(); - ext.build_offchain_and_execute_with_state(|_, _| { - let (molly, addr, _, _) = generate_address_with_proof("malicious"); - - let collected_coins = CollectedCoinsStruct { - to: AddressId::new::(&CHAIN, &addr[..]), - amount: RPC_RESPONSE_AMOUNT.as_u128(), - tx_id: TX_HASH.hex_to_address(), - contract_type: ContractType::GCRE, - }; - let collected_coins_id = CollectedCoinsId::new::(&CHAIN, &collected_coins.tx_id); - - assert_noop!( - Creditcoin::::persist_task_output( - RuntimeOrigin::signed(molly), - Test::unverified_transfer_deadline(), - (collected_coins_id, collected_coins).into(), - ), - crate::Error::::InsufficientAuthority - ); - }); - } - - #[test] - fn persist_is_submitted() { - let mut ext = ExtBuilder::default(); - ext.generate_authority(); - ext.build_offchain_and_execute_with_state(|state, pool| { - mock_rpc_for_collect_coins(&state); - - let (acc, addr, sign, _) = generate_address_with_proof("collector"); - - assert_ok!(Creditcoin::::register_address( - RuntimeOrigin::signed(acc.clone()), - CHAIN, - addr.clone(), - sign - )); - - assert_ok!(Creditcoin::::request_collect_coins( - RuntimeOrigin::signed(acc), - addr.clone(), - TX_HASH.hex_to_address() - )); - - let deadline = Test::unverified_transfer_deadline(); - - roll_by_with_ocw(1); - - assert!(!pool.read().transactions.is_empty()); - - let collected_coins = CollectedCoinsStruct { - to: AddressId::new::(&CHAIN, &addr[..]), - amount: RPC_RESPONSE_AMOUNT.as_u128(), - tx_id: TX_HASH.hex_to_address(), - contract_type: ContractType::GCRE, - }; - let collected_coins_id = CollectedCoinsId::new::(&CHAIN, &collected_coins.tx_id); - - let call = crate::Call::::persist_task_output { - task_output: (collected_coins_id, collected_coins).into(), - deadline, - }; - - assert_matches!(pool.write().transactions.pop(), Some(tx) => { - let tx = crate::mock::Extrinsic::decode(&mut &*tx).unwrap(); - assert_eq!(tx.call, crate::mock::RuntimeCall::Creditcoin(call)); - }); - }); - } - - #[test] - fn request_collect_coins_v2_will_submit_a_persist_task_output_call() { - let mut ext = ExtBuilder::default(); - ext.generate_authority(); - ext.build_offchain_and_execute_with_state(|state, pool| { - mock_rpc_for_collect_coins(&state); - - let (acc, addr, sign, _) = generate_address_with_proof("collector"); - - assert_ok!(Creditcoin::::register_address( - RuntimeOrigin::signed(acc.clone()), - CHAIN, - addr.clone(), - sign - )); - - let contract = BurnDetails::GCRE(addr.clone(), TX_HASH.hex_to_address()); - assert_ok!(Creditcoin::::request_collect_coins_v2( - RuntimeOrigin::signed(acc), - contract, - ),); - - let deadline = Test::unverified_transfer_deadline(); - - roll_by_with_ocw(1); - - assert!(!pool.read().transactions.is_empty()); - - let collected_coins = CollectedCoinsStruct { - to: AddressId::new::(&CHAIN, &addr[..]), - amount: RPC_RESPONSE_AMOUNT.as_u128(), - tx_id: TX_HASH.hex_to_address(), - contract_type: ContractType::GCRE, - }; - let collected_coins_id = CollectedCoinsId::new::(&CHAIN, &collected_coins.tx_id); - - let call = crate::Call::::persist_task_output { - task_output: (collected_coins_id, collected_coins).into(), - deadline, - }; - - assert_matches!(pool.write().transactions.pop(), Some(tx) => { - let tx = crate::mock::Extrinsic::decode(&mut &*tx).unwrap(); - assert_eq!(tx.call, crate::mock::RuntimeCall::Creditcoin(call)); - }); - }); - } - - #[test] - fn persist_not_reentrant() { - let mut ext = ExtBuilder::default(); - let acct_pubkey = ext.generate_authority(); - let auth = AccountId::from(acct_pubkey.into_account().0); - ext.build_offchain_and_execute_with_state(|_, _| { - let (acc, addr, sign, _) = generate_address_with_proof("collector"); - - assert_ok!(Creditcoin::::register_address( - RuntimeOrigin::signed(acc), - CHAIN, - addr.clone(), - sign - )); - - let collected_coins = CollectedCoinsStruct { - to: AddressId::new::(&CHAIN, &addr[..]), - amount: RPC_RESPONSE_AMOUNT.as_u128(), - tx_id: TX_HASH.hex_to_address(), - contract_type: ContractType::GCRE, - }; - let collected_coins_id = CollectedCoinsId::new::(&CHAIN, &collected_coins.tx_id); - - assert_ok!(Creditcoin::::persist_task_output( - RuntimeOrigin::signed(auth.clone()), - Test::unverified_transfer_deadline(), - (collected_coins_id.clone(), collected_coins.clone()).into(), - )); - - assert_noop!( - Creditcoin::::persist_task_output( - RuntimeOrigin::signed(auth), - Test::unverified_transfer_deadline(), - (collected_coins_id, collected_coins).into(), - ), - non_paying_error(crate::Error::::CollectCoinsAlreadyRegistered) - ); - }); - } - - #[test] - fn unverified_collect_coins_are_removed() { - let mut ext = ExtBuilder::default(); - ext.generate_authority(); - ext.build_offchain_and_execute_with_state(|state, _| { - mock_rpc_for_collect_coins(&state); - - let (acc, addr, sign, _) = generate_address_with_proof("collector"); - - assert_ok!(Creditcoin::::register_address( - RuntimeOrigin::signed(acc.clone()), - CHAIN, - addr.clone(), - sign - )); - - assert_ok!(Creditcoin::::request_collect_coins( - RuntimeOrigin::signed(acc.clone()), - addr.clone(), - TX_HASH.hex_to_address() - )); - let deadline = Test::unverified_transfer_deadline(); - - roll_by_with_ocw(deadline); - - let collected_coins_id = - CollectedCoinsId::new::(&CHAIN, TX_HASH.hex_to_address().as_slice()) - .into_inner(); - - roll_by_with_ocw(1); - - assert!(!TaskScheduler::is_scheduled(&deadline, &collected_coins_id)); - - // trying the same with v2 - let contract = BurnDetails::GCRE(addr, TX_HASH.hex_to_address()); - assert_ok!(Creditcoin::::request_collect_coins_v2( - RuntimeOrigin::signed(acc), - contract, - ),); - - roll_by_with_ocw(deadline); - let collected_coins_id = - CollectedCoinsId::new::(&CHAIN, TX_HASH.hex_to_address().as_slice()) - .into_inner(); - - roll_by_with_ocw(1); - assert!(!TaskScheduler::is_scheduled(&deadline, &collected_coins_id)); - }); - } - - #[test] - fn owner_credited() { - let mut ext = ExtBuilder::default(); - let acct_pubkey = ext.generate_authority(); - let auth = AccountId::from(acct_pubkey.into_account().0); - ext.build_offchain_and_execute_with_state(|_, _| { - let (acc, addr, sign, _) = generate_address_with_proof("collector"); - - let collected_coins = CollectedCoinsStruct { - to: AddressId::new::(&CHAIN, &addr[..]), - amount: RPC_RESPONSE_AMOUNT.as_u128(), - tx_id: TX_HASH.hex_to_address(), - contract_type: ContractType::GCRE, - }; - let collected_coins_id = CollectedCoinsId::new::(&CHAIN, &collected_coins.tx_id); - - assert_ok!(Creditcoin::::register_address( - RuntimeOrigin::signed(acc.clone()), - CHAIN, - addr, - sign - )); - - assert_ok!(Creditcoin::::persist_task_output( - RuntimeOrigin::signed(auth.clone()), - Test::unverified_transfer_deadline(), - (collected_coins_id, collected_coins.clone()).into(), - )); - - assert_eq!( - frame_system::pallet::Account::::get(&acc).data.free, - collected_coins.amount - ); - }); - } - - #[test] - fn selector_mismatch() { - let ext = ExtBuilder::default(); - ext.build_offchain_and_execute_with_state(|state, _| { - mock_rpc_for_collect_coins(&state); - - let (_, to, ..) = generate_address_with_proof("collector"); - let tx_id = &TX_HASH.hex_to_address(); - - let rpc_url = &CHAIN.rpc_url().unwrap(); - let mut tx = rpc::eth_get_transaction(tx_id, rpc_url).unwrap(); - let tx_receipt = rpc::eth_get_transaction_receipt(tx_id, rpc_url).unwrap(); - let eth_tip = rpc::eth_get_block_number(rpc_url).unwrap(); - let PassingCollectCoins { contract_address, .. } = Default::default(); - validate_collect_coins(&to, &tx_receipt, &tx, eth_tip, &contract_address) - .expect("valid"); - // Forged selector - tx.set_input(b"ffffffff"); - assert_matches!( - validate_collect_coins(&to, &tx_receipt, &tx, eth_tip, &contract_address), - Err(OffchainError::InvalidTask(VerificationFailureCause::AbiMismatch)) - ); - }); - } - - #[test] - fn set_collect_coins_only_as_root() { - let mut ext = ExtBuilder::default(); - let acct_pubkey = ext.generate_authority(); - let _auth = AccountId::from(acct_pubkey.into_account().0); - ext.build_and_execute(|| { - let contract = DeployedContract { - address: sp_core::H160(hex!("aaaaabbbbbcccccdddddeeeeefffff08F3820419")), - chain: Blockchain::Rinkeby, - }; - assert_ok!(Creditcoin::::set_collect_coins_contract( - RawOrigin::Root.into(), - contract.clone() - )); - let from_storage = Creditcoin::::collect_coins_contract(); - assert_eq!(contract, from_storage); - assert_ne!(from_storage, DeployedContract::default()); - - let (acc, ..) = generate_address_with_proof("somebody"); - - assert_noop!( - Creditcoin::::set_collect_coins_contract( - RawOrigin::Signed(acc).into(), - contract.clone() - ), - BadOrigin - ); - - assert_noop!( - Creditcoin::::set_collect_coins_contract(RawOrigin::None.into(), contract), - BadOrigin - ); - }); - } - - #[test] - fn gcrecontract_value_query_is_default() { - let contract = DeployedContract::default(); - let ext = ExtBuilder::default(); - ext.build_and_execute(|| { - let value_query = Creditcoin::::collect_coins_contract(); - assert_eq!(contract, value_query); - }); - } - - #[test] - fn persist_minimum_existential_deposit_errors() { - let mut ext = ExtBuilder::default(); - let acct_pubkey = ext.generate_authority(); - let auth = AccountId::from(acct_pubkey.into_account().0); - ext.build_offchain_and_execute_with_state(|_, _| { - let (acc, addr, sign, _) = generate_address_with_proof("collector"); - - let collected_coins = CollectedCoinsStruct { - to: AddressId::new::(&CHAIN, &addr[..]), - amount: 1u128, - tx_id: TX_HASH.hex_to_address(), - contract_type: ContractType::GCRE, - }; - let collected_coins_id = CollectedCoinsId::new::(&CHAIN, &collected_coins.tx_id); - - assert_ok!(Creditcoin::::register_address( - RuntimeOrigin::signed(acc.clone()), - CHAIN, - addr, - sign - )); - - assert_eq!(Balances::total_balance(&acc), 0); - - assert_noop!( - Creditcoin::::persist_task_output( - RuntimeOrigin::signed(auth.clone()), - Test::unverified_transfer_deadline(), - (collected_coins_id, collected_coins).into(), - ), - TokenError::BelowMinimum - ); - }); - } - - #[test] - fn transaction_not_found() { - ExtBuilder::default().build_offchain_and_execute_with_state(|state, _| { - let mut rpcs = prepare_rpc_mocks(); - rpcs.get_transaction.set_empty_response(); - rpcs.mock_get_transaction(&mut state.write()); - - let (_, addr, _, _) = generate_address_with_proof("collector"); - let cc = UnverifiedCollectedCoins { - to: addr, - tx_id: TX_HASH.hex_to_address(), - contract: DeployedContract::default(), - contract_type: ContractType::GCRE, - }; - assert_matches!( - Creditcoin::::verify_collect_coins_ocw(&cc), - Err(OffchainError::InvalidTask(VerificationFailureCause::TransactionNotFound)) - ); - }); - } - - #[test] - fn unverified_collect_coins_is_removed_after_failing_the_task() { - let mut ext = ExtBuilder::default(); - let acct_pubkey = ext.generate_authority(); - let auth = AccountId::from(acct_pubkey.into_account().0); - ext.build_offchain_and_execute_with_state(|state, _| { - let mut rpcs = prepare_rpc_mocks(); - rpcs.get_transaction.set_empty_response(); - rpcs.mock_get_transaction(&mut state.write()); - - let (_, addr, _, _) = generate_address_with_proof("collector"); - - let cc = UnverifiedCollectedCoins { - to: addr, - tx_id: TX_HASH.hex_to_address(), - contract: DeployedContract::default(), - contract_type: ContractType::GCRE, - }; - - let id = TaskV2::::to_id(&cc); - let deadline = TaskScheduler::deadline(); - - TaskScheduler::insert(&deadline, &id, Task::CollectCoins(cc.clone())); - - let call = - TaskV2::::persistence_call(&cc, TaskScheduler::deadline(), &id).unwrap(); - assert!(matches!(call, crate::Call::fail_task { .. })); - let c = RuntimeCall::from(call); - - assert_ok!(c.dispatch(RuntimeOrigin::signed(auth))); - assert!(!TaskScheduler::is_scheduled(&TaskScheduler::deadline(), &id)); - }); - } - - #[test] - fn unverified_collect_coins_is_removed_after_persisting_the_task() { - let mut ext = ExtBuilder::default(); - let acct_pubkey = ext.generate_authority(); - let auth = AccountId::from(acct_pubkey.into_account().0); - ext.build_offchain_and_execute_with_state(|state, _| { - mock_rpc_for_collect_coins(&state); - - let (acc, addr, sign, _) = generate_address_with_proof("collector"); - - assert_ok!(Creditcoin::::register_address( - RuntimeOrigin::signed(acc), - CHAIN, - addr.clone(), - sign - )); - - let cc = UnverifiedCollectedCoins { - to: addr, - tx_id: TX_HASH.hex_to_address(), - contract: DeployedContract::default(), - contract_type: ContractType::GCRE, - }; - - let id = TaskV2::::to_id(&cc); - let deadline = TaskScheduler::deadline(); - - TaskScheduler::insert(&deadline, &id, Task::CollectCoins(cc.clone())); - - let call = - TaskV2::::persistence_call(&cc, TaskScheduler::deadline(), &id).unwrap(); - assert!(matches!(call, crate::Call::persist_task_output { .. })); - let c = RuntimeCall::from(call); - - assert_ok!(c.dispatch(RuntimeOrigin::signed(auth))); - assert!(!TaskScheduler::is_scheduled(&TaskScheduler::deadline(), &id)); - }); - } - - #[test] - fn collect_coins_v2_gate_token_persist_is_submitted_and_amount_is_2_to_1() { - let mut ext = ExtBuilder::default(); - let acct_pubkey = ext.generate_authority(); - let auth = AccountId::from(acct_pubkey.into_account().0); - ext.build_offchain_and_execute_with_state(|state, pool| { - mock_rpc_for_collect_coins(&state); - - let (acc, addr, sign, _) = generate_address_with_proof("collector"); - - let _ = as Currency< - ::AccountId, - >>::deposit_creating(&auth, 1000000000000000000); // I hope this is enough - - assert_ok!(Creditcoin::::set_gate_faucet(RawOrigin::Root.into(), auth)); - - assert_ok!(Creditcoin::::register_address( - RuntimeOrigin::signed(acc.clone()), - CHAIN, - addr.clone(), - sign - )); - - let gate_contract = crate::BurnDetails::GATE(addr.clone(), TX_HASH.hex_to_address()); - - assert_ok!(Creditcoin::::request_collect_coins_v2( - RuntimeOrigin::signed(acc), - gate_contract - )); - - let deadline = Test::unverified_transfer_deadline(); - - roll_by_with_ocw(1); - - assert!(!pool.read().transactions.is_empty()); - - // The only important part of this test - let amount = RPC_RESPONSE_AMOUNT.as_u128(); - let amount = amount.saturating_div(2); - - let collected_coins = CollectedCoinsStruct { - to: AddressId::new::(&CHAIN, &addr[..]), - amount, - tx_id: TX_HASH.hex_to_address(), - contract_type: ContractType::GATE, - }; - let collected_coins_id = CollectedCoinsId::new::(&CHAIN, &collected_coins.tx_id); - - let call = crate::Call::::persist_task_output { - task_output: (collected_coins_id, collected_coins).into(), - deadline, - }; - - assert_matches!(pool.write().transactions.pop(), Some(tx) => { - let tx = crate::mock::Extrinsic::decode(&mut &*tx).unwrap(); - assert_eq!(tx.call, crate::mock::RuntimeCall::Creditcoin(call)); - }); - }); - } - - #[test] - fn request_collect_coins_v2_should_error_when_not_signed() { - ExtBuilder::default().build_and_execute(|| { - System::::set_block_number(1); - - let external_addr = ExternalAddress::default(); - let tx_id = ExternalTxId::default(); - let contract = BurnDetails::GATE(external_addr, tx_id); - - assert_noop!( - Creditcoin::::request_collect_coins_v2(RuntimeOrigin::none(), contract), - BadOrigin - ); - }); - } - - #[test] - fn request_collect_coins_v2_should_error_when_faucet_not_set() { - ExtBuilder::default().build_and_execute(|| { - System::::set_block_number(1); - - let who = AccountId::new([0; 32]); - let external_addr = ExternalAddress::default(); - let tx_id = ExternalTxId::default(); - let contract = BurnDetails::GATE(external_addr, tx_id); - - assert_noop!( - Creditcoin::::request_collect_coins_v2(RuntimeOrigin::signed(who), contract), - crate::Error::::BurnGATEFaucetNotSet - ); - }); - } -} diff --git a/pallets/creditcoin/src/ocw/tasks/verify_transfer.rs b/pallets/creditcoin/src/ocw/tasks/verify_transfer.rs index 0b3c23c62f..6a19764d9c 100644 --- a/pallets/creditcoin/src/ocw/tasks/verify_transfer.rs +++ b/pallets/creditcoin/src/ocw/tasks/verify_transfer.rs @@ -2,8 +2,10 @@ use ethabi::{Function, Param, ParamType, StateMutability, Token}; use ethereum_types::U64; use frame_support::ensure; use frame_system::pallet_prelude::BlockNumberFor; + use sp_core::U256; use sp_runtime::traits::UniqueSaturatedFrom; + #[cfg(not(feature = "std"))] use sp_std::prelude::*; diff --git a/pallets/creditcoin/src/tests.rs b/pallets/creditcoin/src/tests.rs index 755f79c695..719fe56b9d 100644 --- a/pallets/creditcoin/src/tests.rs +++ b/pallets/creditcoin/src/tests.rs @@ -2923,32 +2923,11 @@ fn exercise_weightinfo_functions() { let result = super::weights::WeightInfo::::register_deal_order(); assert!(result.ref_time() > 0); - let result = super::weights::WeightInfo::::request_collect_coins(); - assert!(result.ref_time() > 0); - - let result = super::weights::WeightInfo::::fail_collect_coins(); - assert!(result.ref_time() > 0); - - let result = super::weights::WeightInfo::::persist_collect_coins(); - assert!(result.ref_time() > 0); - let result = super::weights::WeightInfo::::remove_authority(); assert!(result.ref_time() > 0); - let result = super::weights::WeightInfo::::set_collect_coins_contract(); - assert!(result.ref_time() > 0); - let result = super::weights::WeightInfo::::register_address_v2(); assert!(result.ref_time() > 0); - - let result = super::weights::WeightInfo::::set_gate_contract(); - assert!(result.ref_time() > 0); - - let result = super::weights::WeightInfo::::set_gate_faucet(); - assert!(result.ref_time() > 0); - - let result = super::weights::WeightInfo::::request_collect_coins_v2(); - assert!(result.ref_time() > 0); } #[test] @@ -3261,60 +3240,6 @@ fn gate_contract_storage_should_return_default_goerli_contract_when_not_set() { }); } -#[test] -fn set_gate_contract_should_fail_when_not_signed_by_root() { - ExtBuilder::default().build_and_execute(|| { - let acct: AccountId = AccountId::new([0; 32]); - let gate_contract = DeployedContract::default(); - - assert_noop!(Creditcoin::set_gate_contract(Origin::signed(acct), gate_contract), BadOrigin); - }); -} - -#[test] -fn set_gate_contract_passes_and_storage_is_updated() { - ExtBuilder::default().build_and_execute(|| { - let fake_address = - sp_core::H160([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]); - - let gate_contract = - DeployedContract { address: fake_address, chain: Blockchain::Luniverse }; - - assert_ne!(gate_contract, DeployedContract::default()); - assert_eq!(Creditcoin::gate_contract(), DeployedContract::default()); - assert_ok!(Creditcoin::set_gate_contract(RawOrigin::Root.into(), gate_contract)); - - let stored_contract = Creditcoin::gate_contract(); - - assert_eq!(stored_contract.address, fake_address); - assert_eq!(stored_contract.chain, Blockchain::Luniverse); - }); -} - -#[test] -fn set_gate_faucet_should_fail_when_not_signed_by_root() { - ExtBuilder::default().build_and_execute(|| { - let acct: AccountId = AccountId::new([0; 32]); - - assert_noop!(Creditcoin::set_gate_faucet(Origin::signed(acct.clone()), acct), BadOrigin); - }); -} - -#[test] -fn set_gate_faucet_passes_and_storage_is_updated() { - ExtBuilder::default().build_and_execute(|| { - let addr: AccountId = AccountId::new([0; 32]); - - assert!(Creditcoin::gate_faucet_account().is_none()); - assert_ok!(Creditcoin::set_gate_faucet(RawOrigin::Root.into(), addr.clone())); - - let faucet_addr: Option = Creditcoin::gate_faucet_account(); - - assert!(faucet_addr.is_some()); - assert_eq!(faucet_addr.unwrap(), addr) - }); -} - #[test] fn gate_faucet_account_storage_should_return_none_when_not_set() { ExtBuilder::default().build_and_execute(|| { diff --git a/pallets/creditcoin/src/types.rs b/pallets/creditcoin/src/types.rs index eaea8dc61f..d30483d246 100644 --- a/pallets/creditcoin/src/types.rs +++ b/pallets/creditcoin/src/types.rs @@ -1,20 +1,16 @@ mod cleanup; -mod collect_coins; +pub mod collect_coins; pub mod loan_terms; mod transfer; pub use cleanup::{StorageCleanupState, StorageItemCleanupState}; -pub use collect_coins::{ - CollectedCoins as CollectedCoinsStruct, CollectedCoinsId, UnverifiedCollectedCoins, -}; + pub use loan_terms::*; pub use transfer::*; -pub use collect_coins::{BurnDetails, ContractType}; - -use crate::ocw::tasks::collect_coins::DeployedContract; use crate::ocw::VerificationFailureCause; use crate::ocw::VerificationResult; +pub use collect_coins::{CollectedCoins as CollectedCoinsStruct, CollectedCoinsId}; use extend::ext; use frame_support::{ storage::types::QueryKindTrait, @@ -53,6 +49,16 @@ pub enum Blockchain { Other(OtherChain), } +#[derive(Clone, Encode, Decode, Eq, PartialEq, RuntimeDebug, TypeInfo, MaxEncodedLen)] +pub struct BurnId(pub u64); + +#[derive(Clone, Encode, Decode, Eq, PartialEq, RuntimeDebug, TypeInfo, MaxEncodedLen)] +pub struct BurnInfo { + pub account: AccountId, + pub amount: Balance, + pub collector: AccountId, +} + impl Blockchain { pub fn as_bytes(&self) -> &[u8] { match self { @@ -473,7 +479,6 @@ impl<'de> serde::Deserialize<'de> for LegacySighash { #[derive(Clone, Encode, Decode, Eq, PartialEq, RuntimeDebug, TypeInfo, MaxEncodedLen)] pub enum Task { VerifyTransfer(UnverifiedTransfer), - CollectCoins(UnverifiedCollectedCoins), } #[cfg(feature = "runtime-benchmarks")] @@ -501,18 +506,9 @@ impl From From - for Task -{ - fn from(coins: UnverifiedCollectedCoins) -> Self { - Task::CollectCoins(coins) - } -} - #[derive(Clone, Encode, Decode, Eq, PartialEq, RuntimeDebug, TypeInfo, MaxEncodedLen)] pub enum TaskId { VerifyTransfer(TransferId), - CollectCoins(CollectedCoinsId), } impl From> for TaskId { @@ -521,21 +517,14 @@ impl From> for TaskId { } } -impl From> for TaskId { - fn from(id: CollectedCoinsId) -> Self { - TaskId::CollectCoins(id) - } -} - #[derive(Clone, Encode, Decode, Eq, PartialEq, RuntimeDebug, TypeInfo, MaxEncodedLen)] -pub enum TaskOutput { +pub enum TaskOutput { VerifyTransfer(TransferId, Transfer), - CollectCoins(CollectedCoinsId, CollectedCoinsStruct), } -impl +impl From<(TransferId, Transfer)> - for TaskOutput + for TaskOutput { fn from( (id, transfer): (TransferId, Transfer), @@ -544,27 +533,14 @@ impl } } -impl - From<(CollectedCoinsId, CollectedCoinsStruct)> - for TaskOutput -{ - fn from((id, coins): (CollectedCoinsId, CollectedCoinsStruct)) -> Self { - Self::CollectCoins(id, coins) - } -} - #[cfg(test)] pub(crate) mod test { - use crate::{ - helpers::extensions::HexToAddress, loan_terms::InvalidTermLengthError, mock, - ocw::tasks::collect_coins::tests::TX_HASH, tests::TestInfo, *, - }; + use crate::{loan_terms::InvalidTermLengthError, mock, tests::TestInfo, *}; use frame_support::BoundedVec; use parity_scale_codec::{Decode, Encode}; use sp_runtime::testing::H256; type AccountId = mock::AccountId; - type Balance = mock::Balance; type BlockNum = mock::BlockNumber; type Hash = H256; type Moment = u64; @@ -665,24 +641,6 @@ pub(crate) mod test { test_info.create_funding_transfer(&deal_order_id) } - fn create_collected_coins() -> CollectedCoinsStruct { - CollectedCoinsStruct { - to: AddressId::new::(&Blockchain::Rinkeby, b"tester"), - amount: 1000, - tx_id: TX_HASH.hex_to_address(), - contract_type: types::ContractType::GCRE, - } - } - - fn create_unverified_collected_coins() -> UnverifiedCollectedCoins { - UnverifiedCollectedCoins { - to: b"baba".to_vec().try_into().unwrap(), - tx_id: TX_HASH.hex_to_address(), - contract: Default::default(), - contract_type: types::ContractType::GCRE, - } - } - pub(crate) fn create_unverified_transfer( ) -> UnverifiedTransfer { let test_info = TestInfo::new_defaults(); @@ -711,9 +669,7 @@ pub(crate) mod test { blockchain: Blockchain : Blockchain::Bitcoin, transfer_kind: TransferKind : TransferKind::Native, address: Address : create_address(), - collected_coins: CollectedCoinsStruct : create_collected_coins(), transfer: Transfer : create_funding_transfer().1, - unverified_collected_coins: UnverifiedCollectedCoins : create_unverified_collected_coins(), unverified_transfer: UnverifiedTransfer : create_unverified_transfer(), offer: Offer : TestInfo::new_defaults().create_offer().1, ask_order: AskOrder : TestInfo::new_defaults().create_ask_order().1, @@ -728,9 +684,8 @@ pub(crate) mod test { transfer_id: TransferId : TransferId::new::(&Blockchain::Rinkeby, b"0"), collected_coins_id: CollectedCoinsId : CollectedCoinsId::new::(&Blockchain::Rinkeby, &[0]), legacy_sighash: LegacySighash : LegacySighash::default(), - task: Task : Task::::from(create_unverified_collected_coins()), task_id: TaskId : TaskId::from(create_funding_transfer().0), - task_output: TaskOutput : TaskOutput::::from( + task_output: TaskOutput : TaskOutput::::from( create_funding_transfer() ), diff --git a/pallets/creditcoin/src/types/collect_coins.rs b/pallets/creditcoin/src/types/collect_coins.rs index 9339c73b62..2ab176ed20 100644 --- a/pallets/creditcoin/src/types/collect_coins.rs +++ b/pallets/creditcoin/src/types/collect_coins.rs @@ -1,6 +1,4 @@ -use crate::types::{ - AddressId, Blockchain, DeployedContract, ExternalAddress, ExternalTxId, SystemConfig, -}; +use crate::types::{AddressId, Blockchain, ExternalTxId, SystemConfig}; use frame_support::RuntimeDebug; use parity_scale_codec::{Decode, Encode, MaxEncodedLen}; use scale_info::TypeInfo; @@ -13,25 +11,6 @@ pub struct CollectedCoins { pub contract_type: ContractType, } -#[derive(Clone, Encode, Decode, Eq, PartialEq, RuntimeDebug, TypeInfo, MaxEncodedLen)] -pub struct UnverifiedCollectedCoins { - pub to: ExternalAddress, - pub tx_id: ExternalTxId, - pub contract: DeployedContract, - pub contract_type: ContractType, -} - -impl UnverifiedCollectedCoins { - pub fn into_output(self, amount: T::Balance) -> CollectedCoins - where - T: Config, - { - let Self { to, tx_id, contract: DeployedContract { chain, .. }, contract_type } = self; - let to = crate::AddressId::new::(&chain, to.as_slice()); - CollectedCoins { amount, to, tx_id, contract_type } - } -} - #[derive(Clone, Encode, Decode, Eq, PartialEq, RuntimeDebug, TypeInfo, MaxEncodedLen)] pub struct CollectedCoinsId(Hash); @@ -65,77 +44,9 @@ impl From for CollectedCoinsId { Self(hash) } } - -use crate::ocw::errors::SchedulerError; -use crate::ocw::tasks::OffchainVerification; -use crate::ocw::VerificationFailureCause; -use crate::ocw::VerificationResult; use crate::types::concatenate; -use crate::Config; -use crate::TaskOutput; -use pallet_offchain_task_scheduler::tasks::error::TaskError; -use pallet_offchain_task_scheduler::tasks::TaskV2; use sp_runtime::traits::Hash; -impl OffchainVerification for UnverifiedCollectedCoins { - type Output = T::Balance; - - fn verify(&self) -> VerificationResult { - crate::Pallet::::verify_collect_coins_ocw(self) - } -} - -impl TaskV2 for UnverifiedCollectedCoins -where - UnverifiedCollectedCoins: OffchainVerification, - >::Output: Into, -{ - type Call = crate::pallet::Call; - type EvaluationError = VerificationFailureCause; - type SchedulerError = SchedulerError; - fn to_id(&self) -> T::Hash { - CollectedCoinsId::inner_hash::(&self.contract.chain, self.tx_id.as_slice()) - } - - fn persistence_call( - &self, - deadline: T::BlockNumber, - id: &T::Hash, - ) -> Result> { - use crate::ocw::OffchainError::*; - match self.verify() { - Ok(amount) => { - let coins = self.clone().into_output::(amount.into()); - let id = CollectedCoinsId::from(*id); - Ok(Self::Call::persist_task_output { - deadline, - task_output: TaskOutput::from((id, coins)), - }) - }, - Err(InvalidTask(cause)) if cause.is_fatal() => { - log::warn!("Failed to verify pending task {:?} : {:?}", self, cause); - let id = CollectedCoinsId::from(*id); - Ok(Self::Call::fail_task { deadline, task_id: id.into(), cause }) - }, - Err(InvalidTask(e)) => Err(TaskError::Evaluation(e)), - Err(NoRpcUrl(e)) => Err(TaskError::Scheduler(e.into())), - Err(RpcError(e)) => Err(TaskError::Scheduler(e.into())), - } - } - - fn is_persisted(id: &T::Hash) -> bool { - let id = CollectedCoinsId::from(*id); - crate::pallet::CollectedCoins::::contains_key(id) - } -} - -#[derive(Clone, Encode, Decode, Eq, PartialEq, RuntimeDebug, TypeInfo, MaxEncodedLen)] -#[allow(clippy::upper_case_acronyms)] -pub enum BurnDetails { - GCRE(ExternalAddress, ExternalTxId), - GATE(ExternalAddress, ExternalTxId), -} - #[derive(Clone, Encode, Decode, Eq, PartialEq, RuntimeDebug, TypeInfo, MaxEncodedLen)] #[allow(clippy::upper_case_acronyms)] pub enum ContractType { diff --git a/pallets/creditcoin/src/weights.rs b/pallets/creditcoin/src/weights.rs index 44adfdbfb2..c90187e4fc 100644 --- a/pallets/creditcoin/src/weights.rs +++ b/pallets/creditcoin/src/weights.rs @@ -2,9 +2,9 @@ //! Autogenerated weights for `crate` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-09-20, STEPS: `8`, REPEAT: `8`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2024-08-12, STEPS: `8`, REPEAT: `8`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `github-runner-6246693080-attempt-1`, CPU: `AMD EPYC 7763 64-Core Processor` +//! HOSTNAME: `github-runner-10359020939-attempt-1`, CPU: `AMD EPYC 7763 64-Core Processor` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 // Executed Command: @@ -35,19 +35,16 @@ use sp_std::marker::PhantomData; /// Weight functions for `crate`. pub struct WeightInfo(PhantomData); impl crate::WeightInfo for WeightInfo { - /// Storage: unknown `0xd766358cca00233e6155d7c14e2c085f5e0621c4869aa60c02be9adcc98a0d1d` (r:1 w:0) - /// Proof Skipped: unknown `0xd766358cca00233e6155d7c14e2c085f5e0621c4869aa60c02be9adcc98a0d1d` (r:1 w:0) - /// The range of component `t` is `[0, 1024]`. + /// The range of component `t` is `[0, 1]`. fn migration_v6(t: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `117` - // Estimated: `3566` - // Minimum execution time: 13_600_000 picoseconds. - Weight::from_parts(16_590_351, 0) - .saturating_add(Weight::from_parts(0, 3566)) - // Standard Error: 822 - .saturating_add(Weight::from_parts(4_996, 0).saturating_mul(t.into())) - .saturating_add(T::DbWeight::get().reads(1)) + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 300_000 picoseconds. + Weight::from_parts(421_464, 0) + .saturating_add(Weight::from_parts(0, 0)) + // Standard Error: 27_097 + .saturating_add(Weight::from_parts(128_535, 0).saturating_mul(t.into())) } /// Storage: unknown `0xd766358cca00233e6155d7c14e2c085f5e0621c4869aa60c02be9adcc98a0d1d` (r:1025 w:1024) /// Proof Skipped: unknown `0xd766358cca00233e6155d7c14e2c085f5e0621c4869aa60c02be9adcc98a0d1d` (r:1025 w:1024) @@ -58,16 +55,18 @@ impl crate::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `153 + t * (53 ±0)` // Estimated: `3600 + t * (2529 ±0)` - // Minimum execution time: 13_700_000 picoseconds. - Weight::from_parts(13_801_000, 0) + // Minimum execution time: 14_300_000 picoseconds. + Weight::from_parts(14_300_000, 0) .saturating_add(Weight::from_parts(0, 3600)) - // Standard Error: 112_297 - .saturating_add(Weight::from_parts(11_274_786, 0).saturating_mul(t.into())) + // Standard Error: 94_215 + .saturating_add(Weight::from_parts(11_490_205, 0).saturating_mul(t.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(t.into()))) .saturating_add(T::DbWeight::get().writes((2_u64).saturating_mul(t.into()))) .saturating_add(Weight::from_parts(0, 2529).saturating_mul(t.into())) } + /// Storage: Creditcoin CleanupState (r:1 w:1) + /// Proof: Creditcoin CleanupState (max_values: Some(1), max_size: Some(789), added: 1284, mode: MaxEncodedLen) /// Storage: Creditcoin AskOrders (r:255 w:255) /// Proof: Creditcoin AskOrders (max_values: None, max_size: Some(448), added: 2923, mode: MaxEncodedLen) /// Storage: Creditcoin BidOrders (r:255 w:255) @@ -82,25 +81,27 @@ impl crate::WeightInfo for WeightInfo { fn on_initialize(a: u32, b: u32, o: u32, _d: u32, _f: u32, ) -> Weight { // Proof Size summary in bytes: // Measured: `201 + a * (69 ±0) + b * (69 ±0) + o * (69 ±0)` - // Estimated: `2970 + o * (2890 ±0) + b * (2923 ±0) + a * (2923 ±0)` - // Minimum execution time: 554_705_000 picoseconds. - Weight::from_parts(49_494_931, 0) - .saturating_add(Weight::from_parts(0, 2970)) - // Standard Error: 39_384 - .saturating_add(Weight::from_parts(1_144_961, 0).saturating_mul(a.into())) - // Standard Error: 39_384 - .saturating_add(Weight::from_parts(1_032_025, 0).saturating_mul(b.into())) - // Standard Error: 39_384 - .saturating_add(Weight::from_parts(1_054_240, 0).saturating_mul(o.into())) + // Estimated: `5244 + o * (2890 ±0) + a * (2923 ±0) + b * (2923 ±0)` + // Minimum execution time: 594_602_000 picoseconds. + Weight::from_parts(598_002_000, 0) + .saturating_add(Weight::from_parts(0, 5244)) + // Standard Error: 45_972 + .saturating_add(Weight::from_parts(649_284, 0).saturating_mul(a.into())) + // Standard Error: 45_972 + .saturating_add(Weight::from_parts(640_397, 0).saturating_mul(b.into())) + // Standard Error: 45_972 + .saturating_add(Weight::from_parts(649_080, 0).saturating_mul(o.into())) + .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(a.into()))) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(b.into()))) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(o.into()))) + .saturating_add(T::DbWeight::get().writes(1)) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(a.into()))) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(b.into()))) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(o.into()))) .saturating_add(Weight::from_parts(0, 2890).saturating_mul(o.into())) - .saturating_add(Weight::from_parts(0, 2923).saturating_mul(b.into())) .saturating_add(Weight::from_parts(0, 2923).saturating_mul(a.into())) + .saturating_add(Weight::from_parts(0, 2923).saturating_mul(b.into())) } /// Storage: Creditcoin Addresses (r:1 w:1) /// Proof: Creditcoin Addresses (max_values: None, max_size: Some(597), added: 3072, mode: MaxEncodedLen) @@ -108,8 +109,8 @@ impl crate::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `76` // Estimated: `4062` - // Minimum execution time: 83_101_000 picoseconds. - Weight::from_parts(91_300_000, 0) + // Minimum execution time: 90_600_000 picoseconds. + Weight::from_parts(92_300_000, 0) .saturating_add(Weight::from_parts(0, 4062)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) @@ -124,8 +125,8 @@ impl crate::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `288` // Estimated: `8607` - // Minimum execution time: 81_200_000 picoseconds. - Weight::from_parts(83_501_000, 0) + // Minimum execution time: 81_301_000 picoseconds. + Weight::from_parts(83_101_000, 0) .saturating_add(Weight::from_parts(0, 8607)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(2)) @@ -140,8 +141,8 @@ impl crate::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `206` // Estimated: `11714` - // Minimum execution time: 42_001_000 picoseconds. - Weight::from_parts(46_401_000, 0) + // Minimum execution time: 45_100_000 picoseconds. + Weight::from_parts(47_400_000, 0) .saturating_add(Weight::from_parts(0, 11714)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(2)) @@ -156,8 +157,8 @@ impl crate::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `206` // Estimated: `11714` - // Minimum execution time: 41_000_000 picoseconds. - Weight::from_parts(44_901_000, 0) + // Minimum execution time: 44_900_000 picoseconds. + Weight::from_parts(46_500_000, 0) .saturating_add(Weight::from_parts(0, 11714)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(2)) @@ -172,8 +173,8 @@ impl crate::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `580` // Estimated: `11706` - // Minimum execution time: 40_401_000 picoseconds. - Weight::from_parts(42_100_000, 0) + // Minimum execution time: 43_001_000 picoseconds. + Weight::from_parts(44_500_000, 0) .saturating_add(Weight::from_parts(0, 11706)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(1)) @@ -192,8 +193,8 @@ impl crate::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `854` // Estimated: `17288` - // Minimum execution time: 52_100_000 picoseconds. - Weight::from_parts(55_201_000, 0) + // Minimum execution time: 55_900_000 picoseconds. + Weight::from_parts(57_301_000, 0) .saturating_add(Weight::from_parts(0, 17288)) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().writes(1)) @@ -204,8 +205,8 @@ impl crate::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `76` // Estimated: `3513` - // Minimum execution time: 13_401_000 picoseconds. - Weight::from_parts(14_100_000, 0) + // Minimum execution time: 13_200_000 picoseconds. + Weight::from_parts(13_900_000, 0) .saturating_add(Weight::from_parts(0, 3513)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) @@ -220,8 +221,8 @@ impl crate::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `290` // Estimated: `7965` - // Minimum execution time: 40_100_000 picoseconds. - Weight::from_parts(44_000_000, 0) + // Minimum execution time: 41_700_000 picoseconds. + Weight::from_parts(42_701_000, 0) .saturating_add(Weight::from_parts(0, 7965)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) @@ -236,8 +237,8 @@ impl crate::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `290` // Estimated: `7965` - // Minimum execution time: 30_300_000 picoseconds. - Weight::from_parts(31_000_000, 0) + // Minimum execution time: 31_400_000 picoseconds. + Weight::from_parts(32_001_000, 0) .saturating_add(Weight::from_parts(0, 7965)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) @@ -254,8 +255,8 @@ impl crate::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `1039` // Estimated: `14096` - // Minimum execution time: 56_000_000 picoseconds. - Weight::from_parts(57_001_000, 0) + // Minimum execution time: 60_000_000 picoseconds. + Weight::from_parts(60_801_000, 0) .saturating_add(Weight::from_parts(0, 14096)) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(2)) @@ -266,8 +267,8 @@ impl crate::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `540` // Estimated: `4089` - // Minimum execution time: 29_900_000 picoseconds. - Weight::from_parts(30_601_000, 0) + // Minimum execution time: 29_300_000 picoseconds. + Weight::from_parts(29_900_000, 0) .saturating_add(Weight::from_parts(0, 4089)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) @@ -284,8 +285,8 @@ impl crate::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `684` // Estimated: `20652` - // Minimum execution time: 55_100_000 picoseconds. - Weight::from_parts(58_001_000, 0) + // Minimum execution time: 59_700_000 picoseconds. + Weight::from_parts(61_000_000, 0) .saturating_add(Weight::from_parts(0, 20652)) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().writes(1)) @@ -302,8 +303,8 @@ impl crate::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `684` // Estimated: `20652` - // Minimum execution time: 55_001_000 picoseconds. - Weight::from_parts(57_201_000, 0) + // Minimum execution time: 58_500_000 picoseconds. + Weight::from_parts(60_201_000, 0) .saturating_add(Weight::from_parts(0, 20652)) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().writes(1)) @@ -320,8 +321,8 @@ impl crate::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `1141` // Estimated: `14096` - // Minimum execution time: 57_100_000 picoseconds. - Weight::from_parts(58_600_000, 0) + // Minimum execution time: 61_000_000 picoseconds. + Weight::from_parts(62_500_000, 0) .saturating_add(Weight::from_parts(0, 14096)) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(2)) @@ -336,8 +337,8 @@ impl crate::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `699` // Estimated: `9644` - // Minimum execution time: 41_500_000 picoseconds. - Weight::from_parts(42_100_000, 0) + // Minimum execution time: 43_500_000 picoseconds. + Weight::from_parts(44_400_000, 0) .saturating_add(Weight::from_parts(0, 9644)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(1)) @@ -358,137 +359,34 @@ impl crate::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `413` // Estimated: `24422` - // Minimum execution time: 144_201_000 picoseconds. - Weight::from_parts(159_101_000, 0) + // Minimum execution time: 156_200_000 picoseconds. + Weight::from_parts(159_800_000, 0) .saturating_add(Weight::from_parts(0, 24422)) .saturating_add(T::DbWeight::get().reads(7)) .saturating_add(T::DbWeight::get().writes(4)) } - /// Storage: Creditcoin CollectCoinsContract (r:1 w:0) - /// Proof: Creditcoin CollectCoinsContract (max_values: Some(1), max_size: Some(279), added: 774, mode: MaxEncodedLen) - /// Storage: Creditcoin CollectedCoins (r:1 w:0) - /// Proof: Creditcoin CollectedCoins (max_values: None, max_size: Some(339), added: 2814, mode: MaxEncodedLen) - /// Storage: TaskScheduler PendingTasks (r:1 w:1) - /// Proof: TaskScheduler PendingTasks (max_values: None, max_size: Some(1512), added: 3987, mode: MaxEncodedLen) - /// Storage: Creditcoin Addresses (r:1 w:0) - /// Proof: Creditcoin Addresses (max_values: None, max_size: Some(597), added: 3072, mode: MaxEncodedLen) - fn request_collect_coins() -> Weight { - // Proof Size summary in bytes: - // Measured: `209` - // Estimated: `14607` - // Minimum execution time: 45_001_000 picoseconds. - Weight::from_parts(46_401_000, 0) - .saturating_add(Weight::from_parts(0, 14607)) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: TaskScheduler Authorities (r:1 w:0) - /// Proof: TaskScheduler Authorities (max_values: None, max_size: Some(48), added: 2523, mode: MaxEncodedLen) - /// Storage: Creditcoin CollectedCoins (r:1 w:0) - /// Proof: Creditcoin CollectedCoins (max_values: None, max_size: Some(339), added: 2814, mode: MaxEncodedLen) - /// Storage: TaskScheduler PendingTasks (r:0 w:1) - /// Proof: TaskScheduler PendingTasks (max_values: None, max_size: Some(1512), added: 3987, mode: MaxEncodedLen) - fn fail_collect_coins() -> Weight { - // Proof Size summary in bytes: - // Measured: `153` - // Estimated: `7317` - // Minimum execution time: 27_500_000 picoseconds. - Weight::from_parts(29_700_000, 0) - .saturating_add(Weight::from_parts(0, 7317)) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: TaskScheduler Authorities (r:1 w:0) - /// Proof: TaskScheduler Authorities (max_values: None, max_size: Some(48), added: 2523, mode: MaxEncodedLen) - /// Storage: Creditcoin CollectedCoins (r:1 w:1) - /// Proof: Creditcoin CollectedCoins (max_values: None, max_size: Some(339), added: 2814, mode: MaxEncodedLen) - /// Storage: Creditcoin Addresses (r:1 w:0) - /// Proof: Creditcoin Addresses (max_values: None, max_size: Some(597), added: 3072, mode: MaxEncodedLen) - /// Storage: TaskScheduler PendingTasks (r:0 w:1) - /// Proof: TaskScheduler PendingTasks (max_values: None, max_size: Some(1512), added: 3987, mode: MaxEncodedLen) - fn persist_collect_coins() -> Weight { - // Proof Size summary in bytes: - // Measured: `283` - // Estimated: `11379` - // Minimum execution time: 75_601_000 picoseconds. - Weight::from_parts(83_801_000, 0) - .saturating_add(Weight::from_parts(0, 11379)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(2)) - } /// Storage: TaskScheduler Authorities (r:1 w:1) /// Proof: TaskScheduler Authorities (max_values: None, max_size: Some(48), added: 2523, mode: MaxEncodedLen) fn remove_authority() -> Weight { // Proof Size summary in bytes: // Measured: `150` // Estimated: `3513` - // Minimum execution time: 16_300_000 picoseconds. - Weight::from_parts(18_100_000, 0) + // Minimum execution time: 17_100_000 picoseconds. + Weight::from_parts(17_600_000, 0) .saturating_add(Weight::from_parts(0, 3513)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - /// Storage: Creditcoin CollectCoinsContract (r:0 w:1) - /// Proof: Creditcoin CollectCoinsContract (max_values: Some(1), max_size: Some(279), added: 774, mode: MaxEncodedLen) - fn set_collect_coins_contract() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 8_400_000 picoseconds. - Weight::from_parts(9_100_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - .saturating_add(T::DbWeight::get().writes(1)) - } /// Storage: Creditcoin Addresses (r:1 w:1) /// Proof: Creditcoin Addresses (max_values: None, max_size: Some(597), added: 3072, mode: MaxEncodedLen) fn register_address_v2() -> Weight { // Proof Size summary in bytes: // Measured: `76` // Estimated: `4062` - // Minimum execution time: 83_601_000 picoseconds. - Weight::from_parts(91_900_000, 0) + // Minimum execution time: 89_001_000 picoseconds. + Weight::from_parts(92_400_000, 0) .saturating_add(Weight::from_parts(0, 4062)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - /// Storage: Creditcoin GATEContract (r:0 w:1) - /// Proof: Creditcoin GATEContract (max_values: Some(1), max_size: Some(279), added: 774, mode: MaxEncodedLen) - fn set_gate_contract() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 6_100_000 picoseconds. - Weight::from_parts(6_600_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: Creditcoin GATEFaucetAccount (r:0 w:1) - /// Proof: Creditcoin GATEFaucetAccount (max_values: Some(1), max_size: Some(32), added: 527, mode: MaxEncodedLen) - fn set_gate_faucet() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 6_000_000 picoseconds. - Weight::from_parts(6_700_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - .saturating_add(T::DbWeight::get().writes(1)) - } - /// Storage: Creditcoin CollectCoinsContract (r:1 w:0) - /// Proof: Creditcoin CollectCoinsContract (max_values: Some(1), max_size: Some(279), added: 774, mode: MaxEncodedLen) - /// Storage: Creditcoin CollectedCoins (r:1 w:0) - /// Proof: Creditcoin CollectedCoins (max_values: None, max_size: Some(339), added: 2814, mode: MaxEncodedLen) - /// Storage: TaskScheduler PendingTasks (r:1 w:1) - /// Proof: TaskScheduler PendingTasks (max_values: None, max_size: Some(1512), added: 3987, mode: MaxEncodedLen) - /// Storage: Creditcoin Addresses (r:1 w:0) - /// Proof: Creditcoin Addresses (max_values: None, max_size: Some(597), added: 3072, mode: MaxEncodedLen) - fn request_collect_coins_v2() -> Weight { - // Proof Size summary in bytes: - // Measured: `209` - // Estimated: `14607` - // Minimum execution time: 39_700_000 picoseconds. - Weight::from_parts(43_600_000, 0) - .saturating_add(Weight::from_parts(0, 14607)) - .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(1)) - } } diff --git a/pallets/offchain-task-scheduler/Cargo.toml b/pallets/offchain-task-scheduler/Cargo.toml index 6f08548e90..e9952cb555 100644 --- a/pallets/offchain-task-scheduler/Cargo.toml +++ b/pallets/offchain-task-scheduler/Cargo.toml @@ -6,8 +6,8 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -serde = { version = "1.0.163", features = ["derive"], default-features = false } -serde_json = { version = "1.0.96", features = [ +serde = { workspace = true } +serde_json = { version = "1.0.119", features = [ "alloc", ], default-features = false } frame-support = { workspace = true } diff --git a/pallets/offchain-task-scheduler/src/authorship.rs b/pallets/offchain-task-scheduler/src/authorship.rs index 8d11ce09b4..d242c78d7e 100644 --- a/pallets/offchain-task-scheduler/src/authorship.rs +++ b/pallets/offchain-task-scheduler/src/authorship.rs @@ -7,15 +7,16 @@ pub trait Authorship { type Public: From + IdentifyAccount; type AccountId; fn find_authorized<'a>( - keys: impl Iterator, + mut keys: impl Iterator, ) -> Option where Self::RuntimePublic: 'a, { - keys.cloned().find(|pkey| { + keys.find(|&pkey| { let auth = Self::Public::from(pkey.clone()).into_account(); Self::is_authorized(&auth) }) + .cloned() } fn is_authorized(who: &Self::AccountId) -> bool; diff --git a/pallets/offchain-task-scheduler/src/weights.rs b/pallets/offchain-task-scheduler/src/weights.rs index 589f21b4e1..361c0c6e9f 100644 --- a/pallets/offchain-task-scheduler/src/weights.rs +++ b/pallets/offchain-task-scheduler/src/weights.rs @@ -2,9 +2,9 @@ //! Autogenerated weights for `crate` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-09-20, STEPS: `50`, REPEAT: `30`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2024-08-12, STEPS: `50`, REPEAT: `30`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `github-runner-6246693080-attempt-1`, CPU: `AMD EPYC 7763 64-Core Processor` +//! HOSTNAME: `github-runner-10359020939-attempt-1`, CPU: `AMD EPYC 7763 64-Core Processor` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 // Executed Command: @@ -43,10 +43,10 @@ impl crate::WeightInfo for WeightInfo { // Measured: `136 + t * (69 ±0)` // Estimated: `990 + t * (3987 ±0)` // Minimum execution time: 5_300_000 picoseconds. - Weight::from_parts(5_500_000, 0) + Weight::from_parts(5_400_000, 0) .saturating_add(Weight::from_parts(0, 990)) - // Standard Error: 1_447 - .saturating_add(Weight::from_parts(1_104_718, 0).saturating_mul(t.into())) + // Standard Error: 450 + .saturating_add(Weight::from_parts(1_136_707, 0).saturating_mul(t.into())) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(t.into()))) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(t.into()))) .saturating_add(Weight::from_parts(0, 3987).saturating_mul(t.into())) diff --git a/pallets/rewards/src/weights.rs b/pallets/rewards/src/weights.rs index f95d4d3968..506401f8a8 100644 --- a/pallets/rewards/src/weights.rs +++ b/pallets/rewards/src/weights.rs @@ -2,9 +2,9 @@ //! Autogenerated weights for `crate` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-09-20, STEPS: `50`, REPEAT: `30`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2024-08-12, STEPS: `50`, REPEAT: `30`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `github-runner-6246693080-attempt-1`, CPU: `AMD EPYC 7763 64-Core Processor` +//! HOSTNAME: `github-runner-10359020939-attempt-1`, CPU: `AMD EPYC 7763 64-Core Processor` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 // Executed Command: @@ -41,7 +41,7 @@ impl crate::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `165` // Estimated: `1517` - // Minimum execution time: 6_100_000 picoseconds. + // Minimum execution time: 6_300_000 picoseconds. Weight::from_parts(6_600_000, 0) .saturating_add(Weight::from_parts(0, 1517)) .saturating_add(T::DbWeight::get().reads(1)) @@ -52,8 +52,8 @@ impl crate::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `165` // Estimated: `1517` - // Minimum execution time: 5_800_000 picoseconds. - Weight::from_parts(6_300_000, 0) + // Minimum execution time: 6_400_000 picoseconds. + Weight::from_parts(6_800_000, 0) .saturating_add(Weight::from_parts(0, 1517)) .saturating_add(T::DbWeight::get().reads(1)) } diff --git a/pallets/staking/Cargo.toml b/pallets/staking/Cargo.toml deleted file mode 100644 index 5a00d4f97e..0000000000 --- a/pallets/staking/Cargo.toml +++ /dev/null @@ -1,55 +0,0 @@ -[package] -name = 'pallet-staking' -description = "Gluwa's offchain worker staking based on substrate frame staking" - -version.workspace = true -authors.workspace = true -edition.workspace = true -license.workspace = true -publish.workspace = true -repository.workspace = true - -[package.metadata.docs.rs] -targets = ['x86_64-unknown-linux-gnu'] - -[dependencies] -frame-election-provider-support = { workspace = true } -frame-benchmarking = { optional = true, workspace = true } -frame-support = { workspace = true } -frame-system = { workspace = true } -log = { workspace = true } -pallet-offchain-task-scheduler = { workspace = true } -pallet-session = { workspace = true } -pallet-staking-substrate = { workspace = true } -parity-scale-codec = { workspace = true } -serde.workspace = true -scale-info = { workspace = true } -sp-arithmetic.workspace = true -sp-runtime = { workspace = true } -sp-staking = { workspace = true } -sp-std = { workspace = true } - -[features] -default = ['std'] -runtime-benchmarks = [ - 'frame-benchmarking', - 'frame-election-provider-support/runtime-benchmarks', - 'pallet-staking-substrate/runtime-benchmarks', -] -std = [ - 'parity-scale-codec/std', - 'scale-info/std', - 'frame-election-provider-support/std', - 'frame-support/std', - 'frame-system/std', - 'frame-benchmarking/std', - 'pallet-offchain-task-scheduler/std', - 'pallet-session/std', - 'pallet-staking-substrate/std', - 'pallet-offchain-task-scheduler/std', - 'sp-std/std', -] -try-runtime = [ - 'frame-support/try-runtime', - 'pallet-staking-substrate/try-runtime', -] diff --git a/pallets/staking/src/lib.rs b/pallets/staking/src/lib.rs deleted file mode 100644 index 0de4f9e40f..0000000000 --- a/pallets/staking/src/lib.rs +++ /dev/null @@ -1,293 +0,0 @@ -#![cfg_attr(not(feature = "std"), no_std)] - -use frame_election_provider_support::{ - BoundedSupportsOf, ElectionDataProvider, ElectionProvider, ElectionProviderBase, - SortedListProvider, Support, -}; -use frame_support::traits::{ConstU32, DefensiveTruncateFrom}; -use frame_support::{defensive, BoundedVec}; -use frame_support::{traits::Defensive, RuntimeDebug}; -use frame_system::offchain::SigningTypes; -use pallet_offchain_task_scheduler::ocw::RuntimePublicOf; -use pallet_offchain_task_scheduler::{authorship::Authorship, Config as TaskSchedulerConfig}; -pub use pallet_staking_substrate as pallet; -pub use pallet_staking_substrate::weights; -#[cfg(feature = "std")] -pub use pallet_staking_substrate::GenesisConfig; -#[cfg(feature = "std")] -pub use pallet_staking_substrate::StakerStatus; -#[cfg(feature = "std")] -pub use pallet_staking_substrate::TestBenchmarkingConfig; -use pallet_staking_substrate::ValidatorPrefs; -pub use pallet_staking_substrate::{ - ActiveEra, ActiveEraInfo, Config, ErasStartSessionIndex, Error, Event, ForceEra, Forcing, - Pallet, RewardDestination, UseValidatorsMap, -}; -use parity_scale_codec::{Decode, Encode, EncodeLike}; -use scale_info::TypeInfo; -use serde::{Deserialize, Serialize}; -use sp_runtime::traits::{OpaqueKeys, Zero}; -use sp_runtime::AccountId32; -pub use sp_staking::{EraIndex, StakingInterface}; -use sp_std::{boxed::Box, fmt::Debug, marker::PhantomData, vec}; - -pub(crate) const LOG_TARGET: &str = "runtime::staking"; - -macro_rules! logger { - ($level:tt, $patter:expr $(, $values:expr)* $(,)?) => { - log::$level!( - target: crate::LOG_TARGET, - concat!("[{:?}] 💸 ", $patter), >::block_number() $(, $values)* - ) - }; -} -pub(crate) use logger; - -pub struct EmptyList(PhantomData); -impl SortedListProvider for EmptyList { - type Error = (); - type Score = u64; - - fn iter() -> Box> { - defensive!(); - Box::new(vec![].into_iter()) - } - - fn iter_from( - _start: &T::AccountId, - ) -> Result>, Self::Error> { - defensive!(); - Ok(Self::iter()) - } - - fn count() -> u32 { - logger!(debug, "Faking EmptyList count"); - pallet_staking_substrate::Validators::::count() - } - - fn contains(_id: &T::AccountId) -> bool { - false - } - - fn on_insert(_id: T::AccountId, _score: Self::Score) -> Result<(), Self::Error> { - defensive!(); - Ok(()) - } - - fn on_update(_id: &T::AccountId, _score: Self::Score) -> Result<(), Self::Error> { - defensive!(); - Ok(()) - } - - fn get_score(_id: &T::AccountId) -> Result { - defensive!(); - Ok(Zero::zero()) - } - - fn on_remove(_id: &T::AccountId) -> Result<(), Self::Error> { - defensive!(); - Ok(()) - } - - fn unsafe_regenerate( - _all: impl IntoIterator, - _score_of: Box Self::Score>, - ) -> u32 { - defensive!(); - 0 - } - - fn unsafe_clear() { - defensive!(); - } - - #[cfg(feature = "try-runtime")] - fn try_state() -> Result<(), &'static str> { - defensive!(); - Ok(()) - } - - /// If `who` changes by the returned amount they are guaranteed to have a worst case change - /// in their list position. - #[cfg(feature = "runtime-benchmarks")] - fn score_update_worst_case(_who: &T::AccountId, _is_increase: bool) -> Self::Score { - unreachable!() - } -} - -pub struct TrivialSessionHandler(PhantomData); - -impl pallet_session::SessionHandler for TrivialSessionHandler { - const KEY_TYPE_IDS: &'static [sp_runtime::KeyTypeId] = &[]; - - fn on_genesis_session(validators: &[(T::AccountId, Ks)]) { - for (id, _) in validators { - pallet_staking_substrate::Validators::::insert(id, ValidatorPrefs::default()); - } - } - - fn on_new_session( - _changed: bool, - _validators: &[(T::AccountId, Ks)], - _queued_validators: &[(T::AccountId, Ks)], - ) { - } - - fn on_disabled(_validator_index: u32) {} -} - -#[derive(PartialEq, Eq, Clone, Decode, Encode, TypeInfo, RuntimeDebug, Deserialize, Serialize)] -pub struct NoKeys; - -impl OpaqueKeys for NoKeys { - type KeyTypeIdProviders = (); - - fn key_ids() -> &'static [sp_runtime::KeyTypeId] { - static EMPTY: &[sp_runtime::KeyTypeId] = &[]; - EMPTY - } - - fn get_raw(&self, _i: sp_runtime::KeyTypeId) -> &[u8] { - static EMPTY: &[u8] = &[]; - EMPTY - } -} - -pub struct TrivialTargetList(PhantomData); -impl SortedListProvider for TrivialTargetList -where - AccountId32: EncodeLike, -{ - type Error = (); - type Score = u128; - - fn iter() -> Box> { - let x = AccountId32::new([0; 32]); - pallet_staking_substrate::Validators::::insert(x, ValidatorPrefs::default()); - Box::new(vec![AccountId32::new([0; 32])].into_iter()) - } - - fn iter_from( - _start: &AccountId32, - ) -> Result>, Self::Error> { - unreachable!() - } - - fn count() -> u32 { - logger!(debug, "Faking TargetList count"); - pallet_staking_substrate::Validators::::count() - } - - fn contains(_id: &AccountId32) -> bool { - defensive!(); - false - } - - fn on_insert(_id: AccountId32, _score: Self::Score) -> Result<(), Self::Error> { - defensive!(); - Ok(()) - } - - fn on_update(_id: &AccountId32, _score: Self::Score) -> Result<(), Self::Error> { - defensive!(); - Ok(()) - } - - fn get_score(_id: &AccountId32) -> Result { - defensive!(); - Ok(Zero::zero()) - } - - fn on_remove(_id: &AccountId32) -> Result<(), Self::Error> { - defensive!(); - Ok(()) - } - - fn unsafe_regenerate( - _all: impl IntoIterator, - _score_of: Box Self::Score>, - ) -> u32 { - defensive!(); - 0 - } - - fn unsafe_clear() { - defensive!(); - } - - #[cfg(feature = "try-runtime")] - fn try_state() -> Result<(), &'static str> { - defensive!(); - Ok(()) - } - - /// If `who` changes by the returned amount they are guaranteed to have a worst case change - /// in their list position. - #[cfg(feature = "runtime-benchmarks")] - fn score_update_worst_case(_who: &AccountId32, _is_increase: bool) -> Self::Score { - unreachable!() - } -} - -pub struct DefaultElection(sp_std::marker::PhantomData); - -impl ElectionProviderBase - for DefaultElection<(AccountId, BlockNumber, DataProvider)> -where - DataProvider: ElectionDataProvider, -{ - type AccountId = AccountId; - type BlockNumber = BlockNumber; - type Error = &'static str; - type MaxWinners = ConstU32<1>; - type DataProvider = DataProvider; -} - -impl ElectionProvider - for DefaultElection<(AccountId, BlockNumber, DataProvider)> -where - DataProvider: ElectionDataProvider, - AccountId: Clone + Debug, -{ - fn ongoing() -> bool { - false - } - - fn elect() -> Result, Self::Error> { - // Get electable targets - DataProvider::electable_targets(Some(1)) - // Wrap in defensive - .defensive_proof("Trivial 0 AccountId") - // Map resulting vector of vectors - .map(|accounts| { - // Wrap resulting Vec into a BoundedVec via truncation - BoundedVec::defensive_truncate_from( - accounts - // Turn given vector into an iterator - .iter() - // Map to a tuple - .map(|acc| (acc.clone(), Support::default())) - // Collect as a Vec - .collect(), - ) - }) - } -} - -pub struct StakingAuthorship(PhantomData); - -impl Authorship for StakingAuthorship -where - RuntimePublicOf: Clone, - T::Public: From>, -{ - type RuntimePublic = RuntimePublicOf; - type Public = T::Public; - type AccountId = T::AccountId; - - fn is_authorized(who: &Self::AccountId) -> bool { - let res = matches!(Pallet::::active_stake(who), Ok(active_stake) if active_stake > Zero::zero()); - logger!(trace, "{:?} authorship: {}", who, res); - res - } -} diff --git a/primitives/Cargo.toml b/primitives/Cargo.toml index f668830818..2f535d2b53 100644 --- a/primitives/Cargo.toml +++ b/primitives/Cargo.toml @@ -12,7 +12,7 @@ repository.workspace = true sp-core = { workspace = true } substrate-prometheus-endpoint = { optional = true, workspace = true } merlin = { version = "2.0.1", default-features = false } -num = { version = "0.4.0", default-features = false, features = [ +num = { version = "0.4.3", default-features = false, features = [ "num-bigint", "alloc", ] } @@ -28,7 +28,7 @@ tracing.workspace = true [dev-dependencies] tracing = { workspace = true } -proptest = "1.2.0" +proptest = "1.5.0" rand = "0.8.5" runtime-utils = { workspace = true, features = ["std"] } diff --git a/runtime/Cargo.toml b/runtime/Cargo.toml index f7c86ff9aa..b427608bdf 100644 --- a/runtime/Cargo.toml +++ b/runtime/Cargo.toml @@ -29,7 +29,6 @@ pallet-offchain-task-scheduler = { workspace = true } pallet-rewards = { workspace = true } pallet-scheduler = { workspace = true } pallet-session = { workspace = true } -pallet-staking = { workspace = true } pallet-sudo = { workspace = true } pallet-timestamp = { workspace = true } pallet-transaction-payment = { workspace = true } @@ -37,7 +36,7 @@ pallet-transaction-payment-rpc-runtime-api = { workspace = true } pallet-pos-switch = { workspace = true } parity-scale-codec = { workspace = true } scale-info = { workspace = true } -smallvec = "1.10.0" +smallvec = "1.13.2" sp-block-builder = { workspace = true } sp-consensus-pow = { workspace = true } sp-core = { workspace = true } @@ -61,6 +60,7 @@ sp-staking = { workspace = true } pallet-staking-reward-fn = { workspace = true } pallet-offences = { workspace = true } log = { workspace = true } +sp-io = { workspace = true } # Pallets necessary for use with the Staking Dashboard # CSUB-503 https://gluwa.atlassian.net/browse/CSUB-503?atlOrigin=eyJpIjoiODY0NGFjOTkzZjE1NGFkYTg1OTNkZmYxZGU1NjlmYjIiLCJwIjoiaiJ9 @@ -100,7 +100,6 @@ runtime-benchmarks = [ 'pallet-balances/runtime-benchmarks', 'pallet-rewards/runtime-benchmarks', 'pallet-difficulty/runtime-benchmarks', - 'pallet-staking/runtime-benchmarks', 'pallet-timestamp/runtime-benchmarks', 'pallet-offchain-task-scheduler/runtime-benchmarks', 'sp-runtime/runtime-benchmarks', @@ -120,7 +119,6 @@ std = [ 'pallet-difficulty/std', 'pallet-scheduler/std', 'pallet-session/std', - 'pallet-staking/std', 'pallet-timestamp/std', 'pallet-transaction-payment-rpc-runtime-api/std', 'pallet-transaction-payment/std', @@ -132,6 +130,7 @@ std = [ 'sp-block-builder/std', 'sp-core/std', 'sp-inherents/std', + 'sp-io/std', 'sp-offchain/std', 'sp-runtime/std', 'sp-session/std', @@ -165,7 +164,6 @@ try-runtime = [ "pallet-offchain-task-scheduler/try-runtime", "pallet-rewards/try-runtime", "pallet-scheduler/try-runtime", - "pallet-staking/try-runtime", "pallet-sudo/try-runtime", "pallet-session/try-runtime", "pallet-staking-substrate/try-runtime", diff --git a/runtime/generate-bags/Cargo.toml b/runtime/generate-bags/Cargo.toml new file mode 100644 index 0000000000..556cfd530b --- /dev/null +++ b/runtime/generate-bags/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "generate-bags" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +creditcoin-node-runtime = { path = "../" } +generate-bags = { workspace = true } +clap = { version = "4.4.10", features = ["derive"] } diff --git a/runtime/generate-bags/src/main.rs b/runtime/generate-bags/src/main.rs new file mode 100644 index 0000000000..a01bbe3be9 --- /dev/null +++ b/runtime/generate-bags/src/main.rs @@ -0,0 +1,55 @@ +use std::path::PathBuf; + +use clap::Parser; +use generate_bags::generate_thresholds; + +#[derive(Parser)] +struct Cli { + /// Total issuance of the currency in millions + #[clap(short, long)] + total_issuance: u128, + + /// Minimum account balance + #[clap(short, long, default_value_t = 8456776)] + minimum_balance: u128, + + #[clap(long, default_value_t = 200)] + n_bags: usize, + + #[clap(long)] + output: PathBuf, +} + +/* +pub struct U128CurrencyToVote; + +impl U128CurrencyToVote { + fn factor(issuance: u128) -> u128 { + (issuance / u64::MAX as u128).max(1) + } +} + +impl CurrencyToVote for U128CurrencyToVote { + fn to_vote(value: u128, issuance: u128) -> u64 { + (value / Self::factor(issuance)).saturated_into() + } + + fn to_currency(value: u128, issuance: u128) -> u128 { + value.saturating_mul(Self::factor(issuance)) + } +} */ + +fn main() -> Result<(), std::io::Error> { + let Cli { total_issuance, minimum_balance, n_bags, output } = Cli::parse(); + + let issuance_ctc = total_issuance * creditcoin_node_runtime::CTC * 1_000_000; + + println!("Issuance ctc = {issuance_ctc}; factor = {}", (issuance_ctc / u64::MAX as u128)); + + generate_thresholds::( + n_bags, + &output, + issuance_ctc, + minimum_balance, + ) +} diff --git a/runtime/src/lib.rs b/runtime/src/lib.rs index cf3b826dcc..0a6169a948 100644 --- a/runtime/src/lib.rs +++ b/runtime/src/lib.rs @@ -11,8 +11,10 @@ use frame_election_provider_support::{ }; pub use frame_support::traits::EqualPrivilegeOnly; use frame_support::{ - traits::{ConstU32, ConstU8, OnRuntimeUpgrade, U128CurrencyToVote}, - weights::{WeightToFeeCoefficient, WeightToFeeCoefficients, WeightToFeePolynomial}, + traits::{ConstU128, ConstU32, ConstU8, OnRuntimeUpgrade, U128CurrencyToVote}, + weights::{ + ConstantMultiplier, WeightToFeeCoefficient, WeightToFeeCoefficients, WeightToFeePolynomial, + }, PalletId, }; use frame_system::EnsureRoot; @@ -26,16 +28,15 @@ pub use pallet_grandpa::{ pub use pallet_im_online::sr25519::AuthorityId as ImOnlineId; use pallet_offchain_task_scheduler::crypto::AuthorityId; use pallet_session::historical as session_historical; -use pallet_staking::UseValidatorsMap; -pub use pallet_staking_substrate::{self, StakerStatus}; +pub use pallet_staking_substrate::{self, StakerStatus, UseValidatorsMap}; use sp_api::impl_runtime_apis; use sp_consensus_babe as babe_primitives; -use sp_core::{crypto::KeyTypeId, ConstU64, Encode, OpaqueMetadata}; +use sp_core::{crypto::KeyTypeId, ConstU64, Encode, OpaqueMetadata, U256}; use sp_runtime::{ generic, impl_opaque_keys, traits::{ - AccountIdLookup, BlakeTwo256, Block as BlockT, Bounded, IdentifyAccount, NumberFor, - OpaqueKeys, Verify, + AccountIdLookup, BlakeTwo256, Block as BlockT, Bounded, Convert, IdentifyAccount, + NumberFor, OpaqueKeys, Verify, }, transaction_validity::{TransactionPriority, TransactionSource, TransactionValidity}, ApplyExtrinsicResult, FixedPointNumber, MultiAddress, MultiSignature, Perquintill, @@ -71,11 +72,11 @@ use pallet_transaction_payment::{CurrencyAdapter, Multiplier, TargetedFeeAdjustm pub use sp_runtime::BuildStorage; pub use sp_runtime::{Perbill, Permill}; -#[cfg(test)] -mod mock; #[cfg(test)] mod tests; +mod output; + mod version; pub use version::VERSION; @@ -284,7 +285,7 @@ type MaxAuthorities = ConstU32<100_000>; impl pallet_grandpa::Config for Runtime { type RuntimeEvent = RuntimeEvent; - type KeyOwnerProof = >::Proof; + type KeyOwnerProof = sp_session::MembershipProof; type EquivocationReportSystem = pallet_grandpa::EquivocationReportSystem; @@ -319,7 +320,7 @@ impl pallet_babe::Config for Runtime { type EpochDuration = EpochDuration; type ExpectedBlockTime = ExpectedBlockTime; type EpochChangeTrigger = pallet_babe::ExternalTrigger; - type KeyOwnerProof = >::Proof; + type KeyOwnerProof = sp_session::MembershipProof; type EquivocationReportSystem = pallet_babe::EquivocationReportSystem; type WeightInfo = (); @@ -429,20 +430,24 @@ parameter_types! { pub MinAnnualInflation : Perquintill = Perquintill::from_rational(25u64, 1000u64); } -pub struct InitBabe; +// NOTE: this should be removed once the runtime has been upgraded on mainnet +// (though there is a check in case we forget) +pub struct MigrateBags; -impl OnRuntimeUpgrade for InitBabe { +impl OnRuntimeUpgrade for MigrateBags { fn on_runtime_upgrade() -> Weight { - if Babe::epoch_config().is_none() { - log::debug!("Initializing BABE"); - let babe_config = pallet_babe::InitConfig { - authorities: Vec::new(), - epoch_config: Some(BABE_GENESIS_EPOCH_CONFIG), - }; - Babe::genesis_init(babe_config); - ::DbWeight::get().writes(3) - } else { + const BAGS_LIST_MIGRATION: &[u8] = b"ctc:bags_list_thresholds_migrated"; + const OLD_THRESHOLDS: &[u64] = &[]; + let key = sp_io::hashing::twox_256(BAGS_LIST_MIGRATION); + if let Some(_v) = sp_io::storage::get(&key) { Weight::zero() + } else { + let num_accts_affected = + pallet_bags_list::List::::migrate(OLD_THRESHOLDS); + let each = ParityDbWeight::get().reads_writes(2, 2); + let weight = each.saturating_mul(num_accts_affected as u64); + sp_io::storage::set(&key, &true.encode()); + weight } } } @@ -486,12 +491,16 @@ impl onchain::Config for OnChainSeqPhragmen { type TargetsBound = MaxElectableTargets; } +parameter_types! { + pub const BagThresholds: &'static [u64] = &output::THRESHOLDS; +} + type VoterBagsListInstance = pallet_bags_list::Instance1; impl pallet_bags_list::Config for Runtime { type RuntimeEvent = RuntimeEvent; type ScoreProvider = Staking; type WeightInfo = (); - type BagThresholds = (); + type BagThresholds = BagThresholds; type Score = u64; } @@ -535,21 +544,6 @@ parameter_types! { pub const TransactionByteFee: Balance = 1; } -pub struct LengthToCtcFee; - -impl WeightToFeePolynomial for LengthToCtcFee { - type Balance = Balance; - - fn polynomial() -> WeightToFeeCoefficients { - smallvec::smallvec![WeightToFeeCoefficient { - coeff_integer: 1, - coeff_frac: Perbill::zero(), - negative: false, - degree: 1, - }] - } -} - pub const TARGET_FEE_CREDO: Balance = 10_000_000_000_000_000; pub const CTC: Balance = 1_000_000_000_000_000_000; @@ -587,7 +581,7 @@ impl pallet_transaction_payment::Config for Runtime { type WeightToFee = WeightToCtcFee; type FeeMultiplierUpdate = SlowAdjustingFeeUpdate; type OperationalFeeMultiplier = ConstU8<1u8>; - type LengthToFee = LengthToCtcFee; + type LengthToFee = ConstantMultiplier>; type RuntimeEvent = RuntimeEvent; } @@ -715,7 +709,7 @@ pub type Executive = frame_executive::Executive< frame_system::ChainContext, Runtime, AllPalletsWithSystem, - (InitBabe,), + (MigrateBags,), >; #[cfg(feature = "runtime-benchmarks")] @@ -1050,7 +1044,6 @@ parameter_types! { pub const MaxPending: u32 = 64; pub const AnnouncementDepositBase: u128 = 500; pub const AnnouncementDepositFactor: u128 = 500; - } impl pallet_proxy::Config for Runtime { @@ -1092,6 +1085,22 @@ parameter_types! { pub const PostUnbondingPoolsWindow: u32 = 10; } +pub struct BalanceToU256; + +impl Convert for BalanceToU256 { + fn convert(x: Balance) -> U256 { + x.into() + } +} + +pub struct U256ToBalance; + +impl Convert for U256ToBalance { + fn convert(x: U256) -> Balance { + x.saturated_into() + } +} + impl pallet_nomination_pools::Config for Runtime { type RuntimeEvent = RuntimeEvent; type WeightInfo = (); @@ -1099,11 +1108,11 @@ impl pallet_nomination_pools::Config for Runtime { type RewardCounter = sp_runtime::FixedU128; type PalletId = NomPoolsPalletId; type MaxPointsToBalance = MaxPointsToBalance; - type BalanceToU256 = (); - type U256ToBalance = (); + type BalanceToU256 = BalanceToU256; + type U256ToBalance = U256ToBalance; type Staking = Staking; type PostUnbondingPoolsWindow = PostUnbondingPoolsWindow; - type MaxMetadataLen = (); + type MaxMetadataLen = ConstU32<256>; type MaxUnbonding = MaxUnbonding; } diff --git a/runtime/src/mock/mod.rs b/runtime/src/mock/mod.rs deleted file mode 100644 index ea62c4145d..0000000000 --- a/runtime/src/mock/mod.rs +++ /dev/null @@ -1 +0,0 @@ -pub mod runtime; diff --git a/runtime/src/mock/runtime.rs b/runtime/src/mock/runtime.rs deleted file mode 100644 index 379173249d..0000000000 --- a/runtime/src/mock/runtime.rs +++ /dev/null @@ -1,217 +0,0 @@ -pub use crate::AccountId; -use crate::{ - opaque, AccountIdLookup, Address, AuthorityId, Balance, BlakeTwo256, BlockHashCount, - BlockLength, BlockNumber, BlockWeights, ExistentialDeposit, Hash, Index, MaxLocks, - MinimumPeriod, Moment, ParityDbWeight, SS58Prefix, Signature, Version, -}; -use frame_support::pallet_prelude::*; -use frame_support::traits::U128CurrencyToVote; -use frame_support::{construct_runtime, parameter_types}; -use frame_system::EnsureRoot; -use pallet_session::PeriodicSessions; -use pallet_staking::{DefaultElection, NoKeys, StakingAuthorship}; -use pallet_staking::{EmptyList, TrivialTargetList}; -use pallet_staking::{TestBenchmarkingConfig, TrivialSessionHandler}; -use sp_runtime::generic; -use sp_runtime::traits::Verify; -use sp_runtime::MultiAddress; -use sp_runtime::Perbill; -use sp_runtime::SaturatedConversion; -use sp_std::prelude::*; - -pub type Header = generic::Header; -pub type Block = generic::Block; -pub type UncheckedExtrinsic = - generic::UncheckedExtrinsic; -pub type Signer = ::Signer; -pub type SignedPayload = generic::SignedPayload; -pub type SignedExtra = ( - frame_system::CheckNonZeroSender, - frame_system::CheckSpecVersion, - frame_system::CheckTxVersion, - frame_system::CheckGenesis, - frame_system::CheckEra, - frame_system::CheckNonce, - frame_system::CheckWeight, -); - -construct_runtime!( - pub enum Runtime - where - Block = Block, - NodeBlock = opaque::Block, - UncheckedExtrinsic = UncheckedExtrinsic - { - System: frame_system, - Timestamp: pallet_timestamp, - Balances: pallet_balances, - Staking: pallet_staking::pallet, - Session: pallet_session, - TaskScheduler: pallet_offchain_task_scheduler, - } -); - -impl frame_system::Config for Runtime { - type BaseCallFilter = frame_support::traits::Everything; - type BlockWeights = BlockWeights; - type BlockLength = BlockLength; - type AccountId = AccountId; - type RuntimeCall = RuntimeCall; - type Lookup = AccountIdLookup; - type Index = Index; - type BlockNumber = BlockNumber; - type Hash = Hash; - type Hashing = BlakeTwo256; - type Header = Header; - type RuntimeEvent = RuntimeEvent; - type RuntimeOrigin = RuntimeOrigin; - type BlockHashCount = BlockHashCount; - type DbWeight = ParityDbWeight; - type Version = Version; - type PalletInfo = PalletInfo; - type OnNewAccount = (); - type OnKilledAccount = (); - type AccountData = pallet_balances::AccountData; - type SystemWeightInfo = (); - type SS58Prefix = SS58Prefix; - type OnSetCode = (); - type MaxConsumers = ConstU32<{ u32::MAX }>; -} - -impl pallet_timestamp::Config for Runtime { - type Moment = Moment; - type OnTimestampSet = (); - type MinimumPeriod = MinimumPeriod; - type WeightInfo = (); -} - -impl pallet_balances::Config for Runtime { - type MaxLocks = MaxLocks; - 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 = ExistentialDeposit; - type AccountStore = System; - type WeightInfo = pallet_balances::weights::SubstrateWeight; -} - -parameter_types! { -pub const HistoryDepth: u32 = 84; -pub const MaxNominations: u32 = 1; -pub const BlocksPerEra: u32 = 60; -pub const BondingDuration: u32 = 12; -pub const SlashDeferDuration: u32 = 10; -pub const MaxUnlockingChunks: u32 = 100; -pub const MaxNominatorRewardedPerValidator: u32 = 0; -pub const OffendingValidatorsThreshold: Perbill = Perbill::from_percent(0); -} - -impl pallet_staking::Config for Runtime { - type BondingDuration = BondingDuration; - type Currency = Balances; - type CurrencyBalance = Balance; - type HistoryDepth = HistoryDepth; - type EraPayout = (); - type MaxUnlockingChunks = MaxUnlockingChunks; - type OnStakerSlash = (); - type Reward = (); - type RuntimeEvent = RuntimeEvent; - type Slash = (); - type SlashDeferDuration = SlashDeferDuration; - type UnixTime = Timestamp; - type WeightInfo = pallet_staking::weights::SubstrateWeight; - type BenchmarkingConfig = TestBenchmarkingConfig; - type MaxNominations = MaxNominations; - type CurrencyToVote = U128CurrencyToVote; - type RewardRemainder = (); - type SessionsPerEra = BlocksPerEra; - type MaxNominatorRewardedPerValidator = MaxNominatorRewardedPerValidator; - type OffendingValidatorsThreshold = OffendingValidatorsThreshold; - type ElectionProvider = DefaultElection<(AccountId, Self::BlockNumber, Staking)>; - type GenesisElectionProvider = DefaultElection<(AccountId, Self::BlockNumber, Staking)>; - type VoterList = EmptyList; - type TargetList = TrivialTargetList; - type SessionInterface = (); - type NextNewSession = Session; - type AdminOrigin = EnsureRoot; -} - -impl pallet_session::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type ValidatorId = Self::AccountId; - type ValidatorIdOf = (); - type ShouldEndSession = PeriodicSessions, ConstU32<0>>; - type NextSessionRotation = (); - type SessionManager = Staking; - type SessionHandler = TrivialSessionHandler; - type Keys = NoKeys; - type WeightInfo = pallet_session::weights::SubstrateWeight; -} - -impl pallet_offchain_task_scheduler::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type UnverifiedTaskTimeout = ConstU32<60>; - type AuthorityId = AuthorityId; - type TaskCall = RuntimeCall; - type WeightInfo = pallet_offchain_task_scheduler::weights::WeightInfo; - type Task = pallet_offchain_task_scheduler::mocked_task::MockTask; - type Authorship = StakingAuthorship; -} - -impl frame_system::offchain::SigningTypes for Runtime { - type Public = Signer; - type Signature = Signature; -} - -impl frame_system::offchain::SendTransactionTypes for Runtime -where - RuntimeCall: From, -{ - type OverarchingCall = RuntimeCall; - type Extrinsic = UncheckedExtrinsic; -} - -impl frame_system::offchain::CreateSignedTransaction for Runtime -where - RuntimeCall: From, -{ - fn create_transaction>( - call: RuntimeCall, - public: Self::Public, - account: AccountId, - nonce: Index, - ) -> Option<( - RuntimeCall, - ::SignaturePayload, - )> { - let period = BlockHashCount::get() as u64; - let current_block = System::block_number().saturated_into::().saturating_sub(1); - - let extra: SignedExtra = ( - frame_system::CheckNonZeroSender::::new(), - frame_system::CheckSpecVersion::::new(), - frame_system::CheckTxVersion::::new(), - frame_system::CheckGenesis::::new(), - frame_system::CheckEra::::from(generic::Era::mortal(period, current_block)), - frame_system::CheckNonce::::from(nonce), - frame_system::CheckWeight::::new(), - ); - - #[cfg_attr(not(feature = "std"), allow(unused_variables))] - let raw_payload = SignedPayload::new(call, extra) - .map_err(|e| { - frame_support::log::warn!("SignedPayload error: {:?}", e); - }) - .ok()?; - - let signature = raw_payload.using_encoded(|payload| C::sign(payload, public))?; - - let address = MultiAddress::Id(account); - let (call, extra, _) = raw_payload.deconstruct(); - Some((call, (address, signature, extra))) - } -} diff --git a/runtime/src/output.rs b/runtime/src/output.rs new file mode 100644 index 0000000000..d8ca6238b6 --- /dev/null +++ b/runtime/src/output.rs @@ -0,0 +1,423 @@ +//! Autogenerated bag thresholds. +//! +//! Generated on 2023-10-20T17:44:22.131779+00:00 +//! Arguments +//! Total issuance: 156000000000000000000000000 +//! Minimum balance: 8456776 +//! for the creditcoin-node runtime. + +/// Existential weight for this runtime. +#[cfg(any(test, feature = "std"))] +#[allow(unused)] +pub const EXISTENTIAL_WEIGHT: u64 = 1; + +/// Constant ratio between bags for this runtime. +#[cfg(any(test, feature = "std"))] +#[allow(unused)] +#[allow(clippy::excessive_precision)] +pub const CONSTANT_RATIO: f64 = 1.2497227245028870; + +/// Upper thresholds delimiting the bag list. +pub const THRESHOLDS: [u64; 198] = [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 9, + 11, + 14, + 17, + 21, + 26, + 32, + 40, + 50, + 62, + 77, + 96, + 120, + 150, + 187, + 234, + 292, + 365, + 456, + 570, + 712, + 890, + 1_112, + 1_390, + 1_737, + 2_171, + 2_713, + 3_390, + 4_237, + 5_295, + 6_617, + 8_269, + 10_334, + 12_915, + 16_140, + 20_171, + 25_208, + 31_503, + 39_370, + 49_202, + 61_489, + 76_844, + 96_034, + 120_016, + 149_987, + 187_442, + 234_251, + 292_749, + 365_855, + 457_217, + 571_394, + 714_084, + 892_407, + 1_115_261, + 1_393_767, + 1_741_822, + 2_176_795, + 2_720_390, + 3_399_733, + 4_248_724, + 5_309_727, + 6_635_686, + 8_292_768, + 10_363_661, + 12_951_703, + 16_186_038, + 20_228_060, + 25_279_466, + 31_592_323, + 39_481_644, + 49_341_108, + 61_662_704, + 77_061_282, + 96_305_235, + 120_354_841, + 150_410_180, + 187_971_020, + 234_911_655, + 293_574_434, + 366_886_642, + 458_506_574, + 573_006_085, + 716_098_726, + 894_924_851, + 1_118_407_923, + 1_397_699_797, + 1_746_737_198, + 2_182_937_170, + 2_728_066_188, + 3_409_326_309, + 4_260_712_564, + 5_324_709_314, + 6_654_410_231, + 8_316_167_684, + 10_392_903_735, + 12_988_247_971, + 16_231_708_641, + 20_285_135_146, + 25_350_794_362, + 31_681_463_798, + 39_593_045_254, + 49_480_328_386, + 61_836_690_800, + 77_278_717_701, + 96_576_969_631, + 120_694_433_611, + 150_834_576_405, + 188_501_397_774, + 235_574_480_399, + 294_402_781_468, + 367_921_846_157, + 459_800_291_983, + 574_622_873_624, + 718_119_263_187, + 897_449_962_108, + 1_121_563_611_751, + 1_401_643_532_581, + 1_751_665_774_319, + 2_189_096_523_900, + 2_735_763_672_048, + 3_418_946_029_828, + 4_272_734_547_325, + 5_339_733_459_561, + 6_673_186_247_202, + 8_339_632_497_968, + 10_422_228_246_713, + 13_024_895_479_873, + 16_277_507_865_472, + 20_342_371_477_755, + 25_422_323_906_030, + 31_770_855_895_039, + 39_704_760_588_937, + 49_619_941_578_941, + 62_011_168_579_708, + 77_496_766_547_041, + 96_849_470_229_332, + 121_034_983_801_662, + 151_260_169_716_776, + 189_033_271_407_218, + 236_239_174_964_722, + 295_233_465_371_227, + 368_959_970_708_159, + 461_097_659_825_906, + 576_244_223_699_537, + 720_145_501_220_837, + 899_982_197_824_202, + 1_124_728_204_268_958, + 1_405_598_395_764_242, + 1_756_608_256_711_376, + 2_195_273_256_461_608, + 2_743_482_875_093_526, + 3_428_592_893_288_895, + 4_284_790_451_812_234, + 5_354_799_997_362_741, + 6_692_015_241_872_217, + 8_363_163_520_487_393, + 10_451_635_500_286_660, + 13_061_646_392_929_340, + 16_323_436_316_664_962, + 20_399_769_306_911_908, + 25_494_055_277_464_320, + 31_860_500_219_979_916, + 39_816_791_138_938_128, + 49_759_948_703_116_168, + 62_186_138_664_382_240, + 77_715_430_637_966_096, + 97_122_739_712_794_128, + 121_376_494_885_057_824, + 151_686_963_878_365_184, + 189_566_645_769_641_536, + 236_905_745_026_110_112, + 296_066_493_124_416_576, + 370_001_024_421_461_120, + 462_398_688_308_847_616, + 577_870_148_559_894_272, + 722_177_456_467_159_168, + 902_521_578_470_703_232, + 1_127_901_725_969_053_440, + 1_409_564_417_949_554_176, + 1_761_564_684_762_243_072, + 2_201_467_417_229_139_712, + 2_751_223_858_563_934_208, + 3_438_266_976_241_865_216, + 4_296_880_373_117_286_912, + 5_369_909_046_755_117_056, + 6_710_897_364_243_506_176, + 8_386_760_937_901_637_632, + 10_481_125_729_068_822_528, + 13_098_501_001_989_197_824, + 16_369_494_359_109_736_448, + 18_446_744_073_709_551_615, +]; + +/// Upper thresholds delimiting the bag list. +#[allow(dead_code)] +pub const THRESHOLDS_BALANCES: [u128; 198] = [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 9, + 11, + 14, + 17, + 21, + 26, + 32, + 40, + 50, + 62, + 77, + 96, + 120, + 150, + 187, + 234, + 292, + 365, + 456, + 570, + 712, + 890, + 1_112, + 1_390, + 1_737, + 2_171, + 2_713, + 3_390, + 4_237, + 5_295, + 6_617, + 8_269, + 10_334, + 12_915, + 16_140, + 20_171, + 25_208, + 31_503, + 39_370, + 49_202, + 61_489, + 76_844, + 96_034, + 120_016, + 149_987, + 187_442, + 234_251, + 292_749, + 365_855, + 457_217, + 571_394, + 714_084, + 892_407, + 1_115_261, + 1_393_767, + 1_741_822, + 2_176_795, + 2_720_390, + 3_399_733, + 4_248_724, + 5_309_727, + 6_635_686, + 8_292_768, + 10_363_661, + 12_951_703, + 16_186_038, + 20_228_060, + 25_279_466, + 31_592_323, + 39_481_644, + 49_341_108, + 61_662_704, + 77_061_282, + 96_305_235, + 120_354_841, + 150_410_180, + 187_971_020, + 234_911_655, + 293_574_434, + 366_886_642, + 458_506_574, + 573_006_085, + 716_098_726, + 894_924_851, + 1_118_407_923, + 1_397_699_797, + 1_746_737_198, + 2_182_937_170, + 2_728_066_188, + 3_409_326_309, + 4_260_712_564, + 5_324_709_314, + 6_654_410_231, + 8_316_167_684, + 10_392_903_735, + 12_988_247_971, + 16_231_708_641, + 20_285_135_146, + 25_350_794_362, + 31_681_463_798, + 39_593_045_254, + 49_480_328_386, + 61_836_690_800, + 77_278_717_701, + 96_576_969_631, + 120_694_433_611, + 150_834_576_405, + 188_501_397_774, + 235_574_480_399, + 294_402_781_468, + 367_921_846_157, + 459_800_291_983, + 574_622_873_624, + 718_119_263_187, + 897_449_962_108, + 1_121_563_611_751, + 1_401_643_532_581, + 1_751_665_774_319, + 2_189_096_523_900, + 2_735_763_672_048, + 3_418_946_029_828, + 4_272_734_547_325, + 5_339_733_459_561, + 6_673_186_247_202, + 8_339_632_497_968, + 10_422_228_246_713, + 13_024_895_479_873, + 16_277_507_865_472, + 20_342_371_477_755, + 25_422_323_906_030, + 31_770_855_895_039, + 39_704_760_588_937, + 49_619_941_578_941, + 62_011_168_579_708, + 77_496_766_547_041, + 96_849_470_229_332, + 121_034_983_801_662, + 151_260_169_716_776, + 189_033_271_407_218, + 236_239_174_964_722, + 295_233_465_371_227, + 368_959_970_708_159, + 461_097_659_825_906, + 576_244_223_699_537, + 720_145_501_220_837, + 899_982_197_824_202, + 1_124_728_204_268_958, + 1_405_598_395_764_242, + 1_756_608_256_711_376, + 2_195_273_256_461_608, + 2_743_482_875_093_526, + 3_428_592_893_288_895, + 4_284_790_451_812_234, + 5_354_799_997_362_741, + 6_692_015_241_872_217, + 8_363_163_520_487_393, + 10_451_635_500_286_660, + 13_061_646_392_929_340, + 16_323_436_316_664_962, + 20_399_769_306_911_908, + 25_494_055_277_464_320, + 31_860_500_219_979_916, + 39_816_791_138_938_128, + 49_759_948_703_116_168, + 62_186_138_664_382_240, + 77_715_430_637_966_096, + 97_122_739_712_794_128, + 121_376_494_885_057_824, + 151_686_963_878_365_184, + 189_566_645_769_641_536, + 236_905_745_026_110_112, + 296_066_493_124_416_576, + 370_001_024_421_461_120, + 462_398_688_308_847_616, + 577_870_148_559_894_272, + 722_177_456_467_159_168, + 902_521_578_470_703_232, + 1_127_901_725_969_053_440, + 1_409_564_417_949_554_176, + 1_761_564_684_762_243_072, + 2_201_467_417_229_139_712, + 2_751_223_858_563_934_208, + 3_438_266_976_241_865_216, + 4_296_880_373_117_286_912, + 5_369_909_046_755_117_056, + 6_710_897_364_243_506_176, + 8_386_760_937_901_637_632, + 10_481_125_729_068_822_528, + 13_098_501_001_989_197_824, + 16_369_494_359_109_736_448, + 18_446_744_073_709_551_615, +]; diff --git a/runtime/src/tests.rs b/runtime/src/tests.rs index d6ced2c238..2261c7bb26 100644 --- a/runtime/src/tests.rs +++ b/runtime/src/tests.rs @@ -11,9 +11,6 @@ use runtime_utils::{generate_account, ExtBuilder, RollTo, Trivial}; use sp_runtime::traits::BadOrigin; use std::default::Default; -mod staking; -mod task_scheduling; - #[test] fn pallet_scheduler_works() { ExtBuilder::default().build_sans_config().execute_with(|| { diff --git a/runtime/src/tests/staking.rs b/runtime/src/tests/staking.rs deleted file mode 100644 index ddf11245f5..0000000000 --- a/runtime/src/tests/staking.rs +++ /dev/null @@ -1,84 +0,0 @@ -use super::generate_account; -use crate::mock::runtime::{ - AccountId, Balances, BlocksPerEra, BondingDuration, Runtime, RuntimeOrigin, Session, -}; -use frame_support::assert_ok; -use frame_support::traits::Currency; -use pallet_staking::Error; -use pallet_staking::RewardDestination; -use pallet_staking::StakingInterface; -use runtime_utils::{ExtBuilder, RollTo, Trivial}; -use std::default::Default; - -type Staking = pallet_staking::Pallet; - -const BLOCKS_UNTIL_UNBONDED: u32 = BlocksPerEra::get() * BondingDuration::get(); - -#[test] -fn active_era_transitions() { - ExtBuilder::default().build_sans_config().execute_with(|| { - assert!(Staking::active_era().is_none()); - let mut height = 1; - Trivial::::roll_to(height); - assert_eq!(2, Staking::eras_start_session_index(0).unwrap()); - height += BlocksPerEra::get(); - Trivial::::roll_to(height + 1); - assert_eq!(1, Staking::active_era().unwrap().index); - }); -} - -#[test] -fn stake_and_unstake_with_a_controller_and_stash_as_payee() { - let stash = generate_account("stash"); - let controller = generate_account("controller"); - let value = >::minimum_balance(); - - ExtBuilder::default().build_sans_config().execute_with(|| { - let mut height = 1; - Trivial::::roll_to(height); - - // prime balance to create the account - let _ = Balances::deposit_creating(&stash, value); - let usable = Balances::usable_balance(&stash); - assert_eq!(value, usable); - - // lock stash's funds under a controller - assert_ok!(Staking::bond( - RuntimeOrigin::signed(stash.clone()), - controller.clone().into(), - value, - RewardDestination::Stash, - )); - - // stake is found and usable balance dropped - assert_eq!(value, Staking::total_stake(&stash).unwrap()); - assert_eq!(value, Staking::active_stake(&stash).unwrap()); - let usable = Balances::usable_balance(&stash); - assert_eq!(0, usable); - - // unbond, efective after BondingPeriod has passed - assert_ok!(Staking::unbond(RuntimeOrigin::signed(controller.clone()), value)); - assert_eq!(value, Staking::total_stake(&stash).unwrap()); - assert_eq!(0, Staking::active_stake(&stash).unwrap()); - let usable = Balances::usable_balance(&stash); - assert_eq!(0, usable); - - // Cant withdraw before minimum staking period has elapsed; NOOPs - assert_ok!(Staking::withdraw_unbonded(RuntimeOrigin::signed(controller.clone()), 0)); - assert_eq!(value, Staking::total_stake(&stash).unwrap()); - assert_eq!(0, Staking::active_stake(&stash).unwrap()); - let usable = Balances::usable_balance(&stash); - assert_eq!(0, usable); - - // unbonding defered until bonding eras pass - height += BLOCKS_UNTIL_UNBONDED; - - Trivial::::roll_to(height); - - assert_ok!(Staking::withdraw_unbonded(RuntimeOrigin::signed(controller), 0)); - assert_eq!(Staking::total_stake(&stash).unwrap_err(), Error::::NotStash.into()); - assert_eq!(Staking::active_stake(&stash).unwrap_err(), Error::::NotStash.into()); - let usable = Balances::usable_balance(&stash); - assert_eq!(value, usable); - }); -} diff --git a/runtime/src/tests/task_scheduling.rs b/runtime/src/tests/task_scheduling.rs deleted file mode 100644 index e414c12c8a..0000000000 --- a/runtime/src/tests/task_scheduling.rs +++ /dev/null @@ -1,115 +0,0 @@ -use crate::mock::runtime::{Balances, Runtime, RuntimeOrigin, Staking, TaskScheduler}; -use crate::KeyTypeId; -use frame_support::{ - assert_ok, - traits::{tokens::currency::Currency, GenesisBuild}, -}; -use pallet_balances::GenesisConfig as BalancesGenesisConfig; -use pallet_staking::StakingInterface; -use pallet_staking::{GenesisConfig, StakerStatus}; -use runtime_utils::{ExtBuilder, RollTo, SyncCryptoStore, WithWorkerHook}; - -fn generate_bonded_stash( - builder: &mut ExtBuilder, -) -> (sp_core::sr25519::Public, sp_core::sr25519::Public) { - let keystore_id = pallet_offchain_task_scheduler::KEY_TYPE; - let keystore = builder.keystore.as_ref().expect("A keystore"); - let stash_pubkey = keystore.sr25519_generate_new(keystore_id, None).unwrap(); - let controller_pubkey = keystore.sr25519_generate_new(keystore_id, None).unwrap(); - - let genesis_config = BalancesGenesisConfig:: { - balances: vec![(stash_pubkey.into(), Balances::minimum_balance())], - }; - - genesis_config.assimilate_storage(&mut builder.storage).unwrap(); - - let genesis_config = GenesisConfig:: { - stakers: vec![( - stash_pubkey.into(), - controller_pubkey.into(), - Balances::minimum_balance(), - StakerStatus::Idle, - )], - validator_count: 1, - ..Default::default() - }; - - genesis_config.assimilate_storage(&mut builder.storage).unwrap(); - - (stash_pubkey, controller_pubkey) -} - -#[test] -fn scheduler_doesnt_run_if_pubkey_cant_sign() { - let logs = traced_test::trace(); - // for example see - // https://github.com/gluwa/creditcoin-authority-manager/blob/43c61aa177146e4ecfde944678db851b941d4ae6/src/main.rs#L245-L265 - let builder = ExtBuilder::default().with_keystore(); - - let _pubkey = builder - .keystore - .as_ref() - .expect("A keystore") - // keys where KeyID is not "gots" can't be used for OTS tasks - .sr25519_generate_new(KeyTypeId(*b"ctcs"), Some("//CanNotSign")) - .unwrap(); - - builder.build_sans_config().execute_with(|| { - WithWorkerHook::::roll_to(1); - - assert!(logs.contain("local keys []")); - assert!(logs.contain("Not an authority, skipping offchain work")); - }); -} - -#[test] -/// Needs improvement, add a pubkey to the keystore but dont bond it. Bond an account but dont add it to the keystore. -fn scheduler_doesnt_run_if_not_staked_or_cant_sign() { - let logs = traced_test::trace(); - ExtBuilder::default().with_keystore().build_sans_config().execute_with(|| { - WithWorkerHook::::roll_to(1); - - assert!(logs.contain("Not an authority, skipping offchain work")); - }); -} - -#[test] -fn scheduler_runs_if_staked_and_can_sign() { - let logs = traced_test::trace(); - let mut builder = ExtBuilder::default().with_keystore(); - - //Can sign and is a staked controller; proceed - let (_, _) = generate_bonded_stash(&mut builder); - - builder.build::().execute_with(|| { - WithWorkerHook::::roll_to(1); - - assert!(!logs.contain("Not an authority, skipping offchain work")); - }); -} - -#[test] -fn scheduler_doesnt_run_without_active_stake() { - let logs = traced_test::trace(); - let mut builder = ExtBuilder::default().with_keystore(); - - //Can sign and is a staked controller; proceed - let (stash, controller) = generate_bonded_stash(&mut builder); - - builder.build::().execute_with(|| { - assert_eq!(Staking::active_stake(&stash.into()).unwrap(), Balances::minimum_balance()); - - WithWorkerHook::::roll_to(1); - - assert!(!logs.contain("Not an authority, skipping offchain work")); - - assert_ok!(Staking::unbond( - RuntimeOrigin::signed(controller.into()), - Balances::minimum_balance() - )); - - WithWorkerHook::::roll_to(2); - - assert!(logs.contain("Not an authority, skipping offchain work")); - }); -} diff --git a/runtime/src/version.rs b/runtime/src/version.rs index 857360ca92..6f7f8fe5a6 100644 --- a/runtime/src/version.rs +++ b/runtime/src/version.rs @@ -14,8 +14,8 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { // `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: 232, - impl_version: 1, + spec_version: 240, + impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 11, state_version: 1, diff --git a/rust-toolchain.toml b/rust-toolchain.toml new file mode 100644 index 0000000000..4e09a58ab1 --- /dev/null +++ b/rust-toolchain.toml @@ -0,0 +1,5 @@ +[toolchain] +channel = "nightly-2023-06-06" +components = ["cargo", "clippy", "rustc", "rustfmt", "rust-src"] +profile = "minimal" +targets = ["wasm32-unknown-unknown"] diff --git a/scripts/cc-cli/README.md b/scripts/cc-cli/README.md index c3236b5770..d17852d431 100644 --- a/scripts/cc-cli/README.md +++ b/scripts/cc-cli/README.md @@ -30,7 +30,6 @@ node dist/index.js - **balance**: Get balance of an account - **bond**: Bond CTC from a Stash account - **chill**: Signal intention to stop validating from a Controller account -- **collect-coins**: Swap GCRE for CTC - **distribute-rewards**: Distribute all pending rewards for all validators - **new**: Create new seed phrase - **register-address**: Link a CreditCoin address to an address from another blockchain @@ -129,4 +128,6 @@ You need to have the following: Execute like so: - $ node dist/index.js collect-coins -k 0xAccount0privateKey --seed //Alice --debug +```bash +node dist/index.js collect-coins -k 0xAccount0privateKey --seed //Alice --debug +``` diff --git a/scripts/cc-cli/package.json b/scripts/cc-cli/package.json index ceeae3cba5..e13189e7ee 100644 --- a/scripts/cc-cli/package.json +++ b/scripts/cc-cli/package.json @@ -27,23 +27,23 @@ "dependencies": { "chalk": "^4.1.2", "cli-table3": "^0.6.3", - "commander": "^11.0.0", - "creditcoin-js": "file:../../creditcoin-js/creditcoin-js-v0.10.1.tgz", + "commander": "^12.1.0", + "creditcoin-js": "file:../../creditcoin-js/creditcoin-js-v0.10.4.tgz", "prompts": "^2.4.2", "web3-validator": "^2.0.1" }, "devDependencies": { "@polkadot/typegen": "9.14.2", - "@types/jest": "^29.5.2", + "@types/jest": "^29.5.12", "@types/prompts": "^2.4.4", - "@typescript-eslint/eslint-plugin": "^6.5.0", - "@typescript-eslint/parser": "^6.5.0", - "eslint": "^8.48.0", - "eslint-config-prettier": "^9.0.0", - "jest": "^29.5.0", - "prettier": "^3.0.1", - "ts-jest": "^29.1.0", + "@typescript-eslint/eslint-plugin": "^7.15.0", + "@typescript-eslint/parser": "^8.0.0", + "eslint": "^8.57.0", + "eslint-config-prettier": "^9.1.0", + "jest": "^29.7.0", + "prettier": "^3.3.2", + "ts-jest": "^29.2.4", "ts-node": "^10.8.0", - "typescript": "^5.2.2" + "typescript": "^5.5.2" } } diff --git a/scripts/cc-cli/src/commands/collectCoins.ts b/scripts/cc-cli/src/commands/collectCoins.ts deleted file mode 100644 index d403a75a33..0000000000 --- a/scripts/cc-cli/src/commands/collectCoins.ts +++ /dev/null @@ -1,85 +0,0 @@ -import { Command, Option, OptionValues } from "commander"; -import { fatalErr } from "./registerAddress"; -import { newApi } from "../api"; -import { initCallerKeyring } from "../utils/account"; -import { requiredInput } from "../utils/parsing"; -import { isAddress } from "web3-validator"; -import { utils } from "ethers"; -import chalk from "chalk"; - -export function makeCollectCoinsCmd() { - const externalAddressOpt = new Option( - "-e, --external-address ", - "The previously registered external address that called the burn tx", - ); - - const burnTxHashOpt = new Option( - "-b, --burn-tx-hash ", - "The hash of the burn transaction", - ); - - return new Command("collect-coins") - .description("Swap GCRE for CTC") - .addOption(externalAddressOpt) - .addOption(burnTxHashOpt) - .action(collectCoinsActionSync); -} - -function collectCoinsActionSync(options: OptionValues) { - collectCoinsAction(options) - .then(() => { - console.log(chalk.green("Success!")); - process.exit(0); - }) - .catch((reason) => { - fatalErr( - `ERROR: The call to request_collect_coins was unsuccessful: ${ - reason as string - }`, - ); - }); -} - -async function collectCoinsAction(options: OptionValues) { - validateOptsOrExit(options); - - const { - extrinsics: { requestCollectCoins }, - } = await newApi(options.url); - const signer = await initCallerKeyring(options); - - const event = await requestCollectCoins( - options.externalAddress, - signer, - options.burnTxHash, - ); - await event.waitForVerification(800_000); -} - -function validateOptsOrExit(options: OptionValues) { - const externalAddress = requiredInput( - options.externalAddress.trim(), - "ERROR: externalAddress is required", - ); - const burnTxHash = requiredInput( - options.burnTxHash.trim(), - "ERROR: Burn transaction hash is required", - ); - - if (!isTxHashValid(burnTxHash)) { - fatalErr(`ERROR: The transaction hash is invalid: ${burnTxHash}`); - } - - if (!isExternalAddressValid(externalAddress)) { - fatalErr(`ERROR: The external address is invalid: ${externalAddress}`); - } -} - -export function isTxHashValid(hash: string): boolean { - // 32 byte hexadecimal, 64 character string, 66 with 0x prefix - return utils.isHexString(hash, 32); -} - -export function isExternalAddressValid(addr: string): boolean { - return isAddress(addr); -} diff --git a/scripts/cc-cli/src/commands/registerAddress.ts b/scripts/cc-cli/src/commands/registerAddress.ts index bb25cc1276..0c1ef6deeb 100644 --- a/scripts/cc-cli/src/commands/registerAddress.ts +++ b/scripts/cc-cli/src/commands/registerAddress.ts @@ -6,6 +6,8 @@ import { Wallet } from "ethers"; import { signAccountId } from "creditcoin-js/lib/utils"; import { AddressRegistered } from "creditcoin-js/lib/extrinsics/register-address"; import { utils } from "ethers"; +import { getErrorMessage } from "../utils/error"; +import prompts from "prompts"; const blockchains = ["Ethereum", "Rinkeby", "Luniverse", "Bitcoin", "Other"]; @@ -14,16 +16,15 @@ export function makeRegisterAddressCmd() { "-b, --blockchain The blockchain that this external address belongs to", ).choices(blockchains); - const privateKeyOpt = new Option( - "-p, --private-key The private key for the Ethereum address that you want to register.", - ).env("ETH_PRIVATE_KEY"); - return new Command("register-address") .description( "Link a CreditCoin address to an address from another blockchain", ) - .addOption(privateKeyOpt) .addOption(blockchainOpt) + .option( + "--eth-mnemonic", + "Specify the ethereum address using a mnemonic rather than a private key", + ) .action(registerAddressAction); } @@ -35,9 +36,11 @@ async function registerAddressAction(options: OptionValues) { extrinsics: { registerAddress }, } = await newApi(options.url); - // Reads CC_SECRET env variable if it exists or propmpts the user to enter a mneumonic + // Reads CC_SECRET env variable if it exists or propmpts the user to enter a mnemonic const signer = await initCallerKeyring(options); - const wallet = new Wallet(options.privateKey); + + // Reads ETH_PRIVATE_KEY env variable if found or prompts the user to enter an ethereum mnemonic + const wallet = await initCallerEthWallet(options); // create the cryptographic proof of ownership const proof = signAccountId(api, wallet, signer.address); @@ -68,14 +71,6 @@ function validateOptsOrExit(options: OptionValues) { `ERROR: A blockchain must be specified (possible values: ${blockchains.toString()})`, ); } - - if (options.privateKey === undefined) { - fatalErr("ERROR: No external address specified"); - } - - if (!isValidPrivateKey(options.privateKey)) { - fatalErr(`ERROR: Invalid private key: ${options.privateKey as string}`); - } } export function fatalErr(s: string) { @@ -91,3 +86,90 @@ function errorMsg(s: string) { export function isValidPrivateKey(pk: string): boolean { return utils.isHexString(pk, 32); } + +export async function initCallerEthWallet( + options: OptionValues, +): Promise { + try { + return await initWalletFromEnvOrPrompt("ETH_PRIVATE_KEY", options); + } catch (e) { + console.error(getErrorMessage(e)); + process.exit(1); + } +} + +async function initWalletFromEnvOrPrompt( + envVar: string, + options: OptionValues, +): Promise { + const interactive = options.input; + const useMnemonic = options.ethMnemonic; + const inputName = useMnemonic ? "mnemonic" : "private key"; + const generateWallet = useMnemonic + ? newWalletFromMnemonic + : newWalletFromPrivateKey; + const validateInput = useMnemonic ? isMnemonicValid : isValidPrivateKey; + + if (!interactive && process.env[envVar] === undefined) { + throw new Error( + "Error: Must specify a private key using the environment variable ETH_PRIVATE_KEY or an interactive prompt", + ); + } + + if (process.env[envVar] !== undefined) { + const seed = process.env[envVar]; + + if (!validateInput(seed)) { + throw new Error(`Error: ${inputName} is invalid`); + } + + return generateWallet(seed); + } else if (interactive) { + const promptResult = await prompts([ + { + type: "password", + name: "seed", + message: `Specify the ${inputName} for the ethereum address`, + validate: validateInput, + }, + ]); + + const seed = promptResult.seed; + + if (!seed) { + throw new Error( + `The ${inputName} could not be retrieved from the prompt`, + ); + } + + return generateWallet(seed); + } + + throw new Error("The ethereum wallet could not be generated"); +} + +export function newWalletFromMnemonic(mnemonic: string): Wallet { + try { + return Wallet.fromMnemonic(mnemonic); + } catch (e) { + throw new Error( + `Error: Could not create wallet from mnemonic: ${getErrorMessage(e)}`, + ); + } +} + +export function newWalletFromPrivateKey(pk: string): Wallet { + try { + return new Wallet(pk); + } catch (e) { + throw new Error( + `Error: Could not create wallet from private key: ${getErrorMessage(e)}`, + ); + } +} + +// This wrapper function is needed to ensure comaptibility with the validate function in the prompt call +// see initWalletFromEnvOrPrompt for details +export function isMnemonicValid(mnemonic: string): boolean { + return utils.isValidMnemonic(mnemonic); +} diff --git a/scripts/cc-cli/src/globalSetup.ts b/scripts/cc-cli/src/globalSetup.ts index a290c8dc78..7e2ab81b2f 100644 --- a/scripts/cc-cli/src/globalSetup.ts +++ b/scripts/cc-cli/src/globalSetup.ts @@ -60,16 +60,19 @@ export async function setAuthorities() { await api.disconnect(); } -export function retry(retries: any, executor: any): any { - console.log(`${retries as string} retries left!`); - - if (typeof retries !== "number") { - throw new TypeError("retries is not a number"); +export async function retry( + retries: number, + func: () => PromiseLike, +): Promise { + console.log(`${retries} retries left!`); + try { + return await func(); + } catch (error) { + if (retries > 0) { + return await retry(retries - 1, func); + } + throw error; } - - return new Promise(executor).catch((error) => - retries > 0 ? retry(retries - 1, executor) : Promise.reject(error), - ); } function setup() { diff --git a/scripts/cc-cli/src/index.ts b/scripts/cc-cli/src/index.ts index d988376009..1e85112384 100644 --- a/scripts/cc-cli/src/index.ts +++ b/scripts/cc-cli/src/index.ts @@ -17,7 +17,6 @@ import { makeDistributeRewardsCommand } from "./commands/distributeRewards"; import { makeUnbondCommand } from "./commands/unbond"; import { makeStatusCommand } from "./commands/status"; import { makeWithdrawUnbondedCommand } from "./commands/withdrawUnbonded"; -import { makeCollectCoinsCmd } from "./commands/collectCoins"; import { makeRegisterAddressCmd } from "./commands/registerAddress"; const program = new Command(); @@ -32,7 +31,6 @@ program .addCommand(makeBalanceCommand()) .addCommand(makeBondCommand()) .addCommand(makeChillCommand()) - .addCommand(makeCollectCoinsCmd()) .addCommand(makeDistributeRewardsCommand()) .addCommand(makeNewSeedCommand()) .addCommand(makeRegisterAddressCmd()) diff --git a/scripts/cc-cli/src/interfaces/lookup.ts b/scripts/cc-cli/src/interfaces/lookup.ts index 51f90f8bf6..cf79dfd7f6 100644 --- a/scripts/cc-cli/src/interfaces/lookup.ts +++ b/scripts/cc-cli/src/interfaces/lookup.ts @@ -232,79 +232,6 @@ export default { FrameSupportTokensMiscBalanceStatus: { _enum: ["Free", "Reserved"], }, - /** - * Lookup32: pallet_staking::pallet::pallet::Event - **/ - PalletStakingPalletEvent: { - _enum: { - EraPaid: { - eraIndex: "u32", - validatorPayout: "u128", - remainder: "u128", - }, - Rewarded: { - stash: "AccountId32", - amount: "u128", - }, - Slashed: { - staker: "AccountId32", - amount: "u128", - }, - SlashReported: { - validator: "AccountId32", - fraction: "Perbill", - slashEra: "u32", - }, - OldSlashingReportDiscarded: { - sessionIndex: "u32", - }, - StakersElected: "Null", - Bonded: { - stash: "AccountId32", - amount: "u128", - }, - Unbonded: { - stash: "AccountId32", - amount: "u128", - }, - Withdrawn: { - stash: "AccountId32", - amount: "u128", - }, - Kicked: { - nominator: "AccountId32", - stash: "AccountId32", - }, - StakingElectionFailed: "Null", - Chilled: { - stash: "AccountId32", - }, - PayoutStarted: { - eraIndex: "u32", - validatorStash: "AccountId32", - }, - ValidatorPrefsSet: { - stash: "AccountId32", - prefs: "PalletStakingValidatorPrefs", - }, - ForceEra: { - mode: "PalletStakingForcing", - }, - }, - }, - /** - * Lookup34: pallet_staking::ValidatorPrefs - **/ - PalletStakingValidatorPrefs: { - commission: "Compact", - blocked: "bool", - }, - /** - * Lookup37: pallet_staking::Forcing - **/ - PalletStakingForcing: { - _enum: ["NotForcing", "ForceNew", "ForceNone", "ForceAlways"], - }, /** * Lookup38: pallet_offences::pallet::Event **/ @@ -368,21 +295,6 @@ export default { * Lookup48: sp_core::sr25519::Public **/ SpCoreSr25519Public: "[u8;32]", - /** - * Lookup51: pallet_staking::Exposure - **/ - PalletStakingExposure: { - total: "Compact", - own: "Compact", - others: "Vec", - }, - /** - * Lookup54: pallet_staking::IndividualExposure - **/ - PalletStakingIndividualExposure: { - who: "AccountId32", - value: "Compact", - }, /** * Lookup55: pallet_bags_list::pallet::Event **/ @@ -1291,249 +1203,6 @@ export default { "TooManyReserves", ], }, - /** - * Lookup181: pallet_staking::StakingLedger - **/ - PalletStakingStakingLedger: { - stash: "AccountId32", - total: "Compact", - active: "Compact", - unlocking: "Vec", - claimedRewards: "Vec", - }, - /** - * Lookup183: pallet_staking::UnlockChunk - **/ - PalletStakingUnlockChunk: { - value: "Compact", - era: "Compact", - }, - /** - * Lookup186: pallet_staking::RewardDestination - **/ - PalletStakingRewardDestination: { - _enum: { - Staked: "Null", - Stash: "Null", - Controller: "Null", - Account: "AccountId32", - None: "Null", - }, - }, - /** - * Lookup187: pallet_staking::Nominations - **/ - PalletStakingNominations: { - targets: "Vec", - submittedIn: "u32", - suppressed: "bool", - }, - /** - * Lookup189: pallet_staking::ActiveEraInfo - **/ - PalletStakingActiveEraInfo: { - index: "u32", - start: "Option", - }, - /** - * Lookup191: pallet_staking::EraRewardPoints - **/ - PalletStakingEraRewardPoints: { - total: "u32", - individual: "BTreeMap", - }, - /** - * Lookup196: pallet_staking::UnappliedSlash - **/ - PalletStakingUnappliedSlash: { - validator: "AccountId32", - own: "u128", - others: "Vec<(AccountId32,u128)>", - reporters: "Vec", - payout: "u128", - }, - /** - * Lookup200: pallet_staking::slashing::SlashingSpans - **/ - PalletStakingSlashingSlashingSpans: { - spanIndex: "u32", - lastStart: "u32", - lastNonzeroSlash: "u32", - prior: "Vec", - }, - /** - * Lookup201: pallet_staking::slashing::SpanRecord - **/ - PalletStakingSlashingSpanRecord: { - slashed: "u128", - paidOut: "u128", - }, - /** - * Lookup205: pallet_staking::pallet::pallet::Call - **/ - PalletStakingPalletCall: { - _enum: { - bond: { - controller: "MultiAddress", - value: "Compact", - payee: "PalletStakingRewardDestination", - }, - bond_extra: { - maxAdditional: "Compact", - }, - unbond: { - value: "Compact", - }, - withdraw_unbonded: { - numSlashingSpans: "u32", - }, - validate: { - prefs: "PalletStakingValidatorPrefs", - }, - nominate: { - targets: "Vec", - }, - chill: "Null", - set_payee: { - payee: "PalletStakingRewardDestination", - }, - set_controller: { - controller: "MultiAddress", - }, - set_validator_count: { - _alias: { - new_: "new", - }, - new_: "Compact", - }, - increase_validator_count: { - additional: "Compact", - }, - scale_validator_count: { - factor: "Percent", - }, - force_no_eras: "Null", - force_new_era: "Null", - set_invulnerables: { - invulnerables: "Vec", - }, - force_unstake: { - stash: "AccountId32", - numSlashingSpans: "u32", - }, - force_new_era_always: "Null", - cancel_deferred_slash: { - era: "u32", - slashIndices: "Vec", - }, - payout_stakers: { - validatorStash: "AccountId32", - era: "u32", - }, - rebond: { - value: "Compact", - }, - reap_stash: { - stash: "AccountId32", - numSlashingSpans: "u32", - }, - kick: { - who: "Vec", - }, - set_staking_configs: { - minNominatorBond: "PalletStakingPalletConfigOpU128", - minValidatorBond: "PalletStakingPalletConfigOpU128", - maxNominatorCount: "PalletStakingPalletConfigOpU32", - maxValidatorCount: "PalletStakingPalletConfigOpU32", - chillThreshold: "PalletStakingPalletConfigOpPercent", - minCommission: "PalletStakingPalletConfigOpPerbill", - }, - chill_other: { - controller: "AccountId32", - }, - force_apply_min_commission: { - validatorStash: "AccountId32", - }, - set_min_commission: { - _alias: { - new_: "new", - }, - new_: "Perbill", - }, - }, - }, - /** - * Lookup207: pallet_staking::pallet::pallet::ConfigOp - **/ - PalletStakingPalletConfigOpU128: { - _enum: { - Noop: "Null", - Set: "u128", - Remove: "Null", - }, - }, - /** - * Lookup208: pallet_staking::pallet::pallet::ConfigOp - **/ - PalletStakingPalletConfigOpU32: { - _enum: { - Noop: "Null", - Set: "u32", - Remove: "Null", - }, - }, - /** - * Lookup209: pallet_staking::pallet::pallet::ConfigOp - **/ - PalletStakingPalletConfigOpPercent: { - _enum: { - Noop: "Null", - Set: "Percent", - Remove: "Null", - }, - }, - /** - * Lookup210: pallet_staking::pallet::pallet::ConfigOp - **/ - PalletStakingPalletConfigOpPerbill: { - _enum: { - Noop: "Null", - Set: "Perbill", - Remove: "Null", - }, - }, - /** - * Lookup211: pallet_staking::pallet::pallet::Error - **/ - PalletStakingPalletError: { - _enum: [ - "NotController", - "NotStash", - "AlreadyBonded", - "AlreadyPaired", - "EmptyTargets", - "DuplicateIndex", - "InvalidSlashIndex", - "InsufficientBond", - "NoMoreChunks", - "NoUnlockChunk", - "FundedTarget", - "InvalidEraToReward", - "InvalidNumberOfNominations", - "NotSortedAndUnique", - "AlreadyClaimed", - "IncorrectHistoryDepth", - "IncorrectSlashingSpans", - "BadState", - "TooManyTargets", - "BadTarget", - "CannotChillOther", - "TooManyNominators", - "TooManyValidators", - "CommissionTooLow", - "BoundNotMet", - ], - }, /** * Lookup212: sp_staking::offence::OffenceDetails **/ diff --git a/scripts/cc-cli/src/test/integration-tests/collectCoins.test.ts b/scripts/cc-cli/src/test/integration-tests/collectCoins.test.ts deleted file mode 100644 index 65db431d93..0000000000 --- a/scripts/cc-cli/src/test/integration-tests/collectCoins.test.ts +++ /dev/null @@ -1,144 +0,0 @@ -import { parseAmountInternal } from "../../utils/parsing"; -import { signSendAndWatch } from "../../utils/tx"; -import { fundFromSudo, randomTestAccount } from "./helpers"; -import { arg, retry, setArgIfUndef, setAuthorities } from "../../globalSetup"; -import execa from "execa"; -import { - Blockchain, - CreditcoinApi, - KeyringPair, - Wallet, - creditcoinApi, - providers, -} from "creditcoin-js"; -import { cryptoWaitReady } from "@polkadot/util-crypto"; -import { deployCtcContract, CREDO_PER_CTC } from "creditcoin-js/lib/ctc-deploy"; -import { - forElapsedBlocks, - testData, - tryRegisterAddress, -} from "creditcoin-js/lib/testUtils"; -import { describeIf } from "../../utils/tests"; -import { getBalance } from "../../utils/balance"; - -describeIf(arg("CREDITCOIN_EXECUTE_SETUP_AUTHORITY"), "collect-coins", () => { - let ccApi: CreditcoinApi; - let sudo: KeyringPair; - let caller: any; - - const { keyring, blockchain } = testData( - arg("CREDITCOIN_ETHEREUM_CHAIN") as Blockchain, - arg("CREDITCOIN_CREATE_WALLET"), - ); - - beforeAll(async () => { - // will deploy the contract and burn 3 CTC - await deployCtcContract( - (global as any).CREDITCOIN_CTC_CONTRACT_ADDRESS, - (global as any).CREDITCOIN_ETHEREUM_NODE_URL, - (global as any).CREDITCOIN_CTC_DEPLOYER_PRIVATE_KEY, - (3 * CREDO_PER_CTC).toString(), - ); - setArgIfUndef( - "CREDITCOIN_CTC_CONTRACT_ADDRESS", - process.env.CREDITCOIN_CTC_CONTRACT_ADDRESS, - ); - setArgIfUndef( - "CREDITCOIN_CTC_BURN_TX_HASH", - process.env.CREDITCOIN_CTC_BURN_TX_HASH, - ); - - await retry(5, async (resolve: any, reject: any) => { - await setAuthorities().then(resolve).catch(reject); - }).catch(() => { - console.log("Could not setup testing authorities"); - process.exit(1); - }); - - await cryptoWaitReady(); - - caller = randomTestAccount(false); - - ccApi = await creditcoinApi((global as any).CREDITCOIN_API_URL); - sudo = arg("CREDITCOIN_CREATE_SIGNER")(keyring, "sudo"); - - const { api } = ccApi; - - /* eslint-disable @typescript-eslint/naming-convention */ - const contract = api.createType( - "PalletCreditcoinOcwTasksCollectCoinsDeployedContract", - { - address: (global as any).CREDITCOIN_CTC_CONTRACT_ADDRESS, - chain: blockchain, - }, - ); - - await api.tx.sudo - .sudo(api.tx.creditcoin.setCollectCoinsContract(contract)) - .signAndSend(sudo, { nonce: -1 }); - }, 100_000); - - afterAll(async () => { - await ccApi.api.disconnect(); - }); - - test("e2e", async () => { - const { - api, - utils: { signAccountId }, - } = ccApi; - - const provider = new providers.JsonRpcProvider( - arg("CREDITCOIN_ETHEREUM_NODE_URL"), - ); - const deployerWallet = new Wallet( - arg("CREDITCOIN_CTC_DEPLOYER_PRIVATE_KEY"), - provider, - ); - - const fundTx = await fundFromSudo( - caller.address, - parseAmountInternal("5"), - arg("CREDITCOIN_API_URL"), - ); - await signSendAndWatch(fundTx, api, sudo); - - await tryRegisterAddress( - ccApi, - deployerWallet.address, - blockchain, - signAccountId(deployerWallet, caller.address), - caller.keyring, - (global as any).CREDITCOIN_REUSE_EXISTING_ADDRESSES, - ); - - // Read balance after register address call but prior to collect coins - const starting = await getBalance(caller.address, api); - - const url = arg("CREDITCOIN_API_URL") as string; - const txHash = arg("CREDITCOIN_CTC_BURN_TX_HASH") as string; - const collectResult = execa.commandSync( - `node dist/index.js collect-coins --url ${url} --external-address ${deployerWallet.address} --burn-tx-hash ${txHash}`, - { - env: { - CC_SECRET: caller.secret, - }, - }, - ); - - const collectOutput = collectResult.stdout.split("\n"); - expect(collectResult.failed).toBe(false); - expect(collectResult.exitCode).toBe(0); - expect(collectResult.stderr).toBe(""); - expect(collectOutput[collectOutput.length - 1]).toBe("Success!"); - - // wait for 2 more blocks - await forElapsedBlocks(api); - - // read the balance after collect coins - const ending = await getBalance(caller.address, api); - - // note: these are of type BN and .toBeGreaterThan() doesn't work - expect(ending.total > starting.total).toBe(true); - }, 900_000); -}); diff --git a/scripts/cc-cli/src/test/integration-tests/registerAddress.test.ts b/scripts/cc-cli/src/test/integration-tests/registerAddress.test.ts index 1bd0fee47d..f8b8fba3ee 100644 --- a/scripts/cc-cli/src/test/integration-tests/registerAddress.test.ts +++ b/scripts/cc-cli/src/test/integration-tests/registerAddress.test.ts @@ -12,6 +12,7 @@ import { } from "creditcoin-js"; import { cryptoWaitReady } from "@polkadot/util-crypto"; import { testData } from "creditcoin-js/lib/testUtils"; +import { utils } from "ethers"; describe("register-address", () => { let ccApi: CreditcoinApi; @@ -32,14 +33,9 @@ describe("register-address", () => { arg("CREDITCOIN_CREATE_WALLET"), ); + // this arg call returns a function sudo = arg("CREDITCOIN_CREATE_SIGNER")(keyring, "sudo"); - }); - - afterAll(async () => { - await ccApi.api.disconnect(); - }); - test("e2e", async () => { const { api } = ccApi; const fundTx = await fundFromSudo( @@ -48,26 +44,49 @@ describe("register-address", () => { arg("CREDITCOIN_API_URL"), ); await signSendAndWatch(fundTx, api, sudo); + }, 100_000); + + afterAll(async () => { + await ccApi.api.disconnect(); + }); - const url = arg("CREDITCOIN_API_URL") as string; - const result = execa.commandSync( - `node dist/index.js register-address --url ${url} --blockchain Ethereum`, - { - env: { - // eslint-disable-next-line @typescript-eslint/naming-convention - ETH_PRIVATE_KEY: ethWallet.privateKey, - CC_SECRET: caller.secret, + it.each([ + ["using ethereum private key", false], + ["Using an ethereum mnemonic", true], + ])( + "should be able to register address: %s", + (text, useMnemonic) => { + let ethPrivateKey: string; + + if (useMnemonic) { + ethPrivateKey = utils.entropyToMnemonic(utils.randomBytes(32)); + } else { + ethPrivateKey = ethWallet.privateKey; + } + + const url = arg("CREDITCOIN_API_URL") as string; + const result = execa.commandSync( + `node dist/index.js register-address --url ${url} --blockchain Ethereum ${ + useMnemonic ? "--eth-mnemonic" : "" + }`, + { + env: { + // eslint-disable-next-line @typescript-eslint/naming-convention + ETH_PRIVATE_KEY: ethPrivateKey, + CC_SECRET: caller.secret, + }, }, - }, - ); + ); - const stdout = result.stdout.split("\n"); + const stdout = result.stdout.split("\n"); - expect(result.failed).toBe(false); - expect(result.exitCode).toBe(0); - expect(result.stderr).toBe(""); - expect( - stdout[stdout.length - 1].includes("Address Registered Successfully"), - ).toBe(true); - }, 50_000); + expect(result.failed).toBe(false); + expect(result.exitCode).toBe(0); + expect(result.stderr).toBe(""); + expect( + stdout[stdout.length - 1].includes("Address Registered Successfully"), + ).toBe(true); + }, + 50_000, + ); }); diff --git a/scripts/cc-cli/src/test/integration-tests/validatorCycle.test.ts b/scripts/cc-cli/src/test/integration-tests/validatorCycle.test.ts index ea2af442f0..1962955b57 100644 --- a/scripts/cc-cli/src/test/integration-tests/validatorCycle.test.ts +++ b/scripts/cc-cli/src/test/integration-tests/validatorCycle.test.ts @@ -157,9 +157,8 @@ describe("integration test: validator manual setup", () => { ); // wait 5 seconds for nodes to sync await new Promise((resolve) => setTimeout(resolve, 5000)); - const validatorSessionKeys = await aliceApi.query.session.nextKeys( - stashAddress, - ); + const validatorSessionKeys = + await aliceApi.query.session.nextKeys(stashAddress); expect(validatorSessionKeys.toHex()).toBe(newKeys); const nodeHasKeys = (await bobApi.rpc.author.hasSessionKeys(newKeys)) .isTrue; diff --git a/scripts/cc-cli/src/test/unit-tests/collect-coins.test.ts b/scripts/cc-cli/src/test/unit-tests/collect-coins.test.ts deleted file mode 100644 index 2a84e3e17e..0000000000 --- a/scripts/cc-cli/src/test/unit-tests/collect-coins.test.ts +++ /dev/null @@ -1,98 +0,0 @@ -import { - isExternalAddressValid, - isTxHashValid, -} from "../../commands/collectCoins"; - -describe(isTxHashValid, () => { - test("should return true with a valid hash", () => { - expect( - isTxHashValid( - "0x2446f1fd773fbb9f080e674b60c6a033c7ed7427b8b9413cf28a2a4a6da9b56c", - ), - ).toBe(true); - }); - - test("should return false with missing '0x' prefix", () => { - expect( - isTxHashValid( - "2446f1fd773fbb9f080e674b60c6a033c7ed7427b8b9413cf28a2a4a6da9b56c", - ), - ).toBe(false); - }); - - test("should return false when tx hash length < 64 characters", () => { - expect( - isTxHashValid( - "0x2446f1fd773fbb9f080e674b60c6a033c7ed7427b8b9413cf28a2a4a6da9b56", - ), - ).toBe(false); - }); - - test("should return false when tx hash length > 64 characters", () => { - expect( - isTxHashValid( - "0x2446f1fd773fbb9f080e674b60c6a033c7ed7427b8b9413cf28a2a4a6da9b56ceeeeee", - ), - ).toBe(false); - }); - - test("should return false when called with empty string", () => { - expect(isTxHashValid("")).toBe(false); - }); - - test("Should return false when input has non hexadecimal character(s)", () => { - expect( - isTxHashValid( - "0x2446f1fd773fbb9f080e674b60-INVALID-d7427b8b9413cf28a2a4a6da9b56c", - ), - ).toBe(false); - }); -}); - -describe(isExternalAddressValid, () => { - test("should return true with valid address, prefixed with '0x'", () => { - expect( - isExternalAddressValid("0x71C7656EC7ab88b098defB751B7401B5f6d8976F"), - ).toBe(true); - }); - - test("should return true with valid address missing the '0x' prefix", () => { - expect( - isExternalAddressValid("71C7656EC7ab88b098defB751B7401B5f6d8976F"), - ).toBe(true); - }); - - test("Should return false when called with empty string", () => { - expect(isExternalAddressValid("")).toBe(false); - }); - - test("should return false when argument length < 42, including the '0x' prefix", () => { - expect( - isExternalAddressValid("0x71C7656EC7ab88b098defB751B7401B5f6d8976"), - ).toBe(false); - }); - - test("should return false when input has non hexadecimal characters", () => { - expect( - isExternalAddressValid("0x71C7656EC7ab88b098-INVALID-401B5f6d8976F"), - ).toBe(false); - }); - - test("should return false when argument length > 42, including the '0x' prefix", () => { - expect( - isExternalAddressValid("0x71C7656EC7ab88b098defB751B7401B5f6d8976FF"), - ).toBe(false); - }); - - test("should return false when argument length < 40, without the '0x' prefix", () => { - expect( - isExternalAddressValid("71C7656EC7ab88b098defB751B7401B5f6d8976"), - ).toBe(false); - }); - - test("should return false when argument length > 40, without the '0x' prefix", () => { - expect( - isExternalAddressValid("71C7656EC7ab88b098defB751B7401B5f6d8976FF"), - ).toBe(false); - }); -}); diff --git a/scripts/cc-cli/src/test/unit-tests/register-address.test.ts b/scripts/cc-cli/src/test/unit-tests/register-address.test.ts index dfe35fcec2..a84e503b5c 100644 --- a/scripts/cc-cli/src/test/unit-tests/register-address.test.ts +++ b/scripts/cc-cli/src/test/unit-tests/register-address.test.ts @@ -1,4 +1,11 @@ -import { isValidPrivateKey } from "../../commands/registerAddress"; +import { Wallet } from "creditcoin-js"; +import { + isMnemonicValid, + isValidPrivateKey, + newWalletFromMnemonic, + newWalletFromPrivateKey, +} from "../../commands/registerAddress"; +import { utils } from "ethers"; describe(isValidPrivateKey, () => { test("should return true when called with valid private key", () => { @@ -45,3 +52,77 @@ describe(isValidPrivateKey, () => { ).toBe(false); }); }); + +describe(newWalletFromPrivateKey, () => { + test("should return new wallet with valid private key", () => { + const goodWallet = Wallet.createRandom(); + + const testWallet = newWalletFromPrivateKey(goodWallet.privateKey); + expect(testWallet).toBeTruthy(); + expect(testWallet.privateKey).toEqual(goodWallet.privateKey); + expect(testWallet).toBeInstanceOf(Wallet); + }); + + test("should throw error with invalid private key", () => { + const goodWallet = Wallet.createRandom(); + const badPk = goodWallet.privateKey.substring( + 0, + goodWallet.privateKey.length - 1, + ); + expect(() => { + newWalletFromPrivateKey(badPk); + }).toThrow("Error: Could not create wallet from private key:"); + }); + + test("should thow error when called with empty string", () => { + expect(() => { + newWalletFromPrivateKey(""); + }).toThrow("Error: Could not create wallet from private key:"); + }); +}); + +describe(newWalletFromMnemonic, () => { + test("should return new wallet with valid mnemonic", () => { + const mnemonic = utils.entropyToMnemonic(utils.randomBytes(32)); + const testWallet = newWalletFromMnemonic(mnemonic); + expect(testWallet).toBeTruthy(); + expect(testWallet).toBeInstanceOf(Wallet); + }); + + test("should throw error when called with bad mnemonic", () => { + // construct a bad mnemonic by taking a good one and dropping the last word + const mnemonic = utils.entropyToMnemonic(utils.randomBytes(32)).split(" "); + mnemonic.pop(); + const badMnemonic = mnemonic.join(" "); + expect(() => { + newWalletFromMnemonic(badMnemonic); + }).toThrow("Error: Could not create wallet from mnemonic:"); + }); + + test("should throw error when called with empty string", () => { + expect(() => { + newWalletFromMnemonic(""); + }).toThrow("Error: Could not create wallet from mnemonic:"); + }); +}); + +describe(isMnemonicValid, () => { + test("should return true when called with valid mnemonic", () => { + expect( + isMnemonicValid(utils.entropyToMnemonic(utils.randomBytes(32))), + ).toBe(true); + }); + + test("should return false when called with empty string", () => { + expect(isMnemonicValid("")).toBe(false); + }); + + test("should return false when called with odd length mnemonic", () => { + // construct a bad mnemonic by taking a good one and dropping the last word + const mnemonic = utils.entropyToMnemonic(utils.randomBytes(32)).split(" "); + mnemonic.pop(); + const badMnemonic = mnemonic.join(" "); + + expect(isMnemonicValid(badMnemonic)).toBe(false); + }); +}); diff --git a/scripts/cc-cli/src/utils/validatorStatus.ts b/scripts/cc-cli/src/utils/validatorStatus.ts index f2716960bb..a499aa5f71 100644 --- a/scripts/cc-cli/src/utils/validatorStatus.ts +++ b/scripts/cc-cli/src/utils/validatorStatus.ts @@ -20,18 +20,67 @@ function formatDaysHoursMinutes(ms: number) { return `${daysString}${hoursString}${minutesString}${secString}`; } -export async function getValidatorStatus(address: string, api: ApiPromise) { - const res = await api.derive.staking.account(address); - const totalStaked = readAmount(res.stakingLedger.total.toString()); - const bonded = totalStaked.gt(new BN(0)); +export interface StashControllerPair { + stash: string; + controller?: string; +} - const controller = res.controllerId ? res.controllerId.toString() : "None"; +export interface ControllerStatus { + isController: boolean; + stash?: string; +} +export async function getControllerStatus( + address: string, + api: ApiPromise, +): Promise { const stashRes = await api.query.staking.ledger(address); const stash = stashRes.isSome ? stashRes.unwrap().stash.toString() : undefined; + let status; + if (stash) { + status = { + isController: true, + stash, + }; + } else { + status = { + isController: false, + stash: undefined, + }; + } + return status; +} + +export async function getValidatorStatus(address: string, api: ApiPromise) { + // Check if address is a controller and get its stash + const controllerStatus = await getControllerStatus(address, api); + + // If it is a controller, set the stash to its stash address + let stash; + if (controllerStatus.isController && controllerStatus.stash) { + console.log( + `Address belongs to the Controller account for validator ${controllerStatus.stash}`, + ); + console.log(`Showing status for ${controllerStatus.stash}...`); + stash = controllerStatus.stash; + } else { + stash = address; + } + + // Get the staking information for the stash + const res = await api.derive.staking.account(stash); + + // Get the controller address + const controller = res.controllerId ? res.controllerId.toString() : undefined; + + // Get the total staked amount + const totalStaked = readAmount(res.stakingLedger.total.toString()); + const bonded = totalStaked.gt(new BN(0)); + + // Get information about any unbonding tokens and unlocked chunks const unlockingRes = res.stakingLedger.unlocking; const currentEra = (await api.query.staking.currentEra()).unwrap(); const unlocking = unlockingRes @@ -42,6 +91,8 @@ export async function getValidatorStatus(address: string, api: ApiPromise) { ? readAmountFromHex(res.redeemable.toString()) : new BN(0); + // Get the unlocked chunks that are ready for withdrawal + // by comparing the era of each chunk to the current era const readyForWithdraw = res.stakingLedger.unlocking .map((u: any) => { const chunk: UnlockChunk = { @@ -60,15 +111,14 @@ export async function getValidatorStatus(address: string, api: ApiPromise) { const nextUnbondingAmount = unlocking.length > 0 ? unlocking[0].value.toBn() : null; + // Get lists of all validators, active validators, and waiting validators const validatorEntries = await api.query.staking.validators .entries() .then((r) => r.map((v) => v[0].toHuman()?.toString())); - const activeValidatorsRes = await api.derive.staking.validators(); const activeValidators: string[] = activeValidatorsRes.validators.map((v) => v.toString(), ); - const waitingValidators = validatorEntries.filter((v) => { if (v !== undefined) { return !activeValidators.includes(v); @@ -77,17 +127,22 @@ export async function getValidatorStatus(address: string, api: ApiPromise) { } }); + // Check if the validator is validating, waiting, or active + const validating = validatorEntries.includes(stash); + const waiting = waitingValidators.includes(stash); + const active = activeValidators.includes(stash); + const validatorStatus: Status = { bonded, stash, controller, - validating: validatorEntries.includes(address), - waiting: waitingValidators.includes(address), - active: activeValidators.includes(address), + validating, + waiting, + active, canWithdraw, readyForWithdraw, nextUnbondingDate, - nextUnbondingAmount: nextUnbondingAmount ? nextUnbondingAmount : new BN(0), + nextUnbondingAmount: nextUnbondingAmount || new BN(0), redeemable, }; @@ -111,8 +166,8 @@ export async function printValidatorStatus(status: Status, api: ApiPromise) { table.push([`Unlocked since era ${chunk.era}`, toCTCString(chunk.value)]); }); } - let nextUnlocking = "None"; - if (status.nextUnbondingAmount && status.nextUnbondingAmount.eq(new BN(0))) { + let nextUnlocking; + if (status.nextUnbondingAmount?.eq(new BN(0))) { nextUnlocking = "None"; } else if (status.nextUnbondingAmount && status.nextUnbondingDate) { const nextUnbondingAmount = toCTCString(status.nextUnbondingAmount); @@ -133,9 +188,8 @@ export function requireStatus( ) { if (!status[condition]) { console.error( - message - ? message - : `Cannot perform action, validator is not ${condition.toString()}`, + message || + `Cannot perform action, validator is not ${condition.toString()}`, ); process.exit(1); } @@ -144,7 +198,7 @@ export function requireStatus( export interface Status { bonded: boolean; stash?: string; - controller: string; + controller?: string; validating: boolean; waiting: boolean; active: boolean; diff --git a/scripts/cc-cli/yarn.lock b/scripts/cc-cli/yarn.lock index 82e0deeac5..c5f0c26a0d 100644 --- a/scripts/cc-cli/yarn.lock +++ b/scripts/cc-cli/yarn.lock @@ -390,9 +390,9 @@ source-map-support "^0.5.16" "@babel/runtime@^7.20.13", "@babel/runtime@^7.20.6": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.15.tgz#38f46494ccf6cf020bd4eed7124b425e83e523b8" - integrity sha512-T0O+aa+4w0u06iNmapipJXMV4HoUir03hpx3/YqXXhu9xim3w+dVphjFWl1OH8NbZHw5Lbm9k45drDkgq2VNNA== + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.25.0.tgz#3af9a91c1b739c569d5d80cc917280919c544ecb" + integrity sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw== dependencies: regenerator-runtime "^0.14.0" @@ -488,15 +488,15 @@ dependencies: eslint-visitor-keys "^3.3.0" -"@eslint-community/regexpp@^4.5.1", "@eslint-community/regexpp@^4.6.1": - version "4.8.0" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.8.0.tgz#11195513186f68d42fbf449f9a7136b2c0c92005" - integrity sha512-JylOEEzDiOryeUnFbQz+oViCXS0KsvR1mvHkoMiu5+UiBvy+RYX7tzlIIIEstF/gVa2tj9AQXk3dgnxv6KxhFg== +"@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.6.1": + version "4.10.0" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63" + integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== -"@eslint/eslintrc@^2.1.2": - version "2.1.2" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.2.tgz#c6936b4b328c64496692f76944e755738be62396" - integrity sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g== +"@eslint/eslintrc@^2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad" + integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== dependencies: ajv "^6.12.4" debug "^4.3.2" @@ -508,10 +508,10 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@8.48.0": - version "8.48.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.48.0.tgz#642633964e217905436033a2bd08bf322849b7fb" - integrity sha512-ZSjtmelB7IJfWD2Fvb7+Z+ChTIKWq6kjda95fLcQKNS5aheVHn4IkfgRQE3sIIzTcSLwLcLZUD9UBt+V7+h+Pw== +"@eslint/js@8.57.0": + version "8.57.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.0.tgz#a5417ae8427873f1dd08b70b3574b453e67b5f7f" + integrity sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g== "@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.7.0": version "5.7.0" @@ -855,13 +855,13 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/strings" "^5.7.0" -"@humanwhocodes/config-array@^0.11.10": - version "0.11.10" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.10.tgz#5a3ffe32cc9306365fb3fd572596cd602d5e12d2" - integrity sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ== +"@humanwhocodes/config-array@^0.11.14": + version "0.11.14" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b" + integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg== dependencies: - "@humanwhocodes/object-schema" "^1.2.1" - debug "^4.1.1" + "@humanwhocodes/object-schema" "^2.0.2" + debug "^4.3.1" minimatch "^3.0.5" "@humanwhocodes/module-importer@^1.0.1": @@ -869,10 +869,10 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== -"@humanwhocodes/object-schema@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" - integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== +"@humanwhocodes/object-schema@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz#d9fae00a2d5cb40f92cfe64b47ad749fbc38f917" + integrity sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw== "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" @@ -902,7 +902,7 @@ jest-util "^29.7.0" slash "^3.0.0" -"@jest/core@^29.5.0", "@jest/core@^29.7.0": +"@jest/core@^29.7.0": version "29.7.0" resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.7.0.tgz#b6cccc239f30ff36609658c5a5e2291757ce448f" integrity sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg== @@ -946,13 +946,6 @@ "@types/node" "*" jest-mock "^29.7.0" -"@jest/expect-utils@^29.5.0": - version "29.5.0" - resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.5.0.tgz#f74fad6b6e20f924582dc8ecbf2cb800fe43a036" - integrity sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg== - dependencies: - jest-get-type "^29.4.3" - "@jest/expect-utils@^29.7.0": version "29.7.0" resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.7.0.tgz#023efe5d26a8a70f21677d0a1afc0f0a44e3a1c6" @@ -1020,13 +1013,6 @@ strip-ansi "^6.0.0" v8-to-istanbul "^9.0.1" -"@jest/schemas@^29.4.3": - version "29.4.3" - resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.4.3.tgz#39cf1b8469afc40b6f5a2baaa146e332c4151788" - integrity sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg== - dependencies: - "@sinclair/typebox" "^0.25.16" - "@jest/schemas@^29.6.3": version "29.6.3" resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" @@ -1084,18 +1070,6 @@ slash "^3.0.0" write-file-atomic "^4.0.2" -"@jest/types@^29.5.0": - version "29.5.0" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.5.0.tgz#f59ef9b031ced83047c67032700d8c807d6e1593" - integrity sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog== - dependencies: - "@jest/schemas" "^29.4.3" - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^3.0.0" - "@types/node" "*" - "@types/yargs" "^17.0.8" - chalk "^4.0.0" - "@jest/types@^29.6.3": version "29.6.3" resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59" @@ -1591,11 +1565,6 @@ "@noble/hashes" "~1.3.0" "@scure/base" "~1.1.0" -"@sinclair/typebox@^0.25.16": - version "0.25.24" - resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.25.24.tgz#8c7688559979f7079aacaf31aa881c3aa410b718" - integrity sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ== - "@sinclair/typebox@^0.27.8": version "0.27.8" resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" @@ -1638,9 +1607,9 @@ ws "^8.8.1" "@substrate/ss58-registry@^1.38.0": - version "1.43.0" - resolved "https://registry.yarnpkg.com/@substrate/ss58-registry/-/ss58-registry-1.43.0.tgz#93108e45cb7ef6d82560c153e3692c2aa1c711b3" - integrity sha512-USEkXA46P9sqClL7PZv0QFsit4S8Im97wchKG0/H/9q3AT/S76r40UHfCr4Un7eBJPE23f7fU9BZ0ITpP9MCsA== + version "1.49.0" + resolved "https://registry.yarnpkg.com/@substrate/ss58-registry/-/ss58-registry-1.49.0.tgz#ed9507316d13f49b2bccb65f08ec97180f71fc39" + integrity sha512-leW6Ix4LD7XgvxT7+aobPWSw+WvPcN2Rxof1rmd0mNC5t2n99k1N7UNEvz7YEFSOUeHWmKIY7F5q8KeIqYoHfA== "@tsconfig/node10@^1.0.7": version "1.0.9" @@ -1696,9 +1665,9 @@ "@babel/types" "^7.20.7" "@types/bn.js@^5.1.1": - version "5.1.1" - resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.1.tgz#b51e1b55920a4ca26e9285ff79936bbdec910682" - integrity sha512-qNrYbZqMx0uJAfKnKclPh+dTwK33KfLHYqtyODwd5HnXOjnkhc4qgn3BrK6RWyGZm5+sIFE7Q7Vz6QQtJB7w7g== + version "5.1.5" + resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.5.tgz#2e0dacdcce2c0f16b905d20ff87aedbc6f7b4bf0" + integrity sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A== dependencies: "@types/node" "*" @@ -1728,31 +1697,28 @@ dependencies: "@types/istanbul-lib-report" "*" -"@types/jest@^29.5.2": - version "29.5.2" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.2.tgz#86b4afc86e3a8f3005b297ed8a72494f89e6395b" - integrity sha512-mSoZVJF5YzGVCk+FsDxzDuH7s+SCkzrgKZzf0Z0T2WudhBUPoF6ktoTPC4R0ZoCPCV5xUvuU6ias5NvxcBcMMg== +"@types/jest@^29.5.12": + version "29.5.12" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.12.tgz#7f7dc6eb4cf246d2474ed78744b05d06ce025544" + integrity sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw== dependencies: expect "^29.0.0" pretty-format "^29.0.0" -"@types/json-schema@^7.0.12": - version "7.0.12" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.12.tgz#d70faba7039d5fca54c83c7dbab41051d2b6f6cb" - integrity sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA== - "@types/node-fetch@^2.6.2": - version "2.6.4" - resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.4.tgz#1bc3a26de814f6bf466b25aeb1473fa1afe6a660" - integrity sha512-1ZX9fcN4Rvkvgv4E6PAY5WXUFWFcRWxZa3EW83UjycOB9ljJCedb2CupIP4RZMEwF/M3eTcCihbBRgwtGbg5Rg== + version "2.6.11" + resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.11.tgz#9b39b78665dae0e82a08f02f4967d62c66f95d24" + integrity sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g== dependencies: "@types/node" "*" - form-data "^3.0.0" + form-data "^4.0.0" "@types/node@*": - version "20.6.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.6.0.tgz#9d7daa855d33d4efec8aea88cd66db1c2f0ebe16" - integrity sha512-najjVq5KN2vsH2U/xyh2opaSEz6cZMR2SetLIlxlj08nOcmPOemJmUK2o4kUzfLqfrWE0PIrNeE16XhYDd3nqg== + version "22.2.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.2.0.tgz#7cf046a99f0ba4d628ad3088cb21f790df9b0c5b" + integrity sha512-bm6EG6/pCpkxDf/0gDNDdtDILMOHgaQBVOJGdwsqClnxA3xL6jtMv76rLBc006RVMWbmaf0xbmom4Z/5o2nRkQ== + dependencies: + undici-types "~6.13.0" "@types/prompts@^2.4.4": version "2.4.4" @@ -1762,20 +1728,15 @@ "@types/node" "*" kleur "^3.0.3" -"@types/semver@^7.5.0": - version "7.5.1" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.1.tgz#0480eeb7221eb9bc398ad7432c9d7e14b1a5a367" - integrity sha512-cJRQXpObxfNKkFAZbJl2yjWtJCqELQIdShsogr1d2MilP8dKD9TE/nEKHkJgUNHdGKCQaf9HbIynuV2csLGVLg== - "@types/stack-utils@^2.0.0": version "2.0.1" resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== "@types/websocket@^1.0.5": - version "1.0.6" - resolved "https://registry.yarnpkg.com/@types/websocket/-/websocket-1.0.6.tgz#ec8dce5915741632ac3a4b1f951b6d4156e32d03" - integrity sha512-JXkliwz93B2cMWOI1ukElQBPN88vMg3CruvW4KVSKpflt3NyNCJImnhIuB/f97rG7kakqRJGFiwkA895Kn02Dg== + version "1.0.10" + resolved "https://registry.yarnpkg.com/@types/websocket/-/websocket-1.0.10.tgz#804b1a02780da522f5742bc184a6d16a2eb78c7c" + integrity sha512-svjGZvPB7EzuYS94cI7a+qhwgGU1y89wUgjT6E2wVUfmAGIvRfT7obBvRtnhXCSsoMdlG4gBFGE7MfkIXZLoww== dependencies: "@types/node" "*" @@ -1791,90 +1752,126 @@ dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/eslint-plugin@^6.5.0": - version "6.5.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.5.0.tgz#5cee33edf0d45d5ec773e3b3111206b098ac8599" - integrity sha512-2pktILyjvMaScU6iK3925uvGU87E+N9rh372uGZgiMYwafaw9SXq86U04XPq3UH6tzRvNgBsub6x2DacHc33lw== +"@typescript-eslint/eslint-plugin@^7.15.0": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.15.0.tgz#8eaf396ac2992d2b8f874b68eb3fcd6b179cb7f3" + integrity sha512-uiNHpyjZtFrLwLDpHnzaDlP3Tt6sGMqTCiqmxaN4n4RP0EfYZDODJyddiFDF44Hjwxr5xAcaYxVKm9QKQFJFLA== dependencies: - "@eslint-community/regexpp" "^4.5.1" - "@typescript-eslint/scope-manager" "6.5.0" - "@typescript-eslint/type-utils" "6.5.0" - "@typescript-eslint/utils" "6.5.0" - "@typescript-eslint/visitor-keys" "6.5.0" - debug "^4.3.4" + "@eslint-community/regexpp" "^4.10.0" + "@typescript-eslint/scope-manager" "7.15.0" + "@typescript-eslint/type-utils" "7.15.0" + "@typescript-eslint/utils" "7.15.0" + "@typescript-eslint/visitor-keys" "7.15.0" graphemer "^1.4.0" - ignore "^5.2.4" + ignore "^5.3.1" natural-compare "^1.4.0" - semver "^7.5.4" - ts-api-utils "^1.0.1" + ts-api-utils "^1.3.0" -"@typescript-eslint/parser@^6.5.0": - version "6.5.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.5.0.tgz#3d6ed231c5e307c5f5f4a0d86893ec01e92b8c77" - integrity sha512-LMAVtR5GN8nY0G0BadkG0XIe4AcNMeyEy3DyhKGAh9k4pLSMBO7rF29JvDBpZGCmp5Pgz5RLHP6eCpSYZJQDuQ== +"@typescript-eslint/parser@^8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.0.0.tgz#5a5030cf8123176b5a0abd966f99e5f9f110652d" + integrity sha512-pS1hdZ+vnrpDIxuFXYQpLTILglTjSYJ9MbetZctrUawogUsPdz31DIIRZ9+rab0LhYNTsk88w4fIzVheiTbWOQ== dependencies: - "@typescript-eslint/scope-manager" "6.5.0" - "@typescript-eslint/types" "6.5.0" - "@typescript-eslint/typescript-estree" "6.5.0" - "@typescript-eslint/visitor-keys" "6.5.0" + "@typescript-eslint/scope-manager" "8.0.0" + "@typescript-eslint/types" "8.0.0" + "@typescript-eslint/typescript-estree" "8.0.0" + "@typescript-eslint/visitor-keys" "8.0.0" debug "^4.3.4" -"@typescript-eslint/scope-manager@6.5.0": - version "6.5.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.5.0.tgz#f2cb20895aaad41b3ad27cc3a338ce8598f261c5" - integrity sha512-A8hZ7OlxURricpycp5kdPTH3XnjG85UpJS6Fn4VzeoH4T388gQJ/PGP4ole5NfKt4WDVhmLaQ/dBLNDC4Xl/Kw== +"@typescript-eslint/scope-manager@7.15.0": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.15.0.tgz#201b34b0720be8b1447df17b963941bf044999b2" + integrity sha512-Q/1yrF/XbxOTvttNVPihxh1b9fxamjEoz2Os/Pe38OHwxC24CyCqXxGTOdpb4lt6HYtqw9HetA/Rf6gDGaMPlw== dependencies: - "@typescript-eslint/types" "6.5.0" - "@typescript-eslint/visitor-keys" "6.5.0" + "@typescript-eslint/types" "7.15.0" + "@typescript-eslint/visitor-keys" "7.15.0" -"@typescript-eslint/type-utils@6.5.0": - version "6.5.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.5.0.tgz#6d246c93739282bc0d2e623f28d0dec6cfcc38d7" - integrity sha512-f7OcZOkRivtujIBQ4yrJNIuwyCQO1OjocVqntl9dgSIZAdKqicj3xFDqDOzHDlGCZX990LqhLQXWRnQvsapq8A== +"@typescript-eslint/scope-manager@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.0.0.tgz#d14df46c9e43c53af7699dfa800cd615d7dfc118" + integrity sha512-V0aa9Csx/ZWWv2IPgTfY7T4agYwJyILESu/PVqFtTFz9RIS823mAze+NbnBI8xiwdX3iqeQbcTYlvB04G9wyQw== dependencies: - "@typescript-eslint/typescript-estree" "6.5.0" - "@typescript-eslint/utils" "6.5.0" + "@typescript-eslint/types" "8.0.0" + "@typescript-eslint/visitor-keys" "8.0.0" + +"@typescript-eslint/type-utils@7.15.0": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-7.15.0.tgz#5b83c904c6de91802fb399305a50a56d10472c39" + integrity sha512-SkgriaeV6PDvpA6253PDVep0qCqgbO1IOBiycjnXsszNTVQe5flN5wR5jiczoEoDEnAqYFSFFc9al9BSGVltkg== + dependencies: + "@typescript-eslint/typescript-estree" "7.15.0" + "@typescript-eslint/utils" "7.15.0" debug "^4.3.4" - ts-api-utils "^1.0.1" + ts-api-utils "^1.3.0" -"@typescript-eslint/types@6.5.0": - version "6.5.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.5.0.tgz#f4e55cfd99ac5346ea772770bf212a3e689a8f04" - integrity sha512-eqLLOEF5/lU8jW3Bw+8auf4lZSbbljHR2saKnYqON12G/WsJrGeeDHWuQePoEf9ro22+JkbPfWQwKEC5WwLQ3w== +"@typescript-eslint/types@7.15.0": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.15.0.tgz#fb894373a6e3882cbb37671ffddce44f934f62fc" + integrity sha512-aV1+B1+ySXbQH0pLK0rx66I3IkiZNidYobyfn0WFsdGhSXw+P3YOqeTq5GED458SfB24tg+ux3S+9g118hjlTw== + +"@typescript-eslint/types@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.0.0.tgz#7195ea9369fe5ee46b958d7ffca6bd26511cce18" + integrity sha512-wgdSGs9BTMWQ7ooeHtu5quddKKs5Z5dS+fHLbrQI+ID0XWJLODGMHRfhwImiHoeO2S5Wir2yXuadJN6/l4JRxw== -"@typescript-eslint/typescript-estree@6.5.0": - version "6.5.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.5.0.tgz#1cef6bc822585e9ef89d88834bc902d911d747ed" - integrity sha512-q0rGwSe9e5Kk/XzliB9h2LBc9tmXX25G0833r7kffbl5437FPWb2tbpIV9wAATebC/018pGa9fwPDuvGN+LxWQ== +"@typescript-eslint/typescript-estree@7.15.0": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.15.0.tgz#e323bfa3966e1485b638ce751f219fc1f31eba37" + integrity sha512-gjyB/rHAopL/XxfmYThQbXbzRMGhZzGw6KpcMbfe8Q3nNQKStpxnUKeXb0KiN/fFDR42Z43szs6rY7eHk0zdGQ== dependencies: - "@typescript-eslint/types" "6.5.0" - "@typescript-eslint/visitor-keys" "6.5.0" + "@typescript-eslint/types" "7.15.0" + "@typescript-eslint/visitor-keys" "7.15.0" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" - semver "^7.5.4" - ts-api-utils "^1.0.1" + minimatch "^9.0.4" + semver "^7.6.0" + ts-api-utils "^1.3.0" -"@typescript-eslint/utils@6.5.0": - version "6.5.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.5.0.tgz#6668bee4f7f24978b11df8a2ea42d56eebc4662c" - integrity sha512-9nqtjkNykFzeVtt9Pj6lyR9WEdd8npPhhIPM992FWVkZuS6tmxHfGVnlUcjpUP2hv8r4w35nT33mlxd+Be1ACQ== +"@typescript-eslint/typescript-estree@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.0.0.tgz#d172385ced7cb851a038b5c834c245a97a0f9cf6" + integrity sha512-5b97WpKMX+Y43YKi4zVcCVLtK5F98dFls3Oxui8LbnmRsseKenbbDinmvxrWegKDMmlkIq/XHuyy0UGLtpCDKg== + dependencies: + "@typescript-eslint/types" "8.0.0" + "@typescript-eslint/visitor-keys" "8.0.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + minimatch "^9.0.4" + semver "^7.6.0" + ts-api-utils "^1.3.0" + +"@typescript-eslint/utils@7.15.0": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-7.15.0.tgz#9e6253c4599b6e7da2fb64ba3f549c73eb8c1960" + integrity sha512-hfDMDqaqOqsUVGiEPSMLR/AjTSCsmJwjpKkYQRo1FNbmW4tBwBspYDwO9eh7sKSTwMQgBw9/T4DHudPaqshRWA== dependencies: "@eslint-community/eslint-utils" "^4.4.0" - "@types/json-schema" "^7.0.12" - "@types/semver" "^7.5.0" - "@typescript-eslint/scope-manager" "6.5.0" - "@typescript-eslint/types" "6.5.0" - "@typescript-eslint/typescript-estree" "6.5.0" - semver "^7.5.4" + "@typescript-eslint/scope-manager" "7.15.0" + "@typescript-eslint/types" "7.15.0" + "@typescript-eslint/typescript-estree" "7.15.0" -"@typescript-eslint/visitor-keys@6.5.0": - version "6.5.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.5.0.tgz#1a6f474a0170a447b76f0699ce6700110fd11436" - integrity sha512-yCB/2wkbv3hPsh02ZS8dFQnij9VVQXJMN/gbQsaaY+zxALkZnxa/wagvLEFsAWMPv7d7lxQmNsIzGU1w/T/WyA== +"@typescript-eslint/visitor-keys@7.15.0": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.15.0.tgz#1da0726201a859343fe6a05742a7c1792fff5b66" + integrity sha512-Hqgy/ETgpt2L5xueA/zHHIl4fJI2O4XUE9l4+OIfbJIRSnTJb/QscncdqqZzofQegIJugRIF57OJea1khw2SDw== dependencies: - "@typescript-eslint/types" "6.5.0" - eslint-visitor-keys "^3.4.1" + "@typescript-eslint/types" "7.15.0" + eslint-visitor-keys "^3.4.3" + +"@typescript-eslint/visitor-keys@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.0.0.tgz#224a67230190d267e6e78586bd7d8dfbd32ae4f3" + integrity sha512-oN0K4nkHuOyF3PVMyETbpP5zp6wfyOvm7tWhTMfoqxSSsPmJIh6JNASuZDlODE8eE+0EB9uar+6+vxr9DBTYOA== + dependencies: + "@typescript-eslint/types" "8.0.0" + eslint-visitor-keys "^3.4.3" + +"@ungap/structured-clone@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" + integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== acorn-jsx@^5.3.2: version "5.3.2" @@ -1967,6 +1964,11 @@ array-union@^2.1.0: resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== +async@^3.2.3: + version "3.2.5" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.5.tgz#ebd52a8fdaf7a2289a24df399f8d8485c8a46b66" + integrity sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg== + asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -2065,6 +2067,13 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + braces@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" @@ -2117,9 +2126,9 @@ buffer-from@^1.0.0: integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== bufferutil@^4.0.1: - version "4.0.7" - resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.7.tgz#60c0d19ba2c992dd8273d3f73772ffc894c153ad" - integrity sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw== + version "4.0.8" + resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.8.tgz#1de6a71092d65d7766c4d8a522b261a6e787e8ea" + integrity sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw== dependencies: node-gyp-build "^4.3.0" @@ -2165,7 +2174,7 @@ chalk@^2.0.0, chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^4.0.0, chalk@^4.1.2: +chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -2256,10 +2265,10 @@ combined-stream@^1.0.8: dependencies: delayed-stream "~1.0.0" -commander@^11.0.0: - version "11.0.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-11.0.0.tgz#43e19c25dbedc8256203538e8d7e9346877a6f67" - integrity sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ== +commander@^12.1.0: + version "12.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-12.1.0.tgz#01423b36f501259fdaac4d0e4d60c96c991585d3" + integrity sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA== commondir@^1.0.1: version "1.0.1" @@ -2299,9 +2308,9 @@ create-require@^1.1.0: resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== -"creditcoin-js@file:../../creditcoin-js/creditcoin-js-v0.10.1.tgz": - version "0.10.1" - resolved "file:../../creditcoin-js/creditcoin-js-v0.10.1.tgz#ad9f04d6e50d31398f9b3fcf0cb949cf223dbe1f" +"creditcoin-js@file:../../creditcoin-js/creditcoin-js-v0.10.4.tgz": + version "0.10.4" + resolved "file:../../creditcoin-js/creditcoin-js-v0.10.4.tgz#ef12eb584554c123064da756f5d208ceb882b76a" dependencies: "@polkadot/api" "9.14.2" ethers "^5.7.1" @@ -2316,13 +2325,13 @@ cross-spawn@^7.0.2, cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" -d@1, d@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" - integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== +d@1, d@^1.0.1, d@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/d/-/d-1.0.2.tgz#2aefd554b81981e7dccf72d6842ae725cb17e5de" + integrity sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw== dependencies: - es5-ext "^0.10.50" - type "^1.0.1" + es5-ext "^0.10.64" + type "^2.7.2" data-uri-to-buffer@^4.0.0: version "4.0.1" @@ -2336,7 +2345,14 @@ debug@^2.2.0: dependencies: ms "2.0.0" -debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: +debug@^4.1.0: + version "4.3.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.6.tgz#2ab2c38fbaffebf8aa95fdfe6d88438c7a13c52b" + integrity sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg== + dependencies: + ms "2.1.2" + +debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -2368,11 +2384,6 @@ detect-newline@^3.0.0: resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== -diff-sequences@^29.4.3: - version "29.4.3" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.4.3.tgz#9314bc1fabe09267ffeca9cbafc457d8499a13f2" - integrity sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA== - diff-sequences@^29.6.3: version "29.6.3" resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" @@ -2404,6 +2415,13 @@ ed2curve@^0.3.0: dependencies: tweetnacl "1.x.x" +ejs@^3.1.10: + version "3.1.10" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.10.tgz#69ab8358b14e896f80cc39e62087b88500c3ac3b" + integrity sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA== + dependencies: + jake "^10.8.5" + electron-to-chromium@^1.4.431: version "1.4.442" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.442.tgz#455f4c5bd6ae73afb634dcffee6f356c26c8e294" @@ -2444,13 +2462,14 @@ error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es5-ext@^0.10.35, es5-ext@^0.10.50: - version "0.10.62" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.62.tgz#5e6adc19a6da524bf3d1e02bbc8960e5eb49a9a5" - integrity sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA== +es5-ext@^0.10.35, es5-ext@^0.10.62, es5-ext@^0.10.63, es5-ext@^0.10.64, es5-ext@~0.10.14: + version "0.10.64" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.64.tgz#12e4ffb48f1ba2ea777f1fcdd1918ef73ea21714" + integrity sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg== dependencies: es6-iterator "^2.0.3" es6-symbol "^3.1.3" + esniff "^2.0.1" next-tick "^1.1.0" es6-iterator@^2.0.3: @@ -2463,12 +2482,12 @@ es6-iterator@^2.0.3: es6-symbol "^3.1.1" es6-symbol@^3.1.1, es6-symbol@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" - integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== + version "3.1.4" + resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.4.tgz#f4e7d28013770b4208ecbf3e0bf14d3bcb557b8c" + integrity sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg== dependencies: - d "^1.0.1" - ext "^1.1.2" + d "^1.0.2" + ext "^1.7.0" escalade@^3.1.1: version "3.1.1" @@ -2490,10 +2509,10 @@ escape-string-regexp@^4.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== -eslint-config-prettier@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-9.0.0.tgz#eb25485946dd0c66cd216a46232dc05451518d1f" - integrity sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw== +eslint-config-prettier@^9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz#31af3d94578645966c082fcb71a5846d3c94867f" + integrity sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw== eslint-scope@^7.2.2: version "7.2.2" @@ -2508,18 +2527,19 @@ eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4 resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== -eslint@^8.48.0: - version "8.48.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.48.0.tgz#bf9998ba520063907ba7bfe4c480dc8be03c2155" - integrity sha512-sb6DLeIuRXxeM1YljSe1KEx9/YYeZFQWcV8Rq9HfigmdDEugjLEVEa1ozDjL6YDjBpQHPJxJzze+alxi4T3OLg== +eslint@^8.57.0: + version "8.57.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.0.tgz#c786a6fd0e0b68941aaf624596fb987089195668" + integrity sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@eslint-community/regexpp" "^4.6.1" - "@eslint/eslintrc" "^2.1.2" - "@eslint/js" "8.48.0" - "@humanwhocodes/config-array" "^0.11.10" + "@eslint/eslintrc" "^2.1.4" + "@eslint/js" "8.57.0" + "@humanwhocodes/config-array" "^0.11.14" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" + "@ungap/structured-clone" "^1.2.0" ajv "^6.12.4" chalk "^4.0.0" cross-spawn "^7.0.2" @@ -2551,6 +2571,16 @@ eslint@^8.48.0: strip-ansi "^6.0.1" text-table "^0.2.0" +esniff@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/esniff/-/esniff-2.0.1.tgz#a4d4b43a5c71c7ec51c51098c1d8a29081f9b308" + integrity sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg== + dependencies: + d "^1.0.1" + es5-ext "^0.10.62" + event-emitter "^0.3.5" + type "^2.7.2" + espree@^9.6.0, espree@^9.6.1: version "9.6.1" resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" @@ -2635,6 +2665,14 @@ ethers@^5.7.1: "@ethersproject/web" "5.7.1" "@ethersproject/wordlists" "5.7.0" +event-emitter@^0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" + integrity sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA== + dependencies: + d "1" + es5-ext "~0.10.14" + eventemitter3@^4.0.7: version "4.0.7" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" @@ -2665,18 +2703,7 @@ exit@^0.1.2: resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== -expect@^29.0.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/expect/-/expect-29.5.0.tgz#68c0509156cb2a0adb8865d413b137eeaae682f7" - integrity sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg== - dependencies: - "@jest/expect-utils" "^29.5.0" - jest-get-type "^29.4.3" - jest-matcher-utils "^29.5.0" - jest-message-util "^29.5.0" - jest-util "^29.5.0" - -expect@^29.7.0: +expect@^29.0.0, expect@^29.7.0: version "29.7.0" resolved "https://registry.yarnpkg.com/expect/-/expect-29.7.0.tgz#578874590dcb3214514084c08115d8aee61e11bc" integrity sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw== @@ -2687,7 +2714,7 @@ expect@^29.7.0: jest-message-util "^29.7.0" jest-util "^29.7.0" -ext@^1.1.2: +ext@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/ext/-/ext-1.7.0.tgz#0ea4383c0103d60e70be99e9a7f11027a33c4f5f" integrity sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw== @@ -2749,6 +2776,13 @@ file-entry-cache@^6.0.1: dependencies: flat-cache "^3.0.4" +filelist@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" + integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== + dependencies: + minimatch "^5.0.1" + fill-range@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" @@ -2808,10 +2842,10 @@ for-each@^0.3.3: dependencies: is-callable "^1.1.3" -form-data@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" - integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== dependencies: asynckit "^0.4.0" combined-stream "^1.0.8" @@ -3009,10 +3043,10 @@ human-signals@^2.1.0: resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== -ignore@^5.2.0, ignore@^5.2.4: - version "5.2.4" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" - integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== +ignore@^5.2.0, ignore@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" + integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== import-fresh@^3.2.1: version "3.3.0" @@ -3199,6 +3233,16 @@ istanbul-reports@^3.1.3: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" +jake@^10.8.5: + version "10.9.2" + resolved "https://registry.yarnpkg.com/jake/-/jake-10.9.2.tgz#6ae487e6a69afec3a5e167628996b59f35ae2b7f" + integrity sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA== + dependencies: + async "^3.2.3" + chalk "^4.0.2" + filelist "^1.0.4" + minimatch "^3.1.2" + jest-changed-files@^29.7.0: version "29.7.0" resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.7.0.tgz#1c06d07e77c78e1585d020424dedc10d6e17ac3a" @@ -3234,7 +3278,7 @@ jest-circus@^29.7.0: slash "^3.0.0" stack-utils "^2.0.3" -jest-cli@^29.5.0: +jest-cli@^29.7.0: version "29.7.0" resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.7.0.tgz#5592c940798e0cae677eec169264f2d839a37995" integrity sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg== @@ -3279,16 +3323,6 @@ jest-config@^29.7.0: slash "^3.0.0" strip-json-comments "^3.1.1" -jest-diff@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.5.0.tgz#e0d83a58eb5451dcc1fa61b1c3ee4e8f5a290d63" - integrity sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw== - dependencies: - chalk "^4.0.0" - diff-sequences "^29.4.3" - jest-get-type "^29.4.3" - pretty-format "^29.5.0" - jest-diff@^29.7.0: version "29.7.0" resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.7.0.tgz#017934a66ebb7ecf6f205e84699be10afd70458a" @@ -3329,11 +3363,6 @@ jest-environment-node@^29.7.0: jest-mock "^29.7.0" jest-util "^29.7.0" -jest-get-type@^29.4.3: - version "29.4.3" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.4.3.tgz#1ab7a5207c995161100b5187159ca82dd48b3dd5" - integrity sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg== - jest-get-type@^29.6.3: version "29.6.3" resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.6.3.tgz#36f499fdcea197c1045a127319c0481723908fd1" @@ -3366,16 +3395,6 @@ jest-leak-detector@^29.7.0: jest-get-type "^29.6.3" pretty-format "^29.7.0" -jest-matcher-utils@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.5.0.tgz#d957af7f8c0692c5453666705621ad4abc2c59c5" - integrity sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw== - dependencies: - chalk "^4.0.0" - jest-diff "^29.5.0" - jest-get-type "^29.4.3" - pretty-format "^29.5.0" - jest-matcher-utils@^29.7.0: version "29.7.0" resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz#ae8fec79ff249fd592ce80e3ee474e83a6c44f12" @@ -3386,21 +3405,6 @@ jest-matcher-utils@^29.7.0: jest-get-type "^29.6.3" pretty-format "^29.7.0" -jest-message-util@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.5.0.tgz#1f776cac3aca332ab8dd2e3b41625435085c900e" - integrity sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA== - dependencies: - "@babel/code-frame" "^7.12.13" - "@jest/types" "^29.5.0" - "@types/stack-utils" "^2.0.0" - chalk "^4.0.0" - graceful-fs "^4.2.9" - micromatch "^4.0.4" - pretty-format "^29.5.0" - slash "^3.0.0" - stack-utils "^2.0.3" - jest-message-util@^29.7.0: version "29.7.0" resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.7.0.tgz#8bc392e204e95dfe7564abbe72a404e28e51f7f3" @@ -3539,19 +3543,7 @@ jest-snapshot@^29.7.0: pretty-format "^29.7.0" semver "^7.5.3" -jest-util@^29.0.0, jest-util@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.5.0.tgz#24a4d3d92fc39ce90425311b23c27a6e0ef16b8f" - integrity sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ== - dependencies: - "@jest/types" "^29.5.0" - "@types/node" "*" - chalk "^4.0.0" - ci-info "^3.2.0" - graceful-fs "^4.2.9" - picomatch "^2.2.3" - -jest-util@^29.7.0: +jest-util@^29.0.0, jest-util@^29.7.0: version "29.7.0" resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc" integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== @@ -3599,15 +3591,15 @@ jest-worker@^29.7.0: merge-stream "^2.0.0" supports-color "^8.0.0" -jest@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/jest/-/jest-29.5.0.tgz#f75157622f5ce7ad53028f2f8888ab53e1f1f24e" - integrity sha512-juMg3he2uru1QoXX078zTa7pO85QyB9xajZc6bU+d9yEGwrKX6+vGmJQ3UdVZsvTEUARIdObzH68QItim6OSSQ== +jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest/-/jest-29.7.0.tgz#994676fc24177f088f1c5e3737f5697204ff2613" + integrity sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw== dependencies: - "@jest/core" "^29.5.0" - "@jest/types" "^29.5.0" + "@jest/core" "^29.7.0" + "@jest/types" "^29.6.3" import-local "^3.0.2" - jest-cli "^29.5.0" + jest-cli "^29.7.0" js-guid@^1.0.0: version "1.0.2" @@ -3729,11 +3721,6 @@ lodash.merge@^4.6.2: resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== -lodash@^4.17.21: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - lru-cache@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" @@ -3827,6 +3814,20 @@ minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: dependencies: brace-expansion "^1.1.7" +minimatch@^5.0.1: + version "5.1.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^9.0.4: + version "9.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.4.tgz#8e49c731d1749cbec05050ee5145147b32496a51" + integrity sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw== + dependencies: + brace-expansion "^2.0.1" + minimist@^1.2.5: version "1.2.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" @@ -3863,13 +3864,12 @@ next-tick@^1.1.0: integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ== nock@^13.3.0: - version "13.3.3" - resolved "https://registry.yarnpkg.com/nock/-/nock-13.3.3.tgz#179759c07d3f88ad3e794ace885629c1adfd3fe7" - integrity sha512-z+KUlILy9SK/RjpeXDiDUEAq4T94ADPHE3qaRkf66mpEhzc/ytOMm3Bwdrbq6k1tMWkbdujiKim3G2tfQARuJw== + version "13.5.4" + resolved "https://registry.yarnpkg.com/nock/-/nock-13.5.4.tgz#8918f0addc70a63736170fef7106a9721e0dc479" + integrity sha512-yAyTfdeNJGGBFxWdzSKCBYxs5FxLbCg5X5Q4ets974hcQzG1+qCxvIyOo4j2Ry6MUlhWVMX4OoYDefAIIwupjw== dependencies: debug "^4.1.0" json-stringify-safe "^5.0.1" - lodash "^4.17.21" propagate "^2.0.0" node-domexception@^1.0.0: @@ -3887,9 +3887,9 @@ node-fetch@^3.3.0: formdata-polyfill "^4.0.10" node-gyp-build@^4.3.0: - version "4.6.1" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.6.1.tgz#24b6d075e5e391b8d5539d98c7fc5c210cac8a3e" - integrity sha512-24vnklJmyRS8ViBNI8KbtK/r/DmXQMRiOMXTNz2nrTnAYUwjmEEbnnpB/+kt+yWRv73bPsSPRFddrcIbAxSiMQ== + version "4.8.1" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.8.1.tgz#976d3ad905e71b76086f4f0b0d3637fe79b6cda5" + integrity sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw== node-int64@^0.4.0: version "0.4.0" @@ -4075,21 +4075,12 @@ prelude-ls@^1.2.1: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== -prettier@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.0.1.tgz#65271fc9320ce4913c57747a70ce635b30beaa40" - integrity sha512-fcOWSnnpCrovBsmFZIGIy9UqK2FaI7Hqax+DIO0A9UxeVoY4iweyaFjS5TavZN97Hfehph0nhsZnjlVKzEQSrQ== - -pretty-format@^29.0.0, pretty-format@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.5.0.tgz#283134e74f70e2e3e7229336de0e4fce94ccde5a" - integrity sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw== - dependencies: - "@jest/schemas" "^29.4.3" - ansi-styles "^5.0.0" - react-is "^18.0.0" +prettier@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.3.2.tgz#03ff86dc7c835f2d2559ee76876a3914cec4a90a" + integrity sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA== -pretty-format@^29.7.0: +pretty-format@^29.0.0, pretty-format@^29.7.0: version "29.7.0" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== @@ -4132,9 +4123,9 @@ react-is@^18.0.0: integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== regenerator-runtime@^0.14.0: - version "0.14.0" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45" - integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA== + version "0.14.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" + integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== require-directory@^2.1.1: version "2.1.1" @@ -4203,28 +4194,23 @@ scrypt-js@3.0.1: resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== -semver@7.x, semver@^7.5.3, semver@^7.5.4: - version "7.5.4" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" - integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== - dependencies: - lru-cache "^6.0.0" - semver@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== - -semver@^6.3.1: +semver@^6.3.0, semver@^6.3.1: version "6.3.1" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== +semver@^7.5.3, semver@^7.5.4, semver@^7.6.0: + version "7.6.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" + integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== + dependencies: + lru-cache "^6.0.0" + shallow-clone@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" @@ -4388,23 +4374,24 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" -ts-api-utils@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.0.1.tgz#8144e811d44c749cd65b2da305a032510774452d" - integrity sha512-lC/RGlPmwdrIBFTX59wwNzqh7aR2otPNPR/5brHZm/XKFYKsfqxihXUe9pU3JI+3vGkl+vyCoNNnPhJn3aLK1A== +ts-api-utils@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.3.0.tgz#4b490e27129f1e8e686b45cc4ab63714dc60eea1" + integrity sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ== -ts-jest@^29.1.0: - version "29.1.0" - resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-29.1.0.tgz#4a9db4104a49b76d2b368ea775b6c9535c603891" - integrity sha512-ZhNr7Z4PcYa+JjMl62ir+zPiNJfXJN6E8hSLnaUKhOgqcn8vb3e537cpkd0FuAfRK3sR1LSqM1MOhliXNgOFPA== +ts-jest@^29.2.4: + version "29.2.4" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-29.2.4.tgz#38ccf487407d7a63054a72689f6f99b075e296e5" + integrity sha512-3d6tgDyhCI29HlpwIq87sNuI+3Q6GLTTCeYRHCs7vDz+/3GCMwEtV9jezLyl4ZtnBgx00I7hm8PCP8cTksMGrw== dependencies: bs-logger "0.x" + ejs "^3.1.10" fast-json-stable-stringify "2.x" jest-util "^29.0.0" json5 "^2.2.3" lodash.memoize "4.x" make-error "1.x" - semver "7.x" + semver "^7.5.3" yargs-parser "^21.0.1" ts-node@^10.8.0: @@ -4427,9 +4414,9 @@ ts-node@^10.8.0: yn "3.1.1" tslib@^2.1.0: - version "2.6.2" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" - integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== + version "2.6.3" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.3.tgz#0438f810ad7a9edcde7a241c3d80db693c8cbfe0" + integrity sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ== tweetnacl@1.x.x, tweetnacl@^1.0.3: version "1.0.3" @@ -4458,15 +4445,10 @@ type-fest@^0.21.3: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== -type@^1.0.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" - integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== - type@^2.7.2: - version "2.7.2" - resolved "https://registry.yarnpkg.com/type/-/type-2.7.2.tgz#2376a15a3a28b1efa0f5350dcf72d24df6ef98d0" - integrity sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw== + version "2.7.3" + resolved "https://registry.yarnpkg.com/type/-/type-2.7.3.tgz#436981652129285cc3ba94f392886c2637ea0486" + integrity sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ== typedarray-to-buffer@^3.1.5: version "3.1.5" @@ -4475,16 +4457,21 @@ typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" -typescript@^5.2.2: - version "5.2.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.2.2.tgz#5ebb5e5a5b75f085f22bc3f8460fba308310fa78" - integrity sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w== +typescript@^5.5.2: + version "5.5.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.5.2.tgz#c26f023cb0054e657ce04f72583ea2d85f8d0507" + integrity sha512-NcRtPEOsPFFWjobJEtfihkLCZCXZt/os3zf8nTxjVH3RvTSxjrCamJpbExGvYOF+tFHc3pA65qpdwPbzjohhew== uglify-js@^3.1.4: version "3.17.4" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.17.4.tgz#61678cf5fa3f5b7eb789bb345df29afb8257c22c" integrity sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g== +undici-types@~6.13.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.13.0.tgz#e3e79220ab8c81ed1496b5812471afd7cf075ea5" + integrity sha512-xtFJHudx8S2DSoujjMd1WeWvn7KKWFRESZTMeL1RptAYERu29D6jphMjjY+vn96jvN3kVPDNxU/E13VTaXj6jg== + update-browserslist-db@^1.0.11: version "1.0.11" resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz#9a2a641ad2907ae7b3616506f4b977851db5b940" @@ -4540,9 +4527,9 @@ walker@^1.0.8: makeerror "1.0.12" web-streams-polyfill@^3.0.3: - version "3.2.1" - resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz#71c2718c52b45fd49dbeee88634b3a60ceab42a6" - integrity sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q== + version "3.3.3" + resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz#2073b91a2fdb1fbfbd401e7de0ac9f8214cecb4b" + integrity sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw== web3-errors@^1.1.1: version "1.1.1" @@ -4568,13 +4555,13 @@ web3-validator@^2.0.1: zod "^3.21.4" websocket@^1.0.34: - version "1.0.34" - resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.34.tgz#2bdc2602c08bf2c82253b730655c0ef7dcab3111" - integrity sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ== + version "1.0.35" + resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.35.tgz#374197207d7d4cc4c36cbf8a1bb886ee52a07885" + integrity sha512-/REy6amwPZl44DDzvRCkaI1q1bIiQB0mEFQLUrhz3z2EK91cp3n72rAjUlrTP0zV22HJIUOVHQGPxhFRjxjt+Q== dependencies: bufferutil "^4.0.1" debug "^2.2.0" - es5-ext "^0.10.50" + es5-ext "^0.10.63" typedarray-to-buffer "^3.1.5" utf-8-validate "^5.0.2" yaeti "^0.0.6" @@ -4630,9 +4617,9 @@ ws@7.4.6: integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== ws@^8.8.1: - version "8.14.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.14.1.tgz#4b9586b4f70f9e6534c7bb1d3dc0baa8b8cf01e0" - integrity sha512-4OOseMUq8AzRBI/7SLMUwO+FEDnguetSk7KMb1sHwvF2w2Wv5Hoj0nlifx8vtGsftE/jWHojPy8sMMzYLJ2G/A== + version "8.18.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.0.tgz#0d7505a6eafe2b0e712d232b42279f53bc289bbc" + integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw== y18n@^5.0.5: version "5.0.8" diff --git a/scripts/js/package.json b/scripts/js/package.json index dc92fc84fc..ff137a72da 100644 --- a/scripts/js/package.json +++ b/scripts/js/package.json @@ -16,13 +16,13 @@ "dependencies": { "@types/ws": "^8.5.3", "axios": "^1.1.2", - "creditcoin-js": "file:../../creditcoin-js/creditcoin-js-v0.10.1.tgz", + "creditcoin-js": "file:../../creditcoin-js/creditcoin-js-v0.10.4.tgz", "ws": "^8.5.0" }, "devDependencies": { "@types/jest": "^29.0.0", - "@typescript-eslint/eslint-plugin": "^6.5.0", - "@typescript-eslint/parser": "^6.3.0", + "@typescript-eslint/eslint-plugin": "^7.1.1", + "@typescript-eslint/parser": "^8.0.0", "eslint": "^8.16.0", "eslint-config-prettier": "^9.0.0", "jest": "^29.0.1", diff --git a/scripts/js/src/runtimeUpgrade.ts b/scripts/js/src/runtimeUpgrade.ts index 8750b6dc86..55ec3f6c6f 100644 --- a/scripts/js/src/runtimeUpgrade.ts +++ b/scripts/js/src/runtimeUpgrade.ts @@ -1,10 +1,12 @@ -import { creditcoinApi, Keyring } from 'creditcoin-js'; +import { creditcoinApi, common, Keyring } from 'creditcoin-js'; import { createOverrideWeight } from 'creditcoin-js/lib/utils'; import * as fs from 'fs'; -import * as child_process from 'child_process'; +import * as childProcess from 'child_process'; import { promisify } from 'util'; import { u8aToHex } from './common'; +const { expectNoDispatchError, expectNoEventError } = common; + // From https://github.com/chevdor/subwasm/blob/c2e5b62384537875bfd0497c2b2d706265699798/lib/src/runtime_info.rs#L8-L20 /* eslint-disable @typescript-eslint/naming-convention */ type WasmRuntimeInfo = { @@ -27,7 +29,7 @@ type WasmRuntimeInfo = { // these normally use callbacks, but promises are more convenient const readFile = promisify(fs.readFile); -const exec = promisify(child_process.exec); +const exec = promisify(childProcess.exec); /** * Performs an upgrade to the runtime at the provided path. @@ -90,7 +92,7 @@ async function doRuntimeUpgrade( await new Promise((resolve, reject) => { const unsubscribe = api.tx.sudo .sudoUncheckedWeight(callback, overrideWeight) - .signAndSend(keyring, { nonce: -1 }, (result) => { + .signAndSend(keyring, { nonce: -1 }, async ({ dispatchError, events, status }) => { const finish = (fn: () => void) => { unsubscribe .then((unsub) => { @@ -99,14 +101,25 @@ async function doRuntimeUpgrade( }) .catch(reject); }; - if (result.isInBlock && !result.isError) { - console.log('Runtime upgrade successfully scheduled'); - finish(resolve); - } else if (result.isError) { - // eslint-disable-next-line @typescript-eslint/no-base-to-string - const error = new Error(`Failed to schedule runtime upgrade: ${result.toString()}`); + + // these two will throw exceptions in case of errors + try { + expectNoDispatchError(api, dispatchError); + if (events) events.forEach((event) => expectNoEventError(api, event)); + } catch (err) { + const error = new Error(`Failed to schedule runtime upgrade: ${err.toString()}`); finish(() => reject(error)); } + + if (status.isInBlock) { + const header = await api.rpc.chain.getHeader(status.asInBlock); + const blockNumber = header.number.toNumber(); + + console.log( + `Runtime upgrade successfully scheduled at block ${blockNumber}, hash ${status.asInBlock.toString()}`, + ); + finish(resolve); + } }); }); } finally { diff --git a/scripts/js/yarn.lock b/scripts/js/yarn.lock index d5402b1679..47c63a9889 100644 --- a/scripts/js/yarn.lock +++ b/scripts/js/yarn.lock @@ -7,6 +7,22 @@ resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== +"@ampproject/remapping@^2.2.0": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" + integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== + dependencies: + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.22.13": + version "7.22.13" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e" + integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w== + dependencies: + "@babel/highlight" "^7.22.13" + chalk "^2.4.2" + "@babel/code-frame@^7.12.13": version "7.21.4" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.21.4.tgz#d0fa9e4413aca81f2b23b9442797bda1826edb39" @@ -14,11 +30,139 @@ dependencies: "@babel/highlight" "^7.18.6" +"@babel/compat-data@^7.22.9": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.20.tgz#8df6e96661209623f1975d66c35ffca66f3306d0" + integrity sha512-BQYjKbpXjoXwFW5jGqiizJQQT/aC7pFm9Ok1OWssonuguICi264lbgMzRp2ZMmRSlfkX6DsWDDcsrctK8Rwfiw== + +"@babel/core@^7.11.6", "@babel/core@^7.12.3": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.22.20.tgz#e3d0eed84c049e2a2ae0a64d27b6a37edec385b7" + integrity sha512-Y6jd1ahLubuYweD/zJH+vvOY141v4f9igNQAQ+MBgq9JlHS2iTsZKn1aMsb3vGccZsXI16VzTBw52Xx0DWmtnA== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.22.13" + "@babel/generator" "^7.22.15" + "@babel/helper-compilation-targets" "^7.22.15" + "@babel/helper-module-transforms" "^7.22.20" + "@babel/helpers" "^7.22.15" + "@babel/parser" "^7.22.16" + "@babel/template" "^7.22.15" + "@babel/traverse" "^7.22.20" + "@babel/types" "^7.22.19" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.3" + semver "^6.3.1" + +"@babel/generator@^7.22.15", "@babel/generator@^7.7.2": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.22.15.tgz#1564189c7ec94cb8f77b5e8a90c4d200d21b2339" + integrity sha512-Zu9oWARBqeVOW0dZOjXc3JObrzuqothQ3y/n1kUtrjCoCPLkXUwMvOo/F/TCfoHMbWIFlWwpZtkZVb9ga4U2pA== + dependencies: + "@babel/types" "^7.22.15" + "@jridgewell/gen-mapping" "^0.3.2" + "@jridgewell/trace-mapping" "^0.3.17" + jsesc "^2.5.1" + +"@babel/helper-compilation-targets@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz#0698fc44551a26cf29f18d4662d5bf545a6cfc52" + integrity sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw== + dependencies: + "@babel/compat-data" "^7.22.9" + "@babel/helper-validator-option" "^7.22.15" + browserslist "^4.21.9" + lru-cache "^5.1.1" + semver "^6.3.1" + +"@babel/helper-environment-visitor@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" + integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== + +"@babel/helper-function-name@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz#ede300828905bb15e582c037162f99d5183af1be" + integrity sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ== + dependencies: + "@babel/template" "^7.22.5" + "@babel/types" "^7.22.5" + +"@babel/helper-hoist-variables@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" + integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-module-imports@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0" + integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== + dependencies: + "@babel/types" "^7.22.15" + +"@babel/helper-module-transforms@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.22.20.tgz#da9edc14794babbe7386df438f3768067132f59e" + integrity sha512-dLT7JVWIUUxKOs1UnJUBR3S70YK+pKX6AbJgB2vMIvEkZkrfJDbYDJesnPshtKV4LhDOR3Oc5YULeDizRek+5A== + dependencies: + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-module-imports" "^7.22.15" + "@babel/helper-simple-access" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/helper-validator-identifier" "^7.22.20" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" + integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== + +"@babel/helper-simple-access@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" + integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-split-export-declaration@^7.22.6": + version "7.22.6" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" + integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-string-parser@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" + integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== + "@babel/helper-validator-identifier@^7.18.6": version "7.19.1" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== +"@babel/helper-validator-identifier@^7.22.19", "@babel/helper-validator-identifier@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" + integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== + +"@babel/helper-validator-option@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz#694c30dfa1d09a6534cdfcafbe56789d36aba040" + integrity sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA== + +"@babel/helpers@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.22.15.tgz#f09c3df31e86e3ea0b7ff7556d85cdebd47ea6f1" + integrity sha512-7pAjK0aSdxOwR+CcYAqgWOGy5dcfvzsTIfFTb2odQqW47MDfv14UaJDY6eng8ylM2EaeKXdxaSWESbkmaQHTmw== + dependencies: + "@babel/template" "^7.22.15" + "@babel/traverse" "^7.22.15" + "@babel/types" "^7.22.15" + "@babel/highlight@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" @@ -28,13 +172,164 @@ chalk "^2.0.0" js-tokens "^4.0.0" +"@babel/highlight@^7.22.13": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.20.tgz#4ca92b71d80554b01427815e06f2df965b9c1f54" + integrity sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg== + dependencies: + "@babel/helper-validator-identifier" "^7.22.20" + chalk "^2.4.2" + js-tokens "^4.0.0" + +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.15", "@babel/parser@^7.22.16": + version "7.22.16" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.16.tgz#180aead7f247305cce6551bea2720934e2fa2c95" + integrity sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA== + +"@babel/plugin-syntax-async-generators@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-bigint@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" + integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.8.3": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" + integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-import-meta@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" + integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-json-strings@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-jsx@^7.7.2": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz#a6b68e84fb76e759fc3b93e901876ffabbe1d918" + integrity sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-syntax-logical-assignment-operators@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-top-level-await@^7.8.3": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" + integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-typescript@^7.7.2": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz#aac8d383b062c5072c647a31ef990c1d0af90272" + integrity sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/runtime@^7.20.13", "@babel/runtime@^7.20.6": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.15.tgz#38f46494ccf6cf020bd4eed7124b425e83e523b8" - integrity sha512-T0O+aa+4w0u06iNmapipJXMV4HoUir03hpx3/YqXXhu9xim3w+dVphjFWl1OH8NbZHw5Lbm9k45drDkgq2VNNA== + version "7.23.1" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.1.tgz#72741dc4d413338a91dcb044a86f3c0bc402646d" + integrity sha512-hC2v6p8ZSI/W0HUzh3V8C5g+NwSKzKPtJwSpTjwl0o297GP9+ZLQSkdvHz46CM3LqyoXxq+5G9komY+eSqSO0g== dependencies: regenerator-runtime "^0.14.0" +"@babel/template@^7.22.15", "@babel/template@^7.22.5", "@babel/template@^7.3.3": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38" + integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== + dependencies: + "@babel/code-frame" "^7.22.13" + "@babel/parser" "^7.22.15" + "@babel/types" "^7.22.15" + +"@babel/traverse@^7.22.15", "@babel/traverse@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.22.20.tgz#db572d9cb5c79e02d83e5618b82f6991c07584c9" + integrity sha512-eU260mPZbU7mZ0N+X10pxXhQFMGTeLb9eFS0mxehS8HZp9o1uSnFeWQuG1UPrlxgA7QoUzFhOnilHDp0AXCyHw== + dependencies: + "@babel/code-frame" "^7.22.13" + "@babel/generator" "^7.22.15" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.22.5" + "@babel/helper-hoist-variables" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/parser" "^7.22.16" + "@babel/types" "^7.22.19" + debug "^4.1.0" + globals "^11.1.0" + +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.3.3": + version "7.22.19" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.19.tgz#7425343253556916e440e662bb221a93ddb75684" + integrity sha512-P7LAw/LbojPzkgp5oznjE6tQEIWbp4PkkfrZDINTro9zgBRtI324/EYsiSI7lhPbpIQ+DCeR2NNmMWANGGfZsg== + dependencies: + "@babel/helper-string-parser" "^7.22.5" + "@babel/helper-validator-identifier" "^7.22.19" + to-fast-properties "^2.0.0" + +"@bcoe/v8-coverage@^0.2.3": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" + integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== + "@cspotcode/source-map-support@^0.8.0": version "0.8.1" resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" @@ -49,15 +344,15 @@ dependencies: eslint-visitor-keys "^3.3.0" -"@eslint-community/regexpp@^4.5.1", "@eslint-community/regexpp@^4.6.1": - version "4.8.0" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.8.0.tgz#11195513186f68d42fbf449f9a7136b2c0c92005" - integrity sha512-JylOEEzDiOryeUnFbQz+oViCXS0KsvR1mvHkoMiu5+UiBvy+RYX7tzlIIIEstF/gVa2tj9AQXk3dgnxv6KxhFg== +"@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.6.1": + version "4.10.0" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63" + integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== -"@eslint/eslintrc@^2.1.2": - version "2.1.2" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.2.tgz#c6936b4b328c64496692f76944e755738be62396" - integrity sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g== +"@eslint/eslintrc@^2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad" + integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== dependencies: ajv "^6.12.4" debug "^4.3.2" @@ -69,10 +364,10 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@8.48.0": - version "8.48.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.48.0.tgz#642633964e217905436033a2bd08bf322849b7fb" - integrity sha512-ZSjtmelB7IJfWD2Fvb7+Z+ChTIKWq6kjda95fLcQKNS5aheVHn4IkfgRQE3sIIzTcSLwLcLZUD9UBt+V7+h+Pw== +"@eslint/js@8.57.0": + version "8.57.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.0.tgz#a5417ae8427873f1dd08b70b3574b453e67b5f7f" + integrity sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g== "@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.7.0": version "5.7.0" @@ -416,13 +711,13 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/strings" "^5.7.0" -"@humanwhocodes/config-array@^0.11.10": - version "0.11.10" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.10.tgz#5a3ffe32cc9306365fb3fd572596cd602d5e12d2" - integrity sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ== +"@humanwhocodes/config-array@^0.11.14": + version "0.11.14" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b" + integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg== dependencies: - "@humanwhocodes/object-schema" "^1.2.1" - debug "^4.1.1" + "@humanwhocodes/object-schema" "^2.0.2" + debug "^4.3.1" minimatch "^3.0.5" "@humanwhocodes/module-importer@^1.0.1": @@ -430,43 +725,239 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== -"@humanwhocodes/object-schema@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" - integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== +"@humanwhocodes/object-schema@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz#d9fae00a2d5cb40f92cfe64b47ad749fbc38f917" + integrity sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw== + +"@istanbuljs/load-nyc-config@^1.0.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" + integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== + dependencies: + camelcase "^5.3.1" + find-up "^4.1.0" + get-package-type "^0.1.0" + js-yaml "^3.13.1" + resolve-from "^5.0.0" + +"@istanbuljs/schema@^0.1.2": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" + integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== + +"@jest/console@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.7.0.tgz#cd4822dbdb84529265c5a2bdb529a3c9cc950ffc" + integrity sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg== + dependencies: + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" + slash "^3.0.0" + +"@jest/core@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.7.0.tgz#b6cccc239f30ff36609658c5a5e2291757ce448f" + integrity sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg== + dependencies: + "@jest/console" "^29.7.0" + "@jest/reporters" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + ci-info "^3.2.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + jest-changed-files "^29.7.0" + jest-config "^29.7.0" + jest-haste-map "^29.7.0" + jest-message-util "^29.7.0" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-resolve-dependencies "^29.7.0" + jest-runner "^29.7.0" + jest-runtime "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" + jest-watcher "^29.7.0" + micromatch "^4.0.4" + pretty-format "^29.7.0" + slash "^3.0.0" + strip-ansi "^6.0.0" + +"@jest/environment@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.7.0.tgz#24d61f54ff1f786f3cd4073b4b94416383baf2a7" + integrity sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw== + dependencies: + "@jest/fake-timers" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + jest-mock "^29.7.0" + +"@jest/expect-utils@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.7.0.tgz#023efe5d26a8a70f21677d0a1afc0f0a44e3a1c6" + integrity sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA== + dependencies: + jest-get-type "^29.6.3" + +"@jest/expect@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.7.0.tgz#76a3edb0cb753b70dfbfe23283510d3d45432bf2" + integrity sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ== + dependencies: + expect "^29.7.0" + jest-snapshot "^29.7.0" + +"@jest/fake-timers@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.7.0.tgz#fd91bf1fffb16d7d0d24a426ab1a47a49881a565" + integrity sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ== + dependencies: + "@jest/types" "^29.6.3" + "@sinonjs/fake-timers" "^10.0.2" + "@types/node" "*" + jest-message-util "^29.7.0" + jest-mock "^29.7.0" + jest-util "^29.7.0" + +"@jest/globals@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.7.0.tgz#8d9290f9ec47ff772607fa864ca1d5a2efae1d4d" + integrity sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/expect" "^29.7.0" + "@jest/types" "^29.6.3" + jest-mock "^29.7.0" + +"@jest/reporters@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.7.0.tgz#04b262ecb3b8faa83b0b3d321623972393e8f4c7" + integrity sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg== + dependencies: + "@bcoe/v8-coverage" "^0.2.3" + "@jest/console" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@jridgewell/trace-mapping" "^0.3.18" + "@types/node" "*" + chalk "^4.0.0" + collect-v8-coverage "^1.0.0" + exit "^0.1.2" + glob "^7.1.3" + graceful-fs "^4.2.9" + istanbul-lib-coverage "^3.0.0" + istanbul-lib-instrument "^6.0.0" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^4.0.0" + istanbul-reports "^3.1.3" + jest-message-util "^29.7.0" + jest-util "^29.7.0" + jest-worker "^29.7.0" + slash "^3.0.0" + string-length "^4.0.1" + strip-ansi "^6.0.0" + v8-to-istanbul "^9.0.1" -"@jest/expect-utils@^29.5.0": - version "29.5.0" - resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.5.0.tgz#f74fad6b6e20f924582dc8ecbf2cb800fe43a036" - integrity sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg== +"@jest/schemas@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" + integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== dependencies: - jest-get-type "^29.4.3" + "@sinclair/typebox" "^0.27.8" -"@jest/schemas@^29.4.3": - version "29.4.3" - resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.4.3.tgz#39cf1b8469afc40b6f5a2baaa146e332c4151788" - integrity sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg== +"@jest/source-map@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.6.3.tgz#d90ba772095cf37a34a5eb9413f1b562a08554c4" + integrity sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw== dependencies: - "@sinclair/typebox" "^0.25.16" + "@jridgewell/trace-mapping" "^0.3.18" + callsites "^3.0.0" + graceful-fs "^4.2.9" -"@jest/types@^29.5.0": - version "29.5.0" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.5.0.tgz#f59ef9b031ced83047c67032700d8c807d6e1593" - integrity sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog== +"@jest/test-result@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.7.0.tgz#8db9a80aa1a097bb2262572686734baed9b1657c" + integrity sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA== dependencies: - "@jest/schemas" "^29.4.3" + "@jest/console" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/istanbul-lib-coverage" "^2.0.0" + collect-v8-coverage "^1.0.0" + +"@jest/test-sequencer@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz#6cef977ce1d39834a3aea887a1726628a6f072ce" + integrity sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw== + dependencies: + "@jest/test-result" "^29.7.0" + graceful-fs "^4.2.9" + jest-haste-map "^29.7.0" + slash "^3.0.0" + +"@jest/transform@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.7.0.tgz#df2dd9c346c7d7768b8a06639994640c642e284c" + integrity sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw== + dependencies: + "@babel/core" "^7.11.6" + "@jest/types" "^29.6.3" + "@jridgewell/trace-mapping" "^0.3.18" + babel-plugin-istanbul "^6.1.1" + chalk "^4.0.0" + convert-source-map "^2.0.0" + fast-json-stable-stringify "^2.1.0" + graceful-fs "^4.2.9" + jest-haste-map "^29.7.0" + jest-regex-util "^29.6.3" + jest-util "^29.7.0" + micromatch "^4.0.4" + pirates "^4.0.4" + slash "^3.0.0" + write-file-atomic "^4.0.2" + +"@jest/types@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59" + integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== + dependencies: + "@jest/schemas" "^29.6.3" "@types/istanbul-lib-coverage" "^2.0.0" "@types/istanbul-reports" "^3.0.0" "@types/node" "*" "@types/yargs" "^17.0.8" chalk "^4.0.0" -"@jridgewell/resolve-uri@^3.0.3": +"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" + integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@^3.1.0": version "3.1.1" resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== -"@jridgewell/sourcemap-codec@^1.4.10": +"@jridgewell/set-array@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== + +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": version "1.4.15" resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== @@ -479,6 +970,14 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.19" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz#f8a3249862f91be48d3127c3cfe992f79b4b8811" + integrity sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + "@noble/hashes@1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.2.0.tgz#a3150eeb09cc7ab207ebf6d7b9ad311a9bdbed12" @@ -841,10 +1340,24 @@ resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.1.tgz#ebb651ee52ff84f420097055f4bf46cfba403938" integrity sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA== -"@sinclair/typebox@^0.25.16": - version "0.25.24" - resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.25.24.tgz#8c7688559979f7079aacaf31aa881c3aa410b718" - integrity sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ== +"@sinclair/typebox@^0.27.8": + version "0.27.8" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" + integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== + +"@sinonjs/commons@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-3.0.0.tgz#beb434fe875d965265e04722ccfc21df7f755d72" + integrity sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA== + dependencies: + type-detect "4.0.8" + +"@sinonjs/fake-timers@^10.0.2": + version "10.3.0" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz#55fdff1ecab9f354019129daf4df0dd4d923ea66" + integrity sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA== + dependencies: + "@sinonjs/commons" "^3.0.0" "@substrate/connect-extension-protocol@^1.0.1": version "1.0.1" @@ -893,14 +1406,54 @@ resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.3.tgz#472eaab5f15c1ffdd7f8628bd4c4f753995ec79e" integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ== +"@types/babel__core@^7.1.14": + version "7.20.2" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.2.tgz#215db4f4a35d710256579784a548907237728756" + integrity sha512-pNpr1T1xLUc2l3xJKuPtsEky3ybxN3m4fJkknfIpTCTfIZCDW57oAg+EfCgIIp2rvCe0Wn++/FfodDS4YXxBwA== + dependencies: + "@babel/parser" "^7.20.7" + "@babel/types" "^7.20.7" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + +"@types/babel__generator@*": + version "7.6.5" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.5.tgz#281f4764bcbbbc51fdded0f25aa587b4ce14da95" + integrity sha512-h9yIuWbJKdOPLJTbmSpPzkF67e659PbQDba7ifWm5BJ8xTv+sDmS7rFmywkWOvXedGTivCdeGSIIX8WLcRTz8w== + dependencies: + "@babel/types" "^7.0.0" + +"@types/babel__template@*": + version "7.4.2" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.2.tgz#843e9f1f47c957553b0c374481dc4772921d6a6b" + integrity sha512-/AVzPICMhMOMYoSx9MoKpGDKdBRsIXMNByh1PXSZoa+v6ZoLa8xxtsT/uLQ/NJm0XVAWl/BvId4MlDeXJaeIZQ== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": + version "7.20.2" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.2.tgz#4ddf99d95cfdd946ff35d2b65c978d9c9bf2645d" + integrity sha512-ojlGK1Hsfce93J0+kn3H5R73elidKUaZonirN33GSmgTUMpzI/MIFfSpF3haANe3G1bEBS9/9/QEqwTzwqFsKw== + dependencies: + "@babel/types" "^7.20.7" + "@types/bn.js@^5.1.1": - version "5.1.1" - resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.1.tgz#b51e1b55920a4ca26e9285ff79936bbdec910682" - integrity sha512-qNrYbZqMx0uJAfKnKclPh+dTwK33KfLHYqtyODwd5HnXOjnkhc4qgn3BrK6RWyGZm5+sIFE7Q7Vz6QQtJB7w7g== + version "5.1.2" + resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.2.tgz#162f5238c46f4bcbac07a98561724eca1fcf0c5e" + integrity sha512-dkpZu0szUtn9UXTmw+e0AJFd4D2XAxDnsCLdc05SfqpqzPEBft8eQr8uaFitfo/dUUOZERaLec2hHMG87A4Dxg== + dependencies: + "@types/node" "*" + +"@types/graceful-fs@^4.1.3": + version "4.1.7" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.7.tgz#30443a2e64fd51113bc3e2ba0914d47109695e2a" + integrity sha512-MhzcwU8aUygZroVwL2jeYk6JisJrPl/oov/gsgGCue9mkgl9wjGbzReYQClxiUgFDnib9FuHqTndccKeZKxTRw== dependencies: "@types/node" "*" -"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": version "2.0.4" resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== @@ -920,35 +1473,25 @@ "@types/istanbul-lib-report" "*" "@types/jest@^29.0.0": - version "29.5.0" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.0.tgz#337b90bbcfe42158f39c2fb5619ad044bbb518ac" - integrity sha512-3Emr5VOl/aoBwnWcH/EFQvlSAmjV+XtV9GGu5mwdYew5vhQh0IUZx/60x0TzHDu09Bi7HMx10t/namdJw5QIcg== + version "29.5.12" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.12.tgz#7f7dc6eb4cf246d2474ed78744b05d06ce025544" + integrity sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw== dependencies: expect "^29.0.0" pretty-format "^29.0.0" -"@types/json-schema@^7.0.12": - version "7.0.12" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.12.tgz#d70faba7039d5fca54c83c7dbab41051d2b6f6cb" - integrity sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA== - "@types/node-fetch@^2.6.2": - version "2.6.4" - resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.4.tgz#1bc3a26de814f6bf466b25aeb1473fa1afe6a660" - integrity sha512-1ZX9fcN4Rvkvgv4E6PAY5WXUFWFcRWxZa3EW83UjycOB9ljJCedb2CupIP4RZMEwF/M3eTcCihbBRgwtGbg5Rg== + version "2.6.6" + resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.6.tgz#b72f3f4bc0c0afee1c0bc9cff68e041d01e3e779" + integrity sha512-95X8guJYhfqiuVVhRFxVQcf4hW/2bCuoPwDasMf/531STFoNoWTT7YDnWdXHEZKqAGUigmpG31r2FE70LwnzJw== dependencies: "@types/node" "*" - form-data "^3.0.0" + form-data "^4.0.0" "@types/node@*": - version "20.6.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.6.0.tgz#9d7daa855d33d4efec8aea88cd66db1c2f0ebe16" - integrity sha512-najjVq5KN2vsH2U/xyh2opaSEz6cZMR2SetLIlxlj08nOcmPOemJmUK2o4kUzfLqfrWE0PIrNeE16XhYDd3nqg== - -"@types/semver@^7.5.0": - version "7.5.1" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.1.tgz#0480eeb7221eb9bc398ad7432c9d7e14b1a5a367" - integrity sha512-cJRQXpObxfNKkFAZbJl2yjWtJCqELQIdShsogr1d2MilP8dKD9TE/nEKHkJgUNHdGKCQaf9HbIynuV2csLGVLg== + version "20.7.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.7.0.tgz#c03de4572f114a940bc2ca909a33ddb2b925e470" + integrity sha512-zI22/pJW2wUZOVyguFaUL1HABdmSVxpXrzIqkjsHmyUjNhPoWM1CKfvVuXfetHhIok4RY573cqS0mZ1SJEnoTg== "@types/stack-utils@^2.0.0": version "2.0.1" @@ -956,16 +1499,16 @@ integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== "@types/websocket@^1.0.5": - version "1.0.6" - resolved "https://registry.yarnpkg.com/@types/websocket/-/websocket-1.0.6.tgz#ec8dce5915741632ac3a4b1f951b6d4156e32d03" - integrity sha512-JXkliwz93B2cMWOI1ukElQBPN88vMg3CruvW4KVSKpflt3NyNCJImnhIuB/f97rG7kakqRJGFiwkA895Kn02Dg== + version "1.0.7" + resolved "https://registry.yarnpkg.com/@types/websocket/-/websocket-1.0.7.tgz#94ef83be9414db30c147d400cee08d5d767deeb0" + integrity sha512-62Omr8U0PO+hgjLCpPnMsmjh2/FRwIGOktZHyYAUzooEJotwkXHMp7vCacdYi8haxBNOiw9bc2HIHI+b/MPNjA== dependencies: "@types/node" "*" "@types/ws@^8.5.3": - version "8.5.4" - resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.4.tgz#bb10e36116d6e570dd943735f86c933c1587b8a5" - integrity sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg== + version "8.5.12" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.12.tgz#619475fe98f35ccca2a2f6c137702d85ec247b7e" + integrity sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ== dependencies: "@types/node" "*" @@ -981,90 +1524,126 @@ dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/eslint-plugin@^6.5.0": - version "6.5.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.5.0.tgz#5cee33edf0d45d5ec773e3b3111206b098ac8599" - integrity sha512-2pktILyjvMaScU6iK3925uvGU87E+N9rh372uGZgiMYwafaw9SXq86U04XPq3UH6tzRvNgBsub6x2DacHc33lw== +"@typescript-eslint/eslint-plugin@^7.1.1": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.15.0.tgz#8eaf396ac2992d2b8f874b68eb3fcd6b179cb7f3" + integrity sha512-uiNHpyjZtFrLwLDpHnzaDlP3Tt6sGMqTCiqmxaN4n4RP0EfYZDODJyddiFDF44Hjwxr5xAcaYxVKm9QKQFJFLA== dependencies: - "@eslint-community/regexpp" "^4.5.1" - "@typescript-eslint/scope-manager" "6.5.0" - "@typescript-eslint/type-utils" "6.5.0" - "@typescript-eslint/utils" "6.5.0" - "@typescript-eslint/visitor-keys" "6.5.0" - debug "^4.3.4" + "@eslint-community/regexpp" "^4.10.0" + "@typescript-eslint/scope-manager" "7.15.0" + "@typescript-eslint/type-utils" "7.15.0" + "@typescript-eslint/utils" "7.15.0" + "@typescript-eslint/visitor-keys" "7.15.0" graphemer "^1.4.0" - ignore "^5.2.4" + ignore "^5.3.1" natural-compare "^1.4.0" - semver "^7.5.4" - ts-api-utils "^1.0.1" + ts-api-utils "^1.3.0" -"@typescript-eslint/parser@^6.3.0": - version "6.5.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.5.0.tgz#3d6ed231c5e307c5f5f4a0d86893ec01e92b8c77" - integrity sha512-LMAVtR5GN8nY0G0BadkG0XIe4AcNMeyEy3DyhKGAh9k4pLSMBO7rF29JvDBpZGCmp5Pgz5RLHP6eCpSYZJQDuQ== +"@typescript-eslint/parser@^8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.0.0.tgz#5a5030cf8123176b5a0abd966f99e5f9f110652d" + integrity sha512-pS1hdZ+vnrpDIxuFXYQpLTILglTjSYJ9MbetZctrUawogUsPdz31DIIRZ9+rab0LhYNTsk88w4fIzVheiTbWOQ== dependencies: - "@typescript-eslint/scope-manager" "6.5.0" - "@typescript-eslint/types" "6.5.0" - "@typescript-eslint/typescript-estree" "6.5.0" - "@typescript-eslint/visitor-keys" "6.5.0" + "@typescript-eslint/scope-manager" "8.0.0" + "@typescript-eslint/types" "8.0.0" + "@typescript-eslint/typescript-estree" "8.0.0" + "@typescript-eslint/visitor-keys" "8.0.0" debug "^4.3.4" -"@typescript-eslint/scope-manager@6.5.0": - version "6.5.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.5.0.tgz#f2cb20895aaad41b3ad27cc3a338ce8598f261c5" - integrity sha512-A8hZ7OlxURricpycp5kdPTH3XnjG85UpJS6Fn4VzeoH4T388gQJ/PGP4ole5NfKt4WDVhmLaQ/dBLNDC4Xl/Kw== +"@typescript-eslint/scope-manager@7.15.0": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.15.0.tgz#201b34b0720be8b1447df17b963941bf044999b2" + integrity sha512-Q/1yrF/XbxOTvttNVPihxh1b9fxamjEoz2Os/Pe38OHwxC24CyCqXxGTOdpb4lt6HYtqw9HetA/Rf6gDGaMPlw== dependencies: - "@typescript-eslint/types" "6.5.0" - "@typescript-eslint/visitor-keys" "6.5.0" + "@typescript-eslint/types" "7.15.0" + "@typescript-eslint/visitor-keys" "7.15.0" -"@typescript-eslint/type-utils@6.5.0": - version "6.5.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.5.0.tgz#6d246c93739282bc0d2e623f28d0dec6cfcc38d7" - integrity sha512-f7OcZOkRivtujIBQ4yrJNIuwyCQO1OjocVqntl9dgSIZAdKqicj3xFDqDOzHDlGCZX990LqhLQXWRnQvsapq8A== +"@typescript-eslint/scope-manager@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.0.0.tgz#d14df46c9e43c53af7699dfa800cd615d7dfc118" + integrity sha512-V0aa9Csx/ZWWv2IPgTfY7T4agYwJyILESu/PVqFtTFz9RIS823mAze+NbnBI8xiwdX3iqeQbcTYlvB04G9wyQw== dependencies: - "@typescript-eslint/typescript-estree" "6.5.0" - "@typescript-eslint/utils" "6.5.0" + "@typescript-eslint/types" "8.0.0" + "@typescript-eslint/visitor-keys" "8.0.0" + +"@typescript-eslint/type-utils@7.15.0": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-7.15.0.tgz#5b83c904c6de91802fb399305a50a56d10472c39" + integrity sha512-SkgriaeV6PDvpA6253PDVep0qCqgbO1IOBiycjnXsszNTVQe5flN5wR5jiczoEoDEnAqYFSFFc9al9BSGVltkg== + dependencies: + "@typescript-eslint/typescript-estree" "7.15.0" + "@typescript-eslint/utils" "7.15.0" debug "^4.3.4" - ts-api-utils "^1.0.1" + ts-api-utils "^1.3.0" + +"@typescript-eslint/types@7.15.0": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.15.0.tgz#fb894373a6e3882cbb37671ffddce44f934f62fc" + integrity sha512-aV1+B1+ySXbQH0pLK0rx66I3IkiZNidYobyfn0WFsdGhSXw+P3YOqeTq5GED458SfB24tg+ux3S+9g118hjlTw== -"@typescript-eslint/types@6.5.0": - version "6.5.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.5.0.tgz#f4e55cfd99ac5346ea772770bf212a3e689a8f04" - integrity sha512-eqLLOEF5/lU8jW3Bw+8auf4lZSbbljHR2saKnYqON12G/WsJrGeeDHWuQePoEf9ro22+JkbPfWQwKEC5WwLQ3w== +"@typescript-eslint/types@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.0.0.tgz#7195ea9369fe5ee46b958d7ffca6bd26511cce18" + integrity sha512-wgdSGs9BTMWQ7ooeHtu5quddKKs5Z5dS+fHLbrQI+ID0XWJLODGMHRfhwImiHoeO2S5Wir2yXuadJN6/l4JRxw== -"@typescript-eslint/typescript-estree@6.5.0": - version "6.5.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.5.0.tgz#1cef6bc822585e9ef89d88834bc902d911d747ed" - integrity sha512-q0rGwSe9e5Kk/XzliB9h2LBc9tmXX25G0833r7kffbl5437FPWb2tbpIV9wAATebC/018pGa9fwPDuvGN+LxWQ== +"@typescript-eslint/typescript-estree@7.15.0": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.15.0.tgz#e323bfa3966e1485b638ce751f219fc1f31eba37" + integrity sha512-gjyB/rHAopL/XxfmYThQbXbzRMGhZzGw6KpcMbfe8Q3nNQKStpxnUKeXb0KiN/fFDR42Z43szs6rY7eHk0zdGQ== dependencies: - "@typescript-eslint/types" "6.5.0" - "@typescript-eslint/visitor-keys" "6.5.0" + "@typescript-eslint/types" "7.15.0" + "@typescript-eslint/visitor-keys" "7.15.0" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" - semver "^7.5.4" - ts-api-utils "^1.0.1" + minimatch "^9.0.4" + semver "^7.6.0" + ts-api-utils "^1.3.0" -"@typescript-eslint/utils@6.5.0": - version "6.5.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.5.0.tgz#6668bee4f7f24978b11df8a2ea42d56eebc4662c" - integrity sha512-9nqtjkNykFzeVtt9Pj6lyR9WEdd8npPhhIPM992FWVkZuS6tmxHfGVnlUcjpUP2hv8r4w35nT33mlxd+Be1ACQ== +"@typescript-eslint/typescript-estree@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.0.0.tgz#d172385ced7cb851a038b5c834c245a97a0f9cf6" + integrity sha512-5b97WpKMX+Y43YKi4zVcCVLtK5F98dFls3Oxui8LbnmRsseKenbbDinmvxrWegKDMmlkIq/XHuyy0UGLtpCDKg== + dependencies: + "@typescript-eslint/types" "8.0.0" + "@typescript-eslint/visitor-keys" "8.0.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + minimatch "^9.0.4" + semver "^7.6.0" + ts-api-utils "^1.3.0" + +"@typescript-eslint/utils@7.15.0": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-7.15.0.tgz#9e6253c4599b6e7da2fb64ba3f549c73eb8c1960" + integrity sha512-hfDMDqaqOqsUVGiEPSMLR/AjTSCsmJwjpKkYQRo1FNbmW4tBwBspYDwO9eh7sKSTwMQgBw9/T4DHudPaqshRWA== dependencies: "@eslint-community/eslint-utils" "^4.4.0" - "@types/json-schema" "^7.0.12" - "@types/semver" "^7.5.0" - "@typescript-eslint/scope-manager" "6.5.0" - "@typescript-eslint/types" "6.5.0" - "@typescript-eslint/typescript-estree" "6.5.0" - semver "^7.5.4" + "@typescript-eslint/scope-manager" "7.15.0" + "@typescript-eslint/types" "7.15.0" + "@typescript-eslint/typescript-estree" "7.15.0" -"@typescript-eslint/visitor-keys@6.5.0": - version "6.5.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.5.0.tgz#1a6f474a0170a447b76f0699ce6700110fd11436" - integrity sha512-yCB/2wkbv3hPsh02ZS8dFQnij9VVQXJMN/gbQsaaY+zxALkZnxa/wagvLEFsAWMPv7d7lxQmNsIzGU1w/T/WyA== +"@typescript-eslint/visitor-keys@7.15.0": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.15.0.tgz#1da0726201a859343fe6a05742a7c1792fff5b66" + integrity sha512-Hqgy/ETgpt2L5xueA/zHHIl4fJI2O4XUE9l4+OIfbJIRSnTJb/QscncdqqZzofQegIJugRIF57OJea1khw2SDw== dependencies: - "@typescript-eslint/types" "6.5.0" - eslint-visitor-keys "^3.4.1" + "@typescript-eslint/types" "7.15.0" + eslint-visitor-keys "^3.4.3" + +"@typescript-eslint/visitor-keys@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.0.0.tgz#224a67230190d267e6e78586bd7d8dfbd32ae4f3" + integrity sha512-oN0K4nkHuOyF3PVMyETbpP5zp6wfyOvm7tWhTMfoqxSSsPmJIh6JNASuZDlODE8eE+0EB9uar+6+vxr9DBTYOA== + dependencies: + "@typescript-eslint/types" "8.0.0" + eslint-visitor-keys "^3.4.3" + +"@ungap/structured-clone@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" + integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== acorn-jsx@^5.3.2: version "5.3.2" @@ -1101,6 +1680,13 @@ ajv@^6.12.4: json-schema-traverse "^0.4.1" uri-js "^4.2.2" +ansi-escapes@^4.2.1: + version "4.3.2" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" @@ -1113,7 +1699,7 @@ ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" -ansi-styles@^4.1.0: +ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.3.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== @@ -1125,11 +1711,26 @@ ansi-styles@^5.0.0: resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== +anymatch@^3.0.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + arg@^4.1.0: version "4.1.3" resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + argparse@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" @@ -1140,20 +1741,85 @@ array-union@^2.1.0: resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== +async@^3.2.3: + version "3.2.5" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.5.tgz#ebd52a8fdaf7a2289a24df399f8d8485c8a46b66" + integrity sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg== + asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== axios@^1.1.2: - version "1.5.0" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.5.0.tgz#f02e4af823e2e46a9768cfc74691fdd0517ea267" - integrity sha512-D4DdjDo5CY50Qms0qGQTTw6Q44jl7zRwY7bthds06pUGfChBCTcQs+N743eFWGEd6pRTMd6A+I87aWyFV5wiZQ== + version "1.7.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.2.tgz#b625db8a7051fbea61c35a3cbb3a1daa7b9c7621" + integrity sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw== dependencies: - follow-redirects "^1.15.0" + follow-redirects "^1.15.6" form-data "^4.0.0" proxy-from-env "^1.1.0" +babel-jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.7.0.tgz#f4369919225b684c56085998ac63dbd05be020d5" + integrity sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg== + dependencies: + "@jest/transform" "^29.7.0" + "@types/babel__core" "^7.1.14" + babel-plugin-istanbul "^6.1.1" + babel-preset-jest "^29.6.3" + chalk "^4.0.0" + graceful-fs "^4.2.9" + slash "^3.0.0" + +babel-plugin-istanbul@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" + integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@istanbuljs/load-nyc-config" "^1.0.0" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-instrument "^5.0.4" + test-exclude "^6.0.0" + +babel-plugin-jest-hoist@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz#aadbe943464182a8922c3c927c3067ff40d24626" + integrity sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg== + dependencies: + "@babel/template" "^7.3.3" + "@babel/types" "^7.3.3" + "@types/babel__core" "^7.1.14" + "@types/babel__traverse" "^7.0.6" + +babel-preset-current-node-syntax@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" + integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== + dependencies: + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-bigint" "^7.8.3" + "@babel/plugin-syntax-class-properties" "^7.8.3" + "@babel/plugin-syntax-import-meta" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.8.3" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-top-level-await" "^7.8.3" + +babel-preset-jest@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz#fa05fa510e7d493896d7b0dd2033601c840f171c" + integrity sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA== + dependencies: + babel-plugin-jest-hoist "^29.6.3" + babel-preset-current-node-syntax "^1.0.0" + balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" @@ -1182,6 +1848,13 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + braces@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" @@ -1194,6 +1867,16 @@ brorand@^1.1.0: resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== +browserslist@^4.21.9: + version "4.21.10" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.10.tgz#dbbac576628c13d3b2231332cb2ec5a46e015bb0" + integrity sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ== + dependencies: + caniuse-lite "^1.0.30001517" + electron-to-chromium "^1.4.477" + node-releases "^2.0.13" + update-browserslist-db "^1.0.11" + bs-logger@0.x: version "0.2.6" resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" @@ -1201,6 +1884,18 @@ bs-logger@0.x: dependencies: fast-json-stable-stringify "2.x" +bser@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" + integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== + dependencies: + node-int64 "^0.4.0" + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + bufferutil@^4.0.1: version "4.0.7" resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.7.tgz#60c0d19ba2c992dd8273d3f73772ffc894c153ad" @@ -1213,7 +1908,22 @@ callsites@^3.0.0: resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== -chalk@^2.0.0: +camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +camelcase@^6.2.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== + +caniuse-lite@^1.0.30001517: + version "1.0.30001538" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001538.tgz#9dbc6b9af1ff06b5eb12350c2012b3af56744f3f" + integrity sha512-HWJnhnID+0YMtGlzcp3T9drmBJUVDchPJ08tpUGFLs9CYlwWPH2uLgpHn8fND5pCgXVtnGS3H4QR9XLMHVNkHw== + +chalk@^2.0.0, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -1222,7 +1932,7 @@ chalk@^2.0.0: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^4.0.0: +chalk@^4.0.0, chalk@^4.0.2: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -1230,11 +1940,40 @@ chalk@^4.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" +char-regex@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" + integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== + ci-info@^3.2.0: version "3.8.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.8.0.tgz#81408265a5380c929f0bc665d62256628ce9ef91" integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw== +cjs-module-lexer@^1.0.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz#6c370ab19f8a3394e318fe682686ec0ac684d107" + integrity sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ== + +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.1" + wrap-ansi "^7.0.0" + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== + +collect-v8-coverage@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz#c0b29bcd33bcd0779a1344c2136051e6afd3d9e9" + integrity sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q== + color-convert@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" @@ -1271,20 +2010,43 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== +convert-source-map@^1.6.0, convert-source-map@^1.7.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" + integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== + +convert-source-map@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== + +create-jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/create-jest/-/create-jest-29.7.0.tgz#a355c5b3cb1e1af02ba177fe7afd7feee49a5320" + integrity sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q== + dependencies: + "@jest/types" "^29.6.3" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + jest-config "^29.7.0" + jest-util "^29.7.0" + prompts "^2.0.1" + create-require@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== -"creditcoin-js@file:../../creditcoin-js/creditcoin-js-v0.10.1.tgz": - version "0.10.1" - resolved "file:../../creditcoin-js/creditcoin-js-v0.10.1.tgz#ad9f04d6e50d31398f9b3fcf0cb949cf223dbe1f" +"creditcoin-js@file:../../creditcoin-js/creditcoin-js-v0.10.4.tgz": + version "0.10.4" + resolved "file:../../creditcoin-js/creditcoin-js-v0.10.4.tgz#cceccd3ad3dad8511d7cd244fe74873eba7e1bdf" dependencies: "@polkadot/api" "9.14.2" ethers "^5.7.1" js-guid "^1.0.0" -cross-spawn@^7.0.2: +cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -1313,27 +2075,42 @@ debug@^2.2.0: dependencies: ms "2.0.0" -debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: +debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" +dedent@^1.0.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.1.tgz#4f3fc94c8b711e9bb2800d185cd6ad20f2a90aff" + integrity sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg== + deep-is@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== +deepmerge@^4.2.2: + version "4.3.1" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" + integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== + delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== -diff-sequences@^29.4.3: - version "29.4.3" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.4.3.tgz#9314bc1fabe09267ffeca9cbafc457d8499a13f2" - integrity sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA== +detect-newline@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" + integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== + +diff-sequences@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" + integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== diff@^4.0.1: version "4.0.2" @@ -1361,6 +2138,18 @@ ed2curve@^0.3.0: dependencies: tweetnacl "1.x.x" +ejs@^3.1.10: + version "3.1.10" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.10.tgz#69ab8358b14e896f80cc39e62087b88500c3ac3b" + integrity sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA== + dependencies: + jake "^10.8.5" + +electron-to-chromium@^1.4.477: + version "1.4.526" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.526.tgz#1bcda5f2b8238e497c20fcdb41af5da907a770e2" + integrity sha512-tjjTMjmZAx1g6COrintLTa2/jcafYKxKoiEkdQOrVdbLaHh2wCt2nsAF8ZHweezkrP+dl/VG9T5nabcYoo0U5Q== + elliptic@6.5.4: version "6.5.4" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" @@ -1374,6 +2163,23 @@ elliptic@6.5.4: minimalistic-assert "^1.0.1" minimalistic-crypto-utils "^1.0.1" +emittery@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" + integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + es5-ext@^0.10.35, es5-ext@^0.10.50: version "0.10.62" resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.62.tgz#5e6adc19a6da524bf3d1e02bbc8960e5eb49a9a5" @@ -1400,6 +2206,11 @@ es6-symbol@^3.1.1, es6-symbol@^3.1.3: d "^1.0.1" ext "^1.1.2" +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" @@ -1416,9 +2227,9 @@ escape-string-regexp@^4.0.0: integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== eslint-config-prettier@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-9.0.0.tgz#eb25485946dd0c66cd216a46232dc05451518d1f" - integrity sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw== + version "9.1.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz#31af3d94578645966c082fcb71a5846d3c94867f" + integrity sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw== eslint-scope@^7.2.2: version "7.2.2" @@ -1434,17 +2245,18 @@ eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4 integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== eslint@^8.16.0: - version "8.48.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.48.0.tgz#bf9998ba520063907ba7bfe4c480dc8be03c2155" - integrity sha512-sb6DLeIuRXxeM1YljSe1KEx9/YYeZFQWcV8Rq9HfigmdDEugjLEVEa1ozDjL6YDjBpQHPJxJzze+alxi4T3OLg== + version "8.57.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.0.tgz#c786a6fd0e0b68941aaf624596fb987089195668" + integrity sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@eslint-community/regexpp" "^4.6.1" - "@eslint/eslintrc" "^2.1.2" - "@eslint/js" "8.48.0" - "@humanwhocodes/config-array" "^0.11.10" + "@eslint/eslintrc" "^2.1.4" + "@eslint/js" "8.57.0" + "@humanwhocodes/config-array" "^0.11.14" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" + "@ungap/structured-clone" "^1.2.0" ajv "^6.12.4" chalk "^4.0.0" cross-spawn "^7.0.2" @@ -1485,6 +2297,11 @@ espree@^9.6.0, espree@^9.6.1: acorn-jsx "^5.3.2" eslint-visitor-keys "^3.4.1" +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + esquery@^1.4.2: version "1.5.0" resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" @@ -1555,16 +2372,36 @@ eventemitter3@^5.0.0: resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4" integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== -expect@^29.0.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/expect/-/expect-29.5.0.tgz#68c0509156cb2a0adb8865d413b137eeaae682f7" - integrity sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg== - dependencies: - "@jest/expect-utils" "^29.5.0" - jest-get-type "^29.4.3" - jest-matcher-utils "^29.5.0" - jest-message-util "^29.5.0" - jest-util "^29.5.0" +execa@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + +exit@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== + +expect@^29.0.0, expect@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/expect/-/expect-29.7.0.tgz#578874590dcb3214514084c08115d8aee61e11bc" + integrity sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw== + dependencies: + "@jest/expect-utils" "^29.7.0" + jest-get-type "^29.6.3" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" ext@^1.1.2: version "1.7.0" @@ -1589,7 +2426,7 @@ fast-glob@^3.2.9: merge2 "^1.3.0" micromatch "^4.0.4" -fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0: +fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== @@ -1606,6 +2443,13 @@ fastq@^1.6.0: dependencies: reusify "^1.0.4" +fb-watchman@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c" + integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== + dependencies: + bser "2.1.1" + fetch-blob@^3.1.2, fetch-blob@^3.1.4: version "3.2.0" resolved "https://registry.yarnpkg.com/fetch-blob/-/fetch-blob-3.2.0.tgz#f09b8d4bbd45adc6f0c20b7e787e793e309dcce9" @@ -1621,6 +2465,13 @@ file-entry-cache@^6.0.1: dependencies: flat-cache "^3.0.4" +filelist@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" + integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== + dependencies: + minimatch "^5.0.1" + fill-range@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" @@ -1628,6 +2479,14 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" +find-up@^4.0.0, find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + find-up@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" @@ -1649,19 +2508,10 @@ flatted@^3.1.0: resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== -follow-redirects@^1.15.0: - version "1.15.2" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" - integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== - -form-data@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" - integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" +follow-redirects@^1.15.6: + version "1.15.6" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b" + integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA== form-data@^4.0.0: version "4.0.0" @@ -1684,6 +2534,36 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== +fsevents@^2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + +get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-package-type@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" + integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== + +get-stream@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + glob-parent@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" @@ -1698,7 +2578,7 @@ glob-parent@^6.0.2: dependencies: is-glob "^4.0.3" -glob@^7.1.3: +glob@^7.1.3, glob@^7.1.4: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -1710,6 +2590,11 @@ glob@^7.1.3: once "^1.3.0" path-is-absolute "^1.0.0" +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + globals@^13.19.0: version "13.20.0" resolved "https://registry.yarnpkg.com/globals/-/globals-13.20.0.tgz#ea276a1e508ffd4f1612888f9d1bad1e2717bf82" @@ -1749,6 +2634,13 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3: version "1.1.7" resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" @@ -1766,10 +2658,20 @@ hmac-drbg@^1.0.1: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" -ignore@^5.2.0, ignore@^5.2.4: - version "5.2.4" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" - integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== +html-escaper@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== + +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + +ignore@^5.2.0, ignore@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" + integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== import-fresh@^3.2.1: version "3.3.0" @@ -1779,6 +2681,14 @@ import-fresh@^3.2.1: parent-module "^1.0.0" resolve-from "^4.0.0" +import-local@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" + integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== + dependencies: + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" + imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" @@ -1797,11 +2707,33 @@ inherits@2, inherits@^2.0.3, inherits@^2.0.4: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + +is-core-module@^2.13.0: + version "2.13.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.0.tgz#bb52aa6e2cbd49a30c2ba68c42bf3435ba6072db" + integrity sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ== + dependencies: + has "^1.0.3" + is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-generator-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" + integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== + is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" @@ -1819,6 +2751,11 @@ is-path-inside@^3.0.3: resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + is-typedarray@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" @@ -1829,67 +2766,426 @@ isexe@^2.0.0: resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== -jest-diff@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.5.0.tgz#e0d83a58eb5451dcc1fa61b1c3ee4e8f5a290d63" - integrity sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw== +istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" + integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== + +istanbul-lib-instrument@^5.0.4: + version "5.2.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" + integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== + dependencies: + "@babel/core" "^7.12.3" + "@babel/parser" "^7.14.7" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.2.0" + semver "^6.3.0" + +istanbul-lib-instrument@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.0.tgz#7a8af094cbfff1d5bb280f62ce043695ae8dd5b8" + integrity sha512-x58orMzEVfzPUKqlbLd1hXCnySCxKdDKa6Rjg97CwuLLRI4g3FHTdnExu1OqffVFay6zeMW+T6/DowFLndWnIw== + dependencies: + "@babel/core" "^7.12.3" + "@babel/parser" "^7.14.7" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.2.0" + semver "^7.5.4" + +istanbul-lib-report@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" + integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== + dependencies: + istanbul-lib-coverage "^3.0.0" + make-dir "^4.0.0" + supports-color "^7.1.0" + +istanbul-lib-source-maps@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" + integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== + dependencies: + debug "^4.1.1" + istanbul-lib-coverage "^3.0.0" + source-map "^0.6.1" + +istanbul-reports@^3.1.3: + version "3.1.6" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.6.tgz#2544bcab4768154281a2f0870471902704ccaa1a" + integrity sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg== + dependencies: + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" + +jake@^10.8.5: + version "10.9.2" + resolved "https://registry.yarnpkg.com/jake/-/jake-10.9.2.tgz#6ae487e6a69afec3a5e167628996b59f35ae2b7f" + integrity sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA== + dependencies: + async "^3.2.3" + chalk "^4.0.2" + filelist "^1.0.4" + minimatch "^3.1.2" + +jest-changed-files@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.7.0.tgz#1c06d07e77c78e1585d020424dedc10d6e17ac3a" + integrity sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w== + dependencies: + execa "^5.0.0" + jest-util "^29.7.0" + p-limit "^3.1.0" + +jest-circus@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.7.0.tgz#b6817a45fcc835d8b16d5962d0c026473ee3668a" + integrity sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/expect" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + co "^4.6.0" + dedent "^1.0.0" + is-generator-fn "^2.0.0" + jest-each "^29.7.0" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-runtime "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" + p-limit "^3.1.0" + pretty-format "^29.7.0" + pure-rand "^6.0.0" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-cli@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.7.0.tgz#5592c940798e0cae677eec169264f2d839a37995" + integrity sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg== + dependencies: + "@jest/core" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" + chalk "^4.0.0" + create-jest "^29.7.0" + exit "^0.1.2" + import-local "^3.0.2" + jest-config "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" + yargs "^17.3.1" + +jest-config@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.7.0.tgz#bcbda8806dbcc01b1e316a46bb74085a84b0245f" + integrity sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ== + dependencies: + "@babel/core" "^7.11.6" + "@jest/test-sequencer" "^29.7.0" + "@jest/types" "^29.6.3" + babel-jest "^29.7.0" + chalk "^4.0.0" + ci-info "^3.2.0" + deepmerge "^4.2.2" + glob "^7.1.3" + graceful-fs "^4.2.9" + jest-circus "^29.7.0" + jest-environment-node "^29.7.0" + jest-get-type "^29.6.3" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-runner "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" + micromatch "^4.0.4" + parse-json "^5.2.0" + pretty-format "^29.7.0" + slash "^3.0.0" + strip-json-comments "^3.1.1" + +jest-diff@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.7.0.tgz#017934a66ebb7ecf6f205e84699be10afd70458a" + integrity sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw== dependencies: chalk "^4.0.0" - diff-sequences "^29.4.3" - jest-get-type "^29.4.3" - pretty-format "^29.5.0" + diff-sequences "^29.6.3" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" -jest-get-type@^29.4.3: - version "29.4.3" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.4.3.tgz#1ab7a5207c995161100b5187159ca82dd48b3dd5" - integrity sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg== +jest-docblock@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.7.0.tgz#8fddb6adc3cdc955c93e2a87f61cfd350d5d119a" + integrity sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g== + dependencies: + detect-newline "^3.0.0" -jest-matcher-utils@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.5.0.tgz#d957af7f8c0692c5453666705621ad4abc2c59c5" - integrity sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw== +jest-each@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.7.0.tgz#162a9b3f2328bdd991beaabffbb74745e56577d1" + integrity sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ== dependencies: + "@jest/types" "^29.6.3" chalk "^4.0.0" - jest-diff "^29.5.0" - jest-get-type "^29.4.3" - pretty-format "^29.5.0" + jest-get-type "^29.6.3" + jest-util "^29.7.0" + pretty-format "^29.7.0" + +jest-environment-node@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.7.0.tgz#0b93e111dda8ec120bc8300e6d1fb9576e164376" + integrity sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/fake-timers" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + jest-mock "^29.7.0" + jest-util "^29.7.0" -jest-message-util@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.5.0.tgz#1f776cac3aca332ab8dd2e3b41625435085c900e" - integrity sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA== +jest-get-type@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.6.3.tgz#36f499fdcea197c1045a127319c0481723908fd1" + integrity sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw== + +jest-haste-map@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.7.0.tgz#3c2396524482f5a0506376e6c858c3bbcc17b104" + integrity sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA== + dependencies: + "@jest/types" "^29.6.3" + "@types/graceful-fs" "^4.1.3" + "@types/node" "*" + anymatch "^3.0.3" + fb-watchman "^2.0.0" + graceful-fs "^4.2.9" + jest-regex-util "^29.6.3" + jest-util "^29.7.0" + jest-worker "^29.7.0" + micromatch "^4.0.4" + walker "^1.0.8" + optionalDependencies: + fsevents "^2.3.2" + +jest-leak-detector@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz#5b7ec0dadfdfec0ca383dc9aa016d36b5ea4c728" + integrity sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw== + dependencies: + jest-get-type "^29.6.3" + pretty-format "^29.7.0" + +jest-matcher-utils@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz#ae8fec79ff249fd592ce80e3ee474e83a6c44f12" + integrity sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g== + dependencies: + chalk "^4.0.0" + jest-diff "^29.7.0" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" + +jest-message-util@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.7.0.tgz#8bc392e204e95dfe7564abbe72a404e28e51f7f3" + integrity sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w== dependencies: "@babel/code-frame" "^7.12.13" - "@jest/types" "^29.5.0" + "@jest/types" "^29.6.3" "@types/stack-utils" "^2.0.0" chalk "^4.0.0" graceful-fs "^4.2.9" micromatch "^4.0.4" - pretty-format "^29.5.0" + pretty-format "^29.7.0" slash "^3.0.0" stack-utils "^2.0.3" -jest-util@^29.0.0, jest-util@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.5.0.tgz#24a4d3d92fc39ce90425311b23c27a6e0ef16b8f" - integrity sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ== +jest-mock@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.7.0.tgz#4e836cf60e99c6fcfabe9f99d017f3fdd50a6347" + integrity sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw== + dependencies: + "@jest/types" "^29.6.3" + "@types/node" "*" + jest-util "^29.7.0" + +jest-pnp-resolver@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e" + integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== + +jest-regex-util@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.6.3.tgz#4a556d9c776af68e1c5f48194f4d0327d24e8a52" + integrity sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg== + +jest-resolve-dependencies@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz#1b04f2c095f37fc776ff40803dc92921b1e88428" + integrity sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA== + dependencies: + jest-regex-util "^29.6.3" + jest-snapshot "^29.7.0" + +jest-resolve@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.7.0.tgz#64d6a8992dd26f635ab0c01e5eef4399c6bcbc30" + integrity sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA== + dependencies: + chalk "^4.0.0" + graceful-fs "^4.2.9" + jest-haste-map "^29.7.0" + jest-pnp-resolver "^1.2.2" + jest-util "^29.7.0" + jest-validate "^29.7.0" + resolve "^1.20.0" + resolve.exports "^2.0.0" + slash "^3.0.0" + +jest-runner@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.7.0.tgz#809af072d408a53dcfd2e849a4c976d3132f718e" + integrity sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ== dependencies: - "@jest/types" "^29.5.0" + "@jest/console" "^29.7.0" + "@jest/environment" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + emittery "^0.13.1" + graceful-fs "^4.2.9" + jest-docblock "^29.7.0" + jest-environment-node "^29.7.0" + jest-haste-map "^29.7.0" + jest-leak-detector "^29.7.0" + jest-message-util "^29.7.0" + jest-resolve "^29.7.0" + jest-runtime "^29.7.0" + jest-util "^29.7.0" + jest-watcher "^29.7.0" + jest-worker "^29.7.0" + p-limit "^3.1.0" + source-map-support "0.5.13" + +jest-runtime@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.7.0.tgz#efecb3141cf7d3767a3a0cc8f7c9990587d3d817" + integrity sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/fake-timers" "^29.7.0" + "@jest/globals" "^29.7.0" + "@jest/source-map" "^29.6.3" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + cjs-module-lexer "^1.0.0" + collect-v8-coverage "^1.0.0" + glob "^7.1.3" + graceful-fs "^4.2.9" + jest-haste-map "^29.7.0" + jest-message-util "^29.7.0" + jest-mock "^29.7.0" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" + slash "^3.0.0" + strip-bom "^4.0.0" + +jest-snapshot@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.7.0.tgz#c2c574c3f51865da1bb329036778a69bf88a6be5" + integrity sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw== + dependencies: + "@babel/core" "^7.11.6" + "@babel/generator" "^7.7.2" + "@babel/plugin-syntax-jsx" "^7.7.2" + "@babel/plugin-syntax-typescript" "^7.7.2" + "@babel/types" "^7.3.3" + "@jest/expect-utils" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + babel-preset-current-node-syntax "^1.0.0" + chalk "^4.0.0" + expect "^29.7.0" + graceful-fs "^4.2.9" + jest-diff "^29.7.0" + jest-get-type "^29.6.3" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" + natural-compare "^1.4.0" + pretty-format "^29.7.0" + semver "^7.5.3" + +jest-util@^29.0.0, jest-util@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc" + integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== + dependencies: + "@jest/types" "^29.6.3" "@types/node" "*" chalk "^4.0.0" ci-info "^3.2.0" graceful-fs "^4.2.9" picomatch "^2.2.3" +jest-validate@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.7.0.tgz#7bf705511c64da591d46b15fce41400d52147d9c" + integrity sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw== + dependencies: + "@jest/types" "^29.6.3" + camelcase "^6.2.0" + chalk "^4.0.0" + jest-get-type "^29.6.3" + leven "^3.1.0" + pretty-format "^29.7.0" + +jest-watcher@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.7.0.tgz#7810d30d619c3a62093223ce6bb359ca1b28a2f2" + integrity sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g== + dependencies: + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + emittery "^0.13.1" + jest-util "^29.7.0" + string-length "^4.0.1" + +jest-worker@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.7.0.tgz#acad073acbbaeb7262bd5389e1bcf43e10058d4a" + integrity sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw== + dependencies: + "@types/node" "*" + jest-util "^29.7.0" + merge-stream "^2.0.0" + supports-color "^8.0.0" + jest@^29.0.1: - version "29.5.0" - resolved "https://registry.yarnpkg.com/jest/-/jest-29.5.0.tgz#f75157622f5ce7ad53028f2f8888ab53e1f1f24e" - integrity sha512-juMg3he2uru1QoXX078zTa7pO85QyB9xajZc6bU+d9yEGwrKX6+vGmJQ3UdVZsvTEUARIdObzH68QItim6OSSQ== + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest/-/jest-29.7.0.tgz#994676fc24177f088f1c5e3737f5697204ff2613" + integrity sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw== dependencies: - "@jest/core" "^29.5.0" - "@jest/types" "^29.5.0" + "@jest/core" "^29.7.0" + "@jest/types" "^29.6.3" import-local "^3.0.2" - jest-cli "^29.5.0" + jest-cli "^29.7.0" js-guid@^1.0.0: version "1.0.2" @@ -1906,6 +3202,14 @@ js-tokens@^4.0.0: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== +js-yaml@^3.13.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + js-yaml@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" @@ -1913,6 +3217,16 @@ js-yaml@^4.1.0: dependencies: argparse "^2.0.1" +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" @@ -1933,6 +3247,16 @@ json5@^2.2.3: resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== +kleur@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" + integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== + +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + levn@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" @@ -1941,6 +3265,18 @@ levn@^0.4.1: prelude-ls "^1.2.1" type-check "~0.4.0" +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + locate-path@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" @@ -1963,6 +3299,13 @@ lodash@^4.17.21: resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + lru-cache@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" @@ -1970,11 +3313,30 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" +make-dir@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" + integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== + dependencies: + semver "^7.5.3" + make-error@1.x, make-error@^1.1.1: version "1.3.6" resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== +makeerror@1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" + integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== + dependencies: + tmpl "1.0.5" + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" @@ -2000,6 +3362,11 @@ mime-types@^2.1.12: dependencies: mime-db "1.52.0" +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" @@ -2010,13 +3377,27 @@ minimalistic-crypto-utils@^1.0.1: resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== -minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: +minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" +minimatch@^5.0.1: + version "5.1.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^9.0.4: + version "9.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.4.tgz#8e49c731d1749cbec05050ee5145147b32496a51" + integrity sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw== + dependencies: + brace-expansion "^2.0.1" + mock-socket@^9.2.1: version "9.3.1" resolved "https://registry.yarnpkg.com/mock-socket/-/mock-socket-9.3.1.tgz#24fb00c2f573c84812aa4a24181bb025de80cc8e" @@ -2071,6 +3452,28 @@ node-gyp-build@^4.3.0: resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.6.1.tgz#24b6d075e5e391b8d5539d98c7fc5c210cac8a3e" integrity sha512-24vnklJmyRS8ViBNI8KbtK/r/DmXQMRiOMXTNz2nrTnAYUwjmEEbnnpB/+kt+yWRv73bPsSPRFddrcIbAxSiMQ== +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== + +node-releases@^2.0.13: + version "2.0.13" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d" + integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== + +normalize-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +npm-run-path@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + once@^1.3.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" @@ -2078,6 +3481,13 @@ once@^1.3.0: dependencies: wrappy "1" +onetime@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + optionator@^0.9.3: version "0.9.3" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" @@ -2090,13 +3500,27 @@ optionator@^0.9.3: prelude-ls "^1.2.1" type-check "^0.4.0" -p-limit@^3.0.2: +p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-limit@^3.0.2, p-limit@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== dependencies: yocto-queue "^0.1.0" +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + p-locate@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" @@ -2104,6 +3528,11 @@ p-locate@^5.0.0: dependencies: p-limit "^3.0.2" +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + pako@^2.0.4: version "2.1.0" resolved "https://registry.yarnpkg.com/pako/-/pako-2.1.0.tgz#266cc37f98c7d883545d11335c00fbd4062c9a86" @@ -2116,6 +3545,16 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" +parse-json@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + path-exists@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" @@ -2126,40 +3565,70 @@ path-is-absolute@^1.0.0: resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== -path-key@^3.1.0: +path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + path-type@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== -picomatch@^2.2.3, picomatch@^2.3.1: +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.0.4, picomatch@^2.2.3, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== +pirates@^4.0.4: + version "4.0.6" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" + integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== + +pkg-dir@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== prettier@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.0.0.tgz#e7b19f691245a21d618c68bc54dc06122f6105ae" - integrity sha512-zBf5eHpwHOGPC47h0zrPyNn+eAEIdEzfywMoYn2XPi0P44Zp0tSq64rq0xAREh4auw2cJZHo9QUob+NqCQky4g== + version "3.3.2" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.3.2.tgz#03ff86dc7c835f2d2559ee76876a3914cec4a90a" + integrity sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA== -pretty-format@^29.0.0, pretty-format@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.5.0.tgz#283134e74f70e2e3e7229336de0e4fce94ccde5a" - integrity sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw== +pretty-format@^29.0.0, pretty-format@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" + integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== dependencies: - "@jest/schemas" "^29.4.3" + "@jest/schemas" "^29.6.3" ansi-styles "^5.0.0" react-is "^18.0.0" +prompts@^2.0.1: + version "2.4.2" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" + integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.5" + propagate@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/propagate/-/propagate-2.0.1.tgz#40cdedab18085c792334e64f0ac17256d38f9a45" @@ -2175,6 +3644,11 @@ punycode@^2.1.0: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== +pure-rand@^6.0.0: + version "6.0.3" + resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.0.3.tgz#3c9e6b53c09e52ac3cedffc85ab7c1c7094b38cb" + integrity sha512-KddyFewCsO0j3+np81IQ+SweXLDnDQTs5s67BOnrYmYe/yNmUhttQyGsYzy8yUnoljGAQ9sl38YB4vH8ur7Y+w== + queue-microtask@^1.2.2: version "1.2.3" resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" @@ -2190,11 +3664,42 @@ regenerator-runtime@^0.14.0: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45" integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA== +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + +resolve-cwd@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== + dependencies: + resolve-from "^5.0.0" + resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== +resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + +resolve.exports@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800" + integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== + +resolve@^1.20.0: + version "1.22.6" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.6.tgz#dd209739eca3aef739c626fea1b4f3c506195362" + integrity sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw== + dependencies: + is-core-module "^2.13.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + reusify@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" @@ -2226,10 +3731,15 @@ scrypt-js@3.0.1: resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== -semver@7.x, semver@^7.5.4: - version "7.5.4" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" - integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== +semver@^6.3.0, semver@^6.3.1: + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + +semver@^7.5.3, semver@^7.5.4, semver@^7.6.0: + version "7.6.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" + integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== dependencies: lru-cache "^6.0.0" @@ -2245,11 +3755,39 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== +signal-exit@^3.0.3, signal-exit@^3.0.7: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +sisteransi@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== + slash@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== +source-map-support@0.5.13: + version "0.5.13" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" + integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.6.0, source-map@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== + stack-utils@^2.0.3: version "2.0.6" resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" @@ -2257,13 +3795,40 @@ stack-utils@^2.0.3: dependencies: escape-string-regexp "^2.0.0" -strip-ansi@^6.0.1: +string-length@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" + integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== + dependencies: + char-regex "^1.0.2" + strip-ansi "^6.0.0" + +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: ansi-regex "^5.0.1" +strip-bom@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" @@ -2283,11 +3848,42 @@ supports-color@^7.1.0: dependencies: has-flag "^4.0.0" +supports-color@^8.0.0: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +test-exclude@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" + integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== + dependencies: + "@istanbuljs/schema" "^0.1.2" + glob "^7.1.4" + minimatch "^3.0.4" + text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== +tmpl@1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" + integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== + to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" @@ -2295,23 +3891,24 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" -ts-api-utils@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.0.1.tgz#8144e811d44c749cd65b2da305a032510774452d" - integrity sha512-lC/RGlPmwdrIBFTX59wwNzqh7aR2otPNPR/5brHZm/XKFYKsfqxihXUe9pU3JI+3vGkl+vyCoNNnPhJn3aLK1A== +ts-api-utils@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.3.0.tgz#4b490e27129f1e8e686b45cc4ab63714dc60eea1" + integrity sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ== ts-jest@^29.0.0: - version "29.1.0" - resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-29.1.0.tgz#4a9db4104a49b76d2b368ea775b6c9535c603891" - integrity sha512-ZhNr7Z4PcYa+JjMl62ir+zPiNJfXJN6E8hSLnaUKhOgqcn8vb3e537cpkd0FuAfRK3sR1LSqM1MOhliXNgOFPA== + version "29.2.4" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-29.2.4.tgz#38ccf487407d7a63054a72689f6f99b075e296e5" + integrity sha512-3d6tgDyhCI29HlpwIq87sNuI+3Q6GLTTCeYRHCs7vDz+/3GCMwEtV9jezLyl4ZtnBgx00I7hm8PCP8cTksMGrw== dependencies: bs-logger "0.x" + ejs "^3.1.10" fast-json-stable-stringify "2.x" jest-util "^29.0.0" json5 "^2.2.3" lodash.memoize "4.x" make-error "1.x" - semver "7.x" + semver "^7.5.3" yargs-parser "^21.0.1" ts-node@^10.8.0: @@ -2350,11 +3947,21 @@ type-check@^0.4.0, type-check@~0.4.0: dependencies: prelude-ls "^1.2.1" +type-detect@4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + type-fest@^0.20.2: version "0.20.2" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + type@^1.0.1: version "1.2.0" resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" @@ -2373,9 +3980,17 @@ typedarray-to-buffer@^3.1.5: is-typedarray "^1.0.0" typescript@^5.0.3: - version "5.2.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.2.2.tgz#5ebb5e5a5b75f085f22bc3f8460fba308310fa78" - integrity sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w== + version "5.5.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.5.2.tgz#c26f023cb0054e657ce04f72583ea2d85f8d0507" + integrity sha512-NcRtPEOsPFFWjobJEtfihkLCZCXZt/os3zf8nTxjVH3RvTSxjrCamJpbExGvYOF+tFHc3pA65qpdwPbzjohhew== + +update-browserslist-db@^1.0.11: + version "1.0.12" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.12.tgz#868ce670ac09b4a4d4c86b608701c0dee2dc41cd" + integrity sha512-tE1smlR58jxbFMtrMpFNRmsrOXlpNXss965T1CrpwuZUzUAg/TBQc94SpyhDLSzrqrJS9xTRBthnZAGcE1oaxg== + dependencies: + escalade "^3.1.1" + picocolors "^1.0.0" uri-js@^4.2.2: version "4.4.1" @@ -2396,6 +4011,22 @@ v8-compile-cache-lib@^3.0.1: resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== +v8-to-istanbul@^9.0.1: + version "9.1.0" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz#1b83ed4e397f58c85c266a570fc2558b5feb9265" + integrity sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA== + dependencies: + "@jridgewell/trace-mapping" "^0.3.12" + "@types/istanbul-lib-coverage" "^2.0.1" + convert-source-map "^1.6.0" + +walker@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" + integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== + dependencies: + makeerror "1.0.12" + web-streams-polyfill@^3.0.3: version "3.2.1" resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz#71c2718c52b45fd49dbeee88634b3a60ceab42a6" @@ -2420,41 +4051,76 @@ which@^2.0.1: dependencies: isexe "^2.0.0" +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== +write-file-atomic@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" + integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== + dependencies: + imurmurhash "^0.1.4" + signal-exit "^3.0.7" + ws@7.4.6: version "7.4.6" resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== -ws@^8.5.0: - version "8.13.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0" - integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== +ws@^8.5.0, ws@^8.8.1: + version "8.18.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.0.tgz#0d7505a6eafe2b0e712d232b42279f53bc289bbc" + integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw== -ws@^8.8.1: - version "8.14.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.14.1.tgz#4b9586b4f70f9e6534c7bb1d3dc0baa8b8cf01e0" - integrity sha512-4OOseMUq8AzRBI/7SLMUwO+FEDnguetSk7KMb1sHwvF2w2Wv5Hoj0nlifx8vtGsftE/jWHojPy8sMMzYLJ2G/A== +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== yaeti@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/yaeti/-/yaeti-0.0.6.tgz#f26f484d72684cf42bedfb76970aa1608fbf9577" integrity sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug== +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + yallist@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yargs-parser@^21.0.1: +yargs-parser@^21.0.1, yargs-parser@^21.1.1: version "21.1.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== +yargs@^17.3.1: + version "17.7.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== + dependencies: + cliui "^8.0.1" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.1.1" + yn@3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" diff --git a/test/runtime-utils/Cargo.toml b/test/runtime-utils/Cargo.toml index 31ab5aec7c..8fb4a10316 100644 --- a/test/runtime-utils/Cargo.toml +++ b/test/runtime-utils/Cargo.toml @@ -10,7 +10,7 @@ repository.workspace = true [dependencies] frame-support = { workspace = true } -parking_lot = "0.12.1" +parking_lot = "0.12.3" frame-system = { workspace = true } sp-io.workspace = true sp-keystore.workspace = true diff --git a/test/traced-test/Cargo.toml b/test/traced-test/Cargo.toml index 776e893711..a234fff2c5 100644 --- a/test/traced-test/Cargo.toml +++ b/test/traced-test/Cargo.toml @@ -6,8 +6,8 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -tracing-core = "0.1.31" -tracing-subscriber = { version = "0.3.16", features = ["env-filter"] } +tracing-core = "0.1.32" +tracing-subscriber = { version = "0.3.18", features = ["env-filter"] } [dev-dependencies] tracing.workspace = true diff --git a/zombienet/README.md b/zombienet/README.md index bc8592ebb5..bba8db99ef 100644 --- a/zombienet/README.md +++ b/zombienet/README.md @@ -136,7 +136,7 @@ WebSockets RPC because Polakdot JS Apps will refuse plain/text connections over Select an arbitrary node and search in its log file, e.g. `first.log` lines similar to -``` +```text 2023-09-13 16:31:40 Running JSON-RPC HTTP server: addr=0.0.0.0:32943, allowed origins=["*"] 2023-09-13 16:31:40 Running JSON-RPC WS server: addr=0.0.0.0:37271, allowed origins=["*"] ``` @@ -148,5 +148,5 @@ Select an arbitrary node and search in its log file, e.g. `first.log` lines simi ``` - (Possibly) adjust DNS configuration for the domain name used to access your VM. We've got `zombienet.creditcoin.network` operated by DevOps and pointing to one of our test VMs -- Go to https://polkadot.js.org/apps/?rpc=wss://zombienet.creditcoin.network:8443#/explorer +- Go to and explore the newly spawned chain!