diff --git a/.github/workflows/_deploy.yml b/.github/workflows/_deploy.yml new file mode 100644 index 0000000..f74f0ee --- /dev/null +++ b/.github/workflows/_deploy.yml @@ -0,0 +1,151 @@ +name: Reusable protected deployment + +on: + workflow_call: + inputs: + deploy_env: + required: true + type: string + deploy_metadata: + required: true + type: boolean + force: + required: false + default: false + type: boolean + release_tag: + required: false + default: "" + type: string + source_ref: + required: false + default: "" + type: string + allow_placeholder_metadata: + required: false + default: false + type: boolean + +permissions: + contents: write + +concurrency: + group: contracts-${{ inputs.deploy_env }} + cancel-in-progress: false + +jobs: + deploy: + runs-on: ubuntu-latest + environment: ${{ inputs.deploy_env }} + env: + DEPLOY_ENV: ${{ inputs.deploy_env }} + RPC_URL: ${{ secrets.RPC_URL }} + ETHERSCAN_API_KEY: ${{ secrets.EXPLORER_API_KEY }} + Deployment__RpcUrl: ${{ secrets.RPC_URL }} + Deployment__PrivateKey: ${{ secrets.DEPLOYER_PRIVATE_KEY }} + Deployment__AdminAddress: ${{ vars.ADMIN_ADDRESS }} + Deployment__MinterAddress: ${{ vars.MINTER_ADDRESS }} + Deployment__StakingOwnerAddress: ${{ vars.STAKING_OWNER_ADDRESS }} + steps: + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + with: + fetch-depth: 0 + ref: ${{ inputs.source_ref || github.sha }} + - name: Record exact checked-out source commit + run: echo "Deployment__SourceCommit=$(git rev-parse HEAD)" >> "$GITHUB_ENV" + - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 + with: + node-version: "22" + cache: npm + - uses: actions/setup-dotnet@67a3573c9a986a3f9c594539f4ab511d57bb3ce9 # v4 + with: + dotnet-version: "8.0.x" + - run: npm ci + - run: npm run compile + - run: dotnet build SmartContract.sln --configuration Release + - name: Validate production artwork and generate selected metadata + if: inputs.deploy_metadata + shell: bash + env: + ALLOW_PLACEHOLDER_METADATA: ${{ inputs.allow_placeholder_metadata }} + run: | + validation_args=() + if [[ "$ALLOW_PLACEHOLDER_METADATA" == "true" ]]; then validation_args+=(--allow-placeholders); fi + node scripts/validate-nft-assets.js --env "$DEPLOY_ENV" --manifest-only "${validation_args[@]}" + node scripts/generate-nft-assets.js --env "$DEPLOY_ENV" --force + chain_key="$(node -p "require('./deployments/config/${DEPLOY_ENV}/nft-manifest.json').chainKey")" + node scripts/validate-nft-assets.js --env "$DEPLOY_ENV" --chain-key "$chain_key" --output-only "${validation_args[@]}" + echo "CHAIN_KEY=$chain_key" >> "$GITHUB_ENV" + - name: Validate metadata configuration without publishing + if: ${{ ! inputs.deploy_metadata }} + run: node scripts/validate-nft-assets.js --env "$DEPLOY_ENV" --manifest-only --allow-placeholders + - name: Stage selected chain output + if: inputs.deploy_metadata + shell: bash + run: | + mkdir -p "site/$CHAIN_KEY" + cp -R "nft-assets/$CHAIN_KEY/." "site/$CHAIN_KEY/" + cp nft-assets/_headers nft-assets/_redirects site/ + - name: Upload selected metadata to Cloudflare Pages + if: inputs.deploy_metadata + uses: cloudflare/wrangler-action@9acf94ace14e7dc412b076f2c5c20b8ce93c79cd # v3 + with: + apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }} + accountId: ${{ vars.CLOUDFLARE_ACCOUNT_ID }} + command: pages deploy site --project-name=${{ vars.CF_PAGES_PROJECT }} --branch=${{ inputs.deploy_env }} + - name: Install selected deployment configuration + shell: bash + run: cp "deployments/config/$DEPLOY_ENV/deployment-params.json" "src/Tricksfor.Blockchain.Booster.Deploy/bin/Release/net8.0/appsettings.$DEPLOY_ENV.json" + - name: Deploy or resume contracts + shell: bash + env: + FORCE_DEPLOY: ${{ inputs.force }} + run: | + force_arg="" + if [[ "$FORCE_DEPLOY" == "true" ]]; then force_arg="--force"; fi + dotnet src/Tricksfor.Blockchain.Booster.Deploy/bin/Release/net8.0/Tricksfor.Blockchain.Booster.Deploy.dll deploy $force_arg + - name: Verify with synchronized Hardhat build information + if: vars.VERIFY_ENABLED == 'true' + shell: bash + env: + NETWORK_KEY: ${{ vars.NETWORK_KEY }} + run: | + nft_manifest="deployments/$DEPLOY_ENV/TricksforBoosterNFT.json" + staking_manifest="deployments/$DEPLOY_ENV/TricksforBoosterStaking.json" + nft_address="$(jq -r .address "$nft_manifest")" + staking_address="$(jq -r .address "$staking_manifest")" + mapfile -t nft_args < <(jq -r '.constructorArgs[]' "$nft_manifest") + mapfile -t staking_args < <(jq -r '.constructorArgs[]' "$staking_manifest") + npx hardhat verify --build-profile production --network "$NETWORK_KEY" "$nft_address" "${nft_args[@]}" | tee "deployments/$DEPLOY_ENV/nft-verification.txt" + npx hardhat verify --build-profile production --network "$NETWORK_KEY" "$staking_address" "${staking_args[@]}" | tee "deployments/$DEPLOY_ENV/staking-verification.txt" + - name: Run state-changing smoke test + run: dotnet src/Tricksfor.Blockchain.Booster.Deploy/bin/Release/net8.0/Tricksfor.Blockchain.Booster.Deploy.dll smoke + - name: Publish deployment summary + shell: bash + run: | + nft_manifest="deployments/$DEPLOY_ENV/TricksforBoosterNFT.json" + staking_manifest="deployments/$DEPLOY_ENV/TricksforBoosterStaking.json" + smoke_result="deployments/$DEPLOY_ENV/smoke-result.json" + { + echo "## $DEPLOY_ENV deployment" + echo + echo "| Contract | Address | Transaction | Gas used |" + echo "|---|---|---|---:|" + jq -r '"| NFT | `\(.address)` | `\(.transactionHash)` | \(.gasUsed) |"' "$nft_manifest" + jq -r '"| Staking | `\(.address)` | `\(.transactionHash)` | \(.gasUsed) |"' "$staking_manifest" + echo + echo "### Smoke result" + jq -r '"Token `\(.tokenId)` ended with owner `\(.finalOwner)` and staked=`\(.finalStaked)`.\n\nTokenStaked: `\(.tokenStaked | tostring)`\n\nTokenUnstaked: `\(.tokenUnstaked | tostring)`\n\nReads: `\(.readResults | tostring)`"' "$smoke_result" + } >> "$GITHUB_STEP_SUMMARY" + - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 + if: always() + with: + name: deployment-${{ inputs.deploy_env }}-${{ github.run_id }} + path: deployments/${{ inputs.deploy_env }}/ + if-no-files-found: error + - name: Attach permanent records to release + if: inputs.release_tag != '' && success() + env: + GH_TOKEN: ${{ github.token }} + RELEASE_TAG: ${{ inputs.release_tag }} + run: gh release upload "$RELEASE_TAG" "deployments/${DEPLOY_ENV}/"* --clobber diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..4814641 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,136 @@ +name: CI + +on: + pull_request: + push: + branches: [main] + +permissions: + contents: read + +jobs: + contracts: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 + with: + node-version: "22" + cache: npm + - run: npm ci + - run: npm run artifacts:check + - run: npm test + - run: npm run test:coverage + - name: npm production vulnerability audit + run: npm audit --omit=dev --audit-level=high + - name: Capture development-tool advisory report + shell: bash + run: npm audit --json > npm-audit-development.json || test -s npm-audit-development.json + - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 + with: + name: npm-development-audit + path: npm-audit-development.json + + security-analysis: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 + with: + node-version: "22" + cache: npm + - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 + with: + python-version: "3.12" + - run: npm ci + - run: npm run compile + - run: python -m pip install slither-analyzer==0.11.5 + - run: npm run security:prepare + - name: Slither static analysis + run: >- + slither . + --hardhat-ignore-compile + --hardhat-artifacts-directory .slither-artifacts + --exclude-dependencies + --filter-paths 'contracts/test|node_modules' + --fail-medium + --json slither-report.json + - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 + if: always() + with: + name: slither-report + path: slither-report.json + if-no-files-found: warn + + dotnet: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + with: + fetch-depth: 0 + - uses: actions/setup-dotnet@67a3573c9a986a3f9c594539f4ab511d57bb3ce9 # v4 + with: + dotnet-version: "8.0.x" + - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 + with: + node-version: "22" + cache: npm + - run: npm ci + - run: dotnet restore SmartContract.sln + - run: dotnet build SmartContract.sln --configuration Release --no-restore + - run: dotnet test SmartContract.sln --configuration Release --no-build + - name: NuGet vulnerability audit + shell: bash + run: | + dotnet list SmartContract.sln package --vulnerable --include-transitive | tee /tmp/nuget-audit.txt + if grep -qE 'has the following vulnerable packages|Top-level Package.*Severity' /tmp/nuget-audit.txt; then exit 1; fi + - name: Pack and inspect NuGet artifacts + shell: bash + run: | + package_version="2.0.0-ci.${GITHUB_RUN_NUMBER}" + dotnet pack src/Tricksfor.Blockchain.Booster/Tricksfor.Blockchain.Booster.csproj --configuration Release --no-build --output artifacts/nuget /p:PackageVersion="$package_version" + test "$(find artifacts/nuget -name '*.nupkg' ! -name '*.snupkg' | wc -l)" -eq 1 + test "$(find artifacts/nuget -name '*.snupkg' | wc -l)" -eq 1 + unzip -l artifacts/nuget/*.nupkg | grep -E 'lib/net8.0/Tricksfor.Blockchain.Booster.(dll|xml)|README.nuget.md' + unzip -l artifacts/nuget/*.snupkg | grep 'lib/net8.0/Tricksfor.Blockchain.Booster.pdb' + unzip -p artifacts/nuget/*.snupkg 'lib/net8.0/Tricksfor.Blockchain.Booster.pdb' | strings | grep -q 'raw.githubusercontent.com/Tricksfor-Organization/SmartContract' + mkdir -p /tmp/tricksfor-package-consumer + dotnet new console --framework net8.0 --output /tmp/tricksfor-package-consumer + dotnet add /tmp/tricksfor-package-consumer package Tricksfor.SmartContracts --version "$package_version" --no-restore + dotnet restore /tmp/tricksfor-package-consumer --source "$GITHUB_WORKSPACE/artifacts/nuget" --source https://api.nuget.org/v3/index.json + printf '%s\n' 'using Tricksfor.Blockchain.Booster.Contracts.Deployment;' 'if (!TricksforBoosterNFTDeployment.BYTECODE.StartsWith("0x") || TricksforBoosterNFTDeployment.ABI.Length == 0) throw new Exception("Missing NFT artifacts");' 'if (!TricksforBoosterStakingDeployment.BYTECODE.StartsWith("0x") || TricksforBoosterStakingDeployment.ABI.Length == 0) throw new Exception("Missing staking artifacts");' > /tmp/tricksfor-package-consumer/Program.cs + dotnet run --project /tmp/tricksfor-package-consumer + - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 + with: + name: nuget-ci + path: artifacts/nuget/* + + metadata: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 + with: + node-version: "22" + - name: Validate manifests and common source tree + shell: bash + run: | + for deploy_env in ethereum-sepolia polygon-amoy optimism-sepolia bsc-testnet avalanche-fuji; do + node scripts/validate-nft-assets.js --env "$deploy_env" --manifest-only --allow-placeholders + done + - name: Generate and validate every chain output + shell: bash + run: | + for deploy_env in ethereum-sepolia polygon-amoy optimism-sepolia bsc-testnet avalanche-fuji; do + node scripts/generate-nft-assets.js --env "$deploy_env" --force + chain_key="$(node -p "require('./deployments/config/${deploy_env}/nft-manifest.json').chainKey")" + node scripts/validate-nft-assets.js --env "$deploy_env" --chain-key "$chain_key" --output-only --allow-placeholders + done + node scripts/validate-nft-output.js + node scripts/test-metadata-snapshots.js + + workflow-lint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + - run: docker run --rm -v "${GITHUB_WORKSPACE}:/repo" -w /repo rhysd/actionlint:1.7.7 diff --git a/.github/workflows/deploy-mainnet.yml b/.github/workflows/deploy-mainnet.yml new file mode 100644 index 0000000..c59b583 --- /dev/null +++ b/.github/workflows/deploy-mainnet.yml @@ -0,0 +1,43 @@ +name: Deploy mainnet + +on: + workflow_dispatch: + inputs: + deploy_env: + type: choice + required: true + options: [ethereum-mainnet, polygon-mainnet, optimism-mainnet, bsc-mainnet, avalanche-mainnet] + release_tag: + description: Stable vMAJOR.MINOR.PATCH tag + required: true + type: string + deploy_metadata: + type: boolean + default: true + force: + type: boolean + default: false + +permissions: + contents: write + +jobs: + stable-tag: + runs-on: ubuntu-latest + steps: + - env: + GH_TOKEN: ${{ github.token }} + RELEASE_TAG: ${{ inputs.release_tag }} + run: | + [[ "$RELEASE_TAG" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]] || { echo "::error::A stable release tag is required"; exit 1; } + gh release view "$RELEASE_TAG" >/dev/null + deploy: + needs: stable-tag + uses: ./.github/workflows/_deploy.yml + with: + deploy_env: ${{ inputs.deploy_env }} + deploy_metadata: ${{ inputs.deploy_metadata }} + force: ${{ inputs.force }} + release_tag: ${{ inputs.release_tag }} + source_ref: ${{ inputs.release_tag }} + secrets: inherit diff --git a/.github/workflows/deploy-testnet.yml b/.github/workflows/deploy-testnet.yml new file mode 100644 index 0000000..bd4c40c --- /dev/null +++ b/.github/workflows/deploy-testnet.yml @@ -0,0 +1,28 @@ +name: Deploy testnet + +on: + workflow_dispatch: + inputs: + deploy_env: + type: choice + required: true + options: [ethereum-sepolia, polygon-amoy, optimism-sepolia, bsc-testnet, avalanche-fuji] + deploy_metadata: + type: boolean + default: true + force: + type: boolean + default: false + +permissions: + contents: read + +jobs: + deploy: + uses: ./.github/workflows/_deploy.yml + with: + deploy_env: ${{ inputs.deploy_env }} + deploy_metadata: ${{ inputs.deploy_metadata }} + force: ${{ inputs.force }} + allow_placeholder_metadata: true + secrets: inherit diff --git a/.github/workflows/mint-mainnet.yml b/.github/workflows/mint-mainnet.yml new file mode 100644 index 0000000..3a21144 --- /dev/null +++ b/.github/workflows/mint-mainnet.yml @@ -0,0 +1,69 @@ +name: Execute reviewed mainnet mint plan + +on: + workflow_dispatch: + inputs: + deploy_env: + type: choice + required: true + options: [ethereum-mainnet, polygon-mainnet, optimism-mainnet, bsc-mainnet, avalanche-mainnet] + release_tag: + description: Release containing the permanent deployment manifests + required: true + type: string + mint_plan_path: + description: Reviewed, committed token-to-recipient JSON plan + required: true + type: string + dry_run: + type: boolean + default: true + +permissions: + contents: read + +concurrency: + group: mint-${{ inputs.deploy_env }} + cancel-in-progress: false + +jobs: + mint: + runs-on: ubuntu-latest + environment: ${{ inputs.deploy_env }} + env: + DEPLOY_ENV: ${{ inputs.deploy_env }} + Deployment__RpcUrl: ${{ secrets.RPC_URL }} + Deployment__PrivateKey: ${{ secrets.DEPLOYER_PRIVATE_KEY }} + Deployment__AdminAddress: ${{ vars.ADMIN_ADDRESS }} + Deployment__MinterAddress: ${{ vars.MINTER_ADDRESS }} + Deployment__StakingOwnerAddress: ${{ vars.STAKING_OWNER_ADDRESS }} + Deployment__MintPlanPath: ${{ inputs.mint_plan_path }} + steps: + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + - uses: actions/setup-dotnet@67a3573c9a986a3f9c594539f4ab511d57bb3ce9 # v4 + with: + dotnet-version: "8.0.x" + - name: Validate plan is committed and download deployment records + env: + GH_TOKEN: ${{ github.token }} + RELEASE_TAG: ${{ inputs.release_tag }} + MINT_PLAN_PATH: ${{ inputs.mint_plan_path }} + shell: bash + run: | + test -f "$MINT_PLAN_PATH" || { echo "::error::Mint plan must be a committed file"; exit 1; } + mkdir -p "deployments/$DEPLOY_ENV" + gh release download "$RELEASE_TAG" --pattern 'TricksforBooster*.json' --dir "deployments/$DEPLOY_ENV" + - run: dotnet build SmartContract.sln --configuration Release + - run: cp "deployments/config/$DEPLOY_ENV/deployment-params.json" "src/Tricksfor.Blockchain.Booster.Deploy/bin/Release/net8.0/appsettings.$DEPLOY_ENV.json" + - name: Validate or execute mint plan + shell: bash + env: + DRY_RUN: ${{ inputs.dry_run }} + run: | + dry_run_arg="" + if [[ "$DRY_RUN" == "true" ]]; then dry_run_arg="--dry-run"; fi + dotnet src/Tricksfor.Blockchain.Booster.Deploy/bin/Release/net8.0/Tricksfor.Blockchain.Booster.Deploy.dll mint $dry_run_arg + - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 + with: + name: mint-${{ inputs.deploy_env }}-${{ github.run_id }} + path: deployments/${{ inputs.deploy_env }}/mint-results.json diff --git a/.github/workflows/release-deploy.yml b/.github/workflows/release-deploy.yml deleted file mode 100644 index 31b3059..0000000 --- a/.github/workflows/release-deploy.yml +++ /dev/null @@ -1,781 +0,0 @@ -# Release-triggered deployment workflow for Tricksfor smart contracts. -# -# Triggered by: GitHub Release published event. -# Architecture reference: docs/release-deployment-architecture.md -# -# Job graph: -# test -# └── validate-assets (validates NFT metadata, images, and manifest; no secrets required) -# └── validate-generated-output (validates all-chain generated output counts and distribution) -# └── generate-nft-assets (generates chain-specific metadata + images; uploads artifact) -# └── deploy-metadata (environment-scoped; deploys nft-assets/ to Cloudflare Pages) -# └── deploy-contracts (environment-scoped; chain secrets: RPC_URL, DEPLOYER_PRIVATE_KEY) -# ├── verify-contracts (environment-scoped; uses RPC_URL + EXPLORER_API_KEY) -# └── publish-nuget -# -# Environment resolution: -# The target GitHub Environment is read from the DEPLOY_ENV environment variable -# configured in the repository. The release tag is used to determine if the -# release is stable (v1.2.3) or pre-release (v1.2.3-rc.1). -# Mainnet environments are blocked for pre-release tags. -# -# Required GitHub Environments (one per deploy target): -# ethereum-sepolia, ethereum-mainnet, -# polygon-amoy, polygon-mainnet, -# optimism-sepolia, optimism-mainnet, -# bsc-testnet, bsc-mainnet, -# avalanche-fuji, avalanche-mainnet -# -# Each environment must be configured with: -# Secrets: RPC_URL, DEPLOYER_PRIVATE_KEY, EXPLORER_API_KEY (mainnet), CLOUDFLARE_API_TOKEN -# Variables: CHAIN_ID, DEPLOY_ENV, NETWORK_KEY, VERIFY_ENABLED, NUGET_PUBLISH_ENABLED, -# CLOUDFLARE_ACCOUNT_ID, CF_PAGES_PROJECT, NFT_BASE_DOMAIN -# -# Repository-level secrets: -# NUGET_API_KEY — used only by publish-nuget job -# -# See docs/github-environments-setup.md for full setup instructions. -# See docs/cloudflare-pages-setup.md for Cloudflare Pages configuration. - -name: Release — Deploy Contracts - -on: - release: - types: [published] - -permissions: - contents: read - packages: write # required for GitHub Packages NuGet publish (optional path) - -# --------------------------------------------------------------------------- -# 1. Resolve environment and validate tag -# --------------------------------------------------------------------------- -jobs: - resolve-environment: - name: Resolve target environment - runs-on: ubuntu-latest - outputs: - deploy_env: ${{ steps.resolve.outputs.deploy_env }} - is_prerelease: ${{ steps.resolve.outputs.is_prerelease }} - is_mainnet: ${{ steps.resolve.outputs.is_mainnet }} - tag: ${{ steps.resolve.outputs.tag }} - steps: - - name: Resolve deployment environment from release - id: resolve - shell: bash - run: | - TAG="${{ github.ref_name }}" - IS_PRERELEASE="${{ github.event.release.prerelease }}" - - # Stable tag: vMAJOR.MINOR.PATCH with no pre-release suffix - if [[ "$TAG" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then - STABLE=true - else - STABLE=false - fi - - # Pre-release flag from the event (true/false string) - if [[ "$IS_PRERELEASE" == "true" || "$STABLE" == "false" ]]; then - IS_PRE=true - else - IS_PRE=false - fi - - # DEPLOY_ENV must be set as a repository-level variable (Settings → Variables). - # It maps directly to one of the named GitHub Environments. - # The resolve-environment job runs without an environment scope, so it reads - # only the repository-level vars.DEPLOY_ENV — not any environment-level override. - DEPLOY_ENV="${{ vars.DEPLOY_ENV }}" - - if [[ -z "$DEPLOY_ENV" ]]; then - echo "::error::DEPLOY_ENV repository variable is not set. " \ - "Configure it under Settings → Secrets and variables → Actions → Variables." - exit 1 - fi - - # Derive whether this targets a mainnet environment - if [[ "$DEPLOY_ENV" == *"-mainnet" ]]; then - IS_MAINNET=true - else - IS_MAINNET=false - fi - - # Block pre-release tags from deploying to mainnet - if [[ "$IS_PRE" == "true" && "$IS_MAINNET" == "true" ]]; then - echo "::error::Pre-release tag '$TAG' cannot deploy to mainnet environment '$DEPLOY_ENV'. " \ - "Only stable tags (vMAJOR.MINOR.PATCH) are allowed on mainnet." - exit 1 - fi - - echo "Tag: $TAG" - echo "Stable: $STABLE" - echo "Pre-release: $IS_PRE" - echo "Deploy env: $DEPLOY_ENV" - echo "Is mainnet: $IS_MAINNET" - - echo "deploy_env=$DEPLOY_ENV" >> "$GITHUB_OUTPUT" - echo "is_prerelease=$IS_PRE" >> "$GITHUB_OUTPUT" - echo "is_mainnet=$IS_MAINNET" >> "$GITHUB_OUTPUT" - echo "tag=$TAG" >> "$GITHUB_OUTPUT" - - # --------------------------------------------------------------------------- - # 2. Run tests (no secrets required) - # --------------------------------------------------------------------------- - test: - name: Test - runs-on: ubuntu-latest - needs: resolve-environment - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Setup .NET SDK - uses: actions/setup-dotnet@v4 - with: - dotnet-version: "8.0.x" - - - name: Setup Node.js - uses: actions/setup-node@v4 - with: - node-version: "20" - cache: "npm" - - - name: Install Node.js dependencies - run: npm ci - - - name: Run Hardhat tests - run: ./node_modules/.bin/hardhat test - - - name: Restore .NET dependencies - run: dotnet restore - - - name: Run .NET integration tests - run: dotnet test tests/Tricksfor.Blockchain.Booster.IntegrationTests/ --configuration Release - - # --------------------------------------------------------------------------- - # 3. Validate NFT static assets (no environment secrets required) - # --------------------------------------------------------------------------- - validate-assets: - name: Validate NFT assets - runs-on: ubuntu-latest - needs: [resolve-environment, test] - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Setup Node.js - uses: actions/setup-node@v4 - with: - node-version: "20" - - - name: Validate NFT assets - run: | - node scripts/validate-nft-assets.js \ - --env "${{ needs.resolve-environment.outputs.deploy_env }}" - - # --------------------------------------------------------------------------- - # 4. Validate generated NFT metadata output across all chains (no secrets required) - # --------------------------------------------------------------------------- - validate-generated-output: - name: Validate generated NFT output (all chains) - runs-on: ubuntu-latest - needs: [resolve-environment, test, validate-assets] - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Setup Node.js - uses: actions/setup-node@v4 - with: - node-version: "20" - - - name: Validate generated NFT output - run: node scripts/validate-nft-output.js - - # --------------------------------------------------------------------------- - # 5. Generate NFT static metadata and images (no environment secrets required) - # --------------------------------------------------------------------------- - generate-nft-assets: - name: Generate NFT metadata (${{ needs.resolve-environment.outputs.deploy_env }}) - runs-on: ubuntu-latest - needs: [resolve-environment, test, validate-assets, validate-generated-output] - env: - DEPLOY_ENV: ${{ needs.resolve-environment.outputs.deploy_env }} - outputs: - chain_key: ${{ steps.resolve-chain.outputs.chain_key }} - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Setup Node.js - uses: actions/setup-node@v4 - with: - node-version: "20" - cache: "npm" - - - name: Install Node.js dependencies - run: npm ci - - - name: Resolve chain key from manifest - id: resolve-chain - run: | - MANIFEST_PATH="deployments/config/${DEPLOY_ENV}/nft-manifest.json" - if [[ ! -f "$MANIFEST_PATH" ]]; then - echo "::error::Deployment manifest not found: $MANIFEST_PATH" - echo "::error::Create deployments/config/${DEPLOY_ENV}/nft-manifest.json before deploying. See docs/nft-asset-manifest-spec.md and docs/nft-metadata-generation.md." - exit 1 - fi - - CHAIN_KEY=$(jq -r '.chainKey // empty' "$MANIFEST_PATH") - if [[ -z "$CHAIN_KEY" ]]; then - echo "::error::\"chainKey\" is missing or null in $MANIFEST_PATH" - exit 1 - fi - - echo "chain_key=$CHAIN_KEY" >> "$GITHUB_OUTPUT" - echo "Resolved chain key: $CHAIN_KEY" - - - name: Generate NFT static metadata and images - run: | - node scripts/generate-nft-assets.js \ - --env "$DEPLOY_ENV" \ - --force - - - name: Upload generated NFT assets - if: always() && steps.resolve-chain.outputs.chain_key != '' - uses: actions/upload-artifact@v4 - with: - name: nft-generated-${{ needs.resolve-environment.outputs.deploy_env }}-${{ needs.resolve-environment.outputs.tag }} - path: nft-assets/${{ steps.resolve-chain.outputs.chain_key }}/ - retention-days: 30 - if-no-files-found: warn - - # --------------------------------------------------------------------------- - # 6. Deploy NFT metadata and images to Cloudflare Pages (blocking) - # --------------------------------------------------------------------------- - deploy-metadata: - name: Deploy NFT metadata (${{ needs.resolve-environment.outputs.deploy_env }}) - runs-on: ubuntu-latest - needs: [resolve-environment, test, validate-assets, generate-nft-assets] - environment: ${{ needs.resolve-environment.outputs.deploy_env }} - env: - DEPLOY_ENV: ${{ needs.resolve-environment.outputs.deploy_env }} - outputs: - base_token_uri: ${{ steps.resolve-urls.outputs.base_token_uri }} - contract_uri: ${{ steps.resolve-urls.outputs.contract_uri }} - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Download generated NFT assets - uses: actions/download-artifact@v4 - with: - name: nft-generated-${{ needs.resolve-environment.outputs.deploy_env }}-${{ needs.resolve-environment.outputs.tag }} - path: nft-assets/${{ needs.generate-nft-assets.outputs.chain_key }}/ - - - name: Validate Cloudflare Pages configuration - id: check-cf - run: | - CF_PAGES_PROJECT="${{ vars.CF_PAGES_PROJECT }}" - CLOUDFLARE_ACCOUNT_ID="${{ vars.CLOUDFLARE_ACCOUNT_ID }}" - CLOUDFLARE_API_TOKEN="${{ secrets.CLOUDFLARE_API_TOKEN }}" - MISSING_CONFIG=0 - - if [[ -z "$CF_PAGES_PROJECT" ]]; then - echo "::error::CF_PAGES_PROJECT variable is not set for environment $DEPLOY_ENV." - echo "::error::Configure it under Settings → Environments → $DEPLOY_ENV → Variables." - MISSING_CONFIG=1 - fi - - if [[ -z "$CLOUDFLARE_ACCOUNT_ID" ]]; then - echo "::error::CLOUDFLARE_ACCOUNT_ID variable is not set for environment $DEPLOY_ENV." - echo "::error::Configure it under Settings → Environments → $DEPLOY_ENV → Variables." - MISSING_CONFIG=1 - fi - - if [[ -z "$CLOUDFLARE_API_TOKEN" ]]; then - echo "::error::CLOUDFLARE_API_TOKEN secret is not set for environment $DEPLOY_ENV." - echo "::error::Configure it under Settings → Environments → $DEPLOY_ENV → Secrets." - MISSING_CONFIG=1 - fi - - if [[ "$MISSING_CONFIG" -ne 0 ]]; then - exit 1 - fi - - echo "Cloudflare Pages project: $CF_PAGES_PROJECT" - echo "Cloudflare account ID is configured." - echo "Cloudflare API token is configured." - - - name: Deploy NFT assets to Cloudflare Pages - uses: cloudflare/pages-action@v1 - with: - apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }} - accountId: ${{ vars.CLOUDFLARE_ACCOUNT_ID }} - projectName: ${{ vars.CF_PAGES_PROJECT }} - directory: nft-assets - gitHubToken: ${{ secrets.GITHUB_TOKEN }} - - - name: Resolve final metadata URLs - id: resolve-urls - run: | - NFT_BASE_DOMAIN="${{ vars.NFT_BASE_DOMAIN }}" - CF_PAGES_PROJECT="${{ vars.CF_PAGES_PROJECT }}" - - if [[ -n "$NFT_BASE_DOMAIN" ]]; then - if [[ "$NFT_BASE_DOMAIN" == http://* || "$NFT_BASE_DOMAIN" == https://* ]]; then - echo "::error::NFT_BASE_DOMAIN must be a host only (for example: nft.example.com), without http:// or https://." - exit 1 - fi - - if [[ "$NFT_BASE_DOMAIN" == */* ]]; then - echo "::error::NFT_BASE_DOMAIN must not contain a path or trailing slash. Provide host only (for example: nft.example.com)." - exit 1 - fi - - if [[ "$NFT_BASE_DOMAIN" =~ [[:space:]] ]]; then - echo "::error::NFT_BASE_DOMAIN must not contain whitespace. Provide host only (for example: nft.example.com)." - exit 1 - fi - - DOMAIN="$NFT_BASE_DOMAIN" - else - # Fall back to the default Cloudflare Pages project domain - DOMAIN="${CF_PAGES_PROJECT}.pages.dev" - echo "::warning::NFT_BASE_DOMAIN is not set; using Cloudflare Pages default domain: $DOMAIN" - fi - - # Read chain key from the deployment manifest so the URLs include the /{chainKey}/ prefix - MANIFEST_PATH="deployments/config/${DEPLOY_ENV}/nft-manifest.json" - if [[ ! -f "$MANIFEST_PATH" ]]; then - echo "::error::Deployment manifest not found: $MANIFEST_PATH" - echo "::error::Generate the chain manifest and commit it before deploying. See docs/nft-metadata-generation.md." - exit 1 - fi - - CHAIN_KEY=$(jq -r '.chainKey // empty' "$MANIFEST_PATH") - if [[ -z "$CHAIN_KEY" ]]; then - echo "::error::\"chainKey\" is missing or null in $MANIFEST_PATH" - exit 1 - fi - - BASE_TOKEN_URI="https://${DOMAIN}/${CHAIN_KEY}/metadata/" - CONTRACT_URI="https://${DOMAIN}/${CHAIN_KEY}/contract/collection.json" - - echo "base_token_uri=$BASE_TOKEN_URI" >> "$GITHUB_OUTPUT" - echo "contract_uri=$CONTRACT_URI" >> "$GITHUB_OUTPUT" - - echo "Resolved chain key: $CHAIN_KEY" - echo "Resolved base token URI: $BASE_TOKEN_URI" - echo "Resolved contract URI: $CONTRACT_URI" - - - name: Verify metadata URLs are reachable - run: | - CONTRACT_URI="${{ steps.resolve-urls.outputs.contract_uri }}" - - echo "Checking reachability: $CONTRACT_URI" - for i in 1 2 3 4 5; do - if curl --silent --fail --max-time 10 "$CONTRACT_URI" > /dev/null; then - echo "✓ $CONTRACT_URI is reachable." - exit 0 - fi - echo "Attempt $i failed. Waiting 15 seconds before retry..." - sleep 15 - done - - echo "::error::Metadata URL is not reachable after 5 attempts: $CONTRACT_URI" - echo "::error::Deploy the nft-assets/ content and ensure the custom domain is active before deploying contracts." - exit 1 - - # --------------------------------------------------------------------------- - # 7. Deploy contracts (environment-scoped; chain secrets injected here) - # --------------------------------------------------------------------------- - deploy-contracts: - name: Deploy contracts (${{ needs.resolve-environment.outputs.deploy_env }}) - runs-on: ubuntu-latest - needs: [resolve-environment, test, deploy-metadata] - environment: ${{ needs.resolve-environment.outputs.deploy_env }} - env: - DEPLOY_ENV: ${{ needs.resolve-environment.outputs.deploy_env }} - outputs: - nft_address: ${{ steps.deploy.outputs.nft_address }} - staking_address: ${{ steps.deploy.outputs.staking_address }} - network_name: ${{ steps.deploy.outputs.network_name }} - nuget_publish_enabled: ${{ vars.NUGET_PUBLISH_ENABLED }} - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Setup .NET SDK - uses: actions/setup-dotnet@v4 - with: - dotnet-version: "8.0.x" - - - name: Restore .NET dependencies - run: dotnet restore - - - name: Validate deployment params file exists - run: | - PARAMS_FILE="deployments/config/${{ env.DEPLOY_ENV }}/deployment-params.json" - if [[ ! -f "$PARAMS_FILE" ]]; then - echo "::error::Deployment params file not found: $PARAMS_FILE" - echo "::error::Create deployments/config/${{ env.DEPLOY_ENV }}/deployment-params.json before deploying." - exit 1 - fi - echo "Deployment params file found: $PARAMS_FILE" - - - name: Publish deployment runner - run: | - dotnet publish src/Tricksfor.Blockchain.Booster.Deploy \ - --configuration Release \ - --output ./runner-output - - - name: Copy deployment params - run: | - cp "deployments/config/${{ env.DEPLOY_ENV }}/deployment-params.json" \ - "runner-output/appsettings.${{ env.DEPLOY_ENV }}.json" - - - name: Run deployment - id: deploy - env: - DEPLOY_ENV: ${{ env.DEPLOY_ENV }} - Deployment__RpcUrl: ${{ secrets.RPC_URL }} - Deployment__PrivateKey: ${{ secrets.DEPLOYER_PRIVATE_KEY }} - Deployment__ChainId: ${{ vars.CHAIN_ID }} - Deployment__Network: ${{ env.DEPLOY_ENV }} - Deployment__Nft__BaseUri: ${{ needs.deploy-metadata.outputs.base_token_uri }} - Deployment__Nft__ContractMetadataUri: ${{ needs.deploy-metadata.outputs.contract_uri }} - run: | - dotnet runner-output/Tricksfor.Blockchain.Booster.Deploy.dll - - # Extract deployed addresses from manifests for downstream jobs - NFT_MANIFEST="deployments/${{ env.DEPLOY_ENV }}/TricksforBoosterNFT.json" - STAKING_MANIFEST="deployments/${{ env.DEPLOY_ENV }}/TricksforBoosterStaking.json" - - if [[ -f "$NFT_MANIFEST" ]]; then - NFT_ADDRESS=$(jq -r '.address' "$NFT_MANIFEST") - echo "nft_address=$NFT_ADDRESS" >> "$GITHUB_OUTPUT" - else - echo "::warning::NFT manifest not found at $NFT_MANIFEST" - fi - - if [[ -f "$STAKING_MANIFEST" ]]; then - STAKING_ADDRESS=$(jq -r '.address' "$STAKING_MANIFEST") - echo "staking_address=$STAKING_ADDRESS" >> "$GITHUB_OUTPUT" - else - echo "::warning::Staking manifest not found at $STAKING_MANIFEST" - fi - - echo "network_name=${{ env.DEPLOY_ENV }}" >> "$GITHUB_OUTPUT" - - - name: Upload deployment manifests - if: always() - uses: actions/upload-artifact@v4 - with: - name: deployment-manifests-${{ needs.resolve-environment.outputs.deploy_env }}-${{ needs.resolve-environment.outputs.tag }} - path: deployments/${{ env.DEPLOY_ENV }}/ - retention-days: 90 - if-no-files-found: warn - - # --------------------------------------------------------------------------- - # 8. Verify contracts on block explorer (non-blocking) - # --------------------------------------------------------------------------- - verify-contracts: - name: Verify contracts (${{ needs.resolve-environment.outputs.deploy_env }}) - runs-on: ubuntu-latest - needs: [resolve-environment, deploy-contracts] - if: needs.deploy-contracts.result == 'success' - environment: ${{ needs.resolve-environment.outputs.deploy_env }} - env: - DEPLOY_ENV: ${{ needs.resolve-environment.outputs.deploy_env }} - continue-on-error: true - steps: - - name: Check if verification is enabled - id: check-verify - run: | - VERIFY_ENABLED="${{ vars.VERIFY_ENABLED }}" - if [[ "$VERIFY_ENABLED" != "true" ]]; then - echo "Verification is disabled for environment ${{ env.DEPLOY_ENV }} (VERIFY_ENABLED=$VERIFY_ENABLED)." - echo "skip=true" >> "$GITHUB_OUTPUT" - else - echo "skip=false" >> "$GITHUB_OUTPUT" - fi - - - name: Checkout - if: steps.check-verify.outputs.skip != 'true' - uses: actions/checkout@v4 - - - name: Setup Node.js - if: steps.check-verify.outputs.skip != 'true' - uses: actions/setup-node@v4 - with: - node-version: "20" - cache: "npm" - - - name: Install Node.js dependencies - if: steps.check-verify.outputs.skip != 'true' - run: npm ci - - - name: Download deployment manifests - if: steps.check-verify.outputs.skip != 'true' - uses: actions/download-artifact@v4 - with: - name: deployment-manifests-${{ needs.resolve-environment.outputs.deploy_env }}-${{ needs.resolve-environment.outputs.tag }} - path: deployments/${{ env.DEPLOY_ENV }}/ - - - name: Verify TricksforBoosterNFT - if: steps.check-verify.outputs.skip != 'true' - id: verify-nft - continue-on-error: true - env: - RPC_URL: ${{ secrets.RPC_URL }} - ETHERSCAN_API_KEY: ${{ secrets.EXPLORER_API_KEY }} - NETWORK_KEY: ${{ vars.NETWORK_KEY }} - run: | - set -o pipefail - NFT_MANIFEST="deployments/${{ env.DEPLOY_ENV }}/TricksforBoosterNFT.json" - NFT_ADDRESS=$(jq -r '.address' "$NFT_MANIFEST") - - # Build a Bash array from the JSON array — avoids eval and is safe against - # values that contain spaces or shell-special characters. - readarray -t CONSTRUCTOR_ARGS < <(jq -r '.constructorArgs[]' "$NFT_MANIFEST") - - echo "Verifying TricksforBoosterNFT at $NFT_ADDRESS on network $NETWORK_KEY" - ./node_modules/.bin/hardhat verify --no-compile --network "$NETWORK_KEY" \ - "$NFT_ADDRESS" "${CONSTRUCTOR_ARGS[@]}" \ - 2>&1 | tee /tmp/verify-nft.txt - - - name: Verify TricksforBoosterStaking - if: steps.check-verify.outputs.skip != 'true' - id: verify-staking - continue-on-error: true - env: - RPC_URL: ${{ secrets.RPC_URL }} - ETHERSCAN_API_KEY: ${{ secrets.EXPLORER_API_KEY }} - NETWORK_KEY: ${{ vars.NETWORK_KEY }} - run: | - set -o pipefail - STAKING_MANIFEST="deployments/${{ env.DEPLOY_ENV }}/TricksforBoosterStaking.json" - STAKING_ADDRESS=$(jq -r '.address' "$STAKING_MANIFEST") - - # Build a Bash array from the JSON array — avoids eval and is safe against - # values that contain spaces or shell-special characters. - readarray -t CONSTRUCTOR_ARGS < <(jq -r '.constructorArgs[]' "$STAKING_MANIFEST") - - echo "Verifying TricksforBoosterStaking at $STAKING_ADDRESS on network $NETWORK_KEY" - ./node_modules/.bin/hardhat verify --no-compile --network "$NETWORK_KEY" \ - "$STAKING_ADDRESS" "${CONSTRUCTOR_ARGS[@]}" \ - 2>&1 | tee /tmp/verify-staking.txt - - - name: Write verification status to manifests - if: always() && steps.check-verify.outputs.skip != 'true' - env: - NETWORK_KEY: ${{ vars.NETWORK_KEY }} - DEPLOY_ENV: ${{ env.DEPLOY_ENV }} - NFT_OUTCOME: ${{ steps.verify-nft.outcome }} - STAKING_OUTCOME: ${{ steps.verify-staking.outcome }} - # Optional per-environment variables: set these in the GitHub Environment - # to provide the explorer display name and browser base URL without editing - # this workflow. If not set, the fields are left empty in the manifest. - EXPLORER_NAME: ${{ vars.EXPLORER_NAME }} - EXPLORER_BASE_URL: ${{ vars.EXPLORER_BASE_URL }} - run: | - update_manifest() { - local MANIFEST="$1" - local OUTCOME="$2" - - if [[ ! -f "$MANIFEST" ]]; then - echo "::warning::Manifest not found for verification update: $MANIFEST" - return - fi - - local CONTRACT_ADDRESS - CONTRACT_ADDRESS=$(jq -r '.address' "$MANIFEST") - local EXPLORER_URL="" - if [[ -n "$EXPLORER_BASE_URL" && -n "$CONTRACT_ADDRESS" ]]; then - EXPLORER_URL="${EXPLORER_BASE_URL}/${CONTRACT_ADDRESS}" - fi - - # Map GitHub step outcome to a verification status string. - local STATUS - case "$OUTCOME" in - success) STATUS="verified" ;; - failure) STATUS="failed" ;; - *) STATUS="unknown" ;; - esac - - # Merge the verification section into the existing manifest in-place. - # chainTarget uses DEPLOY_ENV (e.g. "polygon-mainnet") to uniquely - # identify the deployment target rather than the Hardhat network name. - local TIMESTAMP - TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%SZ") - jq --arg explorerName "$EXPLORER_NAME" \ - --arg chainTarget "$DEPLOY_ENV" \ - --arg explorerUrl "$EXPLORER_URL" \ - --arg status "$STATUS" \ - --arg verifiedAt "$TIMESTAMP" \ - '. + { verification: { - explorerName: $explorerName, - chainTarget: $chainTarget, - explorerUrl: $explorerUrl, - status: $status, - verifiedAt: $verifiedAt - } }' "$MANIFEST" > "${MANIFEST}.tmp" && mv "${MANIFEST}.tmp" "$MANIFEST" - - echo "Updated manifest $MANIFEST with verification status: $STATUS" - } - - update_manifest \ - "deployments/$DEPLOY_ENV/TricksforBoosterNFT.json" \ - "$NFT_OUTCOME" - - update_manifest \ - "deployments/$DEPLOY_ENV/TricksforBoosterStaking.json" \ - "$STAKING_OUTCOME" - - - name: Upload verification transcript - if: always() && steps.check-verify.outputs.skip != 'true' - uses: actions/upload-artifact@v4 - with: - name: verify-transcript-${{ needs.resolve-environment.outputs.deploy_env }}-${{ needs.resolve-environment.outputs.tag }} - path: /tmp/verify-*.txt - retention-days: 30 - if-no-files-found: ignore - - - name: Upload verification manifests - if: always() && steps.check-verify.outputs.skip != 'true' - uses: actions/upload-artifact@v4 - with: - name: verify-manifests-${{ needs.resolve-environment.outputs.deploy_env }}-${{ needs.resolve-environment.outputs.tag }} - path: deployments/${{ env.DEPLOY_ENV }}/ - retention-days: 90 - if-no-files-found: warn - - # --------------------------------------------------------------------------- - # 9. Publish NuGet package (non-blocking) - # --------------------------------------------------------------------------- - publish-nuget: - name: Publish NuGet package - runs-on: ubuntu-latest - needs: [resolve-environment, deploy-contracts] - if: needs.deploy-contracts.result == 'success' - continue-on-error: true - steps: - - name: Check publish conditions - id: check-publish - run: | - NUGET_PUBLISH_ENABLED="${{ needs.deploy-contracts.outputs.nuget_publish_enabled }}" - IS_DRAFT="${{ github.event.release.draft }}" - TAG="${{ needs.resolve-environment.outputs.tag }}" - IS_PRERELEASE="${{ needs.resolve-environment.outputs.is_prerelease }}" - - # Must be explicitly enabled - if [[ "$NUGET_PUBLISH_ENABLED" != "true" ]]; then - echo "NuGet publish is disabled (NUGET_PUBLISH_ENABLED=$NUGET_PUBLISH_ENABLED). Skipping." - echo "skip=true" >> "$GITHUB_OUTPUT" - exit 0 - fi - - # Draft releases are not published - if [[ "$IS_DRAFT" == "true" ]]; then - echo "Draft release detected. Skipping NuGet publish." - echo "skip=true" >> "$GITHUB_OUTPUT" - exit 0 - fi - - # Pre-release packages are published to GitHub Packages only, not nuget.org - if [[ "$IS_PRERELEASE" == "true" ]]; then - echo "pre_release_only=true" >> "$GITHUB_OUTPUT" - else - echo "pre_release_only=false" >> "$GITHUB_OUTPUT" - fi - - echo "skip=false" >> "$GITHUB_OUTPUT" - - - name: Validate NuGet version format - if: steps.check-publish.outputs.skip != 'true' - run: | - NUGET_VERSION="${GITHUB_REF_NAME#v}" - # Validate against a semver 2.0.0-compatible pattern: - # MAJOR.MINOR.PATCH with an optional dot-separated pre-release suffix. - # Each core version component must be either 0 or a non-zero number without leading zeroes. - # Each pre-release identifier is either a purely numeric value (no leading zero) - # or an alphanumeric/hyphen identifier containing at least one letter. - # This matches NuGet's accepted pre-release label syntax. - # Valid examples: 1.2.3 1.2.3-rc.1 1.2.3-beta.2 1.2.3-0.3.7 - # Invalid examples: 01.2.3 1.02.3 1.2.03 1.2.3-01 1.2.3- foo 1.2 - CORE_NUM="(0|[1-9][0-9]*)" - PRE_ID="(0|[1-9][0-9]*|[a-zA-Z0-9-]*[a-zA-Z][a-zA-Z0-9-]*)" - SEMVER_RE="^${CORE_NUM}\.${CORE_NUM}\.${CORE_NUM}(-${PRE_ID}(\.${PRE_ID})*)?$" - if ! [[ "$NUGET_VERSION" =~ $SEMVER_RE ]]; then - echo "::error::Release tag '$GITHUB_REF_NAME' does not produce a valid NuGet version ('$NUGET_VERSION'). Expected: MAJOR.MINOR.PATCH or MAJOR.MINOR.PATCH-prerelease (e.g. 1.2.3 or 1.2.3-rc.1)." - exit 1 - fi - echo "NuGet version validated: $NUGET_VERSION" - - - name: Checkout - if: steps.check-publish.outputs.skip != 'true' - uses: actions/checkout@v4 - - - name: Setup .NET SDK - if: steps.check-publish.outputs.skip != 'true' - uses: actions/setup-dotnet@v4 - with: - dotnet-version: "8.0.x" - - - name: Restore .NET dependencies - if: steps.check-publish.outputs.skip != 'true' - run: dotnet restore - - - name: Pack NuGet package - if: steps.check-publish.outputs.skip != 'true' - run: | - NUGET_VERSION="${GITHUB_REF_NAME#v}" - echo "Packing Tricksfor.Blockchain.Booster as Tricksfor.SmartContracts version $NUGET_VERSION" - dotnet pack src/Tricksfor.Blockchain.Booster/Tricksfor.Blockchain.Booster.csproj \ - --configuration Release \ - --output ./nupkg \ - /p:PackageVersion="$NUGET_VERSION" - - - name: Publish to nuget.org (stable releases only) - if: >- - steps.check-publish.outputs.skip != 'true' && - steps.check-publish.outputs.pre_release_only != 'true' - run: | - dotnet nuget push ./nupkg/*.nupkg \ - --api-key "${{ secrets.NUGET_API_KEY }}" \ - --source https://api.nuget.org/v3/index.json \ - --skip-duplicate - - # Push symbol package (.snupkg) to the nuget.org symbol server - # The symbol package is linked to the main package by package ID + version. - dotnet nuget push ./nupkg/*.snupkg \ - --api-key "${{ secrets.NUGET_API_KEY }}" \ - --source https://api.nuget.org/v3/index.json \ - --skip-duplicate - - - name: Publish to GitHub Packages (pre-release) - if: >- - steps.check-publish.outputs.skip != 'true' && - steps.check-publish.outputs.pre_release_only == 'true' - run: | - dotnet nuget add source \ - --username "${{ github.repository_owner }}" \ - --password "${{ secrets.GITHUB_TOKEN }}" \ - --store-password-in-clear-text \ - --name github \ - "https://nuget.pkg.github.com/${{ github.repository_owner }}/index.json" - - dotnet nuget push ./nupkg/*.nupkg \ - --source github - - - name: Upload NuGet package artifact - if: steps.check-publish.outputs.skip != 'true' && always() - uses: actions/upload-artifact@v4 - with: - name: nuget-package-${{ needs.resolve-environment.outputs.tag }} - path: | - ./nupkg/*.nupkg - ./nupkg/*.snupkg - retention-days: 90 - if-no-files-found: warn diff --git a/.github/workflows/release-package.yml b/.github/workflows/release-package.yml new file mode 100644 index 0000000..570f655 --- /dev/null +++ b/.github/workflows/release-package.yml @@ -0,0 +1,50 @@ +name: Release NuGet package + +on: + release: + types: [published] + workflow_dispatch: + inputs: + release_tag: + description: Stable vMAJOR.MINOR.PATCH tag + required: true + type: string + +permissions: + contents: write + +concurrency: + group: nuget-${{ github.event.release.tag_name || inputs.release_tag }} + cancel-in-progress: false + +jobs: + package: + runs-on: ubuntu-latest + env: + RELEASE_TAG: ${{ github.event.release.tag_name || inputs.release_tag }} + steps: + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + with: + fetch-depth: 0 + ref: ${{ github.event.release.tag_name || inputs.release_tag }} + - uses: actions/setup-dotnet@67a3573c9a986a3f9c594539f4ab511d57bb3ce9 # v4 + with: + dotnet-version: "8.0.x" + - name: Validate stable tag and pack once + shell: bash + run: | + [[ "$RELEASE_TAG" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]] || { echo "::error::Stable tag required"; exit 1; } + version="${RELEASE_TAG#v}" + dotnet test SmartContract.sln --configuration Release + dotnet pack src/Tricksfor.Blockchain.Booster/Tricksfor.Blockchain.Booster.csproj --configuration Release --no-build --output artifacts/nuget /p:PackageVersion="$version" + - name: Publish NuGet package + env: + NUGET_API_KEY: ${{ secrets.NUGET_API_KEY }} + run: dotnet nuget push artifacts/nuget/*.nupkg --api-key "$NUGET_API_KEY" --source https://api.nuget.org/v3/index.json --skip-duplicate + - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 + with: + name: nuget-${{ env.RELEASE_TAG }} + path: artifacts/nuget/* + - env: + GH_TOKEN: ${{ github.token }} + run: gh release upload "$RELEASE_TAG" artifacts/nuget/* --clobber diff --git a/.gitignore b/.gitignore index 4febd6e..3cd9e94 100644 --- a/.gitignore +++ b/.gitignore @@ -37,10 +37,16 @@ coverage/ coverage.json # Exclude third-party and generated artifacts; our own contract ABIs (*.json) are committed artifacts/@openzeppelin/ -artifacts/build-info/ +# Commit synchronized solc build information used for verification; ignore other Hardhat build info. +artifacts/build-info/* +!artifacts/build-info/solc-0_8_26-*.json artifacts/**/*.dbg.json +artifacts/**/*.d.ts +artifacts/contracts/test/ReentrantERC721.sol/IReentrantStakingTarget.json # Generated TypeScript typings (regenerated by `npx hardhat compile`) typechain-types/ +.slither-artifacts/ +slither-report.json # ASP.NET Scaffolding ScaffoldingReadMe.txt @@ -65,4 +71,4 @@ CodeCoverage/ # NUnit *.VisualState.xml TestResult.xml -nunit-*.xml \ No newline at end of file +nunit-*.xml diff --git a/README.md b/README.md index e191a78..1ba69cf 100644 --- a/README.md +++ b/README.md @@ -24,8 +24,9 @@ Two independent Solidity contracts are deployed per chain: ### `TricksforBoosterNFT` ERC-721 NFT collection (OpenZeppelin). OpenSea-compatible: supports `tokenURI`, `contractURI`, -and ERC-2981 royalties. Minting is role-gated (`MINTER_ROLE`) and can be paused by the default -admin. Each deployed collection holds 600 tokens across three game themes (Coin, Dice, Rock +and ERC-2981 royalties. Minting is role-gated (`MINTER_ROLE`), administration uses delayed +`AccessControlDefaultAdminRules`, and minting can be paused by the default admin. The documented +collection policy is 600 tokens across three game themes (Coin, Dice, Rock Paper Scissors) — a project specification constraint, not an on-chain enforced supply cap. ### `TricksforBoosterStaking` @@ -39,8 +40,10 @@ event TokenUnstaked(address indexed staker, uint256 indexed tokenId, uint256 uns event EmergencyWithdrawn(address indexed originalStaker, uint256 indexed tokenId, address indexed recipient, uint256 withdrawnAt); ``` -Read methods (`isStaked`, `stakedOwnerOf`) always reflect on-chain truth and are guaranteed to -be consistent with the event log. Reward calculation and game settlement are off-chain. +Read methods (`isStaked`, `stakedOwnerOf`) reflect on-chain custody and event state. Ownership uses +`Ownable2Step`; emergency withdrawals can only return tracked tokens to their original staker, and +`rescueUntrackedToken` recovers only NFTs accidentally sent with direct `transferFrom`. Reward +calculation and game settlement remain off-chain. --- @@ -53,14 +56,14 @@ libraries/ Solidity library helpers test/ Hardhat contract tests tests/ .NET test projects (unit, integration, deployment) scripts/ Asset generation, validation, and deployment scripts +SmartContract.sln Root .NET solution used by CI and operators src/ Tricksfor.Blockchain.Booster/ NuGet package — Nethereum DTOs, services, ABI/BIN Tricksfor.Blockchain.Booster.Deploy/ Deployment runner (not packaged) - Tricksfor.Blockchain.Nethereum/ Nethereum integration helpers nft-assets/ source-images/ 33 canonical PNG source images (coin/dice/rps × variant × tier) manifests/ Chain-specific asset manifests - generated/ Cloudflare Pages output (token + collection metadata) + {chain}/ Generated Cloudflare Pages output for each chain deployments/config/ Per-environment deployment parameters docs/ All implementation guides and specifications ``` @@ -70,8 +73,8 @@ docs/ All implementation guides and specifications ## Quick Start ```bash -# Install Node.js dependencies -npm install +# Node.js 22 LTS is required +npm ci # Compile contracts npm run compile @@ -81,31 +84,29 @@ npm run test # Run tests with coverage npm run test:coverage + +# Prepare the exact build information consumed by Slither 0.11.5 +npm run security:prepare + +# Build and test every retained .NET project +dotnet test SmartContract.sln ``` --- ## NFT Metadata Generation -Use `generate-assets` to produce chain-specific token metadata and collection metadata -into `nft-assets/generated/`: +Use the environment manifest to produce chain-specific token and collection metadata: ```bash -# Generate metadata for a single chain -npm run generate-assets -- --chain polygon - -# Generate from a manifest file -npm run generate-assets -- --manifest nft-assets/manifests/polygon.full.json - -# Generate for all 5 mainnet chains -npm run generate-assets -- --all-mainnet --force +node scripts/generate-nft-assets.js --env ethereum-sepolia --force ``` Output: ``` -nft-assets/generated/{chain}/metadata/{tokenId}.json ← token metadata (1–600) -nft-assets/generated/{chain}/contract/collection.json ← collection metadata +nft-assets/{chain}/metadata/{tokenId}.json ← token metadata (1–600) +nft-assets/{chain}/contract/collection.json ← collection metadata ``` See [`docs/generate-assets.md`](docs/generate-assets.md) for the full option reference, @@ -114,7 +115,8 @@ examples, and CI integration guide. ### Validate generated assets ```bash -npm run validate:assets # validate manifests and source images +node scripts/validate-nft-assets.js --env ethereum-sepolia --manifest-only +node scripts/validate-nft-assets.js --env ethereum-sepolia --chain-key ethereum --output-only npm run validate:output # validate generated metadata output npm run test:snapshots # snapshot tests for NFT metadata ``` @@ -123,28 +125,35 @@ npm run test:snapshots # snapshot tests for NFT metadata ## Deployment Pipeline -Deployments are triggered by publishing a GitHub Release. The release tag controls the target -channel and networks: +Automation is split by responsibility: -| Tag pattern | Channel | Allowed targets | -|---------------------|--------------------|-----------------------| -| `v1.2.3` | Stable | Mainnet or testnet | -| `v1.2.3-rc.1` | Release candidate | Testnet only | -| `v1.2.3-beta.1` | Beta | Testnet only | -| `v1.2.3-alpha.1` | Alpha | Testnet only | +| Workflow | Purpose | +|---|---| +| `CI` | Exact artifact check, Solidity/.NET tests, metadata checks, package inspection, workflow lint, audits | +| `Deploy testnet` | Manual, protected, one Alchemy-backed testnet at a time, followed by verification and smoke flow | +| `Deploy mainnet` | Manual stable-tag workflow; currently blocked by the production smoke and royalty issues in the runbook | +| `Release NuGet package` | Publishes one package per release, independently of network deployment | +| `Execute reviewed mainnet mint plan` | Dry-run or resumable minting from a separately reviewed token-recipient plan | -The pipeline deploys to five mainnet chains (Ethereum, Polygon, Optimism, BSC, Avalanche) and -their corresponding testnets. Each deployment: +The current reusable deployment targets exactly one network and: 1. Deploys NFT metadata and images to Cloudflare Pages (`nft.tricksfor.com`) 2. Deploys both contracts to the target network 3. Verifies contracts on the block explorer (if `VERIFY_ENABLED=true`) -4. Publishes the `Tricksfor.SmartContracts` NuGet package (if `NUGET_PUBLISH_ENABLED=true`) +4. Runs a mint/approve/stake/event-decode/unstake smoke flow and publishes records + +The state-changing smoke flow is appropriate for controlled testnets but currently also runs in the +mainnet workflow. Mainnet deployment is therefore blocked until it is replaced by a read-only path. +Generated collection metadata also needs an explicit fee recipient synchronized with the on-chain +royalty receiver. + +All 33 committed source PNGs are placeholders. Testnets can publish them with warnings for technical +validation; mainnet metadata is blocked until final artwork and the collection image are supplied. +Contract deployment without metadata publication is valid only when the configured URLs already +contain the intended content and pass preflight. -See [`docs/release-operations.md`](docs/release-operations.md) for the operator guide, -[`docs/release-deployment-architecture.md`](docs/release-deployment-architecture.md) for the -pipeline design, and [`docs/github-environments-setup.md`](docs/github-environments-setup.md) -for the GitHub Environments configuration reference. +See the current [`docs/deployment.md`](docs/deployment.md) operator guide for protected environment +configuration, workflow behavior, Alchemy testnet rollout, recovery, and artifacts. --- @@ -153,14 +162,13 @@ for the GitHub Environments configuration reference. The `Tricksfor.SmartContracts` NuGet package (project: `src/Tricksfor.Blockchain.Booster/`) provides the C# integration layer for .NET consumers: -- Typed event DTOs (`TokenStakedEventDTO`, `TokenUnstakedEventDTO`, `EmergencyWithdrawnEventDTO`) +- Typed event DTOs, including the three preserved staking events and additive admin/rescue events - Function message types for staking and NFT interactions - Deployment message types (`TricksforBoosterNFTDeployment`, `TricksforBoosterStakingDeployment`) - `BoosterStakingService` and `BoosterNFTService` high-level wrappers - Embedded ABI and bytecode for both contracts -Published to [nuget.org](https://www.nuget.org/packages/Tricksfor.SmartContracts). Pre-release -builds are published to [GitHub Packages](https://github.com/orgs/Tricksfor-Organization/packages). +The hardened constructors are a breaking deployment-message change and are released as package 2.x. See [`docs/nuget-packaging.md`](docs/nuget-packaging.md) for versioning strategy and packaging details. @@ -182,8 +190,8 @@ Full documentation is indexed at [`docs/README.md`](docs/README.md). Key referen | NFT assets contributor guide | [`docs/nft-assets-contributor-guide.md`](docs/nft-assets-contributor-guide.md) | | Indexing specification | [`docs/indexing-spec.md`](docs/indexing-spec.md) | | Backend integration contract | [`docs/backend-integration-contract.md`](docs/backend-integration-contract.md) | -| Release operations | [`docs/release-operations.md`](docs/release-operations.md) | -| Deployment architecture | [`docs/release-deployment-architecture.md`](docs/release-deployment-architecture.md) | +| Automated security review | [`docs/security-review-2026-07-19.md`](docs/security-review-2026-07-19.md) | +| Hardened deployment | [`docs/deployment.md`](docs/deployment.md) | | OpenSea readiness checklist | [`docs/opensea-readiness-checklist.md`](docs/opensea-readiness-checklist.md) | | NuGet packaging | [`docs/nuget-packaging.md`](docs/nuget-packaging.md) | -| Cloudflare Pages setup | [`docs/cloudflare-pages-setup.md`](docs/cloudflare-pages-setup.md) | \ No newline at end of file +| Cloudflare Pages setup | [`docs/cloudflare-pages-setup.md`](docs/cloudflare-pages-setup.md) | diff --git a/SmartContract.sln b/SmartContract.sln new file mode 100644 index 0000000..637fd28 --- /dev/null +++ b/SmartContract.sln @@ -0,0 +1,42 @@ +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.0.31903.59 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tricksfor.Blockchain.Booster", "src\Tricksfor.Blockchain.Booster\Tricksfor.Blockchain.Booster.csproj", "{B58BCDC2-B598-4C90-9A76-7E87562C2F01}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tricksfor.Blockchain.Booster.Deploy", "src\Tricksfor.Blockchain.Booster.Deploy\Tricksfor.Blockchain.Booster.Deploy.csproj", "{AC8DCD2F-103B-42D8-9204-D65066C610D7}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tricksfor.Blockchain.Booster.UnitTests", "tests\Tricksfor.Blockchain.Booster.UnitTests\Tricksfor.Blockchain.Booster.UnitTests.csproj", "{14D66B68-DF98-487C-98E6-A5BD459068A1}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tricksfor.Blockchain.Booster.Deploy.Tests", "tests\Tricksfor.Blockchain.Booster.Deploy.Tests\Tricksfor.Blockchain.Booster.Deploy.Tests.csproj", "{4517EE22-8720-4B87-B587-D67C80251B88}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tricksfor.Blockchain.Booster.IntegrationTests", "tests\Tricksfor.Blockchain.Booster.IntegrationTests\Tricksfor.Blockchain.Booster.IntegrationTests.csproj", "{7BDCED2F-5231-457E-A57D-F28E0A615FB8}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {B58BCDC2-B598-4C90-9A76-7E87562C2F01}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B58BCDC2-B598-4C90-9A76-7E87562C2F01}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B58BCDC2-B598-4C90-9A76-7E87562C2F01}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B58BCDC2-B598-4C90-9A76-7E87562C2F01}.Release|Any CPU.Build.0 = Release|Any CPU + {AC8DCD2F-103B-42D8-9204-D65066C610D7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AC8DCD2F-103B-42D8-9204-D65066C610D7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AC8DCD2F-103B-42D8-9204-D65066C610D7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AC8DCD2F-103B-42D8-9204-D65066C610D7}.Release|Any CPU.Build.0 = Release|Any CPU + {14D66B68-DF98-487C-98E6-A5BD459068A1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {14D66B68-DF98-487C-98E6-A5BD459068A1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {14D66B68-DF98-487C-98E6-A5BD459068A1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {14D66B68-DF98-487C-98E6-A5BD459068A1}.Release|Any CPU.Build.0 = Release|Any CPU + {4517EE22-8720-4B87-B587-D67C80251B88}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4517EE22-8720-4B87-B587-D67C80251B88}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4517EE22-8720-4B87-B587-D67C80251B88}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4517EE22-8720-4B87-B587-D67C80251B88}.Release|Any CPU.Build.0 = Release|Any CPU + {7BDCED2F-5231-457E-A57D-F28E0A615FB8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7BDCED2F-5231-457E-A57D-F28E0A615FB8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7BDCED2F-5231-457E-A57D-F28E0A615FB8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7BDCED2F-5231-457E-A57D-F28E0A615FB8}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection +EndGlobal diff --git a/artifacts/build-info/solc-0_8_26-2940a0bf7433fbb858475891fd4d03553b51db3322b46d171911ad73848093b6.json b/artifacts/build-info/solc-0_8_26-2940a0bf7433fbb858475891fd4d03553b51db3322b46d171911ad73848093b6.json new file mode 100644 index 0000000..e9b2923 --- /dev/null +++ b/artifacts/build-info/solc-0_8_26-2940a0bf7433fbb858475891fd4d03553b51db3322b46d171911ad73848093b6.json @@ -0,0 +1,131 @@ +{ + "_format": "hh3-sol-build-info-1", + "id": "solc-0_8_26-2940a0bf7433fbb858475891fd4d03553b51db3322b46d171911ad73848093b6", + "solcVersion": "0.8.26", + "solcLongVersion": "0.8.26+commit.8a97fa7a.Emscripten.clang", + "compilerType": "solcjs", + "userSourceNameMap": { + "contracts/TricksforBoosterNFT.sol": "contracts/TricksforBoosterNFT.sol", + "contracts/TricksforBoosterStaking.sol": "contracts/TricksforBoosterStaking.sol", + "contracts/test/ReentrantERC721.sol": "contracts/test/ReentrantERC721.sol" + }, + "input": { + "language": "Solidity", + "sources": { + "contracts/TricksforBoosterNFT.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.26;\n\nimport \"@openzeppelin/contracts/token/ERC721/ERC721.sol\";\nimport \"@openzeppelin/contracts/token/common/ERC2981.sol\";\nimport \"@openzeppelin/contracts/access/extensions/AccessControlDefaultAdminRules.sol\";\nimport \"@openzeppelin/contracts/utils/Pausable.sol\";\n\n/// @title TricksforBoosterNFT\n/// @notice ERC-721 NFT collection for Tricksfor Booster items.\n/// OpenSea-compatible: supports tokenURI, contractURI, and ERC-2981 royalties.\n/// Minting is role-gated (MINTER_ROLE) and can be paused by the default admin.\n/// @dev Does not include staking logic — staking is handled by TricksforBoosterStaking.\ncontract TricksforBoosterNFT is ERC721, ERC2981, AccessControlDefaultAdminRules, Pausable {\n // -------------------------------------------------------------------------\n // Roles\n // -------------------------------------------------------------------------\n\n /// @notice Role that authorizes an account to call safeMint.\n bytes32 public constant MINTER_ROLE = keccak256(\"MINTER_ROLE\");\n\n // -------------------------------------------------------------------------\n // Errors\n // -------------------------------------------------------------------------\n\n /// @notice Zero address supplied where a non-zero address is required.\n error ZeroAddress();\n\n // -------------------------------------------------------------------------\n // Events\n // -------------------------------------------------------------------------\n\n event BaseURIUpdated(string previousURI, string newURI);\n event ContractURIUpdated(string previousURI, string newURI);\n event DefaultRoyaltyUpdated(address indexed receiver, uint96 feeBasisPoints);\n\n // -------------------------------------------------------------------------\n // State\n // -------------------------------------------------------------------------\n\n string private _baseTokenURI;\n string private _contractMetadataURI;\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n /// @param name_ ERC-721 collection name\n /// @param symbol_ ERC-721 collection symbol\n /// @param baseURI_ Base URI for token metadata (appended with tokenId)\n /// @param contractMetadataURI_ URI for OpenSea collection-level metadata\n /// @param royaltyReceiver_ Address that receives royalty payments\n /// @param royaltyFeeBasisPoints_ Royalty fee in basis points (10 000 = 100%)\n /// @param initialAdmin_ Initial default administrator\n /// @param initialMinter_ Initial account authorized to mint\n /// @param defaultAdminDelay_ Delay in seconds for default-admin transfers\n constructor(\n string memory name_,\n string memory symbol_,\n string memory baseURI_,\n string memory contractMetadataURI_,\n address royaltyReceiver_,\n uint96 royaltyFeeBasisPoints_,\n address initialAdmin_,\n address initialMinter_,\n uint48 defaultAdminDelay_\n ) ERC721(name_, symbol_) AccessControlDefaultAdminRules(defaultAdminDelay_, initialAdmin_) {\n if (royaltyReceiver_ == address(0) || initialAdmin_ == address(0) || initialMinter_ == address(0)) {\n revert ZeroAddress();\n }\n _baseTokenURI = baseURI_;\n _contractMetadataURI = contractMetadataURI_;\n _setDefaultRoyalty(royaltyReceiver_, royaltyFeeBasisPoints_);\n _grantRole(MINTER_ROLE, initialMinter_);\n }\n\n // -------------------------------------------------------------------------\n // Minting\n // -------------------------------------------------------------------------\n\n /// @notice Mints a token with the given ID to the specified address.\n /// The caller must hold MINTER_ROLE. Reverts when paused.\n /// @param to Recipient address for the minted token.\n /// @param tokenId Token ID to mint. Must not already exist.\n function safeMint(address to, uint256 tokenId) external onlyRole(MINTER_ROLE) whenNotPaused {\n _safeMint(to, tokenId);\n }\n\n // -------------------------------------------------------------------------\n // Admin configuration\n // -------------------------------------------------------------------------\n\n /// @notice Updates the base URI used to construct per-token metadata URIs.\n /// @param baseURI_ New base URI string.\n function setBaseURI(string calldata baseURI_) external onlyRole(DEFAULT_ADMIN_ROLE) {\n string memory previousURI = _baseTokenURI;\n _baseTokenURI = baseURI_;\n emit BaseURIUpdated(previousURI, baseURI_);\n }\n\n /// @notice Updates the collection-level metadata URI (OpenSea contractURI extension).\n /// @param contractMetadataURI_ New collection metadata URI.\n function setContractURI(string calldata contractMetadataURI_) external onlyRole(DEFAULT_ADMIN_ROLE) {\n string memory previousURI = _contractMetadataURI;\n _contractMetadataURI = contractMetadataURI_;\n emit ContractURIUpdated(previousURI, contractMetadataURI_);\n }\n\n /// @notice Updates the default royalty receiver and fee for all tokens.\n /// @param receiver Address that receives royalty payments.\n /// @param feeBasisPoints Royalty fee in basis points (10 000 = 100%).\n function setRoyaltyInfo(address receiver, uint96 feeBasisPoints) external onlyRole(DEFAULT_ADMIN_ROLE) {\n if (receiver == address(0)) revert ZeroAddress();\n _setDefaultRoyalty(receiver, feeBasisPoints);\n emit DefaultRoyaltyUpdated(receiver, feeBasisPoints);\n }\n\n /// @notice Pauses minting. Does not affect transfers.\n function pause() external onlyRole(DEFAULT_ADMIN_ROLE) {\n _pause();\n }\n\n /// @notice Unpauses minting.\n function unpause() external onlyRole(DEFAULT_ADMIN_ROLE) {\n _unpause();\n }\n\n // -------------------------------------------------------------------------\n // Metadata\n // -------------------------------------------------------------------------\n\n /// @notice Returns the collection-level metadata URI (OpenSea extension).\n function contractURI() external view returns (string memory) {\n return _contractMetadataURI;\n }\n\n /// @notice Returns the base URI used to construct token metadata URLs.\n function baseURI() external view returns (string memory) {\n return _baseTokenURI;\n }\n\n // -------------------------------------------------------------------------\n // Internal overrides\n // -------------------------------------------------------------------------\n\n /// @dev Returns the base URI used to build tokenURI values.\n function _baseURI() internal view override returns (string memory) {\n return _baseTokenURI;\n }\n\n // -------------------------------------------------------------------------\n // Interface support\n // -------------------------------------------------------------------------\n\n /// @inheritdoc ERC165\n function supportsInterface(bytes4 interfaceId)\n public\n view\n override(ERC721, ERC2981, AccessControlDefaultAdminRules)\n returns (bool)\n {\n return super.supportsInterface(interfaceId);\n }\n}\n" + }, + "@openzeppelin/contracts/token/ERC721/ERC721.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.6.0) (token/ERC721/ERC721.sol)\n\npragma solidity ^0.8.24;\n\nimport {IERC721} from \"./IERC721.sol\";\nimport {IERC721Metadata} from \"./extensions/IERC721Metadata.sol\";\nimport {ERC721Utils} from \"./utils/ERC721Utils.sol\";\nimport {Context} from \"../../utils/Context.sol\";\nimport {Strings} from \"../../utils/Strings.sol\";\nimport {IERC165, ERC165} from \"../../utils/introspection/ERC165.sol\";\nimport {IERC721Errors} from \"../../interfaces/draft-IERC6093.sol\";\n\n/**\n * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC-721] Non-Fungible Token Standard, including\n * the Metadata extension, but not including the Enumerable extension, which is available separately as\n * {ERC721Enumerable}.\n */\nabstract contract ERC721 is Context, ERC165, IERC721, IERC721Metadata, IERC721Errors {\n using Strings for uint256;\n\n // Token name\n string private _name;\n\n // Token symbol\n string private _symbol;\n\n mapping(uint256 tokenId => address) private _owners;\n\n mapping(address owner => uint256) private _balances;\n\n mapping(uint256 tokenId => address) private _tokenApprovals;\n\n mapping(address owner => mapping(address operator => bool)) private _operatorApprovals;\n\n /**\n * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.\n */\n constructor(string memory name_, string memory symbol_) {\n _name = name_;\n _symbol = symbol_;\n }\n\n /// @inheritdoc IERC165\n function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {\n return\n interfaceId == type(IERC721).interfaceId ||\n interfaceId == type(IERC721Metadata).interfaceId ||\n super.supportsInterface(interfaceId);\n }\n\n /// @inheritdoc IERC721\n function balanceOf(address owner) public view virtual returns (uint256) {\n if (owner == address(0)) {\n revert ERC721InvalidOwner(address(0));\n }\n return _balances[owner];\n }\n\n /// @inheritdoc IERC721\n function ownerOf(uint256 tokenId) public view virtual returns (address) {\n return _requireOwned(tokenId);\n }\n\n /// @inheritdoc IERC721Metadata\n function name() public view virtual returns (string memory) {\n return _name;\n }\n\n /// @inheritdoc IERC721Metadata\n function symbol() public view virtual returns (string memory) {\n return _symbol;\n }\n\n /// @inheritdoc IERC721Metadata\n function tokenURI(uint256 tokenId) public view virtual returns (string memory) {\n _requireOwned(tokenId);\n\n string memory baseURI = _baseURI();\n return bytes(baseURI).length > 0 ? string.concat(baseURI, tokenId.toString()) : \"\";\n }\n\n /**\n * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each\n * token will be the concatenation of the `baseURI` and the `tokenId`. Empty\n * by default, can be overridden in child contracts.\n */\n function _baseURI() internal view virtual returns (string memory) {\n return \"\";\n }\n\n /// @inheritdoc IERC721\n function approve(address to, uint256 tokenId) public virtual {\n _approve(to, tokenId, _msgSender());\n }\n\n /// @inheritdoc IERC721\n function getApproved(uint256 tokenId) public view virtual returns (address) {\n _requireOwned(tokenId);\n\n return _getApproved(tokenId);\n }\n\n /// @inheritdoc IERC721\n function setApprovalForAll(address operator, bool approved) public virtual {\n _setApprovalForAll(_msgSender(), operator, approved);\n }\n\n /// @inheritdoc IERC721\n function isApprovedForAll(address owner, address operator) public view virtual returns (bool) {\n return _operatorApprovals[owner][operator];\n }\n\n /// @inheritdoc IERC721\n function transferFrom(address from, address to, uint256 tokenId) public virtual {\n if (to == address(0)) {\n revert ERC721InvalidReceiver(address(0));\n }\n // Setting an \"auth\" arguments enables the `_isAuthorized` check which verifies that the token exists\n // (from != 0). Therefore, it is not needed to verify that the return value is not 0 here.\n address previousOwner = _update(to, tokenId, _msgSender());\n if (previousOwner != from) {\n revert ERC721IncorrectOwner(from, tokenId, previousOwner);\n }\n }\n\n /// @inheritdoc IERC721\n function safeTransferFrom(address from, address to, uint256 tokenId) public {\n safeTransferFrom(from, to, tokenId, \"\");\n }\n\n /// @inheritdoc IERC721\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public virtual {\n transferFrom(from, to, tokenId);\n ERC721Utils.checkOnERC721Received(_msgSender(), from, to, tokenId, data);\n }\n\n /**\n * @dev Returns the owner of the `tokenId`. Does NOT revert if token doesn't exist\n *\n * IMPORTANT: Any overrides to this function that add ownership of tokens not tracked by the\n * core ERC-721 logic MUST be matched with the use of {_increaseBalance} to keep balances\n * consistent with ownership. The invariant to preserve is that for any address `a` the value returned by\n * `balanceOf(a)` must be equal to the number of tokens such that `_ownerOf(tokenId)` is `a`.\n */\n function _ownerOf(uint256 tokenId) internal view virtual returns (address) {\n return _owners[tokenId];\n }\n\n /**\n * @dev Returns the approved address for `tokenId`. Returns 0 if `tokenId` is not minted.\n */\n function _getApproved(uint256 tokenId) internal view virtual returns (address) {\n return _tokenApprovals[tokenId];\n }\n\n /**\n * @dev Returns whether `spender` is allowed to manage `owner`'s tokens, or `tokenId` in\n * particular (ignoring whether it is owned by `owner`).\n *\n * WARNING: This function assumes that `owner` is the actual owner of `tokenId` and does not verify this\n * assumption.\n */\n function _isAuthorized(address owner, address spender, uint256 tokenId) internal view virtual returns (bool) {\n return\n spender != address(0) &&\n (owner == spender || isApprovedForAll(owner, spender) || _getApproved(tokenId) == spender);\n }\n\n /**\n * @dev Checks if `spender` can operate on `tokenId`, assuming the provided `owner` is the actual owner.\n * Reverts if:\n * - `spender` does not have approval from `owner` for `tokenId`.\n * - `spender` does not have approval to manage all of `owner`'s assets.\n *\n * WARNING: This function assumes that `owner` is the actual owner of `tokenId` and does not verify this\n * assumption.\n */\n function _checkAuthorized(address owner, address spender, uint256 tokenId) internal view virtual {\n if (!_isAuthorized(owner, spender, tokenId)) {\n if (owner == address(0)) {\n revert ERC721NonexistentToken(tokenId);\n } else {\n revert ERC721InsufficientApproval(spender, tokenId);\n }\n }\n }\n\n /**\n * @dev Unsafe write access to the balances, used by extensions that \"mint\" tokens using an {ownerOf} override.\n *\n * NOTE: the value is limited to type(uint128).max. This protect against _balance overflow. It is unrealistic that\n * a uint256 would ever overflow from increments when these increments are bounded to uint128 values.\n *\n * WARNING: Increasing an account's balance using this function tends to be paired with an override of the\n * {_ownerOf} function to resolve the ownership of the corresponding tokens so that balances and ownership\n * remain consistent with one another.\n */\n function _increaseBalance(address account, uint128 value) internal virtual {\n unchecked {\n _balances[account] += value;\n }\n }\n\n /**\n * @dev Transfers `tokenId` from its current owner to `to`, or alternatively mints (or burns) if the current owner\n * (or `to`) is the zero address. Returns the owner of the `tokenId` before the update.\n *\n * The `auth` argument is optional. If the value passed is non 0, then this function will check that\n * `auth` is either the owner of the token, or approved to operate on the token (by the owner).\n *\n * Emits a {Transfer} event.\n *\n * NOTE: If overriding this function in a way that tracks balances, see also {_increaseBalance}.\n */\n function _update(address to, uint256 tokenId, address auth) internal virtual returns (address) {\n address from = _ownerOf(tokenId);\n\n // Perform (optional) operator check\n if (auth != address(0)) {\n _checkAuthorized(from, auth, tokenId);\n }\n\n // Execute the update\n if (from != address(0)) {\n // Clear approval. No need to re-authorize or emit the Approval event\n _approve(address(0), tokenId, address(0), false);\n\n unchecked {\n _balances[from] -= 1;\n }\n }\n\n if (to != address(0)) {\n unchecked {\n _balances[to] += 1;\n }\n }\n\n _owners[tokenId] = to;\n\n emit Transfer(from, to, tokenId);\n\n return from;\n }\n\n /**\n * @dev Mints `tokenId` and transfers it to `to`.\n *\n * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible\n *\n * Requirements:\n *\n * - `tokenId` must not exist.\n * - `to` cannot be the zero address.\n *\n * Emits a {Transfer} event.\n */\n function _mint(address to, uint256 tokenId) internal {\n if (to == address(0)) {\n revert ERC721InvalidReceiver(address(0));\n }\n address previousOwner = _update(to, tokenId, address(0));\n if (previousOwner != address(0)) {\n revert ERC721InvalidSender(address(0));\n }\n }\n\n /**\n * @dev Mints `tokenId`, transfers it to `to` and checks for `to` acceptance.\n *\n * Requirements:\n *\n * - `tokenId` must not exist.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeMint(address to, uint256 tokenId) internal {\n _safeMint(to, tokenId, \"\");\n }\n\n /**\n * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is\n * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.\n */\n function _safeMint(address to, uint256 tokenId, bytes memory data) internal virtual {\n _mint(to, tokenId);\n ERC721Utils.checkOnERC721Received(_msgSender(), address(0), to, tokenId, data);\n }\n\n /**\n * @dev Destroys `tokenId`.\n * The approval is cleared when the token is burned.\n * This is an internal function that does not check if the sender is authorized to operate on the token.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n *\n * Emits a {Transfer} event.\n */\n function _burn(uint256 tokenId) internal {\n address previousOwner = _update(address(0), tokenId, address(0));\n if (previousOwner == address(0)) {\n revert ERC721NonexistentToken(tokenId);\n }\n }\n\n /**\n * @dev Transfers `tokenId` from `from` to `to`.\n * As opposed to {transferFrom}, this imposes no restrictions on msg.sender.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n * - `tokenId` token must be owned by `from`.\n *\n * Emits a {Transfer} event.\n */\n function _transfer(address from, address to, uint256 tokenId) internal {\n if (to == address(0)) {\n revert ERC721InvalidReceiver(address(0));\n }\n address previousOwner = _update(to, tokenId, address(0));\n if (previousOwner == address(0)) {\n revert ERC721NonexistentToken(tokenId);\n } else if (previousOwner != from) {\n revert ERC721IncorrectOwner(from, tokenId, previousOwner);\n }\n }\n\n /**\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking that contract recipients\n * are aware of the ERC-721 standard to prevent tokens from being forever locked.\n *\n * `data` is additional data, it has no specified format and it is sent in call to `to`.\n *\n * This internal function is like {safeTransferFrom} in the sense that it invokes\n * {IERC721Receiver-onERC721Received} on the receiver, and can be used to e.g.\n * implement alternative mechanisms to perform token transfer, such as signature-based.\n *\n * Requirements:\n *\n * - `tokenId` token must exist and be owned by `from`.\n * - `to` cannot be the zero address.\n * - `from` cannot be the zero address.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeTransfer(address from, address to, uint256 tokenId) internal {\n _safeTransfer(from, to, tokenId, \"\");\n }\n\n /**\n * @dev Same as {xref-ERC721-_safeTransfer-address-address-uint256-}[`_safeTransfer`], with an additional `data` parameter which is\n * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.\n */\n function _safeTransfer(address from, address to, uint256 tokenId, bytes memory data) internal virtual {\n _transfer(from, to, tokenId);\n ERC721Utils.checkOnERC721Received(_msgSender(), from, to, tokenId, data);\n }\n\n /**\n * @dev Approve `to` to operate on `tokenId`\n *\n * The `auth` argument is optional. If the value passed is non 0, then this function will check that `auth` is\n * either the owner of the token, or approved to operate on all tokens held by this owner.\n *\n * Emits an {Approval} event.\n *\n * Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument.\n */\n function _approve(address to, uint256 tokenId, address auth) internal {\n _approve(to, tokenId, auth, true);\n }\n\n /**\n * @dev Variant of `_approve` with an optional flag to enable or disable the {Approval} event. The event is not\n * emitted in the context of transfers.\n */\n function _approve(address to, uint256 tokenId, address auth, bool emitEvent) internal virtual {\n // Avoid reading the owner unless necessary\n if (emitEvent || auth != address(0)) {\n address owner = _requireOwned(tokenId);\n\n // We do not use _isAuthorized because single-token approvals should not be able to call approve\n if (auth != address(0) && owner != auth && !isApprovedForAll(owner, auth)) {\n revert ERC721InvalidApprover(auth);\n }\n\n if (emitEvent) {\n emit Approval(owner, to, tokenId);\n }\n }\n\n _tokenApprovals[tokenId] = to;\n }\n\n /**\n * @dev Approve `operator` to operate on all of `owner` tokens\n *\n * Requirements:\n * - operator can't be the address zero.\n *\n * Emits an {ApprovalForAll} event.\n */\n function _setApprovalForAll(address owner, address operator, bool approved) internal virtual {\n if (owner == address(0)) {\n revert ERC721InvalidApprover(address(0));\n }\n if (operator == address(0)) {\n revert ERC721InvalidOperator(operator);\n }\n _operatorApprovals[owner][operator] = approved;\n emit ApprovalForAll(owner, operator, approved);\n }\n\n /**\n * @dev Reverts if the `tokenId` doesn't have a current owner (it hasn't been minted, or it has been burned).\n * Returns the owner.\n *\n * Overrides to ownership logic should be done to {_ownerOf}.\n */\n function _requireOwned(uint256 tokenId) internal view returns (address) {\n address owner = _ownerOf(tokenId);\n if (owner == address(0)) {\n revert ERC721NonexistentToken(tokenId);\n }\n return owner;\n }\n}\n" + }, + "@openzeppelin/contracts/token/ERC721/IERC721.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (token/ERC721/IERC721.sol)\n\npragma solidity >=0.6.2;\n\nimport {IERC165} from \"../../utils/introspection/IERC165.sol\";\n\n/**\n * @dev Required interface of an ERC-721 compliant contract.\n */\ninterface IERC721 is IERC165 {\n /**\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\n */\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\n\n /**\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\n */\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\n\n /**\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\n */\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\n\n /**\n * @dev Returns the number of tokens in ``owner``'s account.\n */\n function balanceOf(address owner) external view returns (uint256 balance);\n\n /**\n * @dev Returns the owner of the `tokenId` token.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function ownerOf(uint256 tokenId) external view returns (address owner);\n\n /**\n * @dev Safely transfers `tokenId` token from `from` to `to`.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must exist and be owned by `from`.\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon\n * a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\n\n /**\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\n * are aware of the ERC-721 protocol to prevent tokens from being forever locked.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must exist and be owned by `from`.\n * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or\n * {setApprovalForAll}.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon\n * a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\n\n /**\n * @dev Transfers `tokenId` token from `from` to `to`.\n *\n * WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC-721\n * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must\n * understand this adds an external call which potentially creates a reentrancy vulnerability.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must be owned by `from`.\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\n *\n * Emits a {Transfer} event.\n */\n function transferFrom(address from, address to, uint256 tokenId) external;\n\n /**\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\n * The approval is cleared when the token is transferred.\n *\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\n *\n * Requirements:\n *\n * - The caller must own the token or be an approved operator.\n * - `tokenId` must exist.\n *\n * Emits an {Approval} event.\n */\n function approve(address to, uint256 tokenId) external;\n\n /**\n * @dev Approve or remove `operator` as an operator for the caller.\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\n *\n * Requirements:\n *\n * - The `operator` cannot be the address zero.\n *\n * Emits an {ApprovalForAll} event.\n */\n function setApprovalForAll(address operator, bool approved) external;\n\n /**\n * @dev Returns the account approved for `tokenId` token.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function getApproved(uint256 tokenId) external view returns (address operator);\n\n /**\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\n *\n * See {setApprovalForAll}\n */\n function isApprovedForAll(address owner, address operator) external view returns (bool);\n}\n" + }, + "@openzeppelin/contracts/utils/introspection/IERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (utils/introspection/IERC165.sol)\n\npragma solidity >=0.4.16;\n\n/**\n * @dev Interface of the ERC-165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165[ERC].\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others ({ERC165Checker}).\n *\n * For an implementation, see {ERC165}.\n */\ninterface IERC165 {\n /**\n * @dev Returns true if this contract implements the interface defined by\n * `interfaceId`. See the corresponding\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]\n * to learn more about how these ids are created.\n *\n * This function call must use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n" + }, + "@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (token/ERC721/extensions/IERC721Metadata.sol)\n\npragma solidity >=0.6.2;\n\nimport {IERC721} from \"../IERC721.sol\";\n\n/**\n * @title ERC-721 Non-Fungible Token Standard, optional metadata extension\n * @dev See https://eips.ethereum.org/EIPS/eip-721\n */\ninterface IERC721Metadata is IERC721 {\n /**\n * @dev Returns the token collection name.\n */\n function name() external view returns (string memory);\n\n /**\n * @dev Returns the token collection symbol.\n */\n function symbol() external view returns (string memory);\n\n /**\n * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.\n */\n function tokenURI(uint256 tokenId) external view returns (string memory);\n}\n" + }, + "@openzeppelin/contracts/token/ERC721/utils/ERC721Utils.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.5.0) (token/ERC721/utils/ERC721Utils.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC721Receiver} from \"../IERC721Receiver.sol\";\nimport {IERC721Errors} from \"../../../interfaces/draft-IERC6093.sol\";\n\n/**\n * @dev Library that provides common ERC-721 utility functions.\n *\n * See https://eips.ethereum.org/EIPS/eip-721[ERC-721].\n *\n * _Available since v5.1._\n */\nlibrary ERC721Utils {\n /**\n * @dev Performs an acceptance check for the provided `operator` by calling {IERC721Receiver-onERC721Received}\n * on the `to` address. The `operator` is generally the address that initiated the token transfer (i.e. `msg.sender`).\n *\n * The acceptance call is not executed and treated as a no-op if the target address doesn't contain code (i.e. an EOA).\n * Otherwise, the recipient must implement {IERC721Receiver-onERC721Received} and return the acceptance magic value to accept\n * the transfer.\n */\n function checkOnERC721Received(\n address operator,\n address from,\n address to,\n uint256 tokenId,\n bytes memory data\n ) internal {\n if (to.code.length > 0) {\n try IERC721Receiver(to).onERC721Received(operator, from, tokenId, data) returns (bytes4 retval) {\n if (retval != IERC721Receiver.onERC721Received.selector) {\n // Token rejected\n revert IERC721Errors.ERC721InvalidReceiver(to);\n }\n } catch (bytes memory reason) {\n if (reason.length == 0) {\n // non-IERC721Receiver implementer\n revert IERC721Errors.ERC721InvalidReceiver(to);\n } else {\n assembly (\"memory-safe\") {\n revert(add(reason, 0x20), mload(reason))\n }\n }\n }\n }\n }\n}\n" + }, + "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (token/ERC721/IERC721Receiver.sol)\n\npragma solidity >=0.5.0;\n\n/**\n * @title ERC-721 token receiver interface\n * @dev Interface for any contract that wants to support safeTransfers\n * from ERC-721 asset contracts.\n */\ninterface IERC721Receiver {\n /**\n * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}\n * by `operator` from `from`, this function is called.\n *\n * It must return its Solidity selector to confirm the token transfer.\n * If any other value is returned or the interface is not implemented by the recipient, the transfer will be\n * reverted.\n *\n * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`.\n */\n function onERC721Received(\n address operator,\n address from,\n uint256 tokenId,\n bytes calldata data\n ) external returns (bytes4);\n}\n" + }, + "@openzeppelin/contracts/interfaces/draft-IERC6093.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.5.0) (interfaces/draft-IERC6093.sol)\n\npragma solidity >=0.8.4;\n\n/**\n * @dev Standard ERC-20 Errors\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 tokens.\n */\ninterface IERC20Errors {\n /**\n * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\n * @param sender Address whose tokens are being transferred.\n * @param balance Current balance for the interacting account.\n * @param needed Minimum amount required to perform a transfer.\n */\n error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);\n\n /**\n * @dev Indicates a failure with the token `sender`. Used in transfers.\n * @param sender Address whose tokens are being transferred.\n */\n error ERC20InvalidSender(address sender);\n\n /**\n * @dev Indicates a failure with the token `receiver`. Used in transfers.\n * @param receiver Address to which tokens are being transferred.\n */\n error ERC20InvalidReceiver(address receiver);\n\n /**\n * @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers.\n * @param spender Address that may be allowed to operate on tokens without being their owner.\n * @param allowance Amount of tokens a `spender` is allowed to operate with.\n * @param needed Minimum amount required to perform a transfer.\n */\n error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);\n\n /**\n * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n * @param approver Address initiating an approval operation.\n */\n error ERC20InvalidApprover(address approver);\n\n /**\n * @dev Indicates a failure with the `spender` to be approved. Used in approvals.\n * @param spender Address that may be allowed to operate on tokens without being their owner.\n */\n error ERC20InvalidSpender(address spender);\n}\n\n/**\n * @dev Standard ERC-721 Errors\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-721 tokens.\n */\ninterface IERC721Errors {\n /**\n * @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-721.\n * Used in balance queries.\n * @param owner Address of the current owner of a token.\n */\n error ERC721InvalidOwner(address owner);\n\n /**\n * @dev Indicates a `tokenId` whose `owner` is the zero address.\n * @param tokenId Identifier number of a token.\n */\n error ERC721NonexistentToken(uint256 tokenId);\n\n /**\n * @dev Indicates an error related to the ownership over a particular token. Used in transfers.\n * @param sender Address whose tokens are being transferred.\n * @param tokenId Identifier number of a token.\n * @param owner Address of the current owner of a token.\n */\n error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner);\n\n /**\n * @dev Indicates a failure with the token `sender`. Used in transfers.\n * @param sender Address whose tokens are being transferred.\n */\n error ERC721InvalidSender(address sender);\n\n /**\n * @dev Indicates a failure with the token `receiver`. Used in transfers.\n * @param receiver Address to which tokens are being transferred.\n */\n error ERC721InvalidReceiver(address receiver);\n\n /**\n * @dev Indicates a failure with the `operator`’s approval. Used in transfers.\n * @param operator Address that may be allowed to operate on tokens without being their owner.\n * @param tokenId Identifier number of a token.\n */\n error ERC721InsufficientApproval(address operator, uint256 tokenId);\n\n /**\n * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n * @param approver Address initiating an approval operation.\n */\n error ERC721InvalidApprover(address approver);\n\n /**\n * @dev Indicates a failure with the `operator` to be approved. Used in approvals.\n * @param operator Address that may be allowed to operate on tokens without being their owner.\n */\n error ERC721InvalidOperator(address operator);\n}\n\n/**\n * @dev Standard ERC-1155 Errors\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-1155 tokens.\n */\ninterface IERC1155Errors {\n /**\n * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\n * @param sender Address whose tokens are being transferred.\n * @param balance Current balance for the interacting account.\n * @param needed Minimum amount required to perform a transfer.\n * @param tokenId Identifier number of a token.\n */\n error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId);\n\n /**\n * @dev Indicates a failure with the token `sender`. Used in transfers.\n * @param sender Address whose tokens are being transferred.\n */\n error ERC1155InvalidSender(address sender);\n\n /**\n * @dev Indicates a failure with the token `receiver`. Used in transfers.\n * @param receiver Address to which tokens are being transferred.\n */\n error ERC1155InvalidReceiver(address receiver);\n\n /**\n * @dev Indicates a failure with the `operator`’s approval. Used in transfers.\n * @param operator Address that may be allowed to operate on tokens without being their owner.\n * @param owner Address of the current owner of a token.\n */\n error ERC1155MissingApprovalForAll(address operator, address owner);\n\n /**\n * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n * @param approver Address initiating an approval operation.\n */\n error ERC1155InvalidApprover(address approver);\n\n /**\n * @dev Indicates a failure with the `operator` to be approved. Used in approvals.\n * @param operator Address that may be allowed to operate on tokens without being their owner.\n */\n error ERC1155InvalidOperator(address operator);\n\n /**\n * @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.\n * Used in batch transfers.\n * @param idsLength Length of the array of token identifiers\n * @param valuesLength Length of the array of token amounts\n */\n error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength);\n}\n" + }, + "@openzeppelin/contracts/utils/Context.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n function _msgSender() internal view virtual returns (address) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes calldata) {\n return msg.data;\n }\n\n function _contextSuffixLength() internal view virtual returns (uint256) {\n return 0;\n }\n}\n" + }, + "@openzeppelin/contracts/utils/Strings.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.6.0) (utils/Strings.sol)\n\npragma solidity ^0.8.24;\n\nimport {Math} from \"./math/Math.sol\";\nimport {SafeCast} from \"./math/SafeCast.sol\";\nimport {SignedMath} from \"./math/SignedMath.sol\";\nimport {Bytes} from \"./Bytes.sol\";\n\n/**\n * @dev String operations.\n */\nlibrary Strings {\n using SafeCast for *;\n\n bytes16 private constant HEX_DIGITS = \"0123456789abcdef\";\n uint8 private constant ADDRESS_LENGTH = 20;\n uint256 private constant SPECIAL_CHARS_LOOKUP =\n 0xffffffff | // first 32 bits corresponding to the control characters (U+0000 to U+001F)\n (1 << 0x22) | // double quote\n (1 << 0x5c); // backslash\n\n /**\n * @dev The `value` string doesn't fit in the specified `length`.\n */\n error StringsInsufficientHexLength(uint256 value, uint256 length);\n\n /**\n * @dev The string being parsed contains characters that are not in scope of the given base.\n */\n error StringsInvalidChar();\n\n /**\n * @dev The string being parsed is not a properly formatted address.\n */\n error StringsInvalidAddressFormat();\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\n */\n function toString(uint256 value) internal pure returns (string memory) {\n unchecked {\n uint256 length = Math.log10(value) + 1;\n string memory buffer = new string(length);\n uint256 ptr;\n assembly (\"memory-safe\") {\n ptr := add(add(buffer, 0x20), length)\n }\n while (true) {\n ptr--;\n assembly (\"memory-safe\") {\n mstore8(ptr, byte(mod(value, 10), HEX_DIGITS))\n }\n value /= 10;\n if (value == 0) break;\n }\n return buffer;\n }\n }\n\n /**\n * @dev Converts a `int256` to its ASCII `string` decimal representation.\n */\n function toStringSigned(int256 value) internal pure returns (string memory) {\n return string.concat(value < 0 ? \"-\" : \"\", toString(SignedMath.abs(value)));\n }\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\n */\n function toHexString(uint256 value) internal pure returns (string memory) {\n unchecked {\n return toHexString(value, Math.log256(value) + 1);\n }\n }\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\n */\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\n uint256 localValue = value;\n bytes memory buffer = new bytes(2 * length + 2);\n buffer[0] = \"0\";\n buffer[1] = \"x\";\n for (uint256 i = 2 * length + 1; i > 1; --i) {\n buffer[i] = HEX_DIGITS[localValue & 0xf];\n localValue >>= 4;\n }\n if (localValue != 0) {\n revert StringsInsufficientHexLength(value, length);\n }\n return string(buffer);\n }\n\n /**\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal\n * representation.\n */\n function toHexString(address addr) internal pure returns (string memory) {\n return toHexString(uint256(uint160(addr)), ADDRESS_LENGTH);\n }\n\n /**\n * @dev Converts an `address` with fixed length of 20 bytes to its checksummed ASCII `string` hexadecimal\n * representation, according to EIP-55.\n */\n function toChecksumHexString(address addr) internal pure returns (string memory) {\n bytes memory buffer = bytes(toHexString(addr));\n\n // hash the hex part of buffer (skip length + 2 bytes, length 40)\n uint256 hashValue;\n assembly (\"memory-safe\") {\n hashValue := shr(96, keccak256(add(buffer, 0x22), 40))\n }\n\n for (uint256 i = 41; i > 1; --i) {\n // possible values for buffer[i] are 48 (0) to 57 (9) and 97 (a) to 102 (f)\n if (hashValue & 0xf > 7 && uint8(buffer[i]) > 96) {\n // case shift by xoring with 0x20\n buffer[i] ^= 0x20;\n }\n hashValue >>= 4;\n }\n return string(buffer);\n }\n\n /**\n * @dev Converts a `bytes` buffer to its ASCII `string` hexadecimal representation.\n */\n function toHexString(bytes memory input) internal pure returns (string memory) {\n unchecked {\n bytes memory buffer = new bytes(2 * input.length + 2);\n buffer[0] = \"0\";\n buffer[1] = \"x\";\n for (uint256 i = 0; i < input.length; ++i) {\n uint8 v = uint8(input[i]);\n buffer[2 * i + 2] = HEX_DIGITS[v >> 4];\n buffer[2 * i + 3] = HEX_DIGITS[v & 0xf];\n }\n return string(buffer);\n }\n }\n\n /**\n * @dev Returns true if the two strings are equal.\n */\n function equal(string memory a, string memory b) internal pure returns (bool) {\n return Bytes.equal(bytes(a), bytes(b));\n }\n\n /**\n * @dev Parse a decimal string and returns the value as a `uint256`.\n *\n * Requirements:\n * - The string must be formatted as `[0-9]*`\n * - The result must fit into an `uint256` type\n */\n function parseUint(string memory input) internal pure returns (uint256) {\n return parseUint(input, 0, bytes(input).length);\n }\n\n /**\n * @dev Variant of {parseUint-string} that parses a substring of `input` located between position `begin` (included) and\n * `end` (excluded).\n *\n * Requirements:\n * - The substring must be formatted as `[0-9]*`\n * - The result must fit into an `uint256` type\n */\n function parseUint(string memory input, uint256 begin, uint256 end) internal pure returns (uint256) {\n (bool success, uint256 value) = tryParseUint(input, begin, end);\n if (!success) revert StringsInvalidChar();\n return value;\n }\n\n /**\n * @dev Variant of {parseUint-string} that returns false if the parsing fails because of an invalid character.\n *\n * NOTE: This function will revert if the result does not fit in a `uint256`.\n */\n function tryParseUint(string memory input) internal pure returns (bool success, uint256 value) {\n return _tryParseUintUncheckedBounds(input, 0, bytes(input).length);\n }\n\n /**\n * @dev Variant of {parseUint-string-uint256-uint256} that returns false if the parsing fails because of an invalid\n * character.\n *\n * NOTE: This function will revert if the result does not fit in a `uint256`.\n */\n function tryParseUint(\n string memory input,\n uint256 begin,\n uint256 end\n ) internal pure returns (bool success, uint256 value) {\n if (end > bytes(input).length || begin > end) return (false, 0);\n return _tryParseUintUncheckedBounds(input, begin, end);\n }\n\n /**\n * @dev Implementation of {tryParseUint-string-uint256-uint256} that does not check bounds. Caller should make sure that\n * `begin <= end <= input.length`. Other inputs would result in undefined behavior.\n */\n function _tryParseUintUncheckedBounds(\n string memory input,\n uint256 begin,\n uint256 end\n ) private pure returns (bool success, uint256 value) {\n bytes memory buffer = bytes(input);\n\n uint256 result = 0;\n for (uint256 i = begin; i < end; ++i) {\n uint8 chr = _tryParseChr(bytes1(_unsafeReadBytesOffset(buffer, i)));\n if (chr > 9) return (false, 0);\n result *= 10;\n result += chr;\n }\n return (true, result);\n }\n\n /**\n * @dev Parse a decimal string and returns the value as a `int256`.\n *\n * Requirements:\n * - The string must be formatted as `[-+]?[0-9]*`\n * - The result must fit in an `int256` type.\n */\n function parseInt(string memory input) internal pure returns (int256) {\n return parseInt(input, 0, bytes(input).length);\n }\n\n /**\n * @dev Variant of {parseInt-string} that parses a substring of `input` located between position `begin` (included) and\n * `end` (excluded).\n *\n * Requirements:\n * - The substring must be formatted as `[-+]?[0-9]*`\n * - The result must fit in an `int256` type.\n */\n function parseInt(string memory input, uint256 begin, uint256 end) internal pure returns (int256) {\n (bool success, int256 value) = tryParseInt(input, begin, end);\n if (!success) revert StringsInvalidChar();\n return value;\n }\n\n /**\n * @dev Variant of {parseInt-string} that returns false if the parsing fails because of an invalid character or if\n * the result does not fit in a `int256`.\n *\n * NOTE: This function will revert if the absolute value of the result does not fit in a `uint256`.\n */\n function tryParseInt(string memory input) internal pure returns (bool success, int256 value) {\n return _tryParseIntUncheckedBounds(input, 0, bytes(input).length);\n }\n\n uint256 private constant ABS_MIN_INT256 = 2 ** 255;\n\n /**\n * @dev Variant of {parseInt-string-uint256-uint256} that returns false if the parsing fails because of an invalid\n * character or if the result does not fit in a `int256`.\n *\n * NOTE: This function will revert if the absolute value of the result does not fit in a `uint256`.\n */\n function tryParseInt(\n string memory input,\n uint256 begin,\n uint256 end\n ) internal pure returns (bool success, int256 value) {\n if (end > bytes(input).length || begin > end) return (false, 0);\n return _tryParseIntUncheckedBounds(input, begin, end);\n }\n\n /**\n * @dev Implementation of {tryParseInt-string-uint256-uint256} that does not check bounds. Caller should make sure that\n * `begin <= end <= input.length`. Other inputs would result in undefined behavior.\n */\n function _tryParseIntUncheckedBounds(\n string memory input,\n uint256 begin,\n uint256 end\n ) private pure returns (bool success, int256 value) {\n bytes memory buffer = bytes(input);\n\n // Check presence of a negative sign.\n bytes1 sign = begin == end ? bytes1(0) : bytes1(_unsafeReadBytesOffset(buffer, begin)); // don't do out-of-bound (possibly unsafe) read if sub-string is empty\n bool positiveSign = sign == bytes1(\"+\");\n bool negativeSign = sign == bytes1(\"-\");\n uint256 offset = (positiveSign || negativeSign).toUint();\n\n (bool absSuccess, uint256 absValue) = tryParseUint(input, begin + offset, end);\n\n if (absSuccess && absValue < ABS_MIN_INT256) {\n return (true, negativeSign ? -int256(absValue) : int256(absValue));\n } else if (absSuccess && negativeSign && absValue == ABS_MIN_INT256) {\n return (true, type(int256).min);\n } else return (false, 0);\n }\n\n /**\n * @dev Parse a hexadecimal string (with or without \"0x\" prefix), and returns the value as a `uint256`.\n *\n * Requirements:\n * - The string must be formatted as `(0x)?[0-9a-fA-F]*`\n * - The result must fit in an `uint256` type.\n */\n function parseHexUint(string memory input) internal pure returns (uint256) {\n return parseHexUint(input, 0, bytes(input).length);\n }\n\n /**\n * @dev Variant of {parseHexUint-string} that parses a substring of `input` located between position `begin` (included) and\n * `end` (excluded).\n *\n * Requirements:\n * - The substring must be formatted as `(0x)?[0-9a-fA-F]*`\n * - The result must fit in an `uint256` type.\n */\n function parseHexUint(string memory input, uint256 begin, uint256 end) internal pure returns (uint256) {\n (bool success, uint256 value) = tryParseHexUint(input, begin, end);\n if (!success) revert StringsInvalidChar();\n return value;\n }\n\n /**\n * @dev Variant of {parseHexUint-string} that returns false if the parsing fails because of an invalid character.\n *\n * NOTE: This function will revert if the result does not fit in a `uint256`.\n */\n function tryParseHexUint(string memory input) internal pure returns (bool success, uint256 value) {\n return _tryParseHexUintUncheckedBounds(input, 0, bytes(input).length);\n }\n\n /**\n * @dev Variant of {parseHexUint-string-uint256-uint256} that returns false if the parsing fails because of an\n * invalid character.\n *\n * NOTE: This function will revert if the result does not fit in a `uint256`.\n */\n function tryParseHexUint(\n string memory input,\n uint256 begin,\n uint256 end\n ) internal pure returns (bool success, uint256 value) {\n if (end > bytes(input).length || begin > end) return (false, 0);\n return _tryParseHexUintUncheckedBounds(input, begin, end);\n }\n\n /**\n * @dev Implementation of {tryParseHexUint-string-uint256-uint256} that does not check bounds. Caller should make sure that\n * `begin <= end <= input.length`. Other inputs would result in undefined behavior.\n */\n function _tryParseHexUintUncheckedBounds(\n string memory input,\n uint256 begin,\n uint256 end\n ) private pure returns (bool success, uint256 value) {\n bytes memory buffer = bytes(input);\n\n // skip 0x prefix if present\n bool hasPrefix = (end > begin + 1) && bytes2(_unsafeReadBytesOffset(buffer, begin)) == bytes2(\"0x\"); // don't do out-of-bound (possibly unsafe) read if sub-string is empty\n uint256 offset = hasPrefix.toUint() * 2;\n\n uint256 result = 0;\n for (uint256 i = begin + offset; i < end; ++i) {\n uint8 chr = _tryParseChr(bytes1(_unsafeReadBytesOffset(buffer, i)));\n if (chr > 15) return (false, 0);\n result *= 16;\n unchecked {\n // Multiplying by 16 is equivalent to a shift of 4 bits (with additional overflow check).\n // This guarantees that adding a value < 16 will not cause an overflow, hence the unchecked.\n result += chr;\n }\n }\n return (true, result);\n }\n\n /**\n * @dev Parse a hexadecimal string (with or without \"0x\" prefix), and returns the value as an `address`.\n *\n * Requirements:\n * - The string must be formatted as `(0x)?[0-9a-fA-F]{40}`\n */\n function parseAddress(string memory input) internal pure returns (address) {\n return parseAddress(input, 0, bytes(input).length);\n }\n\n /**\n * @dev Variant of {parseAddress-string} that parses a substring of `input` located between position `begin` (included) and\n * `end` (excluded).\n *\n * Requirements:\n * - The substring must be formatted as `(0x)?[0-9a-fA-F]{40}`\n */\n function parseAddress(string memory input, uint256 begin, uint256 end) internal pure returns (address) {\n (bool success, address value) = tryParseAddress(input, begin, end);\n if (!success) revert StringsInvalidAddressFormat();\n return value;\n }\n\n /**\n * @dev Variant of {parseAddress-string} that returns false if the parsing fails because the input is not a properly\n * formatted address. See {parseAddress-string} requirements.\n */\n function tryParseAddress(string memory input) internal pure returns (bool success, address value) {\n return tryParseAddress(input, 0, bytes(input).length);\n }\n\n /**\n * @dev Variant of {parseAddress-string-uint256-uint256} that returns false if the parsing fails because input is not a properly\n * formatted address. See {parseAddress-string-uint256-uint256} requirements.\n */\n function tryParseAddress(\n string memory input,\n uint256 begin,\n uint256 end\n ) internal pure returns (bool success, address value) {\n if (end > bytes(input).length || begin > end) return (false, address(0));\n\n bool hasPrefix = (end > begin + 1) && bytes2(_unsafeReadBytesOffset(bytes(input), begin)) == bytes2(\"0x\"); // don't do out-of-bound (possibly unsafe) read if sub-string is empty\n uint256 expectedLength = 40 + hasPrefix.toUint() * 2;\n\n // check that input is the correct length\n if (end - begin == expectedLength) {\n // length guarantees that this does not overflow, and value is at most type(uint160).max\n (bool s, uint256 v) = _tryParseHexUintUncheckedBounds(input, begin, end);\n return (s, address(uint160(v)));\n } else {\n return (false, address(0));\n }\n }\n\n function _tryParseChr(bytes1 chr) private pure returns (uint8) {\n uint8 value = uint8(chr);\n\n // Try to parse `chr`:\n // - Case 1: [0-9]\n // - Case 2: [a-f]\n // - Case 3: [A-F]\n // - otherwise not supported\n unchecked {\n if (value > 47 && value < 58) value -= 48;\n else if (value > 96 && value < 103) value -= 87;\n else if (value > 64 && value < 71) value -= 55;\n else return type(uint8).max;\n }\n\n return value;\n }\n\n /**\n * @dev Escape special characters in JSON strings. This can be useful to prevent JSON injection in NFT metadata.\n *\n * WARNING: This function should only be used in double quoted JSON strings. Single quotes are not escaped.\n *\n * NOTE: This function escapes backslashes (including those in \\uXXXX sequences) and the characters in ranges\n * defined in section 2.5 of RFC-4627 (U+0000 to U+001F, U+0022 and U+005C). All control characters in U+0000\n * to U+001F are escaped (\\b, \\t, \\n, \\f, \\r use short form; others use \\u00XX). ECMAScript's `JSON.parse` does\n * recover escaped unicode characters that are not in this range, but other tooling may provide different results.\n */\n function escapeJSON(string memory input) internal pure returns (string memory) {\n bytes memory buffer = bytes(input);\n\n // Put output at the FMP. Memory will be reserved later when we figure out the actual length of the escaped\n // string. All write are done using _unsafeWriteBytesOffset, which avoid the (expensive) length checks for\n // each character written.\n bytes memory output;\n assembly (\"memory-safe\") {\n output := mload(0x40)\n }\n uint256 outputLength = 0;\n\n for (uint256 i = 0; i < buffer.length; ++i) {\n uint8 char = uint8(bytes1(_unsafeReadBytesOffset(buffer, i)));\n if (((SPECIAL_CHARS_LOOKUP & (1 << char)) != 0)) {\n _unsafeWriteBytesOffset(output, outputLength++, \"\\\\\");\n if (char == 0x08) _unsafeWriteBytesOffset(output, outputLength++, \"b\");\n else if (char == 0x09) _unsafeWriteBytesOffset(output, outputLength++, \"t\");\n else if (char == 0x0a) _unsafeWriteBytesOffset(output, outputLength++, \"n\");\n else if (char == 0x0c) _unsafeWriteBytesOffset(output, outputLength++, \"f\");\n else if (char == 0x0d) _unsafeWriteBytesOffset(output, outputLength++, \"r\");\n else if (char == 0x5c) _unsafeWriteBytesOffset(output, outputLength++, \"\\\\\");\n else if (char == 0x22) {\n // solhint-disable-next-line quotes\n _unsafeWriteBytesOffset(output, outputLength++, '\"');\n } else {\n // U+0000 to U+001F without short form: output \\u00XX\n _unsafeWriteBytesOffset(output, outputLength++, \"u\");\n _unsafeWriteBytesOffset(output, outputLength++, \"0\");\n _unsafeWriteBytesOffset(output, outputLength++, \"0\");\n _unsafeWriteBytesOffset(output, outputLength++, HEX_DIGITS[char >> 4]);\n _unsafeWriteBytesOffset(output, outputLength++, HEX_DIGITS[char & 0x0f]);\n }\n } else {\n _unsafeWriteBytesOffset(output, outputLength++, bytes1(char));\n }\n }\n // write the actual length and reserve memory\n assembly (\"memory-safe\") {\n mstore(output, outputLength)\n mstore(0x40, add(output, add(outputLength, 0x20)))\n }\n\n return string(output);\n }\n\n /**\n * @dev Reads a bytes32 from a bytes array without bounds checking.\n *\n * NOTE: making this function internal would mean it could be used with memory unsafe offset, and marking the\n * assembly block as such would prevent some optimizations.\n */\n function _unsafeReadBytesOffset(bytes memory buffer, uint256 offset) private pure returns (bytes32 value) {\n // This is not memory safe in the general case, but all calls to this private function are within bounds.\n assembly (\"memory-safe\") {\n value := mload(add(add(buffer, 0x20), offset))\n }\n }\n\n /**\n * @dev Write a bytes1 to a bytes array without bounds checking.\n *\n * NOTE: making this function internal would mean it could be used with memory unsafe offset, and marking the\n * assembly block as such would prevent some optimizations.\n */\n function _unsafeWriteBytesOffset(bytes memory buffer, uint256 offset, bytes1 value) private pure {\n // This is not memory safe in the general case, but all calls to this private function are within bounds.\n assembly (\"memory-safe\") {\n mstore8(add(add(buffer, 0x20), offset), shr(248, value))\n }\n }\n}\n" + }, + "@openzeppelin/contracts/utils/math/Math.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.6.0) (utils/math/Math.sol)\n\npragma solidity ^0.8.20;\n\nimport {Panic} from \"../Panic.sol\";\nimport {SafeCast} from \"./SafeCast.sol\";\n\n/**\n * @dev Standard math utilities missing in the Solidity language.\n */\nlibrary Math {\n enum Rounding {\n Floor, // Toward negative infinity\n Ceil, // Toward positive infinity\n Trunc, // Toward zero\n Expand // Away from zero\n }\n\n /**\n * @dev Return the 512-bit addition of two uint256.\n *\n * The result is stored in two 256 variables such that sum = high * 2²⁵⁶ + low.\n */\n function add512(uint256 a, uint256 b) internal pure returns (uint256 high, uint256 low) {\n assembly (\"memory-safe\") {\n low := add(a, b)\n high := lt(low, a)\n }\n }\n\n /**\n * @dev Return the 512-bit multiplication of two uint256.\n *\n * The result is stored in two 256 variables such that product = high * 2²⁵⁶ + low.\n */\n function mul512(uint256 a, uint256 b) internal pure returns (uint256 high, uint256 low) {\n // 512-bit multiply [high low] = x * y. Compute the product mod 2²⁵⁶ and mod 2²⁵⁶ - 1, then use\n // the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\n // variables such that product = high * 2²⁵⁶ + low.\n assembly (\"memory-safe\") {\n let mm := mulmod(a, b, not(0))\n low := mul(a, b)\n high := sub(sub(mm, low), lt(mm, low))\n }\n }\n\n /**\n * @dev Returns the addition of two unsigned integers, with a success flag (no overflow).\n */\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool success, uint256 result) {\n unchecked {\n uint256 c = a + b;\n success = c >= a;\n result = c * SafeCast.toUint(success);\n }\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, with a success flag (no overflow).\n */\n function trySub(uint256 a, uint256 b) internal pure returns (bool success, uint256 result) {\n unchecked {\n uint256 c = a - b;\n success = c <= a;\n result = c * SafeCast.toUint(success);\n }\n }\n\n /**\n * @dev Returns the multiplication of two unsigned integers, with a success flag (no overflow).\n */\n function tryMul(uint256 a, uint256 b) internal pure returns (bool success, uint256 result) {\n unchecked {\n uint256 c = a * b;\n assembly (\"memory-safe\") {\n // Only true when the multiplication doesn't overflow\n // (c / a == b) || (a == 0)\n success := or(eq(div(c, a), b), iszero(a))\n }\n // equivalent to: success ? c : 0\n result = c * SafeCast.toUint(success);\n }\n }\n\n /**\n * @dev Returns the division of two unsigned integers, with a success flag (no division by zero).\n */\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool success, uint256 result) {\n unchecked {\n success = b > 0;\n assembly (\"memory-safe\") {\n // The `DIV` opcode returns zero when the denominator is 0.\n result := div(a, b)\n }\n }\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers, with a success flag (no division by zero).\n */\n function tryMod(uint256 a, uint256 b) internal pure returns (bool success, uint256 result) {\n unchecked {\n success = b > 0;\n assembly (\"memory-safe\") {\n // The `MOD` opcode returns zero when the denominator is 0.\n result := mod(a, b)\n }\n }\n }\n\n /**\n * @dev Unsigned saturating addition, bounds to `2²⁵⁶ - 1` instead of overflowing.\n */\n function saturatingAdd(uint256 a, uint256 b) internal pure returns (uint256) {\n (bool success, uint256 result) = tryAdd(a, b);\n return ternary(success, result, type(uint256).max);\n }\n\n /**\n * @dev Unsigned saturating subtraction, bounds to zero instead of overflowing.\n */\n function saturatingSub(uint256 a, uint256 b) internal pure returns (uint256) {\n (, uint256 result) = trySub(a, b);\n return result;\n }\n\n /**\n * @dev Unsigned saturating multiplication, bounds to `2²⁵⁶ - 1` instead of overflowing.\n */\n function saturatingMul(uint256 a, uint256 b) internal pure returns (uint256) {\n (bool success, uint256 result) = tryMul(a, b);\n return ternary(success, result, type(uint256).max);\n }\n\n /**\n * @dev Branchless ternary evaluation for `condition ? a : b`. Gas costs are constant.\n *\n * IMPORTANT: This function may reduce bytecode size and consume less gas when used standalone.\n * However, the compiler may optimize Solidity ternary operations (i.e. `condition ? a : b`) to only compute\n * one branch when needed, making this function more expensive.\n */\n function ternary(bool condition, uint256 a, uint256 b) internal pure returns (uint256) {\n unchecked {\n // branchless ternary works because:\n // b ^ (a ^ b) == a\n // b ^ 0 == b\n return b ^ ((a ^ b) * SafeCast.toUint(condition));\n }\n }\n\n /**\n * @dev Returns the largest of two numbers.\n */\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\n return ternary(a > b, a, b);\n }\n\n /**\n * @dev Returns the smallest of two numbers.\n */\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\n return ternary(a < b, a, b);\n }\n\n /**\n * @dev Returns the average of two numbers. The result is rounded towards\n * zero.\n */\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\n unchecked {\n // (a + b) / 2 can overflow.\n return (a & b) + (a ^ b) / 2;\n }\n }\n\n /**\n * @dev Returns the ceiling of the division of two numbers.\n *\n * This differs from standard division with `/` in that it rounds towards infinity instead\n * of rounding towards zero.\n */\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\n if (b == 0) {\n // Guarantee the same behavior as in a regular Solidity division.\n Panic.panic(Panic.DIVISION_BY_ZERO);\n }\n\n // The following calculation ensures accurate ceiling division without overflow.\n // Since a is non-zero, (a - 1) / b will not overflow.\n // The largest possible result occurs when (a - 1) / b is type(uint256).max,\n // but the largest value we can obtain is type(uint256).max - 1, which happens\n // when a = type(uint256).max and b = 1.\n unchecked {\n return SafeCast.toUint(a > 0) * ((a - 1) / b + 1);\n }\n }\n\n /**\n * @dev Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or\n * denominator == 0.\n *\n * Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) with further edits by\n * Uniswap Labs also under MIT license.\n */\n function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\n unchecked {\n (uint256 high, uint256 low) = mul512(x, y);\n\n // Handle non-overflow cases, 256 by 256 division.\n if (high == 0) {\n // Solidity will revert if denominator == 0, unlike the div opcode on its own.\n // The surrounding unchecked block does not change this fact.\n // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\n return low / denominator;\n }\n\n // Make sure the result is less than 2²⁵⁶. Also prevents denominator == 0.\n if (denominator <= high) {\n Panic.panic(ternary(denominator == 0, Panic.DIVISION_BY_ZERO, Panic.UNDER_OVERFLOW));\n }\n\n ///////////////////////////////////////////////\n // 512 by 256 division.\n ///////////////////////////////////////////////\n\n // Make division exact by subtracting the remainder from [high low].\n uint256 remainder;\n assembly (\"memory-safe\") {\n // Compute remainder using mulmod.\n remainder := mulmod(x, y, denominator)\n\n // Subtract 256 bit number from 512 bit number.\n high := sub(high, gt(remainder, low))\n low := sub(low, remainder)\n }\n\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator.\n // Always >= 1. See https://cs.stackexchange.com/q/138556/92363.\n\n uint256 twos = denominator & (0 - denominator);\n assembly (\"memory-safe\") {\n // Divide denominator by twos.\n denominator := div(denominator, twos)\n\n // Divide [high low] by twos.\n low := div(low, twos)\n\n // Flip twos such that it is 2²⁵⁶ / twos. If twos is zero, then it becomes one.\n twos := add(div(sub(0, twos), twos), 1)\n }\n\n // Shift in bits from high into low.\n low |= high * twos;\n\n // Invert denominator mod 2²⁵⁶. Now that denominator is an odd number, it has an inverse modulo 2²⁵⁶ such\n // that denominator * inv ≡ 1 mod 2²⁵⁶. Compute the inverse by starting with a seed that is correct for\n // four bits. That is, denominator * inv ≡ 1 mod 2⁴.\n uint256 inverse = (3 * denominator) ^ 2;\n\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also\n // works in modular arithmetic, doubling the correct bits in each step.\n inverse *= 2 - denominator * inverse; // inverse mod 2⁸\n inverse *= 2 - denominator * inverse; // inverse mod 2¹⁶\n inverse *= 2 - denominator * inverse; // inverse mod 2³²\n inverse *= 2 - denominator * inverse; // inverse mod 2⁶⁴\n inverse *= 2 - denominator * inverse; // inverse mod 2¹²⁸\n inverse *= 2 - denominator * inverse; // inverse mod 2²⁵⁶\n\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\n // This will give us the correct result modulo 2²⁵⁶. Since the preconditions guarantee that the outcome is\n // less than 2²⁵⁶, this is the final result. We don't need to compute the high bits of the result and high\n // is no longer required.\n result = low * inverse;\n return result;\n }\n }\n\n /**\n * @dev Calculates x * y / denominator with full precision, following the selected rounding direction.\n */\n function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\n return mulDiv(x, y, denominator) + SafeCast.toUint(unsignedRoundsUp(rounding) && mulmod(x, y, denominator) > 0);\n }\n\n /**\n * @dev Calculates floor(x * y >> n) with full precision. Throws if result overflows a uint256.\n */\n function mulShr(uint256 x, uint256 y, uint8 n) internal pure returns (uint256 result) {\n unchecked {\n (uint256 high, uint256 low) = mul512(x, y);\n if (high >= 1 << n) {\n Panic.panic(Panic.UNDER_OVERFLOW);\n }\n return (high << (256 - n)) | (low >> n);\n }\n }\n\n /**\n * @dev Calculates x * y >> n with full precision, following the selected rounding direction.\n */\n function mulShr(uint256 x, uint256 y, uint8 n, Rounding rounding) internal pure returns (uint256) {\n return mulShr(x, y, n) + SafeCast.toUint(unsignedRoundsUp(rounding) && mulmod(x, y, 1 << n) > 0);\n }\n\n /**\n * @dev Calculate the modular multiplicative inverse of a number in Z/nZ.\n *\n * If n is a prime, then Z/nZ is a field. In that case all elements are inversible, except 0.\n * If n is not a prime, then Z/nZ is not a field, and some elements might not be inversible.\n *\n * If the input value is not inversible, 0 is returned.\n *\n * NOTE: If you know for sure that n is (big) a prime, it may be cheaper to use Fermat's little theorem and get the\n * inverse using `Math.modExp(a, n - 2, n)`. See {invModPrime}.\n */\n function invMod(uint256 a, uint256 n) internal pure returns (uint256) {\n unchecked {\n if (n == 0) return 0;\n\n // The inverse modulo is calculated using the Extended Euclidean Algorithm (iterative version)\n // Used to compute integers x and y such that: ax + ny = gcd(a, n).\n // When the gcd is 1, then the inverse of a modulo n exists and it's x.\n // ax + ny = 1\n // ax = 1 + (-y)n\n // ax ≡ 1 (mod n) # x is the inverse of a modulo n\n\n // If the remainder is 0 the gcd is n right away.\n uint256 remainder = a % n;\n uint256 gcd = n;\n\n // Therefore the initial coefficients are:\n // ax + ny = gcd(a, n) = n\n // 0a + 1n = n\n int256 x = 0;\n int256 y = 1;\n\n while (remainder != 0) {\n uint256 quotient = gcd / remainder;\n\n (gcd, remainder) = (\n // The old remainder is the next gcd to try.\n remainder,\n // Compute the next remainder.\n // Can't overflow given that (a % gcd) * (gcd // (a % gcd)) <= gcd\n // where gcd is at most n (capped to type(uint256).max)\n gcd - remainder * quotient\n );\n\n (x, y) = (\n // Increment the coefficient of a.\n y,\n // Decrement the coefficient of n.\n // Can overflow, but the result is casted to uint256 so that the\n // next value of y is \"wrapped around\" to a value between 0 and n - 1.\n x - y * int256(quotient)\n );\n }\n\n if (gcd != 1) return 0; // No inverse exists.\n return ternary(x < 0, n - uint256(-x), uint256(x)); // Wrap the result if it's negative.\n }\n }\n\n /**\n * @dev Variant of {invMod}. More efficient, but only works if `p` is known to be a prime greater than `2`.\n *\n * From https://en.wikipedia.org/wiki/Fermat%27s_little_theorem[Fermat's little theorem], we know that if p is\n * prime, then `a**(p-1) ≡ 1 mod p`. As a consequence, we have `a * a**(p-2) ≡ 1 mod p`, which means that\n * `a**(p-2)` is the modular multiplicative inverse of a in Fp.\n *\n * NOTE: this function does NOT check that `p` is a prime greater than `2`.\n */\n function invModPrime(uint256 a, uint256 p) internal view returns (uint256) {\n unchecked {\n return Math.modExp(a, p - 2, p);\n }\n }\n\n /**\n * @dev Returns the modular exponentiation of the specified base, exponent and modulus (b ** e % m)\n *\n * Requirements:\n * - modulus can't be zero\n * - underlying staticcall to precompile must succeed\n *\n * IMPORTANT: The result is only valid if the underlying call succeeds. When using this function, make\n * sure the chain you're using it on supports the precompiled contract for modular exponentiation\n * at address 0x05 as specified in https://eips.ethereum.org/EIPS/eip-198[EIP-198]. Otherwise,\n * the underlying function will succeed given the lack of a revert, but the result may be incorrectly\n * interpreted as 0.\n */\n function modExp(uint256 b, uint256 e, uint256 m) internal view returns (uint256) {\n (bool success, uint256 result) = tryModExp(b, e, m);\n if (!success) {\n Panic.panic(Panic.DIVISION_BY_ZERO);\n }\n return result;\n }\n\n /**\n * @dev Returns the modular exponentiation of the specified base, exponent and modulus (b ** e % m).\n * It includes a success flag indicating if the operation succeeded. Operation will be marked as failed if trying\n * to operate modulo 0 or if the underlying precompile reverted.\n *\n * IMPORTANT: The result is only valid if the success flag is true. When using this function, make sure the chain\n * you're using it on supports the precompiled contract for modular exponentiation at address 0x05 as specified in\n * https://eips.ethereum.org/EIPS/eip-198[EIP-198]. Otherwise, the underlying function will succeed given the lack\n * of a revert, but the result may be incorrectly interpreted as 0.\n */\n function tryModExp(uint256 b, uint256 e, uint256 m) internal view returns (bool success, uint256 result) {\n if (m == 0) return (false, 0);\n assembly (\"memory-safe\") {\n let ptr := mload(0x40)\n // | Offset | Content | Content (Hex) |\n // |-----------|------------|--------------------------------------------------------------------|\n // | 0x00:0x1f | size of b | 0x0000000000000000000000000000000000000000000000000000000000000020 |\n // | 0x20:0x3f | size of e | 0x0000000000000000000000000000000000000000000000000000000000000020 |\n // | 0x40:0x5f | size of m | 0x0000000000000000000000000000000000000000000000000000000000000020 |\n // | 0x60:0x7f | value of b | 0x<.............................................................b> |\n // | 0x80:0x9f | value of e | 0x<.............................................................e> |\n // | 0xa0:0xbf | value of m | 0x<.............................................................m> |\n mstore(ptr, 0x20)\n mstore(add(ptr, 0x20), 0x20)\n mstore(add(ptr, 0x40), 0x20)\n mstore(add(ptr, 0x60), b)\n mstore(add(ptr, 0x80), e)\n mstore(add(ptr, 0xa0), m)\n\n // Given the result < m, it's guaranteed to fit in 32 bytes,\n // so we can use the memory scratch space located at offset 0.\n success := staticcall(gas(), 0x05, ptr, 0xc0, 0x00, 0x20)\n result := mload(0x00)\n }\n }\n\n /**\n * @dev Variant of {modExp} that supports inputs of arbitrary length.\n */\n function modExp(bytes memory b, bytes memory e, bytes memory m) internal view returns (bytes memory) {\n (bool success, bytes memory result) = tryModExp(b, e, m);\n if (!success) {\n Panic.panic(Panic.DIVISION_BY_ZERO);\n }\n return result;\n }\n\n /**\n * @dev Variant of {tryModExp} that supports inputs of arbitrary length.\n */\n function tryModExp(\n bytes memory b,\n bytes memory e,\n bytes memory m\n ) internal view returns (bool success, bytes memory result) {\n if (_zeroBytes(m)) return (false, new bytes(0));\n\n uint256 mLen = m.length;\n\n // Encode call args in result and move the free memory pointer\n result = abi.encodePacked(b.length, e.length, mLen, b, e, m);\n\n assembly (\"memory-safe\") {\n let dataPtr := add(result, 0x20)\n // Write result on top of args to avoid allocating extra memory.\n success := staticcall(gas(), 0x05, dataPtr, mload(result), dataPtr, mLen)\n // Overwrite the length.\n // result.length > returndatasize() is guaranteed because returndatasize() == m.length\n mstore(result, mLen)\n // Set the memory pointer after the returned data.\n mstore(0x40, add(dataPtr, mLen))\n }\n }\n\n /**\n * @dev Returns whether the provided byte array is zero.\n */\n function _zeroBytes(bytes memory buffer) private pure returns (bool) {\n uint256 chunk;\n for (uint256 i = 0; i < buffer.length; i += 0x20) {\n // See _unsafeReadBytesOffset from utils/Bytes.sol\n assembly (\"memory-safe\") {\n chunk := mload(add(add(buffer, 0x20), i))\n }\n if (chunk >> (8 * saturatingSub(i + 0x20, buffer.length)) != 0) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded\n * towards zero.\n *\n * This method is based on Newton's method for computing square roots; the algorithm is restricted to only\n * using integer operations.\n */\n function sqrt(uint256 a) internal pure returns (uint256) {\n unchecked {\n // Take care of easy edge cases when a == 0 or a == 1\n if (a <= 1) {\n return a;\n }\n\n // In this function, we use Newton's method to get a root of `f(x) := x² - a`. It involves building a\n // sequence x_n that converges toward sqrt(a). For each iteration x_n, we also define the error between\n // the current value as `ε_n = | x_n - sqrt(a) |`.\n //\n // For our first estimation, we consider `e` the smallest power of 2 which is bigger than the square root\n // of the target. (i.e. `2**(e-1) ≤ sqrt(a) < 2**e`). We know that `e ≤ 128` because `(2¹²⁸)² = 2²⁵⁶` is\n // bigger than any uint256.\n //\n // By noticing that\n // `2**(e-1) ≤ sqrt(a) < 2**e → (2**(e-1))² ≤ a < (2**e)² → 2**(2*e-2) ≤ a < 2**(2*e)`\n // we can deduce that `e - 1` is `log2(a) / 2`. We can thus compute `x_n = 2**(e-1)` using a method similar\n // to the msb function.\n uint256 aa = a;\n uint256 xn = 1;\n\n if (aa >= (1 << 128)) {\n aa >>= 128;\n xn <<= 64;\n }\n if (aa >= (1 << 64)) {\n aa >>= 64;\n xn <<= 32;\n }\n if (aa >= (1 << 32)) {\n aa >>= 32;\n xn <<= 16;\n }\n if (aa >= (1 << 16)) {\n aa >>= 16;\n xn <<= 8;\n }\n if (aa >= (1 << 8)) {\n aa >>= 8;\n xn <<= 4;\n }\n if (aa >= (1 << 4)) {\n aa >>= 4;\n xn <<= 2;\n }\n if (aa >= (1 << 2)) {\n xn <<= 1;\n }\n\n // We now have x_n such that `x_n = 2**(e-1) ≤ sqrt(a) < 2**e = 2 * x_n`. This implies ε_n ≤ 2**(e-1).\n //\n // We can refine our estimation by noticing that the middle of that interval minimizes the error.\n // If we move x_n to equal 2**(e-1) + 2**(e-2), then we reduce the error to ε_n ≤ 2**(e-2).\n // This is going to be our x_0 (and ε_0)\n xn = (3 * xn) >> 1; // ε_0 := | x_0 - sqrt(a) | ≤ 2**(e-2)\n\n // From here, Newton's method give us:\n // x_{n+1} = (x_n + a / x_n) / 2\n //\n // One should note that:\n // x_{n+1}² - a = ((x_n + a / x_n) / 2)² - a\n // = ((x_n² + a) / (2 * x_n))² - a\n // = (x_n⁴ + 2 * a * x_n² + a²) / (4 * x_n²) - a\n // = (x_n⁴ + 2 * a * x_n² + a² - 4 * a * x_n²) / (4 * x_n²)\n // = (x_n⁴ - 2 * a * x_n² + a²) / (4 * x_n²)\n // = (x_n² - a)² / (2 * x_n)²\n // = ((x_n² - a) / (2 * x_n))²\n // ≥ 0\n // Which proves that for all n ≥ 1, sqrt(a) ≤ x_n\n //\n // This gives us the proof of quadratic convergence of the sequence:\n // ε_{n+1} = | x_{n+1} - sqrt(a) |\n // = | (x_n + a / x_n) / 2 - sqrt(a) |\n // = | (x_n² + a - 2*x_n*sqrt(a)) / (2 * x_n) |\n // = | (x_n - sqrt(a))² / (2 * x_n) |\n // = | ε_n² / (2 * x_n) |\n // = ε_n² / | (2 * x_n) |\n //\n // For the first iteration, we have a special case where x_0 is known:\n // ε_1 = ε_0² / | (2 * x_0) |\n // ≤ (2**(e-2))² / (2 * (2**(e-1) + 2**(e-2)))\n // ≤ 2**(2*e-4) / (3 * 2**(e-1))\n // ≤ 2**(e-3) / 3\n // ≤ 2**(e-3-log2(3))\n // ≤ 2**(e-4.5)\n //\n // For the following iterations, we use the fact that, 2**(e-1) ≤ sqrt(a) ≤ x_n:\n // ε_{n+1} = ε_n² / | (2 * x_n) |\n // ≤ (2**(e-k))² / (2 * 2**(e-1))\n // ≤ 2**(2*e-2*k) / 2**e\n // ≤ 2**(e-2*k)\n xn = (xn + a / xn) >> 1; // ε_1 := | x_1 - sqrt(a) | ≤ 2**(e-4.5) -- special case, see above\n xn = (xn + a / xn) >> 1; // ε_2 := | x_2 - sqrt(a) | ≤ 2**(e-9) -- general case with k = 4.5\n xn = (xn + a / xn) >> 1; // ε_3 := | x_3 - sqrt(a) | ≤ 2**(e-18) -- general case with k = 9\n xn = (xn + a / xn) >> 1; // ε_4 := | x_4 - sqrt(a) | ≤ 2**(e-36) -- general case with k = 18\n xn = (xn + a / xn) >> 1; // ε_5 := | x_5 - sqrt(a) | ≤ 2**(e-72) -- general case with k = 36\n xn = (xn + a / xn) >> 1; // ε_6 := | x_6 - sqrt(a) | ≤ 2**(e-144) -- general case with k = 72\n\n // Because e ≤ 128 (as discussed during the first estimation phase), we know have reached a precision\n // ε_6 ≤ 2**(e-144) < 1. Given we're operating on integers, then we can ensure that xn is now either\n // sqrt(a) or sqrt(a) + 1.\n return xn - SafeCast.toUint(xn > a / xn);\n }\n }\n\n /**\n * @dev Calculates sqrt(a), following the selected rounding direction.\n */\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = sqrt(a);\n return result + SafeCast.toUint(unsignedRoundsUp(rounding) && result * result < a);\n }\n }\n\n /**\n * @dev Return the log in base 2 of a positive value rounded towards zero.\n * Returns 0 if given 0.\n */\n function log2(uint256 x) internal pure returns (uint256 r) {\n // If value has upper 128 bits set, log2 result is at least 128\n r = SafeCast.toUint(x > 0xffffffffffffffffffffffffffffffff) << 7;\n // If upper 64 bits of 128-bit half set, add 64 to result\n r |= SafeCast.toUint((x >> r) > 0xffffffffffffffff) << 6;\n // If upper 32 bits of 64-bit half set, add 32 to result\n r |= SafeCast.toUint((x >> r) > 0xffffffff) << 5;\n // If upper 16 bits of 32-bit half set, add 16 to result\n r |= SafeCast.toUint((x >> r) > 0xffff) << 4;\n // If upper 8 bits of 16-bit half set, add 8 to result\n r |= SafeCast.toUint((x >> r) > 0xff) << 3;\n // If upper 4 bits of 8-bit half set, add 4 to result\n r |= SafeCast.toUint((x >> r) > 0xf) << 2;\n\n // Shifts value right by the current result and use it as an index into this lookup table:\n //\n // | x (4 bits) | index | table[index] = MSB position |\n // |------------|---------|-----------------------------|\n // | 0000 | 0 | table[0] = 0 |\n // | 0001 | 1 | table[1] = 0 |\n // | 0010 | 2 | table[2] = 1 |\n // | 0011 | 3 | table[3] = 1 |\n // | 0100 | 4 | table[4] = 2 |\n // | 0101 | 5 | table[5] = 2 |\n // | 0110 | 6 | table[6] = 2 |\n // | 0111 | 7 | table[7] = 2 |\n // | 1000 | 8 | table[8] = 3 |\n // | 1001 | 9 | table[9] = 3 |\n // | 1010 | 10 | table[10] = 3 |\n // | 1011 | 11 | table[11] = 3 |\n // | 1100 | 12 | table[12] = 3 |\n // | 1101 | 13 | table[13] = 3 |\n // | 1110 | 14 | table[14] = 3 |\n // | 1111 | 15 | table[15] = 3 |\n //\n // The lookup table is represented as a 32-byte value with the MSB positions for 0-15 in the first 16 bytes (most significant half).\n assembly (\"memory-safe\") {\n r := or(r, byte(shr(r, x), 0x0000010102020202030303030303030300000000000000000000000000000000))\n }\n }\n\n /**\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\n * Returns 0 if given 0.\n */\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = log2(value);\n return result + SafeCast.toUint(unsignedRoundsUp(rounding) && 1 << result < value);\n }\n }\n\n /**\n * @dev Return the log in base 10 of a positive value rounded towards zero.\n * Returns 0 if given 0.\n */\n function log10(uint256 value) internal pure returns (uint256) {\n uint256 result = 0;\n unchecked {\n if (value >= 10 ** 64) {\n value /= 10 ** 64;\n result += 64;\n }\n if (value >= 10 ** 32) {\n value /= 10 ** 32;\n result += 32;\n }\n if (value >= 10 ** 16) {\n value /= 10 ** 16;\n result += 16;\n }\n if (value >= 10 ** 8) {\n value /= 10 ** 8;\n result += 8;\n }\n if (value >= 10 ** 4) {\n value /= 10 ** 4;\n result += 4;\n }\n if (value >= 10 ** 2) {\n value /= 10 ** 2;\n result += 2;\n }\n if (value >= 10 ** 1) {\n result += 1;\n }\n }\n return result;\n }\n\n /**\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\n * Returns 0 if given 0.\n */\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = log10(value);\n return result + SafeCast.toUint(unsignedRoundsUp(rounding) && 10 ** result < value);\n }\n }\n\n /**\n * @dev Return the log in base 256 of a positive value rounded towards zero.\n * Returns 0 if given 0.\n *\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\n */\n function log256(uint256 x) internal pure returns (uint256 r) {\n // If value has upper 128 bits set, log2 result is at least 128\n r = SafeCast.toUint(x > 0xffffffffffffffffffffffffffffffff) << 7;\n // If upper 64 bits of 128-bit half set, add 64 to result\n r |= SafeCast.toUint((x >> r) > 0xffffffffffffffff) << 6;\n // If upper 32 bits of 64-bit half set, add 32 to result\n r |= SafeCast.toUint((x >> r) > 0xffffffff) << 5;\n // If upper 16 bits of 32-bit half set, add 16 to result\n r |= SafeCast.toUint((x >> r) > 0xffff) << 4;\n // Add 1 if upper 8 bits of 16-bit half set, and divide accumulated result by 8\n return (r >> 3) | SafeCast.toUint((x >> r) > 0xff);\n }\n\n /**\n * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\n * Returns 0 if given 0.\n */\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = log256(value);\n return result + SafeCast.toUint(unsignedRoundsUp(rounding) && 1 << (result << 3) < value);\n }\n }\n\n /**\n * @dev Returns whether a provided rounding mode is considered rounding up for unsigned integers.\n */\n function unsignedRoundsUp(Rounding rounding) internal pure returns (bool) {\n return uint8(rounding) % 2 == 1;\n }\n\n /**\n * @dev Counts the number of leading zero bits in a uint256.\n */\n function clz(uint256 x) internal pure returns (uint256) {\n return ternary(x == 0, 256, 255 - log2(x));\n }\n}\n" + }, + "@openzeppelin/contracts/utils/Panic.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/Panic.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Helper library for emitting standardized panic codes.\n *\n * ```solidity\n * contract Example {\n * using Panic for uint256;\n *\n * // Use any of the declared internal constants\n * function foo() { Panic.GENERIC.panic(); }\n *\n * // Alternatively\n * function foo() { Panic.panic(Panic.GENERIC); }\n * }\n * ```\n *\n * Follows the list from https://github.com/ethereum/solidity/blob/v0.8.24/libsolutil/ErrorCodes.h[libsolutil].\n *\n * _Available since v5.1._\n */\n// slither-disable-next-line unused-state\nlibrary Panic {\n /// @dev generic / unspecified error\n uint256 internal constant GENERIC = 0x00;\n /// @dev used by the assert() builtin\n uint256 internal constant ASSERT = 0x01;\n /// @dev arithmetic underflow or overflow\n uint256 internal constant UNDER_OVERFLOW = 0x11;\n /// @dev division or modulo by zero\n uint256 internal constant DIVISION_BY_ZERO = 0x12;\n /// @dev enum conversion error\n uint256 internal constant ENUM_CONVERSION_ERROR = 0x21;\n /// @dev invalid encoding in storage\n uint256 internal constant STORAGE_ENCODING_ERROR = 0x22;\n /// @dev empty array pop\n uint256 internal constant EMPTY_ARRAY_POP = 0x31;\n /// @dev array out of bounds access\n uint256 internal constant ARRAY_OUT_OF_BOUNDS = 0x32;\n /// @dev resource error (too large allocation or too large array)\n uint256 internal constant RESOURCE_ERROR = 0x41;\n /// @dev calling invalid internal function\n uint256 internal constant INVALID_INTERNAL_FUNCTION = 0x51;\n\n /// @dev Reverts with a panic code. Recommended to use with\n /// the internal constants with predefined codes.\n function panic(uint256 code) internal pure {\n assembly (\"memory-safe\") {\n mstore(0x00, 0x4e487b71)\n mstore(0x20, code)\n revert(0x1c, 0x24)\n }\n }\n}\n" + }, + "@openzeppelin/contracts/utils/math/SafeCast.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.6.0) (utils/math/SafeCast.sol)\n// This file was procedurally generated from scripts/generate/templates/SafeCast.js.\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Wrappers over Solidity's uintXX/intXX/bool casting operators with added overflow\n * checks.\n *\n * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can\n * easily result in undesired exploitation or bugs, since developers usually\n * assume that overflows raise errors. `SafeCast` restores this intuition by\n * reverting the transaction when such an operation overflows.\n *\n * Using this library instead of the unchecked operations eliminates an entire\n * class of bugs, so it's recommended to use it always.\n */\nlibrary SafeCast {\n /**\n * @dev Value doesn't fit in a uint of `bits` size.\n */\n error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value);\n\n /**\n * @dev An int value doesn't fit in a uint of `bits` size.\n */\n error SafeCastOverflowedIntToUint(int256 value);\n\n /**\n * @dev Value doesn't fit in an int of `bits` size.\n */\n error SafeCastOverflowedIntDowncast(uint8 bits, int256 value);\n\n /**\n * @dev A uint value doesn't fit in an int of `bits` size.\n */\n error SafeCastOverflowedUintToInt(uint256 value);\n\n /**\n * @dev Returns the downcasted uint248 from uint256, reverting on\n * overflow (when the input is greater than largest uint248).\n *\n * Counterpart to Solidity's `uint248` operator.\n *\n * Requirements:\n *\n * - input must fit into 248 bits\n */\n function toUint248(uint256 value) internal pure returns (uint248) {\n if (value > type(uint248).max) {\n revert SafeCastOverflowedUintDowncast(248, value);\n }\n return uint248(value);\n }\n\n /**\n * @dev Returns the downcasted uint240 from uint256, reverting on\n * overflow (when the input is greater than largest uint240).\n *\n * Counterpart to Solidity's `uint240` operator.\n *\n * Requirements:\n *\n * - input must fit into 240 bits\n */\n function toUint240(uint256 value) internal pure returns (uint240) {\n if (value > type(uint240).max) {\n revert SafeCastOverflowedUintDowncast(240, value);\n }\n return uint240(value);\n }\n\n /**\n * @dev Returns the downcasted uint232 from uint256, reverting on\n * overflow (when the input is greater than largest uint232).\n *\n * Counterpart to Solidity's `uint232` operator.\n *\n * Requirements:\n *\n * - input must fit into 232 bits\n */\n function toUint232(uint256 value) internal pure returns (uint232) {\n if (value > type(uint232).max) {\n revert SafeCastOverflowedUintDowncast(232, value);\n }\n return uint232(value);\n }\n\n /**\n * @dev Returns the downcasted uint224 from uint256, reverting on\n * overflow (when the input is greater than largest uint224).\n *\n * Counterpart to Solidity's `uint224` operator.\n *\n * Requirements:\n *\n * - input must fit into 224 bits\n */\n function toUint224(uint256 value) internal pure returns (uint224) {\n if (value > type(uint224).max) {\n revert SafeCastOverflowedUintDowncast(224, value);\n }\n return uint224(value);\n }\n\n /**\n * @dev Returns the downcasted uint216 from uint256, reverting on\n * overflow (when the input is greater than largest uint216).\n *\n * Counterpart to Solidity's `uint216` operator.\n *\n * Requirements:\n *\n * - input must fit into 216 bits\n */\n function toUint216(uint256 value) internal pure returns (uint216) {\n if (value > type(uint216).max) {\n revert SafeCastOverflowedUintDowncast(216, value);\n }\n return uint216(value);\n }\n\n /**\n * @dev Returns the downcasted uint208 from uint256, reverting on\n * overflow (when the input is greater than largest uint208).\n *\n * Counterpart to Solidity's `uint208` operator.\n *\n * Requirements:\n *\n * - input must fit into 208 bits\n */\n function toUint208(uint256 value) internal pure returns (uint208) {\n if (value > type(uint208).max) {\n revert SafeCastOverflowedUintDowncast(208, value);\n }\n return uint208(value);\n }\n\n /**\n * @dev Returns the downcasted uint200 from uint256, reverting on\n * overflow (when the input is greater than largest uint200).\n *\n * Counterpart to Solidity's `uint200` operator.\n *\n * Requirements:\n *\n * - input must fit into 200 bits\n */\n function toUint200(uint256 value) internal pure returns (uint200) {\n if (value > type(uint200).max) {\n revert SafeCastOverflowedUintDowncast(200, value);\n }\n return uint200(value);\n }\n\n /**\n * @dev Returns the downcasted uint192 from uint256, reverting on\n * overflow (when the input is greater than largest uint192).\n *\n * Counterpart to Solidity's `uint192` operator.\n *\n * Requirements:\n *\n * - input must fit into 192 bits\n */\n function toUint192(uint256 value) internal pure returns (uint192) {\n if (value > type(uint192).max) {\n revert SafeCastOverflowedUintDowncast(192, value);\n }\n return uint192(value);\n }\n\n /**\n * @dev Returns the downcasted uint184 from uint256, reverting on\n * overflow (when the input is greater than largest uint184).\n *\n * Counterpart to Solidity's `uint184` operator.\n *\n * Requirements:\n *\n * - input must fit into 184 bits\n */\n function toUint184(uint256 value) internal pure returns (uint184) {\n if (value > type(uint184).max) {\n revert SafeCastOverflowedUintDowncast(184, value);\n }\n return uint184(value);\n }\n\n /**\n * @dev Returns the downcasted uint176 from uint256, reverting on\n * overflow (when the input is greater than largest uint176).\n *\n * Counterpart to Solidity's `uint176` operator.\n *\n * Requirements:\n *\n * - input must fit into 176 bits\n */\n function toUint176(uint256 value) internal pure returns (uint176) {\n if (value > type(uint176).max) {\n revert SafeCastOverflowedUintDowncast(176, value);\n }\n return uint176(value);\n }\n\n /**\n * @dev Returns the downcasted uint168 from uint256, reverting on\n * overflow (when the input is greater than largest uint168).\n *\n * Counterpart to Solidity's `uint168` operator.\n *\n * Requirements:\n *\n * - input must fit into 168 bits\n */\n function toUint168(uint256 value) internal pure returns (uint168) {\n if (value > type(uint168).max) {\n revert SafeCastOverflowedUintDowncast(168, value);\n }\n return uint168(value);\n }\n\n /**\n * @dev Returns the downcasted uint160 from uint256, reverting on\n * overflow (when the input is greater than largest uint160).\n *\n * Counterpart to Solidity's `uint160` operator.\n *\n * Requirements:\n *\n * - input must fit into 160 bits\n */\n function toUint160(uint256 value) internal pure returns (uint160) {\n if (value > type(uint160).max) {\n revert SafeCastOverflowedUintDowncast(160, value);\n }\n return uint160(value);\n }\n\n /**\n * @dev Returns the downcasted uint152 from uint256, reverting on\n * overflow (when the input is greater than largest uint152).\n *\n * Counterpart to Solidity's `uint152` operator.\n *\n * Requirements:\n *\n * - input must fit into 152 bits\n */\n function toUint152(uint256 value) internal pure returns (uint152) {\n if (value > type(uint152).max) {\n revert SafeCastOverflowedUintDowncast(152, value);\n }\n return uint152(value);\n }\n\n /**\n * @dev Returns the downcasted uint144 from uint256, reverting on\n * overflow (when the input is greater than largest uint144).\n *\n * Counterpart to Solidity's `uint144` operator.\n *\n * Requirements:\n *\n * - input must fit into 144 bits\n */\n function toUint144(uint256 value) internal pure returns (uint144) {\n if (value > type(uint144).max) {\n revert SafeCastOverflowedUintDowncast(144, value);\n }\n return uint144(value);\n }\n\n /**\n * @dev Returns the downcasted uint136 from uint256, reverting on\n * overflow (when the input is greater than largest uint136).\n *\n * Counterpart to Solidity's `uint136` operator.\n *\n * Requirements:\n *\n * - input must fit into 136 bits\n */\n function toUint136(uint256 value) internal pure returns (uint136) {\n if (value > type(uint136).max) {\n revert SafeCastOverflowedUintDowncast(136, value);\n }\n return uint136(value);\n }\n\n /**\n * @dev Returns the downcasted uint128 from uint256, reverting on\n * overflow (when the input is greater than largest uint128).\n *\n * Counterpart to Solidity's `uint128` operator.\n *\n * Requirements:\n *\n * - input must fit into 128 bits\n */\n function toUint128(uint256 value) internal pure returns (uint128) {\n if (value > type(uint128).max) {\n revert SafeCastOverflowedUintDowncast(128, value);\n }\n return uint128(value);\n }\n\n /**\n * @dev Returns the downcasted uint120 from uint256, reverting on\n * overflow (when the input is greater than largest uint120).\n *\n * Counterpart to Solidity's `uint120` operator.\n *\n * Requirements:\n *\n * - input must fit into 120 bits\n */\n function toUint120(uint256 value) internal pure returns (uint120) {\n if (value > type(uint120).max) {\n revert SafeCastOverflowedUintDowncast(120, value);\n }\n return uint120(value);\n }\n\n /**\n * @dev Returns the downcasted uint112 from uint256, reverting on\n * overflow (when the input is greater than largest uint112).\n *\n * Counterpart to Solidity's `uint112` operator.\n *\n * Requirements:\n *\n * - input must fit into 112 bits\n */\n function toUint112(uint256 value) internal pure returns (uint112) {\n if (value > type(uint112).max) {\n revert SafeCastOverflowedUintDowncast(112, value);\n }\n return uint112(value);\n }\n\n /**\n * @dev Returns the downcasted uint104 from uint256, reverting on\n * overflow (when the input is greater than largest uint104).\n *\n * Counterpart to Solidity's `uint104` operator.\n *\n * Requirements:\n *\n * - input must fit into 104 bits\n */\n function toUint104(uint256 value) internal pure returns (uint104) {\n if (value > type(uint104).max) {\n revert SafeCastOverflowedUintDowncast(104, value);\n }\n return uint104(value);\n }\n\n /**\n * @dev Returns the downcasted uint96 from uint256, reverting on\n * overflow (when the input is greater than largest uint96).\n *\n * Counterpart to Solidity's `uint96` operator.\n *\n * Requirements:\n *\n * - input must fit into 96 bits\n */\n function toUint96(uint256 value) internal pure returns (uint96) {\n if (value > type(uint96).max) {\n revert SafeCastOverflowedUintDowncast(96, value);\n }\n return uint96(value);\n }\n\n /**\n * @dev Returns the downcasted uint88 from uint256, reverting on\n * overflow (when the input is greater than largest uint88).\n *\n * Counterpart to Solidity's `uint88` operator.\n *\n * Requirements:\n *\n * - input must fit into 88 bits\n */\n function toUint88(uint256 value) internal pure returns (uint88) {\n if (value > type(uint88).max) {\n revert SafeCastOverflowedUintDowncast(88, value);\n }\n return uint88(value);\n }\n\n /**\n * @dev Returns the downcasted uint80 from uint256, reverting on\n * overflow (when the input is greater than largest uint80).\n *\n * Counterpart to Solidity's `uint80` operator.\n *\n * Requirements:\n *\n * - input must fit into 80 bits\n */\n function toUint80(uint256 value) internal pure returns (uint80) {\n if (value > type(uint80).max) {\n revert SafeCastOverflowedUintDowncast(80, value);\n }\n return uint80(value);\n }\n\n /**\n * @dev Returns the downcasted uint72 from uint256, reverting on\n * overflow (when the input is greater than largest uint72).\n *\n * Counterpart to Solidity's `uint72` operator.\n *\n * Requirements:\n *\n * - input must fit into 72 bits\n */\n function toUint72(uint256 value) internal pure returns (uint72) {\n if (value > type(uint72).max) {\n revert SafeCastOverflowedUintDowncast(72, value);\n }\n return uint72(value);\n }\n\n /**\n * @dev Returns the downcasted uint64 from uint256, reverting on\n * overflow (when the input is greater than largest uint64).\n *\n * Counterpart to Solidity's `uint64` operator.\n *\n * Requirements:\n *\n * - input must fit into 64 bits\n */\n function toUint64(uint256 value) internal pure returns (uint64) {\n if (value > type(uint64).max) {\n revert SafeCastOverflowedUintDowncast(64, value);\n }\n return uint64(value);\n }\n\n /**\n * @dev Returns the downcasted uint56 from uint256, reverting on\n * overflow (when the input is greater than largest uint56).\n *\n * Counterpart to Solidity's `uint56` operator.\n *\n * Requirements:\n *\n * - input must fit into 56 bits\n */\n function toUint56(uint256 value) internal pure returns (uint56) {\n if (value > type(uint56).max) {\n revert SafeCastOverflowedUintDowncast(56, value);\n }\n return uint56(value);\n }\n\n /**\n * @dev Returns the downcasted uint48 from uint256, reverting on\n * overflow (when the input is greater than largest uint48).\n *\n * Counterpart to Solidity's `uint48` operator.\n *\n * Requirements:\n *\n * - input must fit into 48 bits\n */\n function toUint48(uint256 value) internal pure returns (uint48) {\n if (value > type(uint48).max) {\n revert SafeCastOverflowedUintDowncast(48, value);\n }\n return uint48(value);\n }\n\n /**\n * @dev Returns the downcasted uint40 from uint256, reverting on\n * overflow (when the input is greater than largest uint40).\n *\n * Counterpart to Solidity's `uint40` operator.\n *\n * Requirements:\n *\n * - input must fit into 40 bits\n */\n function toUint40(uint256 value) internal pure returns (uint40) {\n if (value > type(uint40).max) {\n revert SafeCastOverflowedUintDowncast(40, value);\n }\n return uint40(value);\n }\n\n /**\n * @dev Returns the downcasted uint32 from uint256, reverting on\n * overflow (when the input is greater than largest uint32).\n *\n * Counterpart to Solidity's `uint32` operator.\n *\n * Requirements:\n *\n * - input must fit into 32 bits\n */\n function toUint32(uint256 value) internal pure returns (uint32) {\n if (value > type(uint32).max) {\n revert SafeCastOverflowedUintDowncast(32, value);\n }\n return uint32(value);\n }\n\n /**\n * @dev Returns the downcasted uint24 from uint256, reverting on\n * overflow (when the input is greater than largest uint24).\n *\n * Counterpart to Solidity's `uint24` operator.\n *\n * Requirements:\n *\n * - input must fit into 24 bits\n */\n function toUint24(uint256 value) internal pure returns (uint24) {\n if (value > type(uint24).max) {\n revert SafeCastOverflowedUintDowncast(24, value);\n }\n return uint24(value);\n }\n\n /**\n * @dev Returns the downcasted uint16 from uint256, reverting on\n * overflow (when the input is greater than largest uint16).\n *\n * Counterpart to Solidity's `uint16` operator.\n *\n * Requirements:\n *\n * - input must fit into 16 bits\n */\n function toUint16(uint256 value) internal pure returns (uint16) {\n if (value > type(uint16).max) {\n revert SafeCastOverflowedUintDowncast(16, value);\n }\n return uint16(value);\n }\n\n /**\n * @dev Returns the downcasted uint8 from uint256, reverting on\n * overflow (when the input is greater than largest uint8).\n *\n * Counterpart to Solidity's `uint8` operator.\n *\n * Requirements:\n *\n * - input must fit into 8 bits\n */\n function toUint8(uint256 value) internal pure returns (uint8) {\n if (value > type(uint8).max) {\n revert SafeCastOverflowedUintDowncast(8, value);\n }\n return uint8(value);\n }\n\n /**\n * @dev Converts a signed int256 into an unsigned uint256.\n *\n * Requirements:\n *\n * - input must be greater than or equal to 0.\n */\n function toUint256(int256 value) internal pure returns (uint256) {\n if (value < 0) {\n revert SafeCastOverflowedIntToUint(value);\n }\n return uint256(value);\n }\n\n /**\n * @dev Returns the downcasted int248 from int256, reverting on\n * overflow (when the input is less than smallest int248 or\n * greater than largest int248).\n *\n * Counterpart to Solidity's `int248` operator.\n *\n * Requirements:\n *\n * - input must fit into 248 bits\n */\n function toInt248(int256 value) internal pure returns (int248 downcasted) {\n downcasted = int248(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(248, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int240 from int256, reverting on\n * overflow (when the input is less than smallest int240 or\n * greater than largest int240).\n *\n * Counterpart to Solidity's `int240` operator.\n *\n * Requirements:\n *\n * - input must fit into 240 bits\n */\n function toInt240(int256 value) internal pure returns (int240 downcasted) {\n downcasted = int240(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(240, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int232 from int256, reverting on\n * overflow (when the input is less than smallest int232 or\n * greater than largest int232).\n *\n * Counterpart to Solidity's `int232` operator.\n *\n * Requirements:\n *\n * - input must fit into 232 bits\n */\n function toInt232(int256 value) internal pure returns (int232 downcasted) {\n downcasted = int232(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(232, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int224 from int256, reverting on\n * overflow (when the input is less than smallest int224 or\n * greater than largest int224).\n *\n * Counterpart to Solidity's `int224` operator.\n *\n * Requirements:\n *\n * - input must fit into 224 bits\n */\n function toInt224(int256 value) internal pure returns (int224 downcasted) {\n downcasted = int224(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(224, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int216 from int256, reverting on\n * overflow (when the input is less than smallest int216 or\n * greater than largest int216).\n *\n * Counterpart to Solidity's `int216` operator.\n *\n * Requirements:\n *\n * - input must fit into 216 bits\n */\n function toInt216(int256 value) internal pure returns (int216 downcasted) {\n downcasted = int216(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(216, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int208 from int256, reverting on\n * overflow (when the input is less than smallest int208 or\n * greater than largest int208).\n *\n * Counterpart to Solidity's `int208` operator.\n *\n * Requirements:\n *\n * - input must fit into 208 bits\n */\n function toInt208(int256 value) internal pure returns (int208 downcasted) {\n downcasted = int208(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(208, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int200 from int256, reverting on\n * overflow (when the input is less than smallest int200 or\n * greater than largest int200).\n *\n * Counterpart to Solidity's `int200` operator.\n *\n * Requirements:\n *\n * - input must fit into 200 bits\n */\n function toInt200(int256 value) internal pure returns (int200 downcasted) {\n downcasted = int200(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(200, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int192 from int256, reverting on\n * overflow (when the input is less than smallest int192 or\n * greater than largest int192).\n *\n * Counterpart to Solidity's `int192` operator.\n *\n * Requirements:\n *\n * - input must fit into 192 bits\n */\n function toInt192(int256 value) internal pure returns (int192 downcasted) {\n downcasted = int192(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(192, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int184 from int256, reverting on\n * overflow (when the input is less than smallest int184 or\n * greater than largest int184).\n *\n * Counterpart to Solidity's `int184` operator.\n *\n * Requirements:\n *\n * - input must fit into 184 bits\n */\n function toInt184(int256 value) internal pure returns (int184 downcasted) {\n downcasted = int184(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(184, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int176 from int256, reverting on\n * overflow (when the input is less than smallest int176 or\n * greater than largest int176).\n *\n * Counterpart to Solidity's `int176` operator.\n *\n * Requirements:\n *\n * - input must fit into 176 bits\n */\n function toInt176(int256 value) internal pure returns (int176 downcasted) {\n downcasted = int176(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(176, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int168 from int256, reverting on\n * overflow (when the input is less than smallest int168 or\n * greater than largest int168).\n *\n * Counterpart to Solidity's `int168` operator.\n *\n * Requirements:\n *\n * - input must fit into 168 bits\n */\n function toInt168(int256 value) internal pure returns (int168 downcasted) {\n downcasted = int168(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(168, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int160 from int256, reverting on\n * overflow (when the input is less than smallest int160 or\n * greater than largest int160).\n *\n * Counterpart to Solidity's `int160` operator.\n *\n * Requirements:\n *\n * - input must fit into 160 bits\n */\n function toInt160(int256 value) internal pure returns (int160 downcasted) {\n downcasted = int160(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(160, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int152 from int256, reverting on\n * overflow (when the input is less than smallest int152 or\n * greater than largest int152).\n *\n * Counterpart to Solidity's `int152` operator.\n *\n * Requirements:\n *\n * - input must fit into 152 bits\n */\n function toInt152(int256 value) internal pure returns (int152 downcasted) {\n downcasted = int152(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(152, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int144 from int256, reverting on\n * overflow (when the input is less than smallest int144 or\n * greater than largest int144).\n *\n * Counterpart to Solidity's `int144` operator.\n *\n * Requirements:\n *\n * - input must fit into 144 bits\n */\n function toInt144(int256 value) internal pure returns (int144 downcasted) {\n downcasted = int144(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(144, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int136 from int256, reverting on\n * overflow (when the input is less than smallest int136 or\n * greater than largest int136).\n *\n * Counterpart to Solidity's `int136` operator.\n *\n * Requirements:\n *\n * - input must fit into 136 bits\n */\n function toInt136(int256 value) internal pure returns (int136 downcasted) {\n downcasted = int136(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(136, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int128 from int256, reverting on\n * overflow (when the input is less than smallest int128 or\n * greater than largest int128).\n *\n * Counterpart to Solidity's `int128` operator.\n *\n * Requirements:\n *\n * - input must fit into 128 bits\n */\n function toInt128(int256 value) internal pure returns (int128 downcasted) {\n downcasted = int128(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(128, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int120 from int256, reverting on\n * overflow (when the input is less than smallest int120 or\n * greater than largest int120).\n *\n * Counterpart to Solidity's `int120` operator.\n *\n * Requirements:\n *\n * - input must fit into 120 bits\n */\n function toInt120(int256 value) internal pure returns (int120 downcasted) {\n downcasted = int120(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(120, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int112 from int256, reverting on\n * overflow (when the input is less than smallest int112 or\n * greater than largest int112).\n *\n * Counterpart to Solidity's `int112` operator.\n *\n * Requirements:\n *\n * - input must fit into 112 bits\n */\n function toInt112(int256 value) internal pure returns (int112 downcasted) {\n downcasted = int112(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(112, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int104 from int256, reverting on\n * overflow (when the input is less than smallest int104 or\n * greater than largest int104).\n *\n * Counterpart to Solidity's `int104` operator.\n *\n * Requirements:\n *\n * - input must fit into 104 bits\n */\n function toInt104(int256 value) internal pure returns (int104 downcasted) {\n downcasted = int104(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(104, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int96 from int256, reverting on\n * overflow (when the input is less than smallest int96 or\n * greater than largest int96).\n *\n * Counterpart to Solidity's `int96` operator.\n *\n * Requirements:\n *\n * - input must fit into 96 bits\n */\n function toInt96(int256 value) internal pure returns (int96 downcasted) {\n downcasted = int96(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(96, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int88 from int256, reverting on\n * overflow (when the input is less than smallest int88 or\n * greater than largest int88).\n *\n * Counterpart to Solidity's `int88` operator.\n *\n * Requirements:\n *\n * - input must fit into 88 bits\n */\n function toInt88(int256 value) internal pure returns (int88 downcasted) {\n downcasted = int88(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(88, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int80 from int256, reverting on\n * overflow (when the input is less than smallest int80 or\n * greater than largest int80).\n *\n * Counterpart to Solidity's `int80` operator.\n *\n * Requirements:\n *\n * - input must fit into 80 bits\n */\n function toInt80(int256 value) internal pure returns (int80 downcasted) {\n downcasted = int80(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(80, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int72 from int256, reverting on\n * overflow (when the input is less than smallest int72 or\n * greater than largest int72).\n *\n * Counterpart to Solidity's `int72` operator.\n *\n * Requirements:\n *\n * - input must fit into 72 bits\n */\n function toInt72(int256 value) internal pure returns (int72 downcasted) {\n downcasted = int72(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(72, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int64 from int256, reverting on\n * overflow (when the input is less than smallest int64 or\n * greater than largest int64).\n *\n * Counterpart to Solidity's `int64` operator.\n *\n * Requirements:\n *\n * - input must fit into 64 bits\n */\n function toInt64(int256 value) internal pure returns (int64 downcasted) {\n downcasted = int64(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(64, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int56 from int256, reverting on\n * overflow (when the input is less than smallest int56 or\n * greater than largest int56).\n *\n * Counterpart to Solidity's `int56` operator.\n *\n * Requirements:\n *\n * - input must fit into 56 bits\n */\n function toInt56(int256 value) internal pure returns (int56 downcasted) {\n downcasted = int56(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(56, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int48 from int256, reverting on\n * overflow (when the input is less than smallest int48 or\n * greater than largest int48).\n *\n * Counterpart to Solidity's `int48` operator.\n *\n * Requirements:\n *\n * - input must fit into 48 bits\n */\n function toInt48(int256 value) internal pure returns (int48 downcasted) {\n downcasted = int48(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(48, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int40 from int256, reverting on\n * overflow (when the input is less than smallest int40 or\n * greater than largest int40).\n *\n * Counterpart to Solidity's `int40` operator.\n *\n * Requirements:\n *\n * - input must fit into 40 bits\n */\n function toInt40(int256 value) internal pure returns (int40 downcasted) {\n downcasted = int40(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(40, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int32 from int256, reverting on\n * overflow (when the input is less than smallest int32 or\n * greater than largest int32).\n *\n * Counterpart to Solidity's `int32` operator.\n *\n * Requirements:\n *\n * - input must fit into 32 bits\n */\n function toInt32(int256 value) internal pure returns (int32 downcasted) {\n downcasted = int32(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(32, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int24 from int256, reverting on\n * overflow (when the input is less than smallest int24 or\n * greater than largest int24).\n *\n * Counterpart to Solidity's `int24` operator.\n *\n * Requirements:\n *\n * - input must fit into 24 bits\n */\n function toInt24(int256 value) internal pure returns (int24 downcasted) {\n downcasted = int24(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(24, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int16 from int256, reverting on\n * overflow (when the input is less than smallest int16 or\n * greater than largest int16).\n *\n * Counterpart to Solidity's `int16` operator.\n *\n * Requirements:\n *\n * - input must fit into 16 bits\n */\n function toInt16(int256 value) internal pure returns (int16 downcasted) {\n downcasted = int16(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(16, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int8 from int256, reverting on\n * overflow (when the input is less than smallest int8 or\n * greater than largest int8).\n *\n * Counterpart to Solidity's `int8` operator.\n *\n * Requirements:\n *\n * - input must fit into 8 bits\n */\n function toInt8(int256 value) internal pure returns (int8 downcasted) {\n downcasted = int8(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(8, value);\n }\n }\n\n /**\n * @dev Converts an unsigned uint256 into a signed int256.\n *\n * Requirements:\n *\n * - input must be less than or equal to maxInt256.\n */\n function toInt256(uint256 value) internal pure returns (int256) {\n // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive\n if (value > uint256(type(int256).max)) {\n revert SafeCastOverflowedUintToInt(value);\n }\n return int256(value);\n }\n\n /**\n * @dev Cast a boolean (false or true) to a uint256 (0 or 1) with no jump.\n */\n function toUint(bool b) internal pure returns (uint256 u) {\n assembly (\"memory-safe\") {\n u := iszero(iszero(b))\n }\n }\n}\n" + }, + "@openzeppelin/contracts/utils/math/SignedMath.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/math/SignedMath.sol)\n\npragma solidity ^0.8.20;\n\nimport {SafeCast} from \"./SafeCast.sol\";\n\n/**\n * @dev Standard signed math utilities missing in the Solidity language.\n */\nlibrary SignedMath {\n /**\n * @dev Branchless ternary evaluation for `a ? b : c`. Gas costs are constant.\n *\n * IMPORTANT: This function may reduce bytecode size and consume less gas when used standalone.\n * However, the compiler may optimize Solidity ternary operations (i.e. `a ? b : c`) to only compute\n * one branch when needed, making this function more expensive.\n */\n function ternary(bool condition, int256 a, int256 b) internal pure returns (int256) {\n unchecked {\n // branchless ternary works because:\n // b ^ (a ^ b) == a\n // b ^ 0 == b\n return b ^ ((a ^ b) * int256(SafeCast.toUint(condition)));\n }\n }\n\n /**\n * @dev Returns the largest of two signed numbers.\n */\n function max(int256 a, int256 b) internal pure returns (int256) {\n return ternary(a > b, a, b);\n }\n\n /**\n * @dev Returns the smallest of two signed numbers.\n */\n function min(int256 a, int256 b) internal pure returns (int256) {\n return ternary(a < b, a, b);\n }\n\n /**\n * @dev Returns the average of two signed numbers without overflow.\n * The result is rounded towards zero.\n */\n function average(int256 a, int256 b) internal pure returns (int256) {\n // Formula from the book \"Hacker's Delight\"\n int256 x = (a & b) + ((a ^ b) >> 1);\n return x + (int256(uint256(x) >> 255) & (a ^ b));\n }\n\n /**\n * @dev Returns the absolute unsigned value of a signed value.\n */\n function abs(int256 n) internal pure returns (uint256) {\n unchecked {\n // Formula from the \"Bit Twiddling Hacks\" by Sean Eron Anderson.\n // Since `n` is a signed integer, the generated bytecode will use the SAR opcode to perform the right shift,\n // taking advantage of the most significant (or \"sign\" bit) in two's complement representation.\n // This opcode adds new most significant bits set to the value of the previous most significant bit. As a result,\n // the mask will either be `bytes32(0)` (if n is positive) or `~bytes32(0)` (if n is negative).\n int256 mask = n >> 255;\n\n // A `bytes32(0)` mask leaves the input unchanged, while a `~bytes32(0)` mask complements it.\n return uint256((n + mask) ^ mask);\n }\n }\n}\n" + }, + "@openzeppelin/contracts/utils/Bytes.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.6.0) (utils/Bytes.sol)\n\npragma solidity ^0.8.24;\n\nimport {Math} from \"./math/Math.sol\";\n\n/**\n * @dev Bytes operations.\n */\nlibrary Bytes {\n /**\n * @dev Forward search for `s` in `buffer`\n * * If `s` is present in the buffer, returns the index of the first instance\n * * If `s` is not present in the buffer, returns type(uint256).max\n *\n * NOTE: replicates the behavior of https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf[Javascript's `Array.indexOf`]\n */\n function indexOf(bytes memory buffer, bytes1 s) internal pure returns (uint256) {\n return indexOf(buffer, s, 0);\n }\n\n /**\n * @dev Forward search for `s` in `buffer` starting at position `pos`\n * * If `s` is present in the buffer (at or after `pos`), returns the index of the next instance\n * * If `s` is not present in the buffer (at or after `pos`), returns type(uint256).max\n *\n * NOTE: replicates the behavior of https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf[Javascript's `Array.indexOf`]\n */\n function indexOf(bytes memory buffer, bytes1 s, uint256 pos) internal pure returns (uint256) {\n uint256 length = buffer.length;\n for (uint256 i = pos; i < length; ++i) {\n if (bytes1(_unsafeReadBytesOffset(buffer, i)) == s) {\n return i;\n }\n }\n return type(uint256).max;\n }\n\n /**\n * @dev Backward search for `s` in `buffer`\n * * If `s` is present in the buffer, returns the index of the last instance\n * * If `s` is not present in the buffer, returns type(uint256).max\n *\n * NOTE: replicates the behavior of https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/lastIndexOf[Javascript's `Array.lastIndexOf`]\n */\n function lastIndexOf(bytes memory buffer, bytes1 s) internal pure returns (uint256) {\n return lastIndexOf(buffer, s, type(uint256).max);\n }\n\n /**\n * @dev Backward search for `s` in `buffer` starting at position `pos`\n * * If `s` is present in the buffer (at or before `pos`), returns the index of the previous instance\n * * If `s` is not present in the buffer (at or before `pos`), returns type(uint256).max\n *\n * NOTE: replicates the behavior of https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/lastIndexOf[Javascript's `Array.lastIndexOf`]\n */\n function lastIndexOf(bytes memory buffer, bytes1 s, uint256 pos) internal pure returns (uint256) {\n unchecked {\n uint256 length = buffer.length;\n for (uint256 i = Math.min(Math.saturatingAdd(pos, 1), length); i > 0; --i) {\n if (bytes1(_unsafeReadBytesOffset(buffer, i - 1)) == s) {\n return i - 1;\n }\n }\n return type(uint256).max;\n }\n }\n\n /**\n * @dev Copies the content of `buffer`, from `start` (included) to the end of `buffer` into a new bytes object in\n * memory.\n *\n * NOTE: replicates the behavior of https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice[Javascript's `Array.slice`]\n */\n function slice(bytes memory buffer, uint256 start) internal pure returns (bytes memory) {\n return slice(buffer, start, buffer.length);\n }\n\n /**\n * @dev Copies the content of `buffer`, from `start` (included) to `end` (excluded) into a new bytes object in\n * memory. The `end` argument is truncated to the length of the `buffer`.\n *\n * NOTE: replicates the behavior of https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice[Javascript's `Array.slice`]\n */\n function slice(bytes memory buffer, uint256 start, uint256 end) internal pure returns (bytes memory) {\n // sanitize\n end = Math.min(end, buffer.length);\n start = Math.min(start, end);\n\n // allocate and copy\n bytes memory result = new bytes(end - start);\n assembly (\"memory-safe\") {\n mcopy(add(result, 0x20), add(add(buffer, 0x20), start), sub(end, start))\n }\n\n return result;\n }\n\n /**\n * @dev Moves the content of `buffer`, from `start` (included) to the end of `buffer` to the start of that buffer,\n * and shrinks the buffer length accordingly, effectively overriding the content of buffer with buffer[start:].\n *\n * NOTE: This function modifies the provided buffer in place. If you need to preserve the original buffer, use {slice} instead\n */\n function splice(bytes memory buffer, uint256 start) internal pure returns (bytes memory) {\n return splice(buffer, start, buffer.length);\n }\n\n /**\n * @dev Moves the content of `buffer`, from `start` (included) to `end` (excluded) to the start of that buffer,\n * and shrinks the buffer length accordingly, effectively overriding the content of buffer with buffer[start:end].\n * The `end` argument is truncated to the length of the `buffer`.\n *\n * NOTE: This function modifies the provided buffer in place. If you need to preserve the original buffer, use {slice} instead\n */\n function splice(bytes memory buffer, uint256 start, uint256 end) internal pure returns (bytes memory) {\n // sanitize\n end = Math.min(end, buffer.length);\n start = Math.min(start, end);\n\n // move and resize\n assembly (\"memory-safe\") {\n mcopy(add(buffer, 0x20), add(add(buffer, 0x20), start), sub(end, start))\n mstore(buffer, sub(end, start))\n }\n\n return buffer;\n }\n\n /**\n * @dev Replaces bytes in `buffer` starting at `pos` with all bytes from `replacement`.\n *\n * Parameters are clamped to valid ranges (i.e. `pos` is clamped to `[0, buffer.length]`).\n * If `pos >= buffer.length`, no replacement occurs and the buffer is returned unchanged.\n *\n * NOTE: This function modifies the provided buffer in place.\n */\n function replace(bytes memory buffer, uint256 pos, bytes memory replacement) internal pure returns (bytes memory) {\n return replace(buffer, pos, replacement, 0, replacement.length);\n }\n\n /**\n * @dev Replaces bytes in `buffer` starting at `pos` with bytes from `replacement` starting at `offset`.\n * Copies at most `length` bytes from `replacement` to `buffer`.\n *\n * Parameters are clamped to valid ranges (i.e. `pos` is clamped to `[0, buffer.length]`, `offset` is\n * clamped to `[0, replacement.length]`, and `length` is clamped to `min(length, replacement.length - offset,\n * buffer.length - pos))`. If `pos >= buffer.length` or `offset >= replacement.length`, no replacement occurs\n * and the buffer is returned unchanged.\n *\n * NOTE: This function modifies the provided buffer in place.\n */\n function replace(\n bytes memory buffer,\n uint256 pos,\n bytes memory replacement,\n uint256 offset,\n uint256 length\n ) internal pure returns (bytes memory) {\n // sanitize\n pos = Math.min(pos, buffer.length);\n offset = Math.min(offset, replacement.length);\n length = Math.min(length, Math.min(replacement.length - offset, buffer.length - pos));\n\n // replace\n assembly (\"memory-safe\") {\n mcopy(add(add(buffer, 0x20), pos), add(add(replacement, 0x20), offset), length)\n }\n\n return buffer;\n }\n\n /**\n * @dev Concatenate an array of bytes into a single bytes object.\n *\n * For fixed bytes types, we recommend using the solidity built-in `bytes.concat` or (equivalent)\n * `abi.encodePacked`.\n *\n * NOTE: this could be done in assembly with a single loop that expands starting at the FMP, but that would be\n * significantly less readable. It might be worth benchmarking the savings of the full-assembly approach.\n */\n function concat(bytes[] memory buffers) internal pure returns (bytes memory) {\n uint256 length = 0;\n for (uint256 i = 0; i < buffers.length; ++i) {\n length += buffers[i].length;\n }\n\n bytes memory result = new bytes(length);\n\n uint256 offset = 0x20;\n for (uint256 i = 0; i < buffers.length; ++i) {\n bytes memory input = buffers[i];\n assembly (\"memory-safe\") {\n mcopy(add(result, offset), add(input, 0x20), mload(input))\n }\n unchecked {\n offset += input.length;\n }\n }\n\n return result;\n }\n\n /**\n * @dev Split each byte in `input` into two nibbles (4 bits each)\n *\n * Example: hex\"01234567\" → hex\"0001020304050607\"\n */\n function toNibbles(bytes memory input) internal pure returns (bytes memory output) {\n assembly (\"memory-safe\") {\n let length := mload(input)\n output := mload(0x40)\n mstore(0x40, add(add(output, 0x20), mul(length, 2)))\n mstore(output, mul(length, 2))\n for {\n let i := 0\n } lt(i, length) {\n i := add(i, 0x10)\n } {\n let chunk := shr(128, mload(add(add(input, 0x20), i)))\n chunk := and(\n 0x0000000000000000ffffffffffffffff0000000000000000ffffffffffffffff,\n or(shl(64, chunk), chunk)\n )\n chunk := and(\n 0x00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff,\n or(shl(32, chunk), chunk)\n )\n chunk := and(\n 0x0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff,\n or(shl(16, chunk), chunk)\n )\n chunk := and(\n 0x00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff,\n or(shl(8, chunk), chunk)\n )\n chunk := and(\n 0x0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f,\n or(shl(4, chunk), chunk)\n )\n mstore(add(add(output, 0x20), mul(i, 2)), chunk)\n }\n }\n }\n\n /**\n * @dev Returns true if the two byte buffers are equal.\n */\n function equal(bytes memory a, bytes memory b) internal pure returns (bool) {\n return a.length == b.length && keccak256(a) == keccak256(b);\n }\n\n /**\n * @dev Reverses the byte order of a bytes32 value, converting between little-endian and big-endian.\n * Inspired by https://graphics.stanford.edu/~seander/bithacks.html#ReverseParallel[Reverse Parallel]\n */\n function reverseBytes32(bytes32 value) internal pure returns (bytes32) {\n value = // swap bytes\n ((value >> 8) & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) |\n ((value & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) << 8);\n value = // swap 2-byte long pairs\n ((value >> 16) & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) |\n ((value & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) << 16);\n value = // swap 4-byte long pairs\n ((value >> 32) & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) |\n ((value & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) << 32);\n value = // swap 8-byte long pairs\n ((value >> 64) & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) |\n ((value & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) << 64);\n return (value >> 128) | (value << 128); // swap 16-byte long pairs\n }\n\n /// @dev Same as {reverseBytes32} but optimized for 128-bit values.\n function reverseBytes16(bytes16 value) internal pure returns (bytes16) {\n value = // swap bytes\n ((value & 0xFF00FF00FF00FF00FF00FF00FF00FF00) >> 8) |\n ((value & 0x00FF00FF00FF00FF00FF00FF00FF00FF) << 8);\n value = // swap 2-byte long pairs\n ((value & 0xFFFF0000FFFF0000FFFF0000FFFF0000) >> 16) |\n ((value & 0x0000FFFF0000FFFF0000FFFF0000FFFF) << 16);\n value = // swap 4-byte long pairs\n ((value & 0xFFFFFFFF00000000FFFFFFFF00000000) >> 32) |\n ((value & 0x00000000FFFFFFFF00000000FFFFFFFF) << 32);\n return (value >> 64) | (value << 64); // swap 8-byte long pairs\n }\n\n /// @dev Same as {reverseBytes32} but optimized for 64-bit values.\n function reverseBytes8(bytes8 value) internal pure returns (bytes8) {\n value = ((value & 0xFF00FF00FF00FF00) >> 8) | ((value & 0x00FF00FF00FF00FF) << 8); // swap bytes\n value = ((value & 0xFFFF0000FFFF0000) >> 16) | ((value & 0x0000FFFF0000FFFF) << 16); // swap 2-byte long pairs\n return (value >> 32) | (value << 32); // swap 4-byte long pairs\n }\n\n /// @dev Same as {reverseBytes32} but optimized for 32-bit values.\n function reverseBytes4(bytes4 value) internal pure returns (bytes4) {\n value = ((value & 0xFF00FF00) >> 8) | ((value & 0x00FF00FF) << 8); // swap bytes\n return (value >> 16) | (value << 16); // swap 2-byte long pairs\n }\n\n /// @dev Same as {reverseBytes32} but optimized for 16-bit values.\n function reverseBytes2(bytes2 value) internal pure returns (bytes2) {\n return (value >> 8) | (value << 8);\n }\n\n /**\n * @dev Counts the number of leading zero bits a bytes array. Returns `8 * buffer.length`\n * if the buffer is all zeros.\n */\n function clz(bytes memory buffer) internal pure returns (uint256) {\n for (uint256 i = 0; i < buffer.length; i += 0x20) {\n bytes32 chunk = _unsafeReadBytesOffset(buffer, i);\n if (chunk != bytes32(0)) {\n return Math.min(8 * i + Math.clz(uint256(chunk)), 8 * buffer.length);\n }\n }\n return 8 * buffer.length;\n }\n\n /**\n * @dev Reads a bytes32 from a bytes array without bounds checking.\n *\n * NOTE: making this function internal would mean it could be used with memory unsafe offset, and marking the\n * assembly block as such would prevent some optimizations.\n */\n function _unsafeReadBytesOffset(bytes memory buffer, uint256 offset) private pure returns (bytes32 value) {\n // This is not memory safe in the general case, but all calls to this private function are within bounds.\n assembly (\"memory-safe\") {\n value := mload(add(add(buffer, 0x20), offset))\n }\n }\n}\n" + }, + "@openzeppelin/contracts/utils/introspection/ERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (utils/introspection/ERC165.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC165} from \"./IERC165.sol\";\n\n/**\n * @dev Implementation of the {IERC165} interface.\n *\n * Contracts that want to implement ERC-165 should inherit from this contract and override {supportsInterface} to check\n * for the additional interface id that will be supported. For example:\n *\n * ```solidity\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\n * }\n * ```\n */\nabstract contract ERC165 is IERC165 {\n /// @inheritdoc IERC165\n function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) {\n return interfaceId == type(IERC165).interfaceId;\n }\n}\n" + }, + "@openzeppelin/contracts/token/common/ERC2981.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (token/common/ERC2981.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC2981} from \"../../interfaces/IERC2981.sol\";\nimport {IERC165, ERC165} from \"../../utils/introspection/ERC165.sol\";\n\n/**\n * @dev Implementation of the NFT Royalty Standard, a standardized way to retrieve royalty payment information.\n *\n * Royalty information can be specified globally for all token ids via {_setDefaultRoyalty}, and/or individually for\n * specific token ids via {_setTokenRoyalty}. The latter takes precedence over the first.\n *\n * Royalty is specified as a fraction of sale price. {_feeDenominator} is overridable but defaults to 10000, meaning the\n * fee is specified in basis points by default.\n *\n * IMPORTANT: ERC-2981 only specifies a way to signal royalty information and does not enforce its payment. See\n * https://eips.ethereum.org/EIPS/eip-2981#optional-royalty-payments[Rationale] in the ERC. Marketplaces are expected to\n * voluntarily pay royalties together with sales, but note that this standard is not yet widely supported.\n */\nabstract contract ERC2981 is IERC2981, ERC165 {\n struct RoyaltyInfo {\n address receiver;\n uint96 royaltyFraction;\n }\n\n RoyaltyInfo private _defaultRoyaltyInfo;\n mapping(uint256 tokenId => RoyaltyInfo) private _tokenRoyaltyInfo;\n\n /**\n * @dev The default royalty set is invalid (eg. (numerator / denominator) >= 1).\n */\n error ERC2981InvalidDefaultRoyalty(uint256 numerator, uint256 denominator);\n\n /**\n * @dev The default royalty receiver is invalid.\n */\n error ERC2981InvalidDefaultRoyaltyReceiver(address receiver);\n\n /**\n * @dev The royalty set for a specific `tokenId` is invalid (eg. (numerator / denominator) >= 1).\n */\n error ERC2981InvalidTokenRoyalty(uint256 tokenId, uint256 numerator, uint256 denominator);\n\n /**\n * @dev The royalty receiver for `tokenId` is invalid.\n */\n error ERC2981InvalidTokenRoyaltyReceiver(uint256 tokenId, address receiver);\n\n /// @inheritdoc IERC165\n function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC165) returns (bool) {\n return interfaceId == type(IERC2981).interfaceId || super.supportsInterface(interfaceId);\n }\n\n /// @inheritdoc IERC2981\n function royaltyInfo(\n uint256 tokenId,\n uint256 salePrice\n ) public view virtual returns (address receiver, uint256 amount) {\n RoyaltyInfo storage _royaltyInfo = _tokenRoyaltyInfo[tokenId];\n address royaltyReceiver = _royaltyInfo.receiver;\n uint96 royaltyFraction = _royaltyInfo.royaltyFraction;\n\n if (royaltyReceiver == address(0)) {\n royaltyReceiver = _defaultRoyaltyInfo.receiver;\n royaltyFraction = _defaultRoyaltyInfo.royaltyFraction;\n }\n\n uint256 royaltyAmount = (salePrice * royaltyFraction) / _feeDenominator();\n\n return (royaltyReceiver, royaltyAmount);\n }\n\n /**\n * @dev The denominator with which to interpret the fee set in {_setTokenRoyalty} and {_setDefaultRoyalty} as a\n * fraction of the sale price. Defaults to 10000 so fees are expressed in basis points, but may be customized by an\n * override.\n */\n function _feeDenominator() internal pure virtual returns (uint96) {\n return 10000;\n }\n\n /**\n * @dev Sets the royalty information that all ids in this contract will default to.\n *\n * Requirements:\n *\n * - `receiver` cannot be the zero address.\n * - `feeNumerator` cannot be greater than the fee denominator.\n */\n function _setDefaultRoyalty(address receiver, uint96 feeNumerator) internal virtual {\n uint256 denominator = _feeDenominator();\n if (feeNumerator > denominator) {\n // Royalty fee will exceed the sale price\n revert ERC2981InvalidDefaultRoyalty(feeNumerator, denominator);\n }\n if (receiver == address(0)) {\n revert ERC2981InvalidDefaultRoyaltyReceiver(address(0));\n }\n\n _defaultRoyaltyInfo = RoyaltyInfo(receiver, feeNumerator);\n }\n\n /**\n * @dev Removes default royalty information.\n */\n function _deleteDefaultRoyalty() internal virtual {\n delete _defaultRoyaltyInfo;\n }\n\n /**\n * @dev Sets the royalty information for a specific token id, overriding the global default.\n *\n * Requirements:\n *\n * - `receiver` cannot be the zero address.\n * - `feeNumerator` cannot be greater than the fee denominator.\n */\n function _setTokenRoyalty(uint256 tokenId, address receiver, uint96 feeNumerator) internal virtual {\n uint256 denominator = _feeDenominator();\n if (feeNumerator > denominator) {\n // Royalty fee will exceed the sale price\n revert ERC2981InvalidTokenRoyalty(tokenId, feeNumerator, denominator);\n }\n if (receiver == address(0)) {\n revert ERC2981InvalidTokenRoyaltyReceiver(tokenId, address(0));\n }\n\n _tokenRoyaltyInfo[tokenId] = RoyaltyInfo(receiver, feeNumerator);\n }\n\n /**\n * @dev Resets royalty information for the token id back to the global default.\n */\n function _resetTokenRoyalty(uint256 tokenId) internal virtual {\n delete _tokenRoyaltyInfo[tokenId];\n }\n}\n" + }, + "@openzeppelin/contracts/interfaces/IERC2981.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (interfaces/IERC2981.sol)\n\npragma solidity >=0.6.2;\n\nimport {IERC165} from \"../utils/introspection/IERC165.sol\";\n\n/**\n * @dev Interface for the NFT Royalty Standard.\n *\n * A standardized way to retrieve royalty payment information for non-fungible tokens (NFTs) to enable universal\n * support for royalty payments across all NFT marketplaces and ecosystem participants.\n */\ninterface IERC2981 is IERC165 {\n /**\n * @dev Returns how much royalty is owed and to whom, based on a sale price that may be denominated in any unit of\n * exchange. The royalty amount is denominated and should be paid in that same unit of exchange.\n *\n * NOTE: ERC-2981 allows setting the royalty to 100% of the price. In that case all the price would be sent to the\n * royalty receiver and 0 tokens to the seller. Contracts dealing with royalty should consider empty transfers.\n */\n function royaltyInfo(\n uint256 tokenId,\n uint256 salePrice\n ) external view returns (address receiver, uint256 royaltyAmount);\n}\n" + }, + "@openzeppelin/contracts/access/extensions/AccessControlDefaultAdminRules.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.6.0) (access/extensions/AccessControlDefaultAdminRules.sol)\n\npragma solidity ^0.8.20;\n\nimport {IAccessControlDefaultAdminRules} from \"./IAccessControlDefaultAdminRules.sol\";\nimport {AccessControl, IAccessControl} from \"../AccessControl.sol\";\nimport {SafeCast} from \"../../utils/math/SafeCast.sol\";\nimport {Math} from \"../../utils/math/Math.sol\";\nimport {IERC5313} from \"../../interfaces/IERC5313.sol\";\nimport {IERC165} from \"../../utils/introspection/IERC165.sol\";\n\n/**\n * @dev Extension of {AccessControl} that allows specifying special rules to manage\n * the `DEFAULT_ADMIN_ROLE` holder, which is a sensitive role with special permissions\n * over other roles that may potentially have privileged rights in the system.\n *\n * If a specific role doesn't have an admin role assigned, the holder of the\n * `DEFAULT_ADMIN_ROLE` will have the ability to grant it and revoke it.\n *\n * This contract implements the following risk mitigations on top of {AccessControl}:\n *\n * * Only one account holds the `DEFAULT_ADMIN_ROLE` since deployment until it's potentially renounced.\n * * Enforces a 2-step process to transfer the `DEFAULT_ADMIN_ROLE` to another account.\n * * Enforces a configurable delay between the two steps, with the ability to cancel before the transfer is accepted.\n * * The delay can be changed by scheduling, see {changeDefaultAdminDelay}.\n * * Role transfers must wait at least one block after scheduling before it can be accepted.\n * * It is not possible to use another role to manage the `DEFAULT_ADMIN_ROLE`.\n *\n * Example usage:\n *\n * ```solidity\n * contract MyToken is AccessControlDefaultAdminRules {\n * constructor() AccessControlDefaultAdminRules(\n * 3 days,\n * msg.sender // Explicit initial `DEFAULT_ADMIN_ROLE` holder\n * ) {}\n * }\n * ```\n */\nabstract contract AccessControlDefaultAdminRules is IAccessControlDefaultAdminRules, IERC5313, AccessControl {\n // pending admin pair read/written together frequently\n address private _pendingDefaultAdmin;\n uint48 private _pendingDefaultAdminSchedule; // 0 == unset\n\n uint48 private _currentDelay;\n address private _currentDefaultAdmin;\n\n // pending delay pair read/written together frequently\n uint48 private _pendingDelay;\n uint48 private _pendingDelaySchedule; // 0 == unset\n\n /**\n * @dev Sets the initial values for {defaultAdminDelay} and {defaultAdmin} address.\n */\n constructor(uint48 initialDelay, address initialDefaultAdmin) {\n if (initialDefaultAdmin == address(0)) {\n revert AccessControlInvalidDefaultAdmin(address(0));\n }\n _currentDelay = initialDelay;\n _grantRole(DEFAULT_ADMIN_ROLE, initialDefaultAdmin);\n }\n\n /// @inheritdoc IERC165\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return interfaceId == type(IAccessControlDefaultAdminRules).interfaceId || super.supportsInterface(interfaceId);\n }\n\n /// @inheritdoc IERC5313\n function owner() public view virtual returns (address) {\n return defaultAdmin();\n }\n\n ///\n /// Override AccessControl role management\n ///\n\n /**\n * @dev See {AccessControl-grantRole}. Reverts for `DEFAULT_ADMIN_ROLE`.\n */\n function grantRole(bytes32 role, address account) public virtual override(AccessControl, IAccessControl) {\n if (role == DEFAULT_ADMIN_ROLE) {\n revert AccessControlEnforcedDefaultAdminRules();\n }\n super.grantRole(role, account);\n }\n\n /**\n * @dev See {AccessControl-revokeRole}. Reverts for `DEFAULT_ADMIN_ROLE`.\n */\n function revokeRole(bytes32 role, address account) public virtual override(AccessControl, IAccessControl) {\n if (role == DEFAULT_ADMIN_ROLE) {\n revert AccessControlEnforcedDefaultAdminRules();\n }\n super.revokeRole(role, account);\n }\n\n /**\n * @dev See {AccessControl-renounceRole}.\n *\n * For the `DEFAULT_ADMIN_ROLE`, it only allows renouncing in two steps by first calling\n * {beginDefaultAdminTransfer} to the `address(0)`, so it's required that the {pendingDefaultAdmin} schedule\n * has also passed when calling this function.\n *\n * After its execution, it will not be possible to call `onlyRole(DEFAULT_ADMIN_ROLE)` functions.\n *\n * NOTE: Renouncing `DEFAULT_ADMIN_ROLE` will leave the contract without a {defaultAdmin},\n * thereby disabling any functionality that is only available for it, and the possibility of reassigning a\n * non-administrated role.\n */\n function renounceRole(bytes32 role, address account) public virtual override(AccessControl, IAccessControl) {\n if (role == DEFAULT_ADMIN_ROLE && account == defaultAdmin()) {\n (address newDefaultAdmin, uint48 schedule) = pendingDefaultAdmin();\n if (newDefaultAdmin != address(0) || !_isScheduleSet(schedule) || !_hasSchedulePassed(schedule)) {\n revert AccessControlEnforcedDefaultAdminDelay(schedule);\n }\n delete _pendingDefaultAdminSchedule;\n }\n super.renounceRole(role, account);\n }\n\n /**\n * @dev See {AccessControl-_grantRole}.\n *\n * For `DEFAULT_ADMIN_ROLE`, it only allows granting if there isn't already a {defaultAdmin} or if the\n * role has been previously renounced.\n *\n * NOTE: Exposing this function through another mechanism may make the `DEFAULT_ADMIN_ROLE`\n * assignable again. Make sure to guarantee this is the expected behavior in your implementation.\n */\n function _grantRole(bytes32 role, address account) internal virtual override returns (bool) {\n if (role == DEFAULT_ADMIN_ROLE) {\n if (defaultAdmin() != address(0)) {\n revert AccessControlEnforcedDefaultAdminRules();\n }\n _currentDefaultAdmin = account;\n }\n return super._grantRole(role, account);\n }\n\n /// @inheritdoc AccessControl\n function _revokeRole(bytes32 role, address account) internal virtual override returns (bool) {\n if (role == DEFAULT_ADMIN_ROLE && account == defaultAdmin()) {\n delete _currentDefaultAdmin;\n }\n return super._revokeRole(role, account);\n }\n\n /**\n * @dev See {AccessControl-_setRoleAdmin}. Reverts for `DEFAULT_ADMIN_ROLE`.\n */\n function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual override {\n if (role == DEFAULT_ADMIN_ROLE) {\n revert AccessControlEnforcedDefaultAdminRules();\n }\n super._setRoleAdmin(role, adminRole);\n }\n\n ///\n /// AccessControlDefaultAdminRules accessors\n ///\n\n /// @inheritdoc IAccessControlDefaultAdminRules\n function defaultAdmin() public view virtual returns (address) {\n return _currentDefaultAdmin;\n }\n\n /// @inheritdoc IAccessControlDefaultAdminRules\n function pendingDefaultAdmin() public view virtual returns (address newAdmin, uint48 schedule) {\n return (_pendingDefaultAdmin, _pendingDefaultAdminSchedule);\n }\n\n /// @inheritdoc IAccessControlDefaultAdminRules\n function defaultAdminDelay() public view virtual returns (uint48) {\n uint48 schedule = _pendingDelaySchedule;\n return (_isScheduleSet(schedule) && _hasSchedulePassed(schedule)) ? _pendingDelay : _currentDelay;\n }\n\n /// @inheritdoc IAccessControlDefaultAdminRules\n function pendingDefaultAdminDelay() public view virtual returns (uint48 newDelay, uint48 schedule) {\n schedule = _pendingDelaySchedule;\n return (_isScheduleSet(schedule) && !_hasSchedulePassed(schedule)) ? (_pendingDelay, schedule) : (0, 0);\n }\n\n /// @inheritdoc IAccessControlDefaultAdminRules\n function defaultAdminDelayIncreaseWait() public view virtual returns (uint48) {\n return 5 days;\n }\n\n ///\n /// AccessControlDefaultAdminRules public and internal setters for defaultAdmin/pendingDefaultAdmin\n ///\n\n /// @inheritdoc IAccessControlDefaultAdminRules\n function beginDefaultAdminTransfer(address newAdmin) public virtual onlyRole(DEFAULT_ADMIN_ROLE) {\n _beginDefaultAdminTransfer(newAdmin);\n }\n\n /**\n * @dev See {beginDefaultAdminTransfer}.\n *\n * Internal function without access restriction.\n */\n function _beginDefaultAdminTransfer(address newAdmin) internal virtual {\n uint48 newSchedule = SafeCast.toUint48(block.timestamp) + defaultAdminDelay();\n _setPendingDefaultAdmin(newAdmin, newSchedule);\n emit DefaultAdminTransferScheduled(newAdmin, newSchedule);\n }\n\n /// @inheritdoc IAccessControlDefaultAdminRules\n function cancelDefaultAdminTransfer() public virtual onlyRole(DEFAULT_ADMIN_ROLE) {\n _cancelDefaultAdminTransfer();\n }\n\n /**\n * @dev See {cancelDefaultAdminTransfer}.\n *\n * Internal function without access restriction.\n */\n function _cancelDefaultAdminTransfer() internal virtual {\n _setPendingDefaultAdmin(address(0), 0);\n }\n\n /// @inheritdoc IAccessControlDefaultAdminRules\n function acceptDefaultAdminTransfer() public virtual {\n (address newDefaultAdmin, ) = pendingDefaultAdmin();\n if (_msgSender() != newDefaultAdmin) {\n // Enforce newDefaultAdmin explicit acceptance.\n revert AccessControlInvalidDefaultAdmin(_msgSender());\n }\n _acceptDefaultAdminTransfer();\n }\n\n /**\n * @dev See {acceptDefaultAdminTransfer}.\n *\n * Internal function without access restriction.\n */\n function _acceptDefaultAdminTransfer() internal virtual {\n (address newAdmin, uint48 schedule) = pendingDefaultAdmin();\n if (!_isScheduleSet(schedule) || !_hasSchedulePassed(schedule)) {\n revert AccessControlEnforcedDefaultAdminDelay(schedule);\n }\n _revokeRole(DEFAULT_ADMIN_ROLE, defaultAdmin());\n _grantRole(DEFAULT_ADMIN_ROLE, newAdmin);\n delete _pendingDefaultAdmin;\n delete _pendingDefaultAdminSchedule;\n }\n\n ///\n /// AccessControlDefaultAdminRules public and internal setters for defaultAdminDelay/pendingDefaultAdminDelay\n ///\n\n /// @inheritdoc IAccessControlDefaultAdminRules\n function changeDefaultAdminDelay(uint48 newDelay) public virtual onlyRole(DEFAULT_ADMIN_ROLE) {\n _changeDefaultAdminDelay(newDelay);\n }\n\n /**\n * @dev See {changeDefaultAdminDelay}.\n *\n * Internal function without access restriction.\n */\n function _changeDefaultAdminDelay(uint48 newDelay) internal virtual {\n uint48 newSchedule = SafeCast.toUint48(block.timestamp) + _delayChangeWait(newDelay);\n _setPendingDelay(newDelay, newSchedule);\n emit DefaultAdminDelayChangeScheduled(newDelay, newSchedule);\n }\n\n /// @inheritdoc IAccessControlDefaultAdminRules\n function rollbackDefaultAdminDelay() public virtual onlyRole(DEFAULT_ADMIN_ROLE) {\n _rollbackDefaultAdminDelay();\n }\n\n /**\n * @dev See {rollbackDefaultAdminDelay}.\n *\n * Internal function without access restriction.\n */\n function _rollbackDefaultAdminDelay() internal virtual {\n _setPendingDelay(0, 0);\n }\n\n /**\n * @dev Returns the amount of seconds to wait after the `newDelay` will\n * become the new {defaultAdminDelay}.\n *\n * The value returned guarantees that if the delay is reduced, it will go into effect\n * after a wait that honors the previously set delay.\n *\n * See {defaultAdminDelayIncreaseWait}.\n */\n function _delayChangeWait(uint48 newDelay) internal view virtual returns (uint48) {\n uint48 currentDelay = defaultAdminDelay();\n\n // When increasing the delay, we schedule the delay change to occur after a period of \"new delay\" has passed, up\n // to a maximum given by defaultAdminDelayIncreaseWait, by default 5 days. For example, if increasing from 1 day\n // to 3 days, the new delay will come into effect after 3 days. If increasing from 1 day to 10 days, the new\n // delay will come into effect after 5 days. The 5 day wait period is intended to be able to fix an error like\n // using milliseconds instead of seconds.\n //\n // When decreasing the delay, we wait the difference between \"current delay\" and \"new delay\". This guarantees\n // that an admin transfer cannot be made faster than \"current delay\" at the time the delay change is scheduled.\n // For example, if decreasing from 10 days to 3 days, the new delay will come into effect after 7 days.\n return\n newDelay > currentDelay\n ? uint48(Math.min(newDelay, defaultAdminDelayIncreaseWait())) // no need to safecast, both inputs are uint48\n : currentDelay - newDelay;\n }\n\n ///\n /// Private setters\n ///\n\n /**\n * @dev Setter of the tuple for pending admin and its schedule.\n *\n * May emit a {DefaultAdminTransferCanceled} event.\n */\n function _setPendingDefaultAdmin(address newAdmin, uint48 newSchedule) private {\n (, uint48 oldSchedule) = pendingDefaultAdmin();\n\n _pendingDefaultAdmin = newAdmin;\n _pendingDefaultAdminSchedule = newSchedule;\n\n // An `oldSchedule` from `pendingDefaultAdmin()` is only set if it hasn't been accepted.\n if (_isScheduleSet(oldSchedule)) {\n // Emit for implicit cancellations when another default admin was scheduled.\n emit DefaultAdminTransferCanceled();\n }\n }\n\n /**\n * @dev Setter of the tuple for pending delay and its schedule.\n *\n * May emit a {DefaultAdminDelayChangeCanceled} event.\n */\n function _setPendingDelay(uint48 newDelay, uint48 newSchedule) private {\n uint48 oldSchedule = _pendingDelaySchedule;\n\n if (_isScheduleSet(oldSchedule)) {\n if (_hasSchedulePassed(oldSchedule)) {\n // Materialize a virtual delay\n _currentDelay = _pendingDelay;\n } else {\n // Emit for implicit cancellations when another delay was scheduled.\n emit DefaultAdminDelayChangeCanceled();\n }\n }\n\n _pendingDelay = newDelay;\n _pendingDelaySchedule = newSchedule;\n }\n\n ///\n /// Private helpers\n ///\n\n /**\n * @dev Defines if a `schedule` is considered set. For consistency purposes.\n */\n function _isScheduleSet(uint48 schedule) private pure returns (bool) {\n return schedule != 0;\n }\n\n /**\n * @dev Defines if a `schedule` is considered passed. For consistency purposes.\n */\n function _hasSchedulePassed(uint48 schedule) private view returns (bool) {\n return schedule < block.timestamp;\n }\n}\n" + }, + "@openzeppelin/contracts/access/extensions/IAccessControlDefaultAdminRules.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.6.0) (access/extensions/IAccessControlDefaultAdminRules.sol)\n\npragma solidity >=0.8.4;\n\nimport {IAccessControl} from \"../IAccessControl.sol\";\n\n/**\n * @dev External interface of AccessControlDefaultAdminRules declared to support ERC-165 detection.\n */\ninterface IAccessControlDefaultAdminRules is IAccessControl {\n /**\n * @dev The new default admin is not a valid default admin.\n */\n error AccessControlInvalidDefaultAdmin(address defaultAdmin);\n\n /**\n * @dev At least one of the following rules was violated:\n *\n * - The `DEFAULT_ADMIN_ROLE` must only be managed by itself.\n * - The `DEFAULT_ADMIN_ROLE` must only be held by one account at the time.\n * - Any `DEFAULT_ADMIN_ROLE` transfer must be in two delayed steps.\n */\n error AccessControlEnforcedDefaultAdminRules();\n\n /**\n * @dev The delay for transferring the default admin delay is enforced and\n * the operation must wait until `schedule`.\n *\n * NOTE: `schedule` can be 0 indicating there's no transfer scheduled.\n */\n error AccessControlEnforcedDefaultAdminDelay(uint48 schedule);\n\n /**\n * @dev Emitted when a {defaultAdmin} transfer is started, setting `newAdmin` as the next\n * address to become the {defaultAdmin} by calling {acceptDefaultAdminTransfer} only after `acceptSchedule`\n * passes.\n */\n event DefaultAdminTransferScheduled(address indexed newAdmin, uint48 acceptSchedule);\n\n /**\n * @dev Emitted when a {pendingDefaultAdmin} is reset if it was never accepted, regardless of its schedule.\n */\n event DefaultAdminTransferCanceled();\n\n /**\n * @dev Emitted when a {defaultAdminDelay} change is started, setting `newDelay` as the next\n * delay to be applied between default admin transfer after `effectSchedule` has passed.\n */\n event DefaultAdminDelayChangeScheduled(uint48 newDelay, uint48 effectSchedule);\n\n /**\n * @dev Emitted when a {pendingDefaultAdminDelay} is reset if its schedule didn't pass.\n */\n event DefaultAdminDelayChangeCanceled();\n\n /**\n * @dev Returns the address of the current `DEFAULT_ADMIN_ROLE` holder.\n */\n function defaultAdmin() external view returns (address);\n\n /**\n * @dev Returns a tuple of a `newAdmin` and an accept schedule.\n *\n * After the `schedule` passes, the `newAdmin` will be able to accept the {defaultAdmin} role\n * by calling {acceptDefaultAdminTransfer}, completing the role transfer.\n *\n * A zero value only in `acceptSchedule` indicates no pending admin transfer.\n *\n * NOTE: A zero address `newAdmin` means that {defaultAdmin} is being renounced.\n */\n function pendingDefaultAdmin() external view returns (address newAdmin, uint48 acceptSchedule);\n\n /**\n * @dev Returns the delay required to schedule the acceptance of a {defaultAdmin} transfer started.\n *\n * This delay will be added to the current timestamp when calling {beginDefaultAdminTransfer} to set\n * the acceptance schedule.\n *\n * NOTE: If a delay change has been scheduled, it will take effect as soon as the schedule passes, making this\n * function returns the new delay. See {changeDefaultAdminDelay}.\n */\n function defaultAdminDelay() external view returns (uint48);\n\n /**\n * @dev Returns a tuple of `newDelay` and an effect schedule.\n *\n * After the `schedule` passes, the `newDelay` will get into effect immediately for every\n * new {defaultAdmin} transfer started with {beginDefaultAdminTransfer}.\n *\n * A zero value only in `effectSchedule` indicates no pending delay change.\n *\n * NOTE: A zero value only for `newDelay` means that the next {defaultAdminDelay}\n * will be zero after the effect schedule.\n */\n function pendingDefaultAdminDelay() external view returns (uint48 newDelay, uint48 effectSchedule);\n\n /**\n * @dev Starts a {defaultAdmin} transfer by setting a {pendingDefaultAdmin} scheduled for acceptance\n * after the current timestamp plus a {defaultAdminDelay}.\n *\n * Requirements:\n *\n * - Only can be called by the current {defaultAdmin}.\n *\n * Emits a {DefaultAdminTransferScheduled} event.\n */\n function beginDefaultAdminTransfer(address newAdmin) external;\n\n /**\n * @dev Cancels a {defaultAdmin} transfer previously started with {beginDefaultAdminTransfer}.\n *\n * A {pendingDefaultAdmin} not yet accepted can also be cancelled with this function.\n *\n * Requirements:\n *\n * - Only can be called by the current {defaultAdmin}.\n *\n * May emit a {DefaultAdminTransferCanceled} event.\n */\n function cancelDefaultAdminTransfer() external;\n\n /**\n * @dev Completes a {defaultAdmin} transfer previously started with {beginDefaultAdminTransfer}.\n *\n * After calling the function:\n *\n * - `DEFAULT_ADMIN_ROLE` should be granted to the caller.\n * - `DEFAULT_ADMIN_ROLE` should be revoked from the previous holder.\n * - {pendingDefaultAdmin} should be reset to zero values.\n *\n * Requirements:\n *\n * - Only can be called by the {pendingDefaultAdmin}'s `newAdmin`.\n * - The {pendingDefaultAdmin}'s `acceptSchedule` should've passed.\n */\n function acceptDefaultAdminTransfer() external;\n\n /**\n * @dev Initiates a {defaultAdminDelay} update by setting a {pendingDefaultAdminDelay} scheduled for getting\n * into effect after the current timestamp plus a {defaultAdminDelay}.\n *\n * This function guarantees that any call to {beginDefaultAdminTransfer} done between the timestamp this\n * method is called and the {pendingDefaultAdminDelay} effect schedule will use the current {defaultAdminDelay}\n * set before calling.\n *\n * The {pendingDefaultAdminDelay}'s effect schedule is defined in a way that waiting until the schedule and then\n * calling {beginDefaultAdminTransfer} with the new delay will take at least the same as another {defaultAdmin}\n * complete transfer (including acceptance).\n *\n * The schedule is designed for two scenarios:\n *\n * - When the delay is changed for a larger one the schedule is `block.timestamp + newDelay` capped by\n * {defaultAdminDelayIncreaseWait}.\n * - When the delay is changed for a shorter one, the schedule is `block.timestamp + (current delay - new delay)`.\n *\n * A {pendingDefaultAdminDelay} that never got into effect will be canceled in favor of a new scheduled change.\n *\n * Requirements:\n *\n * - Only can be called by the current {defaultAdmin}.\n *\n * Emits a {DefaultAdminDelayChangeScheduled} event and may emit a {DefaultAdminDelayChangeCanceled} event.\n */\n function changeDefaultAdminDelay(uint48 newDelay) external;\n\n /**\n * @dev Cancels a scheduled {defaultAdminDelay} change.\n *\n * Requirements:\n *\n * - Only can be called by the current {defaultAdmin}.\n *\n * May emit a {DefaultAdminDelayChangeCanceled} event.\n */\n function rollbackDefaultAdminDelay() external;\n\n /**\n * @dev Maximum time in seconds for an increase to {defaultAdminDelay} (that is scheduled using {changeDefaultAdminDelay})\n * to take effect. Default to 5 days.\n *\n * When the {defaultAdminDelay} is scheduled to be increased, it goes into effect after the new delay has passed with\n * the purpose of giving enough time for reverting any accidental change (i.e. using milliseconds instead of seconds)\n * that may lock the contract. However, to avoid excessive schedules, the wait is capped by this function and it can\n * be overridden for a custom {defaultAdminDelay} increase scheduling.\n *\n * IMPORTANT: Make sure to add a reasonable amount of time while overriding this value, otherwise,\n * there's a risk of setting a high new delay that goes into effect almost immediately without the\n * possibility of human intervention in the case of an input error (eg. set milliseconds instead of seconds).\n */\n function defaultAdminDelayIncreaseWait() external view returns (uint48);\n}\n" + }, + "@openzeppelin/contracts/access/IAccessControl.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (access/IAccessControl.sol)\n\npragma solidity >=0.8.4;\n\n/**\n * @dev External interface of AccessControl declared to support ERC-165 detection.\n */\ninterface IAccessControl {\n /**\n * @dev The `account` is missing a role.\n */\n error AccessControlUnauthorizedAccount(address account, bytes32 neededRole);\n\n /**\n * @dev The caller of a function is not the expected one.\n *\n * NOTE: Don't confuse with {AccessControlUnauthorizedAccount}.\n */\n error AccessControlBadConfirmation();\n\n /**\n * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\n *\n * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\n * {RoleAdminChanged} not being emitted to signal this.\n */\n event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);\n\n /**\n * @dev Emitted when `account` is granted `role`.\n *\n * `sender` is the account that originated the contract call. This account bears the admin role (for the granted role).\n * Expected in cases where the role was granted using the internal {AccessControl-_grantRole}.\n */\n event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\n\n /**\n * @dev Emitted when `account` is revoked `role`.\n *\n * `sender` is the account that originated the contract call:\n * - if using `revokeRole`, it is the admin role bearer\n * - if using `renounceRole`, it is the role bearer (i.e. `account`)\n */\n event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\n\n /**\n * @dev Returns `true` if `account` has been granted `role`.\n */\n function hasRole(bytes32 role, address account) external view returns (bool);\n\n /**\n * @dev Returns the admin role that controls `role`. See {grantRole} and\n * {revokeRole}.\n *\n * To change a role's admin, use {AccessControl-_setRoleAdmin}.\n */\n function getRoleAdmin(bytes32 role) external view returns (bytes32);\n\n /**\n * @dev Grants `role` to `account`.\n *\n * If `account` had not been already granted `role`, emits a {RoleGranted}\n * event.\n *\n * Requirements:\n *\n * - the caller must have ``role``'s admin role.\n */\n function grantRole(bytes32 role, address account) external;\n\n /**\n * @dev Revokes `role` from `account`.\n *\n * If `account` had been granted `role`, emits a {RoleRevoked} event.\n *\n * Requirements:\n *\n * - the caller must have ``role``'s admin role.\n */\n function revokeRole(bytes32 role, address account) external;\n\n /**\n * @dev Revokes `role` from the calling account.\n *\n * Roles are often managed via {grantRole} and {revokeRole}: this function's\n * purpose is to provide a mechanism for accounts to lose their privileges\n * if they are compromised (such as when a trusted device is misplaced).\n *\n * If the calling account had been granted `role`, emits a {RoleRevoked}\n * event.\n *\n * Requirements:\n *\n * - the caller must be `callerConfirmation`.\n */\n function renounceRole(bytes32 role, address callerConfirmation) external;\n}\n" + }, + "@openzeppelin/contracts/access/AccessControl.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.6.0) (access/AccessControl.sol)\n\npragma solidity ^0.8.20;\n\nimport {IAccessControl} from \"./IAccessControl.sol\";\nimport {Context} from \"../utils/Context.sol\";\nimport {ERC165} from \"../utils/introspection/ERC165.sol\";\n\n/**\n * @dev Contract module that allows children to implement role-based access\n * control mechanisms. This is a lightweight version that doesn't allow enumerating role\n * members except through off-chain means by accessing the contract event logs. Some\n * applications may benefit from on-chain enumerability, for those cases see\n * {AccessControlEnumerable}.\n *\n * Roles are referred to by their `bytes32` identifier. These should be exposed\n * in the external API and be unique. The best way to achieve this is by\n * using `public constant` hash digests:\n *\n * ```solidity\n * bytes32 public constant MY_ROLE = keccak256(\"MY_ROLE\");\n * ```\n *\n * Roles can be used to represent a set of permissions. To restrict access to a\n * function call, use {hasRole}:\n *\n * ```solidity\n * function foo() public {\n * require(hasRole(MY_ROLE, msg.sender));\n * ...\n * }\n * ```\n *\n * Roles can be granted and revoked dynamically via the {grantRole} and\n * {revokeRole} functions. Each role has an associated admin role, and only\n * accounts that have a role's admin role can call {grantRole} and {revokeRole}.\n *\n * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means\n * that only accounts with this role will be able to grant or revoke other\n * roles. More complex role relationships can be created by using\n * {_setRoleAdmin}.\n *\n * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to\n * grant and revoke this role. Extra precautions should be taken to secure\n * accounts that have been granted it. We recommend using {AccessControlDefaultAdminRules}\n * to enforce additional security measures for this role.\n */\nabstract contract AccessControl is Context, IAccessControl, ERC165 {\n struct RoleData {\n mapping(address account => bool) hasRole;\n bytes32 adminRole;\n }\n\n mapping(bytes32 role => RoleData) private _roles;\n\n bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;\n\n /**\n * @dev Modifier that checks that an account has a specific role. Reverts\n * with an {AccessControlUnauthorizedAccount} error including the required role.\n */\n modifier onlyRole(bytes32 role) {\n _checkRole(role);\n _;\n }\n\n /// @inheritdoc ERC165\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId);\n }\n\n /**\n * @dev Returns `true` if `account` has been granted `role`.\n */\n function hasRole(bytes32 role, address account) public view virtual returns (bool) {\n return _roles[role].hasRole[account];\n }\n\n /**\n * @dev Reverts with an {AccessControlUnauthorizedAccount} error if `_msgSender()`\n * is missing `role`. Overriding this function changes the behavior of the {onlyRole} modifier.\n */\n function _checkRole(bytes32 role) internal view virtual {\n _checkRole(role, _msgSender());\n }\n\n /**\n * @dev Reverts with an {AccessControlUnauthorizedAccount} error if `account`\n * is missing `role`.\n */\n function _checkRole(bytes32 role, address account) internal view virtual {\n if (!hasRole(role, account)) {\n revert AccessControlUnauthorizedAccount(account, role);\n }\n }\n\n /**\n * @dev Returns the admin role that controls `role`. See {grantRole} and\n * {revokeRole}.\n *\n * To change a role's admin, use {_setRoleAdmin}.\n */\n function getRoleAdmin(bytes32 role) public view virtual returns (bytes32) {\n return _roles[role].adminRole;\n }\n\n /**\n * @dev Grants `role` to `account`.\n *\n * If `account` had not been already granted `role`, emits a {RoleGranted}\n * event.\n *\n * Requirements:\n *\n * - the caller must have ``role``'s admin role.\n *\n * May emit a {RoleGranted} event.\n */\n function grantRole(bytes32 role, address account) public virtual onlyRole(getRoleAdmin(role)) {\n _grantRole(role, account);\n }\n\n /**\n * @dev Revokes `role` from `account`.\n *\n * If `account` had been granted `role`, emits a {RoleRevoked} event.\n *\n * Requirements:\n *\n * - the caller must have ``role``'s admin role.\n *\n * May emit a {RoleRevoked} event.\n */\n function revokeRole(bytes32 role, address account) public virtual onlyRole(getRoleAdmin(role)) {\n _revokeRole(role, account);\n }\n\n /**\n * @dev Revokes `role` from the calling account.\n *\n * Roles are often managed via {grantRole} and {revokeRole}: this function's\n * purpose is to provide a mechanism for accounts to lose their privileges\n * if they are compromised (such as when a trusted device is misplaced).\n *\n * If the calling account had been revoked `role`, emits a {RoleRevoked}\n * event.\n *\n * Requirements:\n *\n * - the caller must be `callerConfirmation`.\n *\n * May emit a {RoleRevoked} event.\n */\n function renounceRole(bytes32 role, address callerConfirmation) public virtual {\n if (callerConfirmation != _msgSender()) {\n revert AccessControlBadConfirmation();\n }\n\n _revokeRole(role, callerConfirmation);\n }\n\n /**\n * @dev Sets `adminRole` as ``role``'s admin role.\n *\n * Emits a {RoleAdminChanged} event.\n */\n function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {\n bytes32 previousAdminRole = getRoleAdmin(role);\n _roles[role].adminRole = adminRole;\n emit RoleAdminChanged(role, previousAdminRole, adminRole);\n }\n\n /**\n * @dev Attempts to grant `role` to `account` and returns a boolean indicating if `role` was granted.\n *\n * Internal function without access restriction.\n *\n * May emit a {RoleGranted} event.\n */\n function _grantRole(bytes32 role, address account) internal virtual returns (bool) {\n if (!hasRole(role, account)) {\n _roles[role].hasRole[account] = true;\n emit RoleGranted(role, account, _msgSender());\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * @dev Attempts to revoke `role` from `account` and returns a boolean indicating if `role` was revoked.\n *\n * Internal function without access restriction.\n *\n * May emit a {RoleRevoked} event.\n */\n function _revokeRole(bytes32 role, address account) internal virtual returns (bool) {\n if (hasRole(role, account)) {\n _roles[role].hasRole[account] = false;\n emit RoleRevoked(role, account, _msgSender());\n return true;\n } else {\n return false;\n }\n }\n}\n" + }, + "@openzeppelin/contracts/interfaces/IERC5313.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (interfaces/IERC5313.sol)\n\npragma solidity >=0.4.16;\n\n/**\n * @dev Interface for the Light Contract Ownership Standard.\n *\n * A standardized minimal interface required to identify an account that controls a contract\n */\ninterface IERC5313 {\n /**\n * @dev Gets the address of the owner.\n */\n function owner() external view returns (address);\n}\n" + }, + "@openzeppelin/contracts/utils/Pausable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.3.0) (utils/Pausable.sol)\n\npragma solidity ^0.8.20;\n\nimport {Context} from \"../utils/Context.sol\";\n\n/**\n * @dev Contract module which allows children to implement an emergency stop\n * mechanism that can be triggered by an authorized account.\n *\n * This module is used through inheritance. It will make available the\n * modifiers `whenNotPaused` and `whenPaused`, which can be applied to\n * the functions of your contract. Note that they will not be pausable by\n * simply including this module, only once the modifiers are put in place.\n */\nabstract contract Pausable is Context {\n bool private _paused;\n\n /**\n * @dev Emitted when the pause is triggered by `account`.\n */\n event Paused(address account);\n\n /**\n * @dev Emitted when the pause is lifted by `account`.\n */\n event Unpaused(address account);\n\n /**\n * @dev The operation failed because the contract is paused.\n */\n error EnforcedPause();\n\n /**\n * @dev The operation failed because the contract is not paused.\n */\n error ExpectedPause();\n\n /**\n * @dev Modifier to make a function callable only when the contract is not paused.\n *\n * Requirements:\n *\n * - The contract must not be paused.\n */\n modifier whenNotPaused() {\n _requireNotPaused();\n _;\n }\n\n /**\n * @dev Modifier to make a function callable only when the contract is paused.\n *\n * Requirements:\n *\n * - The contract must be paused.\n */\n modifier whenPaused() {\n _requirePaused();\n _;\n }\n\n /**\n * @dev Returns true if the contract is paused, and false otherwise.\n */\n function paused() public view virtual returns (bool) {\n return _paused;\n }\n\n /**\n * @dev Throws if the contract is paused.\n */\n function _requireNotPaused() internal view virtual {\n if (paused()) {\n revert EnforcedPause();\n }\n }\n\n /**\n * @dev Throws if the contract is not paused.\n */\n function _requirePaused() internal view virtual {\n if (!paused()) {\n revert ExpectedPause();\n }\n }\n\n /**\n * @dev Triggers stopped state.\n *\n * Requirements:\n *\n * - The contract must not be paused.\n */\n function _pause() internal virtual whenNotPaused {\n _paused = true;\n emit Paused(_msgSender());\n }\n\n /**\n * @dev Returns to normal state.\n *\n * Requirements:\n *\n * - The contract must be paused.\n */\n function _unpause() internal virtual whenPaused {\n _paused = false;\n emit Unpaused(_msgSender());\n }\n}\n" + }, + "contracts/TricksforBoosterStaking.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.26;\n\nimport \"@openzeppelin/contracts/token/ERC721/IERC721.sol\";\nimport \"@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol\";\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\nimport \"@openzeppelin/contracts/access/Ownable2Step.sol\";\nimport \"@openzeppelin/contracts/utils/ReentrancyGuard.sol\";\nimport \"@openzeppelin/contracts/utils/Pausable.sol\";\n\n/// @title TricksforBoosterStaking\n/// @notice Custodial staking contract for Tricksfor Booster NFTs.\n/// Players transfer their NFTs into this contract to stake them and retrieve\n/// them when they unstake. Staking state and timestamps are recorded on-chain\n/// via integration-critical events consumed by the Tricksfor backend indexer.\n///\n/// Responsibilities:\n/// - Accepting NFT custody during staking\n/// - Emitting TokenStaked / TokenUnstaked events for backend log processing\n/// - Providing read methods (isStaked, stakedOwnerOf) consistent with event state\n///\n/// Not responsible for:\n/// - Reward calculation or distribution\n/// - Booster tier or multiplier classification\n/// - Game logic or settlement\n///\n/// @dev Pause gates new staking only. Unstaking is always available so players can\n/// always recover their assets. emergencyWithdraw is an explicit, named, and\n/// event-emitting admin path — it is not hidden.\ncontract TricksforBoosterStaking is Ownable2Step, ReentrancyGuard, Pausable, IERC721Receiver {\n // -------------------------------------------------------------------------\n // Errors\n // -------------------------------------------------------------------------\n\n /// @notice Caller does not own the token they are trying to stake.\n error NotTokenOwner();\n\n /// @notice Token is already staked.\n error TokenAlreadyStaked();\n\n /// @notice Token is not currently staked.\n error TokenNotStaked();\n\n /// @notice Caller is not the original staker of this token.\n error NotOriginalStaker();\n\n /// @notice Zero address supplied where a non-zero address is required.\n error ZeroAddress();\n\n /// @notice Token received from an unsupported NFT contract.\n error UnsupportedNFTContract();\n\n /// @notice Emergency withdrawals can only return a tracked token to its original staker.\n error InvalidEmergencyRecipient();\n\n /// @notice Rescue is only available for tokens that have no staking record.\n error TokenIsTracked();\n\n /// @notice Rescue requires the staking contract to currently hold the token.\n error TokenNotHeld();\n\n // -------------------------------------------------------------------------\n // Events (integration-critical — do not rename, reorder, or re-index)\n // -------------------------------------------------------------------------\n\n /// @notice Emitted when a token is successfully staked.\n /// @param staker The wallet address that owns and staked the token.\n /// @param tokenId The staked NFT token ID.\n /// @param stakedAt Block timestamp at the moment of staking.\n event TokenStaked(address indexed staker, uint256 indexed tokenId, uint256 stakedAt);\n\n /// @notice Emitted when a token is successfully unstaked.\n /// @param staker The wallet address that originally staked (and receives back) the token.\n /// @param tokenId The unstaked NFT token ID.\n /// @param unstakedAt Block timestamp at the moment of unstaking.\n event TokenUnstaked(address indexed staker, uint256 indexed tokenId, uint256 unstakedAt);\n\n /// @notice Emitted when an owner-initiated emergency withdrawal occurs.\n /// This is the only admin path that moves a user's staked NFT without their consent.\n /// It is explicitly named, event-emitting, and documented here.\n /// @param originalStaker The wallet that originally staked the token.\n /// @param tokenId The affected NFT token ID.\n /// @param recipient The address that received the token.\n /// @param withdrawnAt Block timestamp at the moment of the withdrawal.\n event EmergencyWithdrawn(\n address indexed originalStaker,\n uint256 indexed tokenId,\n address indexed recipient,\n uint256 withdrawnAt\n );\n\n /// @notice Emitted when an untracked NFT sent with transferFrom is recovered by the owner.\n event UntrackedTokenRescued(address indexed recipient, uint256 indexed tokenId, uint256 rescuedAt);\n\n // -------------------------------------------------------------------------\n // State\n // -------------------------------------------------------------------------\n\n /// @notice The ERC-721 NFT contract whose tokens this staking contract manages.\n IERC721 public immutable nftContract;\n\n /// @dev Maps tokenId → original staker address. Zero address means not staked.\n mapping(uint256 => address) private _stakedBy;\n\n /// @dev Maps tokenId → block.timestamp at which the token was staked.\n mapping(uint256 => uint256) private _stakedAt;\n\n /// @dev Maps staker address → list of currently staked token IDs.\n mapping(address => uint256[]) private _walletTokenIds;\n\n /// @dev Maps tokenId → index in _walletTokenIds[staker] for O(1) removal.\n mapping(uint256 => uint256) private _walletTokenIndex;\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n /// @param nftContract_ Address of the TricksforBoosterNFT contract.\n /// @param initialOwner_ Initial contract owner. Mainnet deployments should use a multisig.\n constructor(address nftContract_, address initialOwner_) Ownable(initialOwner_) {\n if (nftContract_ == address(0) || initialOwner_ == address(0)) revert ZeroAddress();\n nftContract = IERC721(nftContract_);\n }\n\n // -------------------------------------------------------------------------\n // Staking\n // -------------------------------------------------------------------------\n\n /// @notice Stakes a Booster NFT. The caller must have first approved this contract\n /// (or set approval for all) on the NFT contract.\n /// Custody of the token is transferred to this contract.\n /// @param tokenId The token ID to stake.\n function stake(uint256 tokenId) external nonReentrant whenNotPaused {\n address caller = msg.sender;\n if (_stakedBy[tokenId] != address(0)) revert TokenAlreadyStaked();\n if (nftContract.ownerOf(tokenId) != caller) revert NotTokenOwner();\n\n _recordStake(caller, tokenId);\n nftContract.transferFrom(caller, address(this), tokenId);\n\n emit TokenStaked(caller, tokenId, block.timestamp);\n }\n\n /// @notice Handles the receipt of a Booster NFT transferred via safeTransferFrom.\n /// Only accepts tokens from the configured nftContract; reverts for all others.\n /// Records `from` as the staker and emits TokenStaked — functionally equivalent\n /// to calling stake() but triggered by safeTransferFrom rather than approve+stake.\n /// Not available while paused (mirrors stake() pause behaviour).\n /// @param from The address that previously owned the token (recorded as staker).\n /// @param tokenId The token ID being transferred.\n /// @return The ERC-721 receiver magic value confirming acceptance.\n function onERC721Received(\n address /* operator */,\n address from,\n uint256 tokenId,\n bytes calldata /* data */\n ) external nonReentrant whenNotPaused returns (bytes4) {\n if (msg.sender != address(nftContract)) revert UnsupportedNFTContract();\n if (from == address(0)) revert ZeroAddress();\n if (_stakedBy[tokenId] != address(0)) revert TokenAlreadyStaked();\n\n _recordStake(from, tokenId);\n emit TokenStaked(from, tokenId, block.timestamp);\n\n return IERC721Receiver.onERC721Received.selector;\n }\n\n /// @notice Unstakes a Booster NFT and returns it to the original staker.\n /// Always available — not gated by pause — so players can always recover assets.\n /// @param tokenId The token ID to unstake.\n function unstake(uint256 tokenId) external nonReentrant {\n address originalStaker = _stakedBy[tokenId];\n if (originalStaker == address(0)) revert TokenNotStaked();\n if (originalStaker != msg.sender) revert NotOriginalStaker();\n\n _clearStake(originalStaker, tokenId);\n nftContract.transferFrom(address(this), msg.sender, tokenId);\n\n emit TokenUnstaked(msg.sender, tokenId, block.timestamp);\n }\n\n // -------------------------------------------------------------------------\n // Admin — emergency withdrawal\n // -------------------------------------------------------------------------\n\n /// @notice Emergency withdrawal of a staked token by the contract owner.\n /// Use only in exceptional circumstances (e.g., critical contract bug).\n /// This is the only admin path that moves a user's staked NFT without their\n /// direct action. It is explicitly named, emits EmergencyWithdrawn, and is\n /// documented in this contract and the project's architecture documentation.\n /// @param tokenId The token ID to withdraw.\n /// @param recipient The address to send the token to.\n function emergencyWithdraw(uint256 tokenId, address recipient) external onlyOwner nonReentrant {\n address originalStaker = _stakedBy[tokenId];\n if (originalStaker == address(0)) revert TokenNotStaked();\n if (recipient == address(0)) revert ZeroAddress();\n if (recipient != originalStaker) revert InvalidEmergencyRecipient();\n\n _clearStake(originalStaker, tokenId);\n nftContract.transferFrom(address(this), recipient, tokenId);\n\n emit EmergencyWithdrawn(originalStaker, tokenId, recipient, block.timestamp);\n }\n\n /// @notice Recovers an NFT that was sent directly with transferFrom and therefore did\n /// not invoke onERC721Received or create a staking record.\n /// @param tokenId The untracked token held by this contract.\n /// @param recipient The non-zero address that receives the recovered token.\n function rescueUntrackedToken(uint256 tokenId, address recipient) external onlyOwner nonReentrant {\n if (recipient == address(0)) revert ZeroAddress();\n if (_stakedBy[tokenId] != address(0)) revert TokenIsTracked();\n if (nftContract.ownerOf(tokenId) != address(this)) revert TokenNotHeld();\n\n nftContract.transferFrom(address(this), recipient, tokenId);\n emit UntrackedTokenRescued(recipient, tokenId, block.timestamp);\n }\n\n // -------------------------------------------------------------------------\n // Pause\n // -------------------------------------------------------------------------\n\n /// @notice Pauses new staking. Unstaking remains available while paused.\n function pause() external onlyOwner {\n _pause();\n }\n\n /// @notice Unpauses staking.\n function unpause() external onlyOwner {\n _unpause();\n }\n\n // -------------------------------------------------------------------------\n // Read methods (must stay in sync with event state)\n // -------------------------------------------------------------------------\n\n /// @notice Returns true if the given token is currently staked.\n /// @param tokenId The token ID to query.\n function isStaked(uint256 tokenId) external view returns (bool) {\n return _stakedBy[tokenId] != address(0);\n }\n\n /// @notice Returns the original staker of a currently staked token.\n /// Returns the zero address if the token is not staked.\n /// @param tokenId The token ID to query.\n function stakedOwnerOf(uint256 tokenId) external view returns (address) {\n return _stakedBy[tokenId];\n }\n\n /// @notice Returns the block timestamp at which a token was staked.\n /// Returns zero if the token is not currently staked.\n /// @param tokenId The token ID to query.\n function stakedAtOf(uint256 tokenId) external view returns (uint256) {\n return _stakedAt[tokenId];\n }\n\n /// @notice Returns the list of token IDs currently staked by the given wallet.\n /// @dev Ordering is not guaranteed. Tokens are stored in an array with swap-and-pop\n /// removal: when a token is unstaked or emergency-withdrawn, the last element\n /// in the array takes its position. Do not rely on index stability across\n /// state-changing transactions.\n /// @param wallet The address to query.\n function getWalletStakedTokens(address wallet) external view returns (uint256[] memory) {\n return _walletTokenIds[wallet];\n }\n\n // -------------------------------------------------------------------------\n // Internal helpers\n // -------------------------------------------------------------------------\n\n /// @dev Records all staking state for a token being staked by `staker`.\n function _recordStake(address staker, uint256 tokenId) internal {\n _stakedBy[tokenId] = staker;\n _stakedAt[tokenId] = block.timestamp;\n _walletTokenIndex[tokenId] = _walletTokenIds[staker].length;\n _walletTokenIds[staker].push(tokenId);\n }\n\n /// @dev Clears all staking state for a token being unstaked from `staker`.\n function _clearStake(address staker, uint256 tokenId) internal {\n delete _stakedBy[tokenId];\n delete _stakedAt[tokenId];\n _removeFromWallet(staker, tokenId);\n }\n\n /// @dev Removes tokenId from _walletTokenIds[staker] using swap-and-pop for O(1) removal.\n function _removeFromWallet(address staker, uint256 tokenId) internal {\n uint256[] storage tokens = _walletTokenIds[staker];\n uint256 index = _walletTokenIndex[tokenId];\n uint256 lastIndex = tokens.length - 1;\n\n if (index != lastIndex) {\n uint256 lastTokenId = tokens[lastIndex];\n tokens[index] = lastTokenId;\n _walletTokenIndex[lastTokenId] = index;\n }\n\n tokens.pop();\n delete _walletTokenIndex[tokenId];\n }\n}\n" + }, + "@openzeppelin/contracts/access/Ownable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)\n\npragma solidity ^0.8.20;\n\nimport {Context} from \"../utils/Context.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * The initial owner is set to the address provided by the deployer. This can\n * later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract Ownable is Context {\n address private _owner;\n\n /**\n * @dev The caller account is not authorized to perform an operation.\n */\n error OwnableUnauthorizedAccount(address account);\n\n /**\n * @dev The owner is not a valid owner account. (eg. `address(0)`)\n */\n error OwnableInvalidOwner(address owner);\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the address provided by the deployer as the initial owner.\n */\n constructor(address initialOwner) {\n if (initialOwner == address(0)) {\n revert OwnableInvalidOwner(address(0));\n }\n _transferOwnership(initialOwner);\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n _checkOwner();\n _;\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if the sender is not the owner.\n */\n function _checkOwner() internal view virtual {\n if (owner() != _msgSender()) {\n revert OwnableUnauthorizedAccount(_msgSender());\n }\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby disabling any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n _transferOwnership(address(0));\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n if (newOwner == address(0)) {\n revert OwnableInvalidOwner(address(0));\n }\n _transferOwnership(newOwner);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Internal function without access restriction.\n */\n function _transferOwnership(address newOwner) internal virtual {\n address oldOwner = _owner;\n _owner = newOwner;\n emit OwnershipTransferred(oldOwner, newOwner);\n }\n}\n" + }, + "@openzeppelin/contracts/access/Ownable2Step.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (access/Ownable2Step.sol)\n\npragma solidity ^0.8.20;\n\nimport {Ownable} from \"./Ownable.sol\";\n\n/**\n * @dev Contract module which provides access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * This extension of the {Ownable} contract includes a two-step mechanism to transfer\n * ownership, where the new owner must call {acceptOwnership} in order to replace the\n * old one. This can help prevent common mistakes, such as transfers of ownership to\n * incorrect accounts, or to contracts that are unable to interact with the\n * permission system.\n *\n * The initial owner is specified at deployment time in the constructor for `Ownable`. This\n * can later be changed with {transferOwnership} and {acceptOwnership}.\n *\n * This module is used through inheritance. It will make available all functions\n * from parent (Ownable).\n */\nabstract contract Ownable2Step is Ownable {\n address private _pendingOwner;\n\n event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Returns the address of the pending owner.\n */\n function pendingOwner() public view virtual returns (address) {\n return _pendingOwner;\n }\n\n /**\n * @dev Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one.\n * Can only be called by the current owner.\n *\n * Setting `newOwner` to the zero address is allowed; this can be used to cancel an initiated ownership transfer.\n */\n function transferOwnership(address newOwner) public virtual override onlyOwner {\n _pendingOwner = newOwner;\n emit OwnershipTransferStarted(owner(), newOwner);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`) and deletes any pending owner.\n * Internal function without access restriction.\n */\n function _transferOwnership(address newOwner) internal virtual override {\n delete _pendingOwner;\n super._transferOwnership(newOwner);\n }\n\n /**\n * @dev The new owner accepts the ownership transfer.\n */\n function acceptOwnership() public virtual {\n address sender = _msgSender();\n if (pendingOwner() != sender) {\n revert OwnableUnauthorizedAccount(sender);\n }\n _transferOwnership(sender);\n }\n}\n" + }, + "@openzeppelin/contracts/utils/ReentrancyGuard.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.5.0) (utils/ReentrancyGuard.sol)\n\npragma solidity ^0.8.20;\n\nimport {StorageSlot} from \"./StorageSlot.sol\";\n\n/**\n * @dev Contract module that helps prevent reentrant calls to a function.\n *\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\n * available, which can be applied to functions to make sure there are no nested\n * (reentrant) calls to them.\n *\n * Note that because there is a single `nonReentrant` guard, functions marked as\n * `nonReentrant` may not call one another. This can be worked around by making\n * those functions `private`, and then adding `external` `nonReentrant` entry\n * points to them.\n *\n * TIP: If EIP-1153 (transient storage) is available on the chain you're deploying at,\n * consider using {ReentrancyGuardTransient} instead.\n *\n * TIP: If you would like to learn more about reentrancy and alternative ways\n * to protect against it, check out our blog post\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\n *\n * IMPORTANT: Deprecated. This storage-based reentrancy guard will be removed and replaced\n * by the {ReentrancyGuardTransient} variant in v6.0.\n *\n * @custom:stateless\n */\nabstract contract ReentrancyGuard {\n using StorageSlot for bytes32;\n\n // keccak256(abi.encode(uint256(keccak256(\"openzeppelin.storage.ReentrancyGuard\")) - 1)) & ~bytes32(uint256(0xff))\n bytes32 private constant REENTRANCY_GUARD_STORAGE =\n 0x9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00;\n\n // Booleans are more expensive than uint256 or any type that takes up a full\n // word because each write operation emits an extra SLOAD to first read the\n // slot's contents, replace the bits taken up by the boolean, and then write\n // back. This is the compiler's defense against contract upgrades and\n // pointer aliasing, and it cannot be disabled.\n\n // The values being non-zero value makes deployment a bit more expensive,\n // but in exchange the refund on every call to nonReentrant will be lower in\n // amount. Since refunds are capped to a percentage of the total\n // transaction's gas, it is best to keep them low in cases like this one, to\n // increase the likelihood of the full refund coming into effect.\n uint256 private constant NOT_ENTERED = 1;\n uint256 private constant ENTERED = 2;\n\n /**\n * @dev Unauthorized reentrant call.\n */\n error ReentrancyGuardReentrantCall();\n\n constructor() {\n _reentrancyGuardStorageSlot().getUint256Slot().value = NOT_ENTERED;\n }\n\n /**\n * @dev Prevents a contract from calling itself, directly or indirectly.\n * Calling a `nonReentrant` function from another `nonReentrant`\n * function is not supported. It is possible to prevent this from happening\n * by making the `nonReentrant` function external, and making it call a\n * `private` function that does the actual work.\n */\n modifier nonReentrant() {\n _nonReentrantBefore();\n _;\n _nonReentrantAfter();\n }\n\n /**\n * @dev A `view` only version of {nonReentrant}. Use to block view functions\n * from being called, preventing reading from inconsistent contract state.\n *\n * CAUTION: This is a \"view\" modifier and does not change the reentrancy\n * status. Use it only on view functions. For payable or non-payable functions,\n * use the standard {nonReentrant} modifier instead.\n */\n modifier nonReentrantView() {\n _nonReentrantBeforeView();\n _;\n }\n\n function _nonReentrantBeforeView() private view {\n if (_reentrancyGuardEntered()) {\n revert ReentrancyGuardReentrantCall();\n }\n }\n\n function _nonReentrantBefore() private {\n // On the first call to nonReentrant, _status will be NOT_ENTERED\n _nonReentrantBeforeView();\n\n // Any calls to nonReentrant after this point will fail\n _reentrancyGuardStorageSlot().getUint256Slot().value = ENTERED;\n }\n\n function _nonReentrantAfter() private {\n // By storing the original value once again, a refund is triggered (see\n // https://eips.ethereum.org/EIPS/eip-2200)\n _reentrancyGuardStorageSlot().getUint256Slot().value = NOT_ENTERED;\n }\n\n /**\n * @dev Returns true if the reentrancy guard is currently set to \"entered\", which indicates there is a\n * `nonReentrant` function in the call stack.\n */\n function _reentrancyGuardEntered() internal view returns (bool) {\n return _reentrancyGuardStorageSlot().getUint256Slot().value == ENTERED;\n }\n\n function _reentrancyGuardStorageSlot() internal pure virtual returns (bytes32) {\n return REENTRANCY_GUARD_STORAGE;\n }\n}\n" + }, + "@openzeppelin/contracts/utils/StorageSlot.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/StorageSlot.sol)\n// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Library for reading and writing primitive types to specific storage slots.\n *\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\n * This library helps with reading and writing to such slots without the need for inline assembly.\n *\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\n *\n * Example usage to set ERC-1967 implementation slot:\n * ```solidity\n * contract ERC1967 {\n * // Define the slot. Alternatively, use the SlotDerivation library to derive the slot.\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n *\n * function _getImplementation() internal view returns (address) {\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n * }\n *\n * function _setImplementation(address newImplementation) internal {\n * require(newImplementation.code.length > 0);\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n * }\n * }\n * ```\n *\n * TIP: Consider using this library along with {SlotDerivation}.\n */\nlibrary StorageSlot {\n struct AddressSlot {\n address value;\n }\n\n struct BooleanSlot {\n bool value;\n }\n\n struct Bytes32Slot {\n bytes32 value;\n }\n\n struct Uint256Slot {\n uint256 value;\n }\n\n struct Int256Slot {\n int256 value;\n }\n\n struct StringSlot {\n string value;\n }\n\n struct BytesSlot {\n bytes value;\n }\n\n /**\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\n */\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\n assembly (\"memory-safe\") {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns a `BooleanSlot` with member `value` located at `slot`.\n */\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\n assembly (\"memory-safe\") {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns a `Bytes32Slot` with member `value` located at `slot`.\n */\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\n assembly (\"memory-safe\") {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns a `Uint256Slot` with member `value` located at `slot`.\n */\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\n assembly (\"memory-safe\") {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns a `Int256Slot` with member `value` located at `slot`.\n */\n function getInt256Slot(bytes32 slot) internal pure returns (Int256Slot storage r) {\n assembly (\"memory-safe\") {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns a `StringSlot` with member `value` located at `slot`.\n */\n function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) {\n assembly (\"memory-safe\") {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `StringSlot` representation of the string storage pointer `store`.\n */\n function getStringSlot(string storage store) internal pure returns (StringSlot storage r) {\n assembly (\"memory-safe\") {\n r.slot := store.slot\n }\n }\n\n /**\n * @dev Returns a `BytesSlot` with member `value` located at `slot`.\n */\n function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) {\n assembly (\"memory-safe\") {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`.\n */\n function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) {\n assembly (\"memory-safe\") {\n r.slot := store.slot\n }\n }\n}\n" + }, + "contracts/test/ReentrantERC721.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.26;\n\ninterface IReentrantStakingTarget {\n function stake(uint256 tokenId) external;\n}\n\n/// @dev Test-only NFT double that calls stake again from transferFrom.\ncontract ReentrantERC721 {\n mapping(uint256 tokenId => address owner) private _owners;\n IReentrantStakingTarget public immutable staking;\n bool public attackEnabled;\n\n constructor(address staking_) {\n staking = IReentrantStakingTarget(staking_);\n }\n\n function mint(address to, uint256 tokenId) external {\n _owners[tokenId] = to;\n }\n\n function enableAttack() external {\n attackEnabled = true;\n _owners[999] = address(this);\n }\n\n function ownerOf(uint256 tokenId) external view returns (address) {\n return _owners[tokenId];\n }\n\n function transferFrom(address from, address to, uint256 tokenId) external {\n require(_owners[tokenId] == from, \"wrong owner\");\n if (attackEnabled) {\n attackEnabled = false;\n staking.stake(999);\n }\n _owners[tokenId] = to;\n }\n}\n" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "evmVersion": "cancun", + "outputSelection": { + "*": { + "*": [ + "abi", + "metadata", + "devdoc", + "userdoc", + "storageLayout", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers" + ], + "": [ + "ast" + ] + } + } + } + } +} diff --git a/artifacts/build-info/solc-0_8_26-2940a0bf7433fbb858475891fd4d03553b51db3322b46d171911ad73848093b6.output.json b/artifacts/build-info/solc-0_8_26-2940a0bf7433fbb858475891fd4d03553b51db3322b46d171911ad73848093b6.output.json new file mode 100644 index 0000000..f742d94 --- /dev/null +++ b/artifacts/build-info/solc-0_8_26-2940a0bf7433fbb858475891fd4d03553b51db3322b46d171911ad73848093b6.output.json @@ -0,0 +1 @@ +{"_format":"hh3-sol-build-info-output-1","id":"solc-0_8_26-2940a0bf7433fbb858475891fd4d03553b51db3322b46d171911ad73848093b6","output":{"contracts":{"@openzeppelin/contracts/access/AccessControl.sol":{"AccessControl":{"abi":[{"inputs":[],"name":"AccessControlBadConfirmation","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bytes32","name":"neededRole","type":"bytes32"}],"name":"AccessControlUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"callerConfirmation","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"devdoc":{"details":"Contract module that allows children to implement role-based access control mechanisms. This is a lightweight version that doesn't allow enumerating role members except through off-chain means by accessing the contract event logs. Some applications may benefit from on-chain enumerability, for those cases see {AccessControlEnumerable}. Roles are referred to by their `bytes32` identifier. These should be exposed in the external API and be unique. The best way to achieve this is by using `public constant` hash digests: ```solidity bytes32 public constant MY_ROLE = keccak256(\"MY_ROLE\"); ``` Roles can be used to represent a set of permissions. To restrict access to a function call, use {hasRole}: ```solidity function foo() public { require(hasRole(MY_ROLE, msg.sender)); ... } ``` Roles can be granted and revoked dynamically via the {grantRole} and {revokeRole} functions. Each role has an associated admin role, and only accounts that have a role's admin role can call {grantRole} and {revokeRole}. By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means that only accounts with this role will be able to grant or revoke other roles. More complex role relationships can be created by using {_setRoleAdmin}. WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to grant and revoke this role. Extra precautions should be taken to secure accounts that have been granted it. We recommend using {AccessControlDefaultAdminRules} to enforce additional security measures for this role.","errors":{"AccessControlBadConfirmation()":[{"details":"The caller of a function is not the expected one. NOTE: Don't confuse with {AccessControlUnauthorizedAccount}."}],"AccessControlUnauthorizedAccount(address,bytes32)":[{"details":"The `account` is missing a role."}]},"events":{"RoleAdminChanged(bytes32,bytes32,bytes32)":{"details":"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted to signal this."},"RoleGranted(bytes32,address,address)":{"details":"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call. This account bears the admin role (for the granted role). Expected in cases where the role was granted using the internal {AccessControl-_grantRole}."},"RoleRevoked(bytes32,address,address)":{"details":"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)"}},"kind":"dev","methods":{"getRoleAdmin(bytes32)":{"details":"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}."},"grantRole(bytes32,address)":{"details":"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event."},"hasRole(bytes32,address)":{"details":"Returns `true` if `account` has been granted `role`."},"renounceRole(bytes32,address)":{"details":"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `callerConfirmation`. May emit a {RoleRevoked} event."},"revokeRole(bytes32,address)":{"details":"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event."},"supportsInterface(bytes4)":{"details":"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas."}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"DEFAULT_ADMIN_ROLE()":"a217fddf","getRoleAdmin(bytes32)":"248a9ca3","grantRole(bytes32,address)":"2f2ff15d","hasRole(bytes32,address)":"91d14854","renounceRole(bytes32,address)":"36568abe","revokeRole(bytes32,address)":"d547741f","supportsInterface(bytes4)":"01ffc9a7"}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AccessControlBadConfirmation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"neededRole\",\"type\":\"bytes32\"}],\"name\":\"AccessControlUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"callerConfirmation\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Contract module that allows children to implement role-based access control mechanisms. This is a lightweight version that doesn't allow enumerating role members except through off-chain means by accessing the contract event logs. Some applications may benefit from on-chain enumerability, for those cases see {AccessControlEnumerable}. Roles are referred to by their `bytes32` identifier. These should be exposed in the external API and be unique. The best way to achieve this is by using `public constant` hash digests: ```solidity bytes32 public constant MY_ROLE = keccak256(\\\"MY_ROLE\\\"); ``` Roles can be used to represent a set of permissions. To restrict access to a function call, use {hasRole}: ```solidity function foo() public { require(hasRole(MY_ROLE, msg.sender)); ... } ``` Roles can be granted and revoked dynamically via the {grantRole} and {revokeRole} functions. Each role has an associated admin role, and only accounts that have a role's admin role can call {grantRole} and {revokeRole}. By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means that only accounts with this role will be able to grant or revoke other roles. More complex role relationships can be created by using {_setRoleAdmin}. WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to grant and revoke this role. Extra precautions should be taken to secure accounts that have been granted it. We recommend using {AccessControlDefaultAdminRules} to enforce additional security measures for this role.\",\"errors\":{\"AccessControlBadConfirmation()\":[{\"details\":\"The caller of a function is not the expected one. NOTE: Don't confuse with {AccessControlUnauthorizedAccount}.\"}],\"AccessControlUnauthorizedAccount(address,bytes32)\":[{\"details\":\"The `account` is missing a role.\"}]},\"events\":{\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted to signal this.\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call. This account bears the admin role (for the granted role). Expected in cases where the role was granted using the internal {AccessControl-_grantRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)\"}},\"kind\":\"dev\",\"methods\":{\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"grantRole(bytes32,address)\":{\"details\":\"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `callerConfirmation`. May emit a {RoleRevoked} event.\"},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event.\"},\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/access/AccessControl.sol\":\"AccessControl\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/AccessControl.sol\":{\"keccak256\":\"0x4686ec784d75f95beaf2bf5b5f26e5f946d4c864aaee9c3c62bdc18381f5e017\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://26710ca191913f3c9df542079c4a6dcff02968e92d4f7357daefef9fbe72a19c\",\"dweb:/ipfs/QmanHbeWuBbVEqXySHa1zhm2rExjYpChDBubBaJNTCa2JB\"]},\"@openzeppelin/contracts/access/IAccessControl.sol\":{\"keccak256\":\"0xbff9f59c84e5337689161ce7641c0ef8e872d6a7536fbc1f5133f128887aba3c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b308f882e796f7b79c9502deacb0a62983035c6f6f4e962b319ba6a1f4a77d3d\",\"dweb:/ipfs/QmaWCW7ahEQqFjwhSUhV7Ae7WhfNvzSpE7DQ58hvEooqPL\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0x2d9dc2fe26180f74c11c13663647d38e259e45f95eb88f57b61d2160b0109d3e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://81233d1f98060113d9922180bb0f14f8335856fe9f339134b09335e9f678c377\",\"dweb:/ipfs/QmWh6R35SarhAn4z2wH8SU456jJSYL2FgucfTFgbHJJN4E\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617\",\"dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u\"]}},\"version\":1}","storageLayout":{"storage":[{"astId":26,"contract":"@openzeppelin/contracts/access/AccessControl.sol:AccessControl","label":"_roles","offset":0,"slot":"0","type":"t_mapping(t_bytes32,t_struct(RoleData)21_storage)"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_mapping(t_address,t_bool)":{"encoding":"mapping","key":"t_address","label":"mapping(address => bool)","numberOfBytes":"32","value":"t_bool"},"t_mapping(t_bytes32,t_struct(RoleData)21_storage)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => struct AccessControl.RoleData)","numberOfBytes":"32","value":"t_struct(RoleData)21_storage"},"t_struct(RoleData)21_storage":{"encoding":"inplace","label":"struct AccessControl.RoleData","members":[{"astId":18,"contract":"@openzeppelin/contracts/access/AccessControl.sol:AccessControl","label":"hasRole","offset":0,"slot":"0","type":"t_mapping(t_address,t_bool)"},{"astId":20,"contract":"@openzeppelin/contracts/access/AccessControl.sol:AccessControl","label":"adminRole","offset":0,"slot":"1","type":"t_bytes32"}],"numberOfBytes":"64"}}},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/access/IAccessControl.sol":{"IAccessControl":{"abi":[{"inputs":[],"name":"AccessControlBadConfirmation","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bytes32","name":"neededRole","type":"bytes32"}],"name":"AccessControlUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"callerConfirmation","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"details":"External interface of AccessControl declared to support ERC-165 detection.","errors":{"AccessControlBadConfirmation()":[{"details":"The caller of a function is not the expected one. NOTE: Don't confuse with {AccessControlUnauthorizedAccount}."}],"AccessControlUnauthorizedAccount(address,bytes32)":[{"details":"The `account` is missing a role."}]},"events":{"RoleAdminChanged(bytes32,bytes32,bytes32)":{"details":"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted to signal this."},"RoleGranted(bytes32,address,address)":{"details":"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call. This account bears the admin role (for the granted role). Expected in cases where the role was granted using the internal {AccessControl-_grantRole}."},"RoleRevoked(bytes32,address,address)":{"details":"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)"}},"kind":"dev","methods":{"getRoleAdmin(bytes32)":{"details":"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {AccessControl-_setRoleAdmin}."},"grantRole(bytes32,address)":{"details":"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role."},"hasRole(bytes32,address)":{"details":"Returns `true` if `account` has been granted `role`."},"renounceRole(bytes32,address)":{"details":"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `callerConfirmation`."},"revokeRole(bytes32,address)":{"details":"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role."}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getRoleAdmin(bytes32)":"248a9ca3","grantRole(bytes32,address)":"2f2ff15d","hasRole(bytes32,address)":"91d14854","renounceRole(bytes32,address)":"36568abe","revokeRole(bytes32,address)":"d547741f"}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AccessControlBadConfirmation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"neededRole\",\"type\":\"bytes32\"}],\"name\":\"AccessControlUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"callerConfirmation\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"External interface of AccessControl declared to support ERC-165 detection.\",\"errors\":{\"AccessControlBadConfirmation()\":[{\"details\":\"The caller of a function is not the expected one. NOTE: Don't confuse with {AccessControlUnauthorizedAccount}.\"}],\"AccessControlUnauthorizedAccount(address,bytes32)\":[{\"details\":\"The `account` is missing a role.\"}]},\"events\":{\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted to signal this.\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call. This account bears the admin role (for the granted role). Expected in cases where the role was granted using the internal {AccessControl-_grantRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)\"}},\"kind\":\"dev\",\"methods\":{\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {AccessControl-_setRoleAdmin}.\"},\"grantRole(bytes32,address)\":{\"details\":\"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `callerConfirmation`.\"},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/access/IAccessControl.sol\":\"IAccessControl\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/IAccessControl.sol\":{\"keccak256\":\"0xbff9f59c84e5337689161ce7641c0ef8e872d6a7536fbc1f5133f128887aba3c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b308f882e796f7b79c9502deacb0a62983035c6f6f4e962b319ba6a1f4a77d3d\",\"dweb:/ipfs/QmaWCW7ahEQqFjwhSUhV7Ae7WhfNvzSpE7DQ58hvEooqPL\"]}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/access/Ownable.sol":{"Ownable":{"abi":[{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"details":"Contract module which provides a basic access control mechanism, where there is an account (an owner) that can be granted exclusive access to specific functions. The initial owner is set to the address provided by the deployer. This can later be changed with {transferOwnership}. This module is used through inheritance. It will make available the modifier `onlyOwner`, which can be applied to your functions to restrict their use to the owner.","errors":{"OwnableInvalidOwner(address)":[{"details":"The owner is not a valid owner account. (eg. `address(0)`)"}],"OwnableUnauthorizedAccount(address)":[{"details":"The caller account is not authorized to perform an operation."}]},"kind":"dev","methods":{"constructor":{"details":"Initializes the contract setting the address provided by the deployer as the initial owner."},"owner()":{"details":"Returns the address of the current owner."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"owner()":"8da5cb5b","renounceOwnership()":"715018a6","transferOwnership(address)":"f2fde38b"}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Contract module which provides a basic access control mechanism, where there is an account (an owner) that can be granted exclusive access to specific functions. The initial owner is set to the address provided by the deployer. This can later be changed with {transferOwnership}. This module is used through inheritance. It will make available the modifier `onlyOwner`, which can be applied to your functions to restrict their use to the owner.\",\"errors\":{\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the contract setting the address provided by the deployer as the initial owner.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/access/Ownable.sol\":\"Ownable\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]}},\"version\":1}","storageLayout":{"storage":[{"astId":387,"contract":"@openzeppelin/contracts/access/Ownable.sol:Ownable","label":"_owner","offset":0,"slot":"0","type":"t_address"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"}}},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/access/Ownable2Step.sol":{"Ownable2Step":{"abi":[{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"details":"Contract module which provides access control mechanism, where there is an account (an owner) that can be granted exclusive access to specific functions. This extension of the {Ownable} contract includes a two-step mechanism to transfer ownership, where the new owner must call {acceptOwnership} in order to replace the old one. This can help prevent common mistakes, such as transfers of ownership to incorrect accounts, or to contracts that are unable to interact with the permission system. The initial owner is specified at deployment time in the constructor for `Ownable`. This can later be changed with {transferOwnership} and {acceptOwnership}. This module is used through inheritance. It will make available all functions from parent (Ownable).","errors":{"OwnableInvalidOwner(address)":[{"details":"The owner is not a valid owner account. (eg. `address(0)`)"}],"OwnableUnauthorizedAccount(address)":[{"details":"The caller account is not authorized to perform an operation."}]},"kind":"dev","methods":{"acceptOwnership()":{"details":"The new owner accepts the ownership transfer."},"owner()":{"details":"Returns the address of the current owner."},"pendingOwner()":{"details":"Returns the address of the pending owner."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."},"transferOwnership(address)":{"details":"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner. Setting `newOwner` to the zero address is allowed; this can be used to cancel an initiated ownership transfer."}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"acceptOwnership()":"79ba5097","owner()":"8da5cb5b","pendingOwner()":"e30c3978","renounceOwnership()":"715018a6","transferOwnership(address)":"f2fde38b"}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Contract module which provides access control mechanism, where there is an account (an owner) that can be granted exclusive access to specific functions. This extension of the {Ownable} contract includes a two-step mechanism to transfer ownership, where the new owner must call {acceptOwnership} in order to replace the old one. This can help prevent common mistakes, such as transfers of ownership to incorrect accounts, or to contracts that are unable to interact with the permission system. The initial owner is specified at deployment time in the constructor for `Ownable`. This can later be changed with {transferOwnership} and {acceptOwnership}. This module is used through inheritance. It will make available all functions from parent (Ownable).\",\"errors\":{\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"kind\":\"dev\",\"methods\":{\"acceptOwnership()\":{\"details\":\"The new owner accepts the ownership transfer.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pendingOwner()\":{\"details\":\"Returns the address of the pending owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner. Setting `newOwner` to the zero address is allowed; this can be used to cancel an initiated ownership transfer.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/access/Ownable2Step.sol\":\"Ownable2Step\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"@openzeppelin/contracts/access/Ownable2Step.sol\":{\"keccak256\":\"0xdcad8898fda432696597752e8ec361b87d85c82cb258115427af006dacf7128c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e2c9d517f0c136d54bd00cd57959d25681d4d6273f5bbbc263afe228303772f0\",\"dweb:/ipfs/QmReNFjXBiufByiAAzfSQ2SM5r3qeUErn46BmN3yVRvrek\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]}},\"version\":1}","storageLayout":{"storage":[{"astId":387,"contract":"@openzeppelin/contracts/access/Ownable2Step.sol:Ownable2Step","label":"_owner","offset":0,"slot":"0","type":"t_address"},{"astId":535,"contract":"@openzeppelin/contracts/access/Ownable2Step.sol:Ownable2Step","label":"_pendingOwner","offset":0,"slot":"1","type":"t_address"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"}}},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/access/extensions/AccessControlDefaultAdminRules.sol":{"AccessControlDefaultAdminRules":{"abi":[{"inputs":[],"name":"AccessControlBadConfirmation","type":"error"},{"inputs":[{"internalType":"uint48","name":"schedule","type":"uint48"}],"name":"AccessControlEnforcedDefaultAdminDelay","type":"error"},{"inputs":[],"name":"AccessControlEnforcedDefaultAdminRules","type":"error"},{"inputs":[{"internalType":"address","name":"defaultAdmin","type":"address"}],"name":"AccessControlInvalidDefaultAdmin","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bytes32","name":"neededRole","type":"bytes32"}],"name":"AccessControlUnauthorizedAccount","type":"error"},{"inputs":[{"internalType":"uint8","name":"bits","type":"uint8"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"SafeCastOverflowedUintDowncast","type":"error"},{"anonymous":false,"inputs":[],"name":"DefaultAdminDelayChangeCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint48","name":"newDelay","type":"uint48"},{"indexed":false,"internalType":"uint48","name":"effectSchedule","type":"uint48"}],"name":"DefaultAdminDelayChangeScheduled","type":"event"},{"anonymous":false,"inputs":[],"name":"DefaultAdminTransferCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAdmin","type":"address"},{"indexed":false,"internalType":"uint48","name":"acceptSchedule","type":"uint48"}],"name":"DefaultAdminTransferScheduled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptDefaultAdminTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAdmin","type":"address"}],"name":"beginDefaultAdminTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cancelDefaultAdminTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint48","name":"newDelay","type":"uint48"}],"name":"changeDefaultAdminDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"defaultAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"defaultAdminDelay","outputs":[{"internalType":"uint48","name":"","type":"uint48"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"defaultAdminDelayIncreaseWait","outputs":[{"internalType":"uint48","name":"","type":"uint48"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingDefaultAdmin","outputs":[{"internalType":"address","name":"newAdmin","type":"address"},{"internalType":"uint48","name":"schedule","type":"uint48"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingDefaultAdminDelay","outputs":[{"internalType":"uint48","name":"newDelay","type":"uint48"},{"internalType":"uint48","name":"schedule","type":"uint48"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rollbackDefaultAdminDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"devdoc":{"details":"Extension of {AccessControl} that allows specifying special rules to manage the `DEFAULT_ADMIN_ROLE` holder, which is a sensitive role with special permissions over other roles that may potentially have privileged rights in the system. If a specific role doesn't have an admin role assigned, the holder of the `DEFAULT_ADMIN_ROLE` will have the ability to grant it and revoke it. This contract implements the following risk mitigations on top of {AccessControl}: * Only one account holds the `DEFAULT_ADMIN_ROLE` since deployment until it's potentially renounced. * Enforces a 2-step process to transfer the `DEFAULT_ADMIN_ROLE` to another account. * Enforces a configurable delay between the two steps, with the ability to cancel before the transfer is accepted. * The delay can be changed by scheduling, see {changeDefaultAdminDelay}. * Role transfers must wait at least one block after scheduling before it can be accepted. * It is not possible to use another role to manage the `DEFAULT_ADMIN_ROLE`. Example usage: ```solidity contract MyToken is AccessControlDefaultAdminRules { constructor() AccessControlDefaultAdminRules( 3 days, msg.sender // Explicit initial `DEFAULT_ADMIN_ROLE` holder ) {} } ```","errors":{"AccessControlBadConfirmation()":[{"details":"The caller of a function is not the expected one. NOTE: Don't confuse with {AccessControlUnauthorizedAccount}."}],"AccessControlEnforcedDefaultAdminDelay(uint48)":[{"details":"The delay for transferring the default admin delay is enforced and the operation must wait until `schedule`. NOTE: `schedule` can be 0 indicating there's no transfer scheduled."}],"AccessControlEnforcedDefaultAdminRules()":[{"details":"At least one of the following rules was violated: - The `DEFAULT_ADMIN_ROLE` must only be managed by itself. - The `DEFAULT_ADMIN_ROLE` must only be held by one account at the time. - Any `DEFAULT_ADMIN_ROLE` transfer must be in two delayed steps."}],"AccessControlInvalidDefaultAdmin(address)":[{"details":"The new default admin is not a valid default admin."}],"AccessControlUnauthorizedAccount(address,bytes32)":[{"details":"The `account` is missing a role."}],"SafeCastOverflowedUintDowncast(uint8,uint256)":[{"details":"Value doesn't fit in a uint of `bits` size."}]},"events":{"DefaultAdminDelayChangeCanceled()":{"details":"Emitted when a {pendingDefaultAdminDelay} is reset if its schedule didn't pass."},"DefaultAdminDelayChangeScheduled(uint48,uint48)":{"details":"Emitted when a {defaultAdminDelay} change is started, setting `newDelay` as the next delay to be applied between default admin transfer after `effectSchedule` has passed."},"DefaultAdminTransferCanceled()":{"details":"Emitted when a {pendingDefaultAdmin} is reset if it was never accepted, regardless of its schedule."},"DefaultAdminTransferScheduled(address,uint48)":{"details":"Emitted when a {defaultAdmin} transfer is started, setting `newAdmin` as the next address to become the {defaultAdmin} by calling {acceptDefaultAdminTransfer} only after `acceptSchedule` passes."},"RoleAdminChanged(bytes32,bytes32,bytes32)":{"details":"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted to signal this."},"RoleGranted(bytes32,address,address)":{"details":"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call. This account bears the admin role (for the granted role). Expected in cases where the role was granted using the internal {AccessControl-_grantRole}."},"RoleRevoked(bytes32,address,address)":{"details":"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)"}},"kind":"dev","methods":{"acceptDefaultAdminTransfer()":{"details":"Completes a {defaultAdmin} transfer previously started with {beginDefaultAdminTransfer}. After calling the function: - `DEFAULT_ADMIN_ROLE` should be granted to the caller. - `DEFAULT_ADMIN_ROLE` should be revoked from the previous holder. - {pendingDefaultAdmin} should be reset to zero values. Requirements: - Only can be called by the {pendingDefaultAdmin}'s `newAdmin`. - The {pendingDefaultAdmin}'s `acceptSchedule` should've passed."},"beginDefaultAdminTransfer(address)":{"details":"Starts a {defaultAdmin} transfer by setting a {pendingDefaultAdmin} scheduled for acceptance after the current timestamp plus a {defaultAdminDelay}. Requirements: - Only can be called by the current {defaultAdmin}. Emits a {DefaultAdminTransferScheduled} event."},"cancelDefaultAdminTransfer()":{"details":"Cancels a {defaultAdmin} transfer previously started with {beginDefaultAdminTransfer}. A {pendingDefaultAdmin} not yet accepted can also be cancelled with this function. Requirements: - Only can be called by the current {defaultAdmin}. May emit a {DefaultAdminTransferCanceled} event."},"changeDefaultAdminDelay(uint48)":{"details":"Initiates a {defaultAdminDelay} update by setting a {pendingDefaultAdminDelay} scheduled for getting into effect after the current timestamp plus a {defaultAdminDelay}. This function guarantees that any call to {beginDefaultAdminTransfer} done between the timestamp this method is called and the {pendingDefaultAdminDelay} effect schedule will use the current {defaultAdminDelay} set before calling. The {pendingDefaultAdminDelay}'s effect schedule is defined in a way that waiting until the schedule and then calling {beginDefaultAdminTransfer} with the new delay will take at least the same as another {defaultAdmin} complete transfer (including acceptance). The schedule is designed for two scenarios: - When the delay is changed for a larger one the schedule is `block.timestamp + newDelay` capped by {defaultAdminDelayIncreaseWait}. - When the delay is changed for a shorter one, the schedule is `block.timestamp + (current delay - new delay)`. A {pendingDefaultAdminDelay} that never got into effect will be canceled in favor of a new scheduled change. Requirements: - Only can be called by the current {defaultAdmin}. Emits a {DefaultAdminDelayChangeScheduled} event and may emit a {DefaultAdminDelayChangeCanceled} event."},"constructor":{"details":"Sets the initial values for {defaultAdminDelay} and {defaultAdmin} address."},"defaultAdmin()":{"details":"Returns the address of the current `DEFAULT_ADMIN_ROLE` holder."},"defaultAdminDelay()":{"details":"Returns the delay required to schedule the acceptance of a {defaultAdmin} transfer started. This delay will be added to the current timestamp when calling {beginDefaultAdminTransfer} to set the acceptance schedule. NOTE: If a delay change has been scheduled, it will take effect as soon as the schedule passes, making this function returns the new delay. See {changeDefaultAdminDelay}."},"defaultAdminDelayIncreaseWait()":{"details":"Maximum time in seconds for an increase to {defaultAdminDelay} (that is scheduled using {changeDefaultAdminDelay}) to take effect. Default to 5 days. When the {defaultAdminDelay} is scheduled to be increased, it goes into effect after the new delay has passed with the purpose of giving enough time for reverting any accidental change (i.e. using milliseconds instead of seconds) that may lock the contract. However, to avoid excessive schedules, the wait is capped by this function and it can be overridden for a custom {defaultAdminDelay} increase scheduling. IMPORTANT: Make sure to add a reasonable amount of time while overriding this value, otherwise, there's a risk of setting a high new delay that goes into effect almost immediately without the possibility of human intervention in the case of an input error (eg. set milliseconds instead of seconds)."},"getRoleAdmin(bytes32)":{"details":"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}."},"grantRole(bytes32,address)":{"details":"See {AccessControl-grantRole}. Reverts for `DEFAULT_ADMIN_ROLE`."},"hasRole(bytes32,address)":{"details":"Returns `true` if `account` has been granted `role`."},"owner()":{"details":"Gets the address of the owner."},"pendingDefaultAdmin()":{"details":"Returns a tuple of a `newAdmin` and an accept schedule. After the `schedule` passes, the `newAdmin` will be able to accept the {defaultAdmin} role by calling {acceptDefaultAdminTransfer}, completing the role transfer. A zero value only in `acceptSchedule` indicates no pending admin transfer. NOTE: A zero address `newAdmin` means that {defaultAdmin} is being renounced."},"pendingDefaultAdminDelay()":{"details":"Returns a tuple of `newDelay` and an effect schedule. After the `schedule` passes, the `newDelay` will get into effect immediately for every new {defaultAdmin} transfer started with {beginDefaultAdminTransfer}. A zero value only in `effectSchedule` indicates no pending delay change. NOTE: A zero value only for `newDelay` means that the next {defaultAdminDelay} will be zero after the effect schedule."},"renounceRole(bytes32,address)":{"details":"See {AccessControl-renounceRole}. For the `DEFAULT_ADMIN_ROLE`, it only allows renouncing in two steps by first calling {beginDefaultAdminTransfer} to the `address(0)`, so it's required that the {pendingDefaultAdmin} schedule has also passed when calling this function. After its execution, it will not be possible to call `onlyRole(DEFAULT_ADMIN_ROLE)` functions. NOTE: Renouncing `DEFAULT_ADMIN_ROLE` will leave the contract without a {defaultAdmin}, thereby disabling any functionality that is only available for it, and the possibility of reassigning a non-administrated role."},"revokeRole(bytes32,address)":{"details":"See {AccessControl-revokeRole}. Reverts for `DEFAULT_ADMIN_ROLE`."},"rollbackDefaultAdminDelay()":{"details":"Cancels a scheduled {defaultAdminDelay} change. Requirements: - Only can be called by the current {defaultAdmin}. May emit a {DefaultAdminDelayChangeCanceled} event."},"supportsInterface(bytes4)":{"details":"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas."}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"DEFAULT_ADMIN_ROLE()":"a217fddf","acceptDefaultAdminTransfer()":"cefc1429","beginDefaultAdminTransfer(address)":"634e93da","cancelDefaultAdminTransfer()":"d602b9fd","changeDefaultAdminDelay(uint48)":"649a5ec7","defaultAdmin()":"84ef8ffc","defaultAdminDelay()":"cc8463c8","defaultAdminDelayIncreaseWait()":"022d63fb","getRoleAdmin(bytes32)":"248a9ca3","grantRole(bytes32,address)":"2f2ff15d","hasRole(bytes32,address)":"91d14854","owner()":"8da5cb5b","pendingDefaultAdmin()":"cf6eefb7","pendingDefaultAdminDelay()":"a1eda53c","renounceRole(bytes32,address)":"36568abe","revokeRole(bytes32,address)":"d547741f","rollbackDefaultAdminDelay()":"0aa6220b","supportsInterface(bytes4)":"01ffc9a7"}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AccessControlBadConfirmation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint48\",\"name\":\"schedule\",\"type\":\"uint48\"}],\"name\":\"AccessControlEnforcedDefaultAdminDelay\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AccessControlEnforcedDefaultAdminRules\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"defaultAdmin\",\"type\":\"address\"}],\"name\":\"AccessControlInvalidDefaultAdmin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"neededRole\",\"type\":\"bytes32\"}],\"name\":\"AccessControlUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"bits\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintDowncast\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"DefaultAdminDelayChangeCanceled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint48\",\"name\":\"newDelay\",\"type\":\"uint48\"},{\"indexed\":false,\"internalType\":\"uint48\",\"name\":\"effectSchedule\",\"type\":\"uint48\"}],\"name\":\"DefaultAdminDelayChangeScheduled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"DefaultAdminTransferCanceled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint48\",\"name\":\"acceptSchedule\",\"type\":\"uint48\"}],\"name\":\"DefaultAdminTransferScheduled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptDefaultAdminTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"beginDefaultAdminTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"cancelDefaultAdminTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint48\",\"name\":\"newDelay\",\"type\":\"uint48\"}],\"name\":\"changeDefaultAdminDelay\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"defaultAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"defaultAdminDelay\",\"outputs\":[{\"internalType\":\"uint48\",\"name\":\"\",\"type\":\"uint48\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"defaultAdminDelayIncreaseWait\",\"outputs\":[{\"internalType\":\"uint48\",\"name\":\"\",\"type\":\"uint48\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingDefaultAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"},{\"internalType\":\"uint48\",\"name\":\"schedule\",\"type\":\"uint48\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingDefaultAdminDelay\",\"outputs\":[{\"internalType\":\"uint48\",\"name\":\"newDelay\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"schedule\",\"type\":\"uint48\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollbackDefaultAdminDelay\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Extension of {AccessControl} that allows specifying special rules to manage the `DEFAULT_ADMIN_ROLE` holder, which is a sensitive role with special permissions over other roles that may potentially have privileged rights in the system. If a specific role doesn't have an admin role assigned, the holder of the `DEFAULT_ADMIN_ROLE` will have the ability to grant it and revoke it. This contract implements the following risk mitigations on top of {AccessControl}: * Only one account holds the `DEFAULT_ADMIN_ROLE` since deployment until it's potentially renounced. * Enforces a 2-step process to transfer the `DEFAULT_ADMIN_ROLE` to another account. * Enforces a configurable delay between the two steps, with the ability to cancel before the transfer is accepted. * The delay can be changed by scheduling, see {changeDefaultAdminDelay}. * Role transfers must wait at least one block after scheduling before it can be accepted. * It is not possible to use another role to manage the `DEFAULT_ADMIN_ROLE`. Example usage: ```solidity contract MyToken is AccessControlDefaultAdminRules { constructor() AccessControlDefaultAdminRules( 3 days, msg.sender // Explicit initial `DEFAULT_ADMIN_ROLE` holder ) {} } ```\",\"errors\":{\"AccessControlBadConfirmation()\":[{\"details\":\"The caller of a function is not the expected one. NOTE: Don't confuse with {AccessControlUnauthorizedAccount}.\"}],\"AccessControlEnforcedDefaultAdminDelay(uint48)\":[{\"details\":\"The delay for transferring the default admin delay is enforced and the operation must wait until `schedule`. NOTE: `schedule` can be 0 indicating there's no transfer scheduled.\"}],\"AccessControlEnforcedDefaultAdminRules()\":[{\"details\":\"At least one of the following rules was violated: - The `DEFAULT_ADMIN_ROLE` must only be managed by itself. - The `DEFAULT_ADMIN_ROLE` must only be held by one account at the time. - Any `DEFAULT_ADMIN_ROLE` transfer must be in two delayed steps.\"}],\"AccessControlInvalidDefaultAdmin(address)\":[{\"details\":\"The new default admin is not a valid default admin.\"}],\"AccessControlUnauthorizedAccount(address,bytes32)\":[{\"details\":\"The `account` is missing a role.\"}],\"SafeCastOverflowedUintDowncast(uint8,uint256)\":[{\"details\":\"Value doesn't fit in a uint of `bits` size.\"}]},\"events\":{\"DefaultAdminDelayChangeCanceled()\":{\"details\":\"Emitted when a {pendingDefaultAdminDelay} is reset if its schedule didn't pass.\"},\"DefaultAdminDelayChangeScheduled(uint48,uint48)\":{\"details\":\"Emitted when a {defaultAdminDelay} change is started, setting `newDelay` as the next delay to be applied between default admin transfer after `effectSchedule` has passed.\"},\"DefaultAdminTransferCanceled()\":{\"details\":\"Emitted when a {pendingDefaultAdmin} is reset if it was never accepted, regardless of its schedule.\"},\"DefaultAdminTransferScheduled(address,uint48)\":{\"details\":\"Emitted when a {defaultAdmin} transfer is started, setting `newAdmin` as the next address to become the {defaultAdmin} by calling {acceptDefaultAdminTransfer} only after `acceptSchedule` passes.\"},\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted to signal this.\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call. This account bears the admin role (for the granted role). Expected in cases where the role was granted using the internal {AccessControl-_grantRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)\"}},\"kind\":\"dev\",\"methods\":{\"acceptDefaultAdminTransfer()\":{\"details\":\"Completes a {defaultAdmin} transfer previously started with {beginDefaultAdminTransfer}. After calling the function: - `DEFAULT_ADMIN_ROLE` should be granted to the caller. - `DEFAULT_ADMIN_ROLE` should be revoked from the previous holder. - {pendingDefaultAdmin} should be reset to zero values. Requirements: - Only can be called by the {pendingDefaultAdmin}'s `newAdmin`. - The {pendingDefaultAdmin}'s `acceptSchedule` should've passed.\"},\"beginDefaultAdminTransfer(address)\":{\"details\":\"Starts a {defaultAdmin} transfer by setting a {pendingDefaultAdmin} scheduled for acceptance after the current timestamp plus a {defaultAdminDelay}. Requirements: - Only can be called by the current {defaultAdmin}. Emits a {DefaultAdminTransferScheduled} event.\"},\"cancelDefaultAdminTransfer()\":{\"details\":\"Cancels a {defaultAdmin} transfer previously started with {beginDefaultAdminTransfer}. A {pendingDefaultAdmin} not yet accepted can also be cancelled with this function. Requirements: - Only can be called by the current {defaultAdmin}. May emit a {DefaultAdminTransferCanceled} event.\"},\"changeDefaultAdminDelay(uint48)\":{\"details\":\"Initiates a {defaultAdminDelay} update by setting a {pendingDefaultAdminDelay} scheduled for getting into effect after the current timestamp plus a {defaultAdminDelay}. This function guarantees that any call to {beginDefaultAdminTransfer} done between the timestamp this method is called and the {pendingDefaultAdminDelay} effect schedule will use the current {defaultAdminDelay} set before calling. The {pendingDefaultAdminDelay}'s effect schedule is defined in a way that waiting until the schedule and then calling {beginDefaultAdminTransfer} with the new delay will take at least the same as another {defaultAdmin} complete transfer (including acceptance). The schedule is designed for two scenarios: - When the delay is changed for a larger one the schedule is `block.timestamp + newDelay` capped by {defaultAdminDelayIncreaseWait}. - When the delay is changed for a shorter one, the schedule is `block.timestamp + (current delay - new delay)`. A {pendingDefaultAdminDelay} that never got into effect will be canceled in favor of a new scheduled change. Requirements: - Only can be called by the current {defaultAdmin}. Emits a {DefaultAdminDelayChangeScheduled} event and may emit a {DefaultAdminDelayChangeCanceled} event.\"},\"constructor\":{\"details\":\"Sets the initial values for {defaultAdminDelay} and {defaultAdmin} address.\"},\"defaultAdmin()\":{\"details\":\"Returns the address of the current `DEFAULT_ADMIN_ROLE` holder.\"},\"defaultAdminDelay()\":{\"details\":\"Returns the delay required to schedule the acceptance of a {defaultAdmin} transfer started. This delay will be added to the current timestamp when calling {beginDefaultAdminTransfer} to set the acceptance schedule. NOTE: If a delay change has been scheduled, it will take effect as soon as the schedule passes, making this function returns the new delay. See {changeDefaultAdminDelay}.\"},\"defaultAdminDelayIncreaseWait()\":{\"details\":\"Maximum time in seconds for an increase to {defaultAdminDelay} (that is scheduled using {changeDefaultAdminDelay}) to take effect. Default to 5 days. When the {defaultAdminDelay} is scheduled to be increased, it goes into effect after the new delay has passed with the purpose of giving enough time for reverting any accidental change (i.e. using milliseconds instead of seconds) that may lock the contract. However, to avoid excessive schedules, the wait is capped by this function and it can be overridden for a custom {defaultAdminDelay} increase scheduling. IMPORTANT: Make sure to add a reasonable amount of time while overriding this value, otherwise, there's a risk of setting a high new delay that goes into effect almost immediately without the possibility of human intervention in the case of an input error (eg. set milliseconds instead of seconds).\"},\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"grantRole(bytes32,address)\":{\"details\":\"See {AccessControl-grantRole}. Reverts for `DEFAULT_ADMIN_ROLE`.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"owner()\":{\"details\":\"Gets the address of the owner.\"},\"pendingDefaultAdmin()\":{\"details\":\"Returns a tuple of a `newAdmin` and an accept schedule. After the `schedule` passes, the `newAdmin` will be able to accept the {defaultAdmin} role by calling {acceptDefaultAdminTransfer}, completing the role transfer. A zero value only in `acceptSchedule` indicates no pending admin transfer. NOTE: A zero address `newAdmin` means that {defaultAdmin} is being renounced.\"},\"pendingDefaultAdminDelay()\":{\"details\":\"Returns a tuple of `newDelay` and an effect schedule. After the `schedule` passes, the `newDelay` will get into effect immediately for every new {defaultAdmin} transfer started with {beginDefaultAdminTransfer}. A zero value only in `effectSchedule` indicates no pending delay change. NOTE: A zero value only for `newDelay` means that the next {defaultAdminDelay} will be zero after the effect schedule.\"},\"renounceRole(bytes32,address)\":{\"details\":\"See {AccessControl-renounceRole}. For the `DEFAULT_ADMIN_ROLE`, it only allows renouncing in two steps by first calling {beginDefaultAdminTransfer} to the `address(0)`, so it's required that the {pendingDefaultAdmin} schedule has also passed when calling this function. After its execution, it will not be possible to call `onlyRole(DEFAULT_ADMIN_ROLE)` functions. NOTE: Renouncing `DEFAULT_ADMIN_ROLE` will leave the contract without a {defaultAdmin}, thereby disabling any functionality that is only available for it, and the possibility of reassigning a non-administrated role.\"},\"revokeRole(bytes32,address)\":{\"details\":\"See {AccessControl-revokeRole}. Reverts for `DEFAULT_ADMIN_ROLE`.\"},\"rollbackDefaultAdminDelay()\":{\"details\":\"Cancels a scheduled {defaultAdminDelay} change. Requirements: - Only can be called by the current {defaultAdmin}. May emit a {DefaultAdminDelayChangeCanceled} event.\"},\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/access/extensions/AccessControlDefaultAdminRules.sol\":\"AccessControlDefaultAdminRules\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/AccessControl.sol\":{\"keccak256\":\"0x4686ec784d75f95beaf2bf5b5f26e5f946d4c864aaee9c3c62bdc18381f5e017\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://26710ca191913f3c9df542079c4a6dcff02968e92d4f7357daefef9fbe72a19c\",\"dweb:/ipfs/QmanHbeWuBbVEqXySHa1zhm2rExjYpChDBubBaJNTCa2JB\"]},\"@openzeppelin/contracts/access/IAccessControl.sol\":{\"keccak256\":\"0xbff9f59c84e5337689161ce7641c0ef8e872d6a7536fbc1f5133f128887aba3c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b308f882e796f7b79c9502deacb0a62983035c6f6f4e962b319ba6a1f4a77d3d\",\"dweb:/ipfs/QmaWCW7ahEQqFjwhSUhV7Ae7WhfNvzSpE7DQ58hvEooqPL\"]},\"@openzeppelin/contracts/access/extensions/AccessControlDefaultAdminRules.sol\":{\"keccak256\":\"0x5e57537d20a1706f81517842eb09b48a564d5cfc15131537bef76d9c8c100938\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c08027cac4185cca5bd35924409cb91aaa43a3fd5629d80c65edbab7c4ee2671\",\"dweb:/ipfs/QmYEhwh5mQZ5NqCaqUm2qLJ1NLcRpwEz87MM7bzXrtCfvD\"]},\"@openzeppelin/contracts/access/extensions/IAccessControlDefaultAdminRules.sol\":{\"keccak256\":\"0x5d8c755a8bfec7cb44cff075c206d642478ebc10c780494bc540cf90f3f25771\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a18c2615920ab40a406d658dc7d9f0df0447eddf7c689b29720243a623fea72e\",\"dweb:/ipfs/QmXqCRrcx9A5MhBojvSEsiGhqKDnJjfVaJuF7by3YsKWwf\"]},\"@openzeppelin/contracts/interfaces/IERC5313.sol\":{\"keccak256\":\"0x21529ba6918f994ec44fb97cef2b717d730268e911a4e626f3e425a4394f7bae\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://10949be539eb61e5ea8996cc93f21be61949c16a1b717adc2b3f8f099c1e1feb\",\"dweb:/ipfs/QmagATozhFXBUVTLaiHWyqVPgew9N1x18V6hBF46AZPeLw\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0x2d9dc2fe26180f74c11c13663647d38e259e45f95eb88f57b61d2160b0109d3e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://81233d1f98060113d9922180bb0f14f8335856fe9f339134b09335e9f678c377\",\"dweb:/ipfs/QmWh6R35SarhAn4z2wH8SU456jJSYL2FgucfTFgbHJJN4E\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617\",\"dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x59973a93b1f983f94e10529f46ca46544a9fec2b5f56fb1390bbe9e0dc79f857\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c55ef8f0b9719790c2ae6f81d80a59ffb89f2f0abe6bc065585bd79edce058c5\",\"dweb:/ipfs/QmNNmCbX9NjPXKqHJN8R1WC2rNeZSQrPZLd6FF6AKLyH5Y\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0xc8cae21c9ae4a46e5162ff9bf5b351d6fa6a6eba72d515f3bc1bdfeda7fdf083\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce830ebcf28e31643caba318996db3763c36d52cd0f23798ba83c135355d45e9\",\"dweb:/ipfs/QmdGPcvptHN7UBCbUYBbRX3hiRVRFLRwno8b4uga6uFNif\"]}},\"version\":1}","storageLayout":{"storage":[{"astId":26,"contract":"@openzeppelin/contracts/access/extensions/AccessControlDefaultAdminRules.sol:AccessControlDefaultAdminRules","label":"_roles","offset":0,"slot":"0","type":"t_mapping(t_bytes32,t_struct(RoleData)21_storage)"},{"astId":636,"contract":"@openzeppelin/contracts/access/extensions/AccessControlDefaultAdminRules.sol:AccessControlDefaultAdminRules","label":"_pendingDefaultAdmin","offset":0,"slot":"1","type":"t_address"},{"astId":638,"contract":"@openzeppelin/contracts/access/extensions/AccessControlDefaultAdminRules.sol:AccessControlDefaultAdminRules","label":"_pendingDefaultAdminSchedule","offset":20,"slot":"1","type":"t_uint48"},{"astId":640,"contract":"@openzeppelin/contracts/access/extensions/AccessControlDefaultAdminRules.sol:AccessControlDefaultAdminRules","label":"_currentDelay","offset":26,"slot":"1","type":"t_uint48"},{"astId":642,"contract":"@openzeppelin/contracts/access/extensions/AccessControlDefaultAdminRules.sol:AccessControlDefaultAdminRules","label":"_currentDefaultAdmin","offset":0,"slot":"2","type":"t_address"},{"astId":644,"contract":"@openzeppelin/contracts/access/extensions/AccessControlDefaultAdminRules.sol:AccessControlDefaultAdminRules","label":"_pendingDelay","offset":20,"slot":"2","type":"t_uint48"},{"astId":646,"contract":"@openzeppelin/contracts/access/extensions/AccessControlDefaultAdminRules.sol:AccessControlDefaultAdminRules","label":"_pendingDelaySchedule","offset":26,"slot":"2","type":"t_uint48"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_mapping(t_address,t_bool)":{"encoding":"mapping","key":"t_address","label":"mapping(address => bool)","numberOfBytes":"32","value":"t_bool"},"t_mapping(t_bytes32,t_struct(RoleData)21_storage)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => struct AccessControl.RoleData)","numberOfBytes":"32","value":"t_struct(RoleData)21_storage"},"t_struct(RoleData)21_storage":{"encoding":"inplace","label":"struct AccessControl.RoleData","members":[{"astId":18,"contract":"@openzeppelin/contracts/access/extensions/AccessControlDefaultAdminRules.sol:AccessControlDefaultAdminRules","label":"hasRole","offset":0,"slot":"0","type":"t_mapping(t_address,t_bool)"},{"astId":20,"contract":"@openzeppelin/contracts/access/extensions/AccessControlDefaultAdminRules.sol:AccessControlDefaultAdminRules","label":"adminRole","offset":0,"slot":"1","type":"t_bytes32"}],"numberOfBytes":"64"},"t_uint48":{"encoding":"inplace","label":"uint48","numberOfBytes":"6"}}},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/access/extensions/IAccessControlDefaultAdminRules.sol":{"IAccessControlDefaultAdminRules":{"abi":[{"inputs":[],"name":"AccessControlBadConfirmation","type":"error"},{"inputs":[{"internalType":"uint48","name":"schedule","type":"uint48"}],"name":"AccessControlEnforcedDefaultAdminDelay","type":"error"},{"inputs":[],"name":"AccessControlEnforcedDefaultAdminRules","type":"error"},{"inputs":[{"internalType":"address","name":"defaultAdmin","type":"address"}],"name":"AccessControlInvalidDefaultAdmin","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bytes32","name":"neededRole","type":"bytes32"}],"name":"AccessControlUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[],"name":"DefaultAdminDelayChangeCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint48","name":"newDelay","type":"uint48"},{"indexed":false,"internalType":"uint48","name":"effectSchedule","type":"uint48"}],"name":"DefaultAdminDelayChangeScheduled","type":"event"},{"anonymous":false,"inputs":[],"name":"DefaultAdminTransferCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAdmin","type":"address"},{"indexed":false,"internalType":"uint48","name":"acceptSchedule","type":"uint48"}],"name":"DefaultAdminTransferScheduled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"inputs":[],"name":"acceptDefaultAdminTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAdmin","type":"address"}],"name":"beginDefaultAdminTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cancelDefaultAdminTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint48","name":"newDelay","type":"uint48"}],"name":"changeDefaultAdminDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"defaultAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"defaultAdminDelay","outputs":[{"internalType":"uint48","name":"","type":"uint48"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"defaultAdminDelayIncreaseWait","outputs":[{"internalType":"uint48","name":"","type":"uint48"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingDefaultAdmin","outputs":[{"internalType":"address","name":"newAdmin","type":"address"},{"internalType":"uint48","name":"acceptSchedule","type":"uint48"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingDefaultAdminDelay","outputs":[{"internalType":"uint48","name":"newDelay","type":"uint48"},{"internalType":"uint48","name":"effectSchedule","type":"uint48"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"callerConfirmation","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rollbackDefaultAdminDelay","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"details":"External interface of AccessControlDefaultAdminRules declared to support ERC-165 detection.","errors":{"AccessControlBadConfirmation()":[{"details":"The caller of a function is not the expected one. NOTE: Don't confuse with {AccessControlUnauthorizedAccount}."}],"AccessControlEnforcedDefaultAdminDelay(uint48)":[{"details":"The delay for transferring the default admin delay is enforced and the operation must wait until `schedule`. NOTE: `schedule` can be 0 indicating there's no transfer scheduled."}],"AccessControlEnforcedDefaultAdminRules()":[{"details":"At least one of the following rules was violated: - The `DEFAULT_ADMIN_ROLE` must only be managed by itself. - The `DEFAULT_ADMIN_ROLE` must only be held by one account at the time. - Any `DEFAULT_ADMIN_ROLE` transfer must be in two delayed steps."}],"AccessControlInvalidDefaultAdmin(address)":[{"details":"The new default admin is not a valid default admin."}],"AccessControlUnauthorizedAccount(address,bytes32)":[{"details":"The `account` is missing a role."}]},"events":{"DefaultAdminDelayChangeCanceled()":{"details":"Emitted when a {pendingDefaultAdminDelay} is reset if its schedule didn't pass."},"DefaultAdminDelayChangeScheduled(uint48,uint48)":{"details":"Emitted when a {defaultAdminDelay} change is started, setting `newDelay` as the next delay to be applied between default admin transfer after `effectSchedule` has passed."},"DefaultAdminTransferCanceled()":{"details":"Emitted when a {pendingDefaultAdmin} is reset if it was never accepted, regardless of its schedule."},"DefaultAdminTransferScheduled(address,uint48)":{"details":"Emitted when a {defaultAdmin} transfer is started, setting `newAdmin` as the next address to become the {defaultAdmin} by calling {acceptDefaultAdminTransfer} only after `acceptSchedule` passes."},"RoleAdminChanged(bytes32,bytes32,bytes32)":{"details":"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted to signal this."},"RoleGranted(bytes32,address,address)":{"details":"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call. This account bears the admin role (for the granted role). Expected in cases where the role was granted using the internal {AccessControl-_grantRole}."},"RoleRevoked(bytes32,address,address)":{"details":"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)"}},"kind":"dev","methods":{"acceptDefaultAdminTransfer()":{"details":"Completes a {defaultAdmin} transfer previously started with {beginDefaultAdminTransfer}. After calling the function: - `DEFAULT_ADMIN_ROLE` should be granted to the caller. - `DEFAULT_ADMIN_ROLE` should be revoked from the previous holder. - {pendingDefaultAdmin} should be reset to zero values. Requirements: - Only can be called by the {pendingDefaultAdmin}'s `newAdmin`. - The {pendingDefaultAdmin}'s `acceptSchedule` should've passed."},"beginDefaultAdminTransfer(address)":{"details":"Starts a {defaultAdmin} transfer by setting a {pendingDefaultAdmin} scheduled for acceptance after the current timestamp plus a {defaultAdminDelay}. Requirements: - Only can be called by the current {defaultAdmin}. Emits a {DefaultAdminTransferScheduled} event."},"cancelDefaultAdminTransfer()":{"details":"Cancels a {defaultAdmin} transfer previously started with {beginDefaultAdminTransfer}. A {pendingDefaultAdmin} not yet accepted can also be cancelled with this function. Requirements: - Only can be called by the current {defaultAdmin}. May emit a {DefaultAdminTransferCanceled} event."},"changeDefaultAdminDelay(uint48)":{"details":"Initiates a {defaultAdminDelay} update by setting a {pendingDefaultAdminDelay} scheduled for getting into effect after the current timestamp plus a {defaultAdminDelay}. This function guarantees that any call to {beginDefaultAdminTransfer} done between the timestamp this method is called and the {pendingDefaultAdminDelay} effect schedule will use the current {defaultAdminDelay} set before calling. The {pendingDefaultAdminDelay}'s effect schedule is defined in a way that waiting until the schedule and then calling {beginDefaultAdminTransfer} with the new delay will take at least the same as another {defaultAdmin} complete transfer (including acceptance). The schedule is designed for two scenarios: - When the delay is changed for a larger one the schedule is `block.timestamp + newDelay` capped by {defaultAdminDelayIncreaseWait}. - When the delay is changed for a shorter one, the schedule is `block.timestamp + (current delay - new delay)`. A {pendingDefaultAdminDelay} that never got into effect will be canceled in favor of a new scheduled change. Requirements: - Only can be called by the current {defaultAdmin}. Emits a {DefaultAdminDelayChangeScheduled} event and may emit a {DefaultAdminDelayChangeCanceled} event."},"defaultAdmin()":{"details":"Returns the address of the current `DEFAULT_ADMIN_ROLE` holder."},"defaultAdminDelay()":{"details":"Returns the delay required to schedule the acceptance of a {defaultAdmin} transfer started. This delay will be added to the current timestamp when calling {beginDefaultAdminTransfer} to set the acceptance schedule. NOTE: If a delay change has been scheduled, it will take effect as soon as the schedule passes, making this function returns the new delay. See {changeDefaultAdminDelay}."},"defaultAdminDelayIncreaseWait()":{"details":"Maximum time in seconds for an increase to {defaultAdminDelay} (that is scheduled using {changeDefaultAdminDelay}) to take effect. Default to 5 days. When the {defaultAdminDelay} is scheduled to be increased, it goes into effect after the new delay has passed with the purpose of giving enough time for reverting any accidental change (i.e. using milliseconds instead of seconds) that may lock the contract. However, to avoid excessive schedules, the wait is capped by this function and it can be overridden for a custom {defaultAdminDelay} increase scheduling. IMPORTANT: Make sure to add a reasonable amount of time while overriding this value, otherwise, there's a risk of setting a high new delay that goes into effect almost immediately without the possibility of human intervention in the case of an input error (eg. set milliseconds instead of seconds)."},"getRoleAdmin(bytes32)":{"details":"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {AccessControl-_setRoleAdmin}."},"grantRole(bytes32,address)":{"details":"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role."},"hasRole(bytes32,address)":{"details":"Returns `true` if `account` has been granted `role`."},"pendingDefaultAdmin()":{"details":"Returns a tuple of a `newAdmin` and an accept schedule. After the `schedule` passes, the `newAdmin` will be able to accept the {defaultAdmin} role by calling {acceptDefaultAdminTransfer}, completing the role transfer. A zero value only in `acceptSchedule` indicates no pending admin transfer. NOTE: A zero address `newAdmin` means that {defaultAdmin} is being renounced."},"pendingDefaultAdminDelay()":{"details":"Returns a tuple of `newDelay` and an effect schedule. After the `schedule` passes, the `newDelay` will get into effect immediately for every new {defaultAdmin} transfer started with {beginDefaultAdminTransfer}. A zero value only in `effectSchedule` indicates no pending delay change. NOTE: A zero value only for `newDelay` means that the next {defaultAdminDelay} will be zero after the effect schedule."},"renounceRole(bytes32,address)":{"details":"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `callerConfirmation`."},"revokeRole(bytes32,address)":{"details":"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role."},"rollbackDefaultAdminDelay()":{"details":"Cancels a scheduled {defaultAdminDelay} change. Requirements: - Only can be called by the current {defaultAdmin}. May emit a {DefaultAdminDelayChangeCanceled} event."}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"acceptDefaultAdminTransfer()":"cefc1429","beginDefaultAdminTransfer(address)":"634e93da","cancelDefaultAdminTransfer()":"d602b9fd","changeDefaultAdminDelay(uint48)":"649a5ec7","defaultAdmin()":"84ef8ffc","defaultAdminDelay()":"cc8463c8","defaultAdminDelayIncreaseWait()":"022d63fb","getRoleAdmin(bytes32)":"248a9ca3","grantRole(bytes32,address)":"2f2ff15d","hasRole(bytes32,address)":"91d14854","pendingDefaultAdmin()":"cf6eefb7","pendingDefaultAdminDelay()":"a1eda53c","renounceRole(bytes32,address)":"36568abe","revokeRole(bytes32,address)":"d547741f","rollbackDefaultAdminDelay()":"0aa6220b"}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AccessControlBadConfirmation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint48\",\"name\":\"schedule\",\"type\":\"uint48\"}],\"name\":\"AccessControlEnforcedDefaultAdminDelay\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AccessControlEnforcedDefaultAdminRules\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"defaultAdmin\",\"type\":\"address\"}],\"name\":\"AccessControlInvalidDefaultAdmin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"neededRole\",\"type\":\"bytes32\"}],\"name\":\"AccessControlUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"DefaultAdminDelayChangeCanceled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint48\",\"name\":\"newDelay\",\"type\":\"uint48\"},{\"indexed\":false,\"internalType\":\"uint48\",\"name\":\"effectSchedule\",\"type\":\"uint48\"}],\"name\":\"DefaultAdminDelayChangeScheduled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"DefaultAdminTransferCanceled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint48\",\"name\":\"acceptSchedule\",\"type\":\"uint48\"}],\"name\":\"DefaultAdminTransferScheduled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptDefaultAdminTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"beginDefaultAdminTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"cancelDefaultAdminTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint48\",\"name\":\"newDelay\",\"type\":\"uint48\"}],\"name\":\"changeDefaultAdminDelay\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"defaultAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"defaultAdminDelay\",\"outputs\":[{\"internalType\":\"uint48\",\"name\":\"\",\"type\":\"uint48\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"defaultAdminDelayIncreaseWait\",\"outputs\":[{\"internalType\":\"uint48\",\"name\":\"\",\"type\":\"uint48\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingDefaultAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"},{\"internalType\":\"uint48\",\"name\":\"acceptSchedule\",\"type\":\"uint48\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingDefaultAdminDelay\",\"outputs\":[{\"internalType\":\"uint48\",\"name\":\"newDelay\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"effectSchedule\",\"type\":\"uint48\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"callerConfirmation\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollbackDefaultAdminDelay\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"External interface of AccessControlDefaultAdminRules declared to support ERC-165 detection.\",\"errors\":{\"AccessControlBadConfirmation()\":[{\"details\":\"The caller of a function is not the expected one. NOTE: Don't confuse with {AccessControlUnauthorizedAccount}.\"}],\"AccessControlEnforcedDefaultAdminDelay(uint48)\":[{\"details\":\"The delay for transferring the default admin delay is enforced and the operation must wait until `schedule`. NOTE: `schedule` can be 0 indicating there's no transfer scheduled.\"}],\"AccessControlEnforcedDefaultAdminRules()\":[{\"details\":\"At least one of the following rules was violated: - The `DEFAULT_ADMIN_ROLE` must only be managed by itself. - The `DEFAULT_ADMIN_ROLE` must only be held by one account at the time. - Any `DEFAULT_ADMIN_ROLE` transfer must be in two delayed steps.\"}],\"AccessControlInvalidDefaultAdmin(address)\":[{\"details\":\"The new default admin is not a valid default admin.\"}],\"AccessControlUnauthorizedAccount(address,bytes32)\":[{\"details\":\"The `account` is missing a role.\"}]},\"events\":{\"DefaultAdminDelayChangeCanceled()\":{\"details\":\"Emitted when a {pendingDefaultAdminDelay} is reset if its schedule didn't pass.\"},\"DefaultAdminDelayChangeScheduled(uint48,uint48)\":{\"details\":\"Emitted when a {defaultAdminDelay} change is started, setting `newDelay` as the next delay to be applied between default admin transfer after `effectSchedule` has passed.\"},\"DefaultAdminTransferCanceled()\":{\"details\":\"Emitted when a {pendingDefaultAdmin} is reset if it was never accepted, regardless of its schedule.\"},\"DefaultAdminTransferScheduled(address,uint48)\":{\"details\":\"Emitted when a {defaultAdmin} transfer is started, setting `newAdmin` as the next address to become the {defaultAdmin} by calling {acceptDefaultAdminTransfer} only after `acceptSchedule` passes.\"},\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted to signal this.\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call. This account bears the admin role (for the granted role). Expected in cases where the role was granted using the internal {AccessControl-_grantRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)\"}},\"kind\":\"dev\",\"methods\":{\"acceptDefaultAdminTransfer()\":{\"details\":\"Completes a {defaultAdmin} transfer previously started with {beginDefaultAdminTransfer}. After calling the function: - `DEFAULT_ADMIN_ROLE` should be granted to the caller. - `DEFAULT_ADMIN_ROLE` should be revoked from the previous holder. - {pendingDefaultAdmin} should be reset to zero values. Requirements: - Only can be called by the {pendingDefaultAdmin}'s `newAdmin`. - The {pendingDefaultAdmin}'s `acceptSchedule` should've passed.\"},\"beginDefaultAdminTransfer(address)\":{\"details\":\"Starts a {defaultAdmin} transfer by setting a {pendingDefaultAdmin} scheduled for acceptance after the current timestamp plus a {defaultAdminDelay}. Requirements: - Only can be called by the current {defaultAdmin}. Emits a {DefaultAdminTransferScheduled} event.\"},\"cancelDefaultAdminTransfer()\":{\"details\":\"Cancels a {defaultAdmin} transfer previously started with {beginDefaultAdminTransfer}. A {pendingDefaultAdmin} not yet accepted can also be cancelled with this function. Requirements: - Only can be called by the current {defaultAdmin}. May emit a {DefaultAdminTransferCanceled} event.\"},\"changeDefaultAdminDelay(uint48)\":{\"details\":\"Initiates a {defaultAdminDelay} update by setting a {pendingDefaultAdminDelay} scheduled for getting into effect after the current timestamp plus a {defaultAdminDelay}. This function guarantees that any call to {beginDefaultAdminTransfer} done between the timestamp this method is called and the {pendingDefaultAdminDelay} effect schedule will use the current {defaultAdminDelay} set before calling. The {pendingDefaultAdminDelay}'s effect schedule is defined in a way that waiting until the schedule and then calling {beginDefaultAdminTransfer} with the new delay will take at least the same as another {defaultAdmin} complete transfer (including acceptance). The schedule is designed for two scenarios: - When the delay is changed for a larger one the schedule is `block.timestamp + newDelay` capped by {defaultAdminDelayIncreaseWait}. - When the delay is changed for a shorter one, the schedule is `block.timestamp + (current delay - new delay)`. A {pendingDefaultAdminDelay} that never got into effect will be canceled in favor of a new scheduled change. Requirements: - Only can be called by the current {defaultAdmin}. Emits a {DefaultAdminDelayChangeScheduled} event and may emit a {DefaultAdminDelayChangeCanceled} event.\"},\"defaultAdmin()\":{\"details\":\"Returns the address of the current `DEFAULT_ADMIN_ROLE` holder.\"},\"defaultAdminDelay()\":{\"details\":\"Returns the delay required to schedule the acceptance of a {defaultAdmin} transfer started. This delay will be added to the current timestamp when calling {beginDefaultAdminTransfer} to set the acceptance schedule. NOTE: If a delay change has been scheduled, it will take effect as soon as the schedule passes, making this function returns the new delay. See {changeDefaultAdminDelay}.\"},\"defaultAdminDelayIncreaseWait()\":{\"details\":\"Maximum time in seconds for an increase to {defaultAdminDelay} (that is scheduled using {changeDefaultAdminDelay}) to take effect. Default to 5 days. When the {defaultAdminDelay} is scheduled to be increased, it goes into effect after the new delay has passed with the purpose of giving enough time for reverting any accidental change (i.e. using milliseconds instead of seconds) that may lock the contract. However, to avoid excessive schedules, the wait is capped by this function and it can be overridden for a custom {defaultAdminDelay} increase scheduling. IMPORTANT: Make sure to add a reasonable amount of time while overriding this value, otherwise, there's a risk of setting a high new delay that goes into effect almost immediately without the possibility of human intervention in the case of an input error (eg. set milliseconds instead of seconds).\"},\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {AccessControl-_setRoleAdmin}.\"},\"grantRole(bytes32,address)\":{\"details\":\"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"pendingDefaultAdmin()\":{\"details\":\"Returns a tuple of a `newAdmin` and an accept schedule. After the `schedule` passes, the `newAdmin` will be able to accept the {defaultAdmin} role by calling {acceptDefaultAdminTransfer}, completing the role transfer. A zero value only in `acceptSchedule` indicates no pending admin transfer. NOTE: A zero address `newAdmin` means that {defaultAdmin} is being renounced.\"},\"pendingDefaultAdminDelay()\":{\"details\":\"Returns a tuple of `newDelay` and an effect schedule. After the `schedule` passes, the `newDelay` will get into effect immediately for every new {defaultAdmin} transfer started with {beginDefaultAdminTransfer}. A zero value only in `effectSchedule` indicates no pending delay change. NOTE: A zero value only for `newDelay` means that the next {defaultAdminDelay} will be zero after the effect schedule.\"},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `callerConfirmation`.\"},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role.\"},\"rollbackDefaultAdminDelay()\":{\"details\":\"Cancels a scheduled {defaultAdminDelay} change. Requirements: - Only can be called by the current {defaultAdmin}. May emit a {DefaultAdminDelayChangeCanceled} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/access/extensions/IAccessControlDefaultAdminRules.sol\":\"IAccessControlDefaultAdminRules\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/IAccessControl.sol\":{\"keccak256\":\"0xbff9f59c84e5337689161ce7641c0ef8e872d6a7536fbc1f5133f128887aba3c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b308f882e796f7b79c9502deacb0a62983035c6f6f4e962b319ba6a1f4a77d3d\",\"dweb:/ipfs/QmaWCW7ahEQqFjwhSUhV7Ae7WhfNvzSpE7DQ58hvEooqPL\"]},\"@openzeppelin/contracts/access/extensions/IAccessControlDefaultAdminRules.sol\":{\"keccak256\":\"0x5d8c755a8bfec7cb44cff075c206d642478ebc10c780494bc540cf90f3f25771\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a18c2615920ab40a406d658dc7d9f0df0447eddf7c689b29720243a623fea72e\",\"dweb:/ipfs/QmXqCRrcx9A5MhBojvSEsiGhqKDnJjfVaJuF7by3YsKWwf\"]}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/interfaces/IERC2981.sol":{"IERC2981":{"abi":[{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"salePrice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"royaltyAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"devdoc":{"details":"Interface for the NFT Royalty Standard. A standardized way to retrieve royalty payment information for non-fungible tokens (NFTs) to enable universal support for royalty payments across all NFT marketplaces and ecosystem participants.","kind":"dev","methods":{"royaltyInfo(uint256,uint256)":{"details":"Returns how much royalty is owed and to whom, based on a sale price that may be denominated in any unit of exchange. The royalty amount is denominated and should be paid in that same unit of exchange. NOTE: ERC-2981 allows setting the royalty to 100% of the price. In that case all the price would be sent to the royalty receiver and 0 tokens to the seller. Contracts dealing with royalty should consider empty transfers."},"supportsInterface(bytes4)":{"details":"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas."}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"royaltyInfo(uint256,uint256)":"2a55205a","supportsInterface(bytes4)":"01ffc9a7"}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"salePrice\",\"type\":\"uint256\"}],\"name\":\"royaltyInfo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"royaltyAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface for the NFT Royalty Standard. A standardized way to retrieve royalty payment information for non-fungible tokens (NFTs) to enable universal support for royalty payments across all NFT marketplaces and ecosystem participants.\",\"kind\":\"dev\",\"methods\":{\"royaltyInfo(uint256,uint256)\":{\"details\":\"Returns how much royalty is owed and to whom, based on a sale price that may be denominated in any unit of exchange. The royalty amount is denominated and should be paid in that same unit of exchange. NOTE: ERC-2981 allows setting the royalty to 100% of the price. In that case all the price would be sent to the royalty receiver and 0 tokens to the seller. Contracts dealing with royalty should consider empty transfers.\"},\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/interfaces/IERC2981.sol\":\"IERC2981\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/interfaces/IERC2981.sol\":{\"keccak256\":\"0xafab0e6c71905303c47dd254168cb31efc91f0ae284cde609b0202f97f85469e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://824d05aec56eb82a2a3c28eece530dc0792d3a008b09d01444e57cf4aceb0445\",\"dweb:/ipfs/QmVvqmJ5UobuRU9Q4JMyXxBfzKs2cpjbWXMNpxX4binTX8\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617\",\"dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u\"]}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/interfaces/IERC5313.sol":{"IERC5313":{"abi":[{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"devdoc":{"details":"Interface for the Light Contract Ownership Standard. A standardized minimal interface required to identify an account that controls a contract","kind":"dev","methods":{"owner()":{"details":"Gets the address of the owner."}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"owner()":"8da5cb5b"}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface for the Light Contract Ownership Standard. A standardized minimal interface required to identify an account that controls a contract\",\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Gets the address of the owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/interfaces/IERC5313.sol\":\"IERC5313\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/interfaces/IERC5313.sol\":{\"keccak256\":\"0x21529ba6918f994ec44fb97cef2b717d730268e911a4e626f3e425a4394f7bae\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://10949be539eb61e5ea8996cc93f21be61949c16a1b717adc2b3f8f099c1e1feb\",\"dweb:/ipfs/QmagATozhFXBUVTLaiHWyqVPgew9N1x18V6hBF46AZPeLw\"]}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/interfaces/draft-IERC6093.sol":{"IERC1155Errors":{"abi":[{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ERC1155InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC1155InvalidApprover","type":"error"},{"inputs":[{"internalType":"uint256","name":"idsLength","type":"uint256"},{"internalType":"uint256","name":"valuesLength","type":"uint256"}],"name":"ERC1155InvalidArrayLength","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"ERC1155InvalidOperator","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC1155InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC1155InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"ERC1155MissingApprovalForAll","type":"error"}],"devdoc":{"details":"Standard ERC-1155 Errors Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-1155 tokens.","errors":{"ERC1155InsufficientBalance(address,uint256,uint256,uint256)":[{"details":"Indicates an error related to the current `balance` of a `sender`. Used in transfers.","params":{"balance":"Current balance for the interacting account.","needed":"Minimum amount required to perform a transfer.","sender":"Address whose tokens are being transferred.","tokenId":"Identifier number of a token."}}],"ERC1155InvalidApprover(address)":[{"details":"Indicates a failure with the `approver` of a token to be approved. Used in approvals.","params":{"approver":"Address initiating an approval operation."}}],"ERC1155InvalidArrayLength(uint256,uint256)":[{"details":"Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation. Used in batch transfers.","params":{"idsLength":"Length of the array of token identifiers","valuesLength":"Length of the array of token amounts"}}],"ERC1155InvalidOperator(address)":[{"details":"Indicates a failure with the `operator` to be approved. Used in approvals.","params":{"operator":"Address that may be allowed to operate on tokens without being their owner."}}],"ERC1155InvalidReceiver(address)":[{"details":"Indicates a failure with the token `receiver`. Used in transfers.","params":{"receiver":"Address to which tokens are being transferred."}}],"ERC1155InvalidSender(address)":[{"details":"Indicates a failure with the token `sender`. Used in transfers.","params":{"sender":"Address whose tokens are being transferred."}}],"ERC1155MissingApprovalForAll(address,address)":[{"details":"Indicates a failure with the `operator`’s approval. Used in transfers.","params":{"operator":"Address that may be allowed to operate on tokens without being their owner.","owner":"Address of the current owner of a token."}}]},"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC1155InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC1155InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"idsLength\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"valuesLength\",\"type\":\"uint256\"}],\"name\":\"ERC1155InvalidArrayLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"ERC1155InvalidOperator\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC1155InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC1155InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC1155MissingApprovalForAll\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Standard ERC-1155 Errors Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-1155 tokens.\",\"errors\":{\"ERC1155InsufficientBalance(address,uint256,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC1155InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC1155InvalidArrayLength(uint256,uint256)\":[{\"details\":\"Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation. Used in batch transfers.\",\"params\":{\"idsLength\":\"Length of the array of token identifiers\",\"valuesLength\":\"Length of the array of token amounts\"}}],\"ERC1155InvalidOperator(address)\":[{\"details\":\"Indicates a failure with the `operator` to be approved. Used in approvals.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC1155InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC1155InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC1155MissingApprovalForAll(address,address)\":[{\"details\":\"Indicates a failure with the `operator`\\u2019s approval. Used in transfers.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\",\"owner\":\"Address of the current owner of a token.\"}}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":\"IERC1155Errors\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x1b88b3fb3d85ba5496d7d5f396f83ee1fddcdd6762059ff65992655b67920998\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://89393bb3212da1c0889601b9706a07b39419ddc4d2faab9eaf6e7f9152cf6a1c\",\"dweb:/ipfs/QmcCfzzxv1Bkdz1c1yF4gQCeYb6Us5BJANnzTFqawfd1HL\"]}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}},"IERC20Errors":{"abi":[{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"}],"devdoc":{"details":"Standard ERC-20 Errors Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 tokens.","errors":{"ERC20InsufficientAllowance(address,uint256,uint256)":[{"details":"Indicates a failure with the `spender`’s `allowance`. Used in transfers.","params":{"allowance":"Amount of tokens a `spender` is allowed to operate with.","needed":"Minimum amount required to perform a transfer.","spender":"Address that may be allowed to operate on tokens without being their owner."}}],"ERC20InsufficientBalance(address,uint256,uint256)":[{"details":"Indicates an error related to the current `balance` of a `sender`. Used in transfers.","params":{"balance":"Current balance for the interacting account.","needed":"Minimum amount required to perform a transfer.","sender":"Address whose tokens are being transferred."}}],"ERC20InvalidApprover(address)":[{"details":"Indicates a failure with the `approver` of a token to be approved. Used in approvals.","params":{"approver":"Address initiating an approval operation."}}],"ERC20InvalidReceiver(address)":[{"details":"Indicates a failure with the token `receiver`. Used in transfers.","params":{"receiver":"Address to which tokens are being transferred."}}],"ERC20InvalidSender(address)":[{"details":"Indicates a failure with the token `sender`. Used in transfers.","params":{"sender":"Address whose tokens are being transferred."}}],"ERC20InvalidSpender(address)":[{"details":"Indicates a failure with the `spender` to be approved. Used in approvals.","params":{"spender":"Address that may be allowed to operate on tokens without being their owner."}}]},"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Standard ERC-20 Errors Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 tokens.\",\"errors\":{\"ERC20InsufficientAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failure with the `spender`\\u2019s `allowance`. Used in transfers.\",\"params\":{\"allowance\":\"Amount of tokens a `spender` is allowed to operate with.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC20InsufficientBalance(address,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC20InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC20InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidSpender(address)\":[{\"details\":\"Indicates a failure with the `spender` to be approved. Used in approvals.\",\"params\":{\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":\"IERC20Errors\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x1b88b3fb3d85ba5496d7d5f396f83ee1fddcdd6762059ff65992655b67920998\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://89393bb3212da1c0889601b9706a07b39419ddc4d2faab9eaf6e7f9152cf6a1c\",\"dweb:/ipfs/QmcCfzzxv1Bkdz1c1yF4gQCeYb6Us5BJANnzTFqawfd1HL\"]}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}},"IERC721Errors":{"abi":[{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"owner","type":"address"}],"name":"ERC721IncorrectOwner","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ERC721InsufficientApproval","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC721InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"ERC721InvalidOperator","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"ERC721InvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC721InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC721InvalidSender","type":"error"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ERC721NonexistentToken","type":"error"}],"devdoc":{"details":"Standard ERC-721 Errors Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-721 tokens.","errors":{"ERC721IncorrectOwner(address,uint256,address)":[{"details":"Indicates an error related to the ownership over a particular token. Used in transfers.","params":{"owner":"Address of the current owner of a token.","sender":"Address whose tokens are being transferred.","tokenId":"Identifier number of a token."}}],"ERC721InsufficientApproval(address,uint256)":[{"details":"Indicates a failure with the `operator`’s approval. Used in transfers.","params":{"operator":"Address that may be allowed to operate on tokens without being their owner.","tokenId":"Identifier number of a token."}}],"ERC721InvalidApprover(address)":[{"details":"Indicates a failure with the `approver` of a token to be approved. Used in approvals.","params":{"approver":"Address initiating an approval operation."}}],"ERC721InvalidOperator(address)":[{"details":"Indicates a failure with the `operator` to be approved. Used in approvals.","params":{"operator":"Address that may be allowed to operate on tokens without being their owner."}}],"ERC721InvalidOwner(address)":[{"details":"Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-721. Used in balance queries.","params":{"owner":"Address of the current owner of a token."}}],"ERC721InvalidReceiver(address)":[{"details":"Indicates a failure with the token `receiver`. Used in transfers.","params":{"receiver":"Address to which tokens are being transferred."}}],"ERC721InvalidSender(address)":[{"details":"Indicates a failure with the token `sender`. Used in transfers.","params":{"sender":"Address whose tokens are being transferred."}}],"ERC721NonexistentToken(uint256)":[{"details":"Indicates a `tokenId` whose `owner` is the zero address.","params":{"tokenId":"Identifier number of a token."}}]},"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC721IncorrectOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC721InsufficientApproval\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC721InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"ERC721InvalidOperator\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC721InvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC721InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC721InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC721NonexistentToken\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Standard ERC-721 Errors Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-721 tokens.\",\"errors\":{\"ERC721IncorrectOwner(address,uint256,address)\":[{\"details\":\"Indicates an error related to the ownership over a particular token. Used in transfers.\",\"params\":{\"owner\":\"Address of the current owner of a token.\",\"sender\":\"Address whose tokens are being transferred.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC721InsufficientApproval(address,uint256)\":[{\"details\":\"Indicates a failure with the `operator`\\u2019s approval. Used in transfers.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC721InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC721InvalidOperator(address)\":[{\"details\":\"Indicates a failure with the `operator` to be approved. Used in approvals.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC721InvalidOwner(address)\":[{\"details\":\"Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-721. Used in balance queries.\",\"params\":{\"owner\":\"Address of the current owner of a token.\"}}],\"ERC721InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC721InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC721NonexistentToken(uint256)\":[{\"details\":\"Indicates a `tokenId` whose `owner` is the zero address.\",\"params\":{\"tokenId\":\"Identifier number of a token.\"}}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":\"IERC721Errors\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x1b88b3fb3d85ba5496d7d5f396f83ee1fddcdd6762059ff65992655b67920998\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://89393bb3212da1c0889601b9706a07b39419ddc4d2faab9eaf6e7f9152cf6a1c\",\"dweb:/ipfs/QmcCfzzxv1Bkdz1c1yF4gQCeYb6Us5BJANnzTFqawfd1HL\"]}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/token/ERC721/ERC721.sol":{"ERC721":{"abi":[{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"owner","type":"address"}],"name":"ERC721IncorrectOwner","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ERC721InsufficientApproval","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC721InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"ERC721InvalidOperator","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"ERC721InvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC721InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC721InvalidSender","type":"error"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ERC721NonexistentToken","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"details":"Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC-721] Non-Fungible Token Standard, including the Metadata extension, but not including the Enumerable extension, which is available separately as {ERC721Enumerable}.","errors":{"ERC721IncorrectOwner(address,uint256,address)":[{"details":"Indicates an error related to the ownership over a particular token. Used in transfers.","params":{"owner":"Address of the current owner of a token.","sender":"Address whose tokens are being transferred.","tokenId":"Identifier number of a token."}}],"ERC721InsufficientApproval(address,uint256)":[{"details":"Indicates a failure with the `operator`’s approval. Used in transfers.","params":{"operator":"Address that may be allowed to operate on tokens without being their owner.","tokenId":"Identifier number of a token."}}],"ERC721InvalidApprover(address)":[{"details":"Indicates a failure with the `approver` of a token to be approved. Used in approvals.","params":{"approver":"Address initiating an approval operation."}}],"ERC721InvalidOperator(address)":[{"details":"Indicates a failure with the `operator` to be approved. Used in approvals.","params":{"operator":"Address that may be allowed to operate on tokens without being their owner."}}],"ERC721InvalidOwner(address)":[{"details":"Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-721. Used in balance queries.","params":{"owner":"Address of the current owner of a token."}}],"ERC721InvalidReceiver(address)":[{"details":"Indicates a failure with the token `receiver`. Used in transfers.","params":{"receiver":"Address to which tokens are being transferred."}}],"ERC721InvalidSender(address)":[{"details":"Indicates a failure with the token `sender`. Used in transfers.","params":{"sender":"Address whose tokens are being transferred."}}],"ERC721NonexistentToken(uint256)":[{"details":"Indicates a `tokenId` whose `owner` is the zero address.","params":{"tokenId":"Identifier number of a token."}}]},"events":{"Approval(address,address,uint256)":{"details":"Emitted when `owner` enables `approved` to manage the `tokenId` token."},"ApprovalForAll(address,address,bool)":{"details":"Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets."},"Transfer(address,address,uint256)":{"details":"Emitted when `tokenId` token is transferred from `from` to `to`."}},"kind":"dev","methods":{"approve(address,uint256)":{"details":"Gives permission to `to` to transfer `tokenId` token to another account. The approval is cleared when the token is transferred. Only a single account can be approved at a time, so approving the zero address clears previous approvals. Requirements: - The caller must own the token or be an approved operator. - `tokenId` must exist. Emits an {Approval} event."},"balanceOf(address)":{"details":"Returns the number of tokens in ``owner``'s account."},"constructor":{"details":"Initializes the contract by setting a `name` and a `symbol` to the token collection."},"getApproved(uint256)":{"details":"Returns the account approved for `tokenId` token. Requirements: - `tokenId` must exist."},"isApprovedForAll(address,address)":{"details":"Returns if the `operator` is allowed to manage all of the assets of `owner`. See {setApprovalForAll}"},"name()":{"details":"Returns the token collection name."},"ownerOf(uint256)":{"details":"Returns the owner of the `tokenId` token. Requirements: - `tokenId` must exist."},"safeTransferFrom(address,address,uint256)":{"details":"Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients are aware of the ERC-721 protocol to prevent tokens from being forever locked. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must exist and be owned by `from`. - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. Emits a {Transfer} event."},"safeTransferFrom(address,address,uint256,bytes)":{"details":"Safely transfers `tokenId` token from `from` to `to`. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must exist and be owned by `from`. - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. Emits a {Transfer} event."},"setApprovalForAll(address,bool)":{"details":"Approve or remove `operator` as an operator for the caller. Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. Requirements: - The `operator` cannot be the address zero. Emits an {ApprovalForAll} event."},"supportsInterface(bytes4)":{"details":"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas."},"symbol()":{"details":"Returns the token collection symbol."},"tokenURI(uint256)":{"details":"Returns the Uniform Resource Identifier (URI) for `tokenId` token."},"transferFrom(address,address,uint256)":{"details":"Transfers `tokenId` token from `from` to `to`. WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC-721 or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must understand this adds an external call which potentially creates a reentrancy vulnerability. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must be owned by `from`. - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. Emits a {Transfer} event."}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","getApproved(uint256)":"081812fc","isApprovedForAll(address,address)":"e985e9c5","name()":"06fdde03","ownerOf(uint256)":"6352211e","safeTransferFrom(address,address,uint256)":"42842e0e","safeTransferFrom(address,address,uint256,bytes)":"b88d4fde","setApprovalForAll(address,bool)":"a22cb465","supportsInterface(bytes4)":"01ffc9a7","symbol()":"95d89b41","tokenURI(uint256)":"c87b56dd","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC721IncorrectOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC721InsufficientApproval\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC721InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"ERC721InvalidOperator\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC721InvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC721InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC721InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC721NonexistentToken\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC-721] Non-Fungible Token Standard, including the Metadata extension, but not including the Enumerable extension, which is available separately as {ERC721Enumerable}.\",\"errors\":{\"ERC721IncorrectOwner(address,uint256,address)\":[{\"details\":\"Indicates an error related to the ownership over a particular token. Used in transfers.\",\"params\":{\"owner\":\"Address of the current owner of a token.\",\"sender\":\"Address whose tokens are being transferred.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC721InsufficientApproval(address,uint256)\":[{\"details\":\"Indicates a failure with the `operator`\\u2019s approval. Used in transfers.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC721InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC721InvalidOperator(address)\":[{\"details\":\"Indicates a failure with the `operator` to be approved. Used in approvals.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC721InvalidOwner(address)\":[{\"details\":\"Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-721. Used in balance queries.\",\"params\":{\"owner\":\"Address of the current owner of a token.\"}}],\"ERC721InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC721InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC721NonexistentToken(uint256)\":[{\"details\":\"Indicates a `tokenId` whose `owner` is the zero address.\",\"params\":{\"tokenId\":\"Identifier number of a token.\"}}]},\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when `owner` enables `approved` to manage the `tokenId` token.\"},\"ApprovalForAll(address,address,bool)\":{\"details\":\"Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `tokenId` token is transferred from `from` to `to`.\"}},\"kind\":\"dev\",\"methods\":{\"approve(address,uint256)\":{\"details\":\"Gives permission to `to` to transfer `tokenId` token to another account. The approval is cleared when the token is transferred. Only a single account can be approved at a time, so approving the zero address clears previous approvals. Requirements: - The caller must own the token or be an approved operator. - `tokenId` must exist. Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the number of tokens in ``owner``'s account.\"},\"constructor\":{\"details\":\"Initializes the contract by setting a `name` and a `symbol` to the token collection.\"},\"getApproved(uint256)\":{\"details\":\"Returns the account approved for `tokenId` token. Requirements: - `tokenId` must exist.\"},\"isApprovedForAll(address,address)\":{\"details\":\"Returns if the `operator` is allowed to manage all of the assets of `owner`. See {setApprovalForAll}\"},\"name()\":{\"details\":\"Returns the token collection name.\"},\"ownerOf(uint256)\":{\"details\":\"Returns the owner of the `tokenId` token. Requirements: - `tokenId` must exist.\"},\"safeTransferFrom(address,address,uint256)\":{\"details\":\"Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients are aware of the ERC-721 protocol to prevent tokens from being forever locked. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must exist and be owned by `from`. - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. Emits a {Transfer} event.\"},\"safeTransferFrom(address,address,uint256,bytes)\":{\"details\":\"Safely transfers `tokenId` token from `from` to `to`. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must exist and be owned by `from`. - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. Emits a {Transfer} event.\"},\"setApprovalForAll(address,bool)\":{\"details\":\"Approve or remove `operator` as an operator for the caller. Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. Requirements: - The `operator` cannot be the address zero. Emits an {ApprovalForAll} event.\"},\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"},\"symbol()\":{\"details\":\"Returns the token collection symbol.\"},\"tokenURI(uint256)\":{\"details\":\"Returns the Uniform Resource Identifier (URI) for `tokenId` token.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Transfers `tokenId` token from `from` to `to`. WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC-721 or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must understand this adds an external call which potentially creates a reentrancy vulnerability. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must be owned by `from`. - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. Emits a {Transfer} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC721/ERC721.sol\":\"ERC721\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x1b88b3fb3d85ba5496d7d5f396f83ee1fddcdd6762059ff65992655b67920998\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://89393bb3212da1c0889601b9706a07b39419ddc4d2faab9eaf6e7f9152cf6a1c\",\"dweb:/ipfs/QmcCfzzxv1Bkdz1c1yF4gQCeYb6Us5BJANnzTFqawfd1HL\"]},\"@openzeppelin/contracts/token/ERC721/ERC721.sol\":{\"keccak256\":\"0xf6bb0dc431a9c50e25756412ec14cfcd4dc61dd40b8dc0e1b58ec09fce6d5564\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eb87fef7e8ed754b8600cd5d42e4f23128059006368ffd19e4d50cc166471ee5\",\"dweb:/ipfs/Qmc1vy1cevKreGUsG7S79gyhNvDtPnNz9qG47eYVHmMKLs\"]},\"@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0xf78f05f3b8c9f75570e85300d7b4600d7f6f6a198449273f31d44c1641adb46f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e28b872613b45e0e801d4995aa4380be2531147bfe2d85c1d6275f1de514fba3\",\"dweb:/ipfs/QmeeFcfShHYaS3BdgVj78nxR28ZaVUwbvr66ud8bT6kzw9\"]},\"@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol\":{\"keccak256\":\"0x88cd5e3bee2e8c36b8d9058fbcaa81ad5704281b25634122234b55ea853d8055\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8dc7e7ab5b8ea36c15027ab04221b05d1c970f47a53e9fd47ead8ca665d49c7e\",\"dweb:/ipfs/Qmeeph7fsDyfRr8vb2L8KcDEmKPb224TAayMvgqgGAnqpL\"]},\"@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol\":{\"keccak256\":\"0xf46268c37522320bb2119a5a394bc5c739a95c0c574c8d08e8c643f4d06e5c76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://517e4b295f35b9947c72ad7379a6089439ece7bb6f4a2ea0a159da13046c039e\",\"dweb:/ipfs/QmZXzkSfLUbvujig3zVbpDHykpHhqLpvQtdiN3B5j4TA3u\"]},\"@openzeppelin/contracts/token/ERC721/utils/ERC721Utils.sol\":{\"keccak256\":\"0xc7efbc23214ad7dced8bf2249460f4bda114d57f6a0079f84040654280f455bd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1f5bd44efca8c8c0d74439e7b808d1f9c4af1df78f91fef8e8bbca8104645435\",\"dweb:/ipfs/Qmb42XSd8MKsEitp42sZkSFGqDRigk6QgGXtiJyJqUZJJ6\"]},\"@openzeppelin/contracts/utils/Bytes.sol\":{\"keccak256\":\"0xf80e4b96b6849936ea0fabd76cf81b13d7276295fddb1e1c07afb3ddf650b0ac\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6430007255ac11c6e9c4331a418f3af52ff66fbbae959f645301d025b20aeb08\",\"dweb:/ipfs/QmQE5fjmBBRw9ndnzJuC2uskYss1gbaR7JdazoCf1FGoBj\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x1fdc2de9585ab0f1c417f02a873a2b6343cd64bb7ffec6b00ffa11a4a158d9e8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1ab223a3d969c6cd7610049431dd42740960c477e45878f5d8b54411f7a32bdc\",\"dweb:/ipfs/QmWumhjvhpKcwx3vDPQninsNVTc3BGvqaihkQakFkQYpaS\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0x2d9dc2fe26180f74c11c13663647d38e259e45f95eb88f57b61d2160b0109d3e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://81233d1f98060113d9922180bb0f14f8335856fe9f339134b09335e9f678c377\",\"dweb:/ipfs/QmWh6R35SarhAn4z2wH8SU456jJSYL2FgucfTFgbHJJN4E\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617\",\"dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x59973a93b1f983f94e10529f46ca46544a9fec2b5f56fb1390bbe9e0dc79f857\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c55ef8f0b9719790c2ae6f81d80a59ffb89f2f0abe6bc065585bd79edce058c5\",\"dweb:/ipfs/QmNNmCbX9NjPXKqHJN8R1WC2rNeZSQrPZLd6FF6AKLyH5Y\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0xc8cae21c9ae4a46e5162ff9bf5b351d6fa6a6eba72d515f3bc1bdfeda7fdf083\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce830ebcf28e31643caba318996db3763c36d52cd0f23798ba83c135355d45e9\",\"dweb:/ipfs/QmdGPcvptHN7UBCbUYBbRX3hiRVRFLRwno8b4uga6uFNif\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03\",\"dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ\"]}},\"version\":1}","storageLayout":{"storage":[{"astId":1630,"contract":"@openzeppelin/contracts/token/ERC721/ERC721.sol:ERC721","label":"_name","offset":0,"slot":"0","type":"t_string_storage"},{"astId":1632,"contract":"@openzeppelin/contracts/token/ERC721/ERC721.sol:ERC721","label":"_symbol","offset":0,"slot":"1","type":"t_string_storage"},{"astId":1636,"contract":"@openzeppelin/contracts/token/ERC721/ERC721.sol:ERC721","label":"_owners","offset":0,"slot":"2","type":"t_mapping(t_uint256,t_address)"},{"astId":1640,"contract":"@openzeppelin/contracts/token/ERC721/ERC721.sol:ERC721","label":"_balances","offset":0,"slot":"3","type":"t_mapping(t_address,t_uint256)"},{"astId":1644,"contract":"@openzeppelin/contracts/token/ERC721/ERC721.sol:ERC721","label":"_tokenApprovals","offset":0,"slot":"4","type":"t_mapping(t_uint256,t_address)"},{"astId":1650,"contract":"@openzeppelin/contracts/token/ERC721/ERC721.sol:ERC721","label":"_operatorApprovals","offset":0,"slot":"5","type":"t_mapping(t_address,t_mapping(t_address,t_bool))"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_mapping(t_address,t_bool)":{"encoding":"mapping","key":"t_address","label":"mapping(address => bool)","numberOfBytes":"32","value":"t_bool"},"t_mapping(t_address,t_mapping(t_address,t_bool))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => bool))","numberOfBytes":"32","value":"t_mapping(t_address,t_bool)"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_mapping(t_uint256,t_address)":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => address)","numberOfBytes":"32","value":"t_address"},"t_string_storage":{"encoding":"bytes","label":"string","numberOfBytes":"32"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/token/ERC721/IERC721.sol":{"IERC721":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"operator","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"details":"Required interface of an ERC-721 compliant contract.","events":{"Approval(address,address,uint256)":{"details":"Emitted when `owner` enables `approved` to manage the `tokenId` token."},"ApprovalForAll(address,address,bool)":{"details":"Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets."},"Transfer(address,address,uint256)":{"details":"Emitted when `tokenId` token is transferred from `from` to `to`."}},"kind":"dev","methods":{"approve(address,uint256)":{"details":"Gives permission to `to` to transfer `tokenId` token to another account. The approval is cleared when the token is transferred. Only a single account can be approved at a time, so approving the zero address clears previous approvals. Requirements: - The caller must own the token or be an approved operator. - `tokenId` must exist. Emits an {Approval} event."},"balanceOf(address)":{"details":"Returns the number of tokens in ``owner``'s account."},"getApproved(uint256)":{"details":"Returns the account approved for `tokenId` token. Requirements: - `tokenId` must exist."},"isApprovedForAll(address,address)":{"details":"Returns if the `operator` is allowed to manage all of the assets of `owner`. See {setApprovalForAll}"},"ownerOf(uint256)":{"details":"Returns the owner of the `tokenId` token. Requirements: - `tokenId` must exist."},"safeTransferFrom(address,address,uint256)":{"details":"Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients are aware of the ERC-721 protocol to prevent tokens from being forever locked. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must exist and be owned by `from`. - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. Emits a {Transfer} event."},"safeTransferFrom(address,address,uint256,bytes)":{"details":"Safely transfers `tokenId` token from `from` to `to`. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must exist and be owned by `from`. - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. Emits a {Transfer} event."},"setApprovalForAll(address,bool)":{"details":"Approve or remove `operator` as an operator for the caller. Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. Requirements: - The `operator` cannot be the address zero. Emits an {ApprovalForAll} event."},"supportsInterface(bytes4)":{"details":"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas."},"transferFrom(address,address,uint256)":{"details":"Transfers `tokenId` token from `from` to `to`. WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC-721 or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must understand this adds an external call which potentially creates a reentrancy vulnerability. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must be owned by `from`. - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. Emits a {Transfer} event."}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","getApproved(uint256)":"081812fc","isApprovedForAll(address,address)":"e985e9c5","ownerOf(uint256)":"6352211e","safeTransferFrom(address,address,uint256)":"42842e0e","safeTransferFrom(address,address,uint256,bytes)":"b88d4fde","setApprovalForAll(address,bool)":"a22cb465","supportsInterface(bytes4)":"01ffc9a7","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Required interface of an ERC-721 compliant contract.\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when `owner` enables `approved` to manage the `tokenId` token.\"},\"ApprovalForAll(address,address,bool)\":{\"details\":\"Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `tokenId` token is transferred from `from` to `to`.\"}},\"kind\":\"dev\",\"methods\":{\"approve(address,uint256)\":{\"details\":\"Gives permission to `to` to transfer `tokenId` token to another account. The approval is cleared when the token is transferred. Only a single account can be approved at a time, so approving the zero address clears previous approvals. Requirements: - The caller must own the token or be an approved operator. - `tokenId` must exist. Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the number of tokens in ``owner``'s account.\"},\"getApproved(uint256)\":{\"details\":\"Returns the account approved for `tokenId` token. Requirements: - `tokenId` must exist.\"},\"isApprovedForAll(address,address)\":{\"details\":\"Returns if the `operator` is allowed to manage all of the assets of `owner`. See {setApprovalForAll}\"},\"ownerOf(uint256)\":{\"details\":\"Returns the owner of the `tokenId` token. Requirements: - `tokenId` must exist.\"},\"safeTransferFrom(address,address,uint256)\":{\"details\":\"Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients are aware of the ERC-721 protocol to prevent tokens from being forever locked. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must exist and be owned by `from`. - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. Emits a {Transfer} event.\"},\"safeTransferFrom(address,address,uint256,bytes)\":{\"details\":\"Safely transfers `tokenId` token from `from` to `to`. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must exist and be owned by `from`. - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. Emits a {Transfer} event.\"},\"setApprovalForAll(address,bool)\":{\"details\":\"Approve or remove `operator` as an operator for the caller. Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. Requirements: - The `operator` cannot be the address zero. Emits an {ApprovalForAll} event.\"},\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Transfers `tokenId` token from `from` to `to`. WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC-721 or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must understand this adds an external call which potentially creates a reentrancy vulnerability. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must be owned by `from`. - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. Emits a {Transfer} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC721/IERC721.sol\":\"IERC721\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0xf78f05f3b8c9f75570e85300d7b4600d7f6f6a198449273f31d44c1641adb46f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e28b872613b45e0e801d4995aa4380be2531147bfe2d85c1d6275f1de514fba3\",\"dweb:/ipfs/QmeeFcfShHYaS3BdgVj78nxR28ZaVUwbvr66ud8bT6kzw9\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617\",\"dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u\"]}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol":{"IERC721Receiver":{"abi":[{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"details":"Interface for any contract that wants to support safeTransfers from ERC-721 asset contracts.","kind":"dev","methods":{"onERC721Received(address,address,uint256,bytes)":{"details":"Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} by `operator` from `from`, this function is called. It must return its Solidity selector to confirm the token transfer. If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`."}},"title":"ERC-721 token receiver interface","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"onERC721Received(address,address,uint256,bytes)":"150b7a02"}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"onERC721Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface for any contract that wants to support safeTransfers from ERC-721 asset contracts.\",\"kind\":\"dev\",\"methods\":{\"onERC721Received(address,address,uint256,bytes)\":{\"details\":\"Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} by `operator` from `from`, this function is called. It must return its Solidity selector to confirm the token transfer. If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`.\"}},\"title\":\"ERC-721 token receiver interface\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol\":\"IERC721Receiver\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol\":{\"keccak256\":\"0x88cd5e3bee2e8c36b8d9058fbcaa81ad5704281b25634122234b55ea853d8055\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8dc7e7ab5b8ea36c15027ab04221b05d1c970f47a53e9fd47ead8ca665d49c7e\",\"dweb:/ipfs/Qmeeph7fsDyfRr8vb2L8KcDEmKPb224TAayMvgqgGAnqpL\"]}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol":{"IERC721Metadata":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"operator","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"details":"See https://eips.ethereum.org/EIPS/eip-721","events":{"Approval(address,address,uint256)":{"details":"Emitted when `owner` enables `approved` to manage the `tokenId` token."},"ApprovalForAll(address,address,bool)":{"details":"Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets."},"Transfer(address,address,uint256)":{"details":"Emitted when `tokenId` token is transferred from `from` to `to`."}},"kind":"dev","methods":{"approve(address,uint256)":{"details":"Gives permission to `to` to transfer `tokenId` token to another account. The approval is cleared when the token is transferred. Only a single account can be approved at a time, so approving the zero address clears previous approvals. Requirements: - The caller must own the token or be an approved operator. - `tokenId` must exist. Emits an {Approval} event."},"balanceOf(address)":{"details":"Returns the number of tokens in ``owner``'s account."},"getApproved(uint256)":{"details":"Returns the account approved for `tokenId` token. Requirements: - `tokenId` must exist."},"isApprovedForAll(address,address)":{"details":"Returns if the `operator` is allowed to manage all of the assets of `owner`. See {setApprovalForAll}"},"name()":{"details":"Returns the token collection name."},"ownerOf(uint256)":{"details":"Returns the owner of the `tokenId` token. Requirements: - `tokenId` must exist."},"safeTransferFrom(address,address,uint256)":{"details":"Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients are aware of the ERC-721 protocol to prevent tokens from being forever locked. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must exist and be owned by `from`. - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. Emits a {Transfer} event."},"safeTransferFrom(address,address,uint256,bytes)":{"details":"Safely transfers `tokenId` token from `from` to `to`. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must exist and be owned by `from`. - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. Emits a {Transfer} event."},"setApprovalForAll(address,bool)":{"details":"Approve or remove `operator` as an operator for the caller. Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. Requirements: - The `operator` cannot be the address zero. Emits an {ApprovalForAll} event."},"supportsInterface(bytes4)":{"details":"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas."},"symbol()":{"details":"Returns the token collection symbol."},"tokenURI(uint256)":{"details":"Returns the Uniform Resource Identifier (URI) for `tokenId` token."},"transferFrom(address,address,uint256)":{"details":"Transfers `tokenId` token from `from` to `to`. WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC-721 or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must understand this adds an external call which potentially creates a reentrancy vulnerability. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must be owned by `from`. - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. Emits a {Transfer} event."}},"title":"ERC-721 Non-Fungible Token Standard, optional metadata extension","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","getApproved(uint256)":"081812fc","isApprovedForAll(address,address)":"e985e9c5","name()":"06fdde03","ownerOf(uint256)":"6352211e","safeTransferFrom(address,address,uint256)":"42842e0e","safeTransferFrom(address,address,uint256,bytes)":"b88d4fde","setApprovalForAll(address,bool)":"a22cb465","supportsInterface(bytes4)":"01ffc9a7","symbol()":"95d89b41","tokenURI(uint256)":"c87b56dd","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"See https://eips.ethereum.org/EIPS/eip-721\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when `owner` enables `approved` to manage the `tokenId` token.\"},\"ApprovalForAll(address,address,bool)\":{\"details\":\"Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `tokenId` token is transferred from `from` to `to`.\"}},\"kind\":\"dev\",\"methods\":{\"approve(address,uint256)\":{\"details\":\"Gives permission to `to` to transfer `tokenId` token to another account. The approval is cleared when the token is transferred. Only a single account can be approved at a time, so approving the zero address clears previous approvals. Requirements: - The caller must own the token or be an approved operator. - `tokenId` must exist. Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the number of tokens in ``owner``'s account.\"},\"getApproved(uint256)\":{\"details\":\"Returns the account approved for `tokenId` token. Requirements: - `tokenId` must exist.\"},\"isApprovedForAll(address,address)\":{\"details\":\"Returns if the `operator` is allowed to manage all of the assets of `owner`. See {setApprovalForAll}\"},\"name()\":{\"details\":\"Returns the token collection name.\"},\"ownerOf(uint256)\":{\"details\":\"Returns the owner of the `tokenId` token. Requirements: - `tokenId` must exist.\"},\"safeTransferFrom(address,address,uint256)\":{\"details\":\"Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients are aware of the ERC-721 protocol to prevent tokens from being forever locked. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must exist and be owned by `from`. - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. Emits a {Transfer} event.\"},\"safeTransferFrom(address,address,uint256,bytes)\":{\"details\":\"Safely transfers `tokenId` token from `from` to `to`. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must exist and be owned by `from`. - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. Emits a {Transfer} event.\"},\"setApprovalForAll(address,bool)\":{\"details\":\"Approve or remove `operator` as an operator for the caller. Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. Requirements: - The `operator` cannot be the address zero. Emits an {ApprovalForAll} event.\"},\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"},\"symbol()\":{\"details\":\"Returns the token collection symbol.\"},\"tokenURI(uint256)\":{\"details\":\"Returns the Uniform Resource Identifier (URI) for `tokenId` token.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Transfers `tokenId` token from `from` to `to`. WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC-721 or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must understand this adds an external call which potentially creates a reentrancy vulnerability. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must be owned by `from`. - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. Emits a {Transfer} event.\"}},\"title\":\"ERC-721 Non-Fungible Token Standard, optional metadata extension\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol\":\"IERC721Metadata\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0xf78f05f3b8c9f75570e85300d7b4600d7f6f6a198449273f31d44c1641adb46f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e28b872613b45e0e801d4995aa4380be2531147bfe2d85c1d6275f1de514fba3\",\"dweb:/ipfs/QmeeFcfShHYaS3BdgVj78nxR28ZaVUwbvr66ud8bT6kzw9\"]},\"@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol\":{\"keccak256\":\"0xf46268c37522320bb2119a5a394bc5c739a95c0c574c8d08e8c643f4d06e5c76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://517e4b295f35b9947c72ad7379a6089439ece7bb6f4a2ea0a159da13046c039e\",\"dweb:/ipfs/QmZXzkSfLUbvujig3zVbpDHykpHhqLpvQtdiN3B5j4TA3u\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617\",\"dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u\"]}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/token/ERC721/utils/ERC721Utils.sol":{"ERC721Utils":{"abi":[],"devdoc":{"details":"Library that provides common ERC-721 utility functions. See https://eips.ethereum.org/EIPS/eip-721[ERC-721]. _Available since v5.1._","kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60556032600b8282823980515f1a607314602657634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f80fdfea2646970667358221220966bc2cbbaf5743b0397836f0fc6bdd44da5f90ea2b42f34971515f5c9451bda64736f6c634300081a0033","opcodes":"PUSH1 0x55 PUSH1 0x32 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH0 BYTE PUSH1 0x73 EQ PUSH1 0x26 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST ADDRESS PUSH0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP7 PUSH12 0xC2CBBAF5743B0397836F0FC6 0xBD 0xD4 0x4D 0xA5 0xF9 0xE LOG2 0xB4 0x2F CALLVALUE SWAP8 ISZERO ISZERO CREATE2 0xC9 GASLIMIT SHL 0xDA PUSH5 0x736F6C6343 STOP ADDMOD BYTE STOP CALLER ","sourceMap":"432:1490:13:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;432:1490:13;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"730000000000000000000000000000000000000000301460806040525f80fdfea2646970667358221220966bc2cbbaf5743b0397836f0fc6bdd44da5f90ea2b42f34971515f5c9451bda64736f6c634300081a0033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP7 PUSH12 0xC2CBBAF5743B0397836F0FC6 0xBD 0xD4 0x4D 0xA5 0xF9 0xE LOG2 0xB4 0x2F CALLVALUE SWAP8 ISZERO ISZERO CREATE2 0xC9 GASLIMIT SHL 0xDA PUSH5 0x736F6C6343 STOP ADDMOD BYTE STOP CALLER ","sourceMap":"432:1490:13:-:0;;;;;;;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Library that provides common ERC-721 utility functions. See https://eips.ethereum.org/EIPS/eip-721[ERC-721]. _Available since v5.1._\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC721/utils/ERC721Utils.sol\":\"ERC721Utils\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x1b88b3fb3d85ba5496d7d5f396f83ee1fddcdd6762059ff65992655b67920998\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://89393bb3212da1c0889601b9706a07b39419ddc4d2faab9eaf6e7f9152cf6a1c\",\"dweb:/ipfs/QmcCfzzxv1Bkdz1c1yF4gQCeYb6Us5BJANnzTFqawfd1HL\"]},\"@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol\":{\"keccak256\":\"0x88cd5e3bee2e8c36b8d9058fbcaa81ad5704281b25634122234b55ea853d8055\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8dc7e7ab5b8ea36c15027ab04221b05d1c970f47a53e9fd47ead8ca665d49c7e\",\"dweb:/ipfs/Qmeeph7fsDyfRr8vb2L8KcDEmKPb224TAayMvgqgGAnqpL\"]},\"@openzeppelin/contracts/token/ERC721/utils/ERC721Utils.sol\":{\"keccak256\":\"0xc7efbc23214ad7dced8bf2249460f4bda114d57f6a0079f84040654280f455bd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1f5bd44efca8c8c0d74439e7b808d1f9c4af1df78f91fef8e8bbca8104645435\",\"dweb:/ipfs/Qmb42XSd8MKsEitp42sZkSFGqDRigk6QgGXtiJyJqUZJJ6\"]}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/token/common/ERC2981.sol":{"ERC2981":{"abi":[{"inputs":[{"internalType":"uint256","name":"numerator","type":"uint256"},{"internalType":"uint256","name":"denominator","type":"uint256"}],"name":"ERC2981InvalidDefaultRoyalty","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC2981InvalidDefaultRoyaltyReceiver","type":"error"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"numerator","type":"uint256"},{"internalType":"uint256","name":"denominator","type":"uint256"}],"name":"ERC2981InvalidTokenRoyalty","type":"error"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC2981InvalidTokenRoyaltyReceiver","type":"error"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"salePrice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"devdoc":{"details":"Implementation of the NFT Royalty Standard, a standardized way to retrieve royalty payment information. Royalty information can be specified globally for all token ids via {_setDefaultRoyalty}, and/or individually for specific token ids via {_setTokenRoyalty}. The latter takes precedence over the first. Royalty is specified as a fraction of sale price. {_feeDenominator} is overridable but defaults to 10000, meaning the fee is specified in basis points by default. IMPORTANT: ERC-2981 only specifies a way to signal royalty information and does not enforce its payment. See https://eips.ethereum.org/EIPS/eip-2981#optional-royalty-payments[Rationale] in the ERC. Marketplaces are expected to voluntarily pay royalties together with sales, but note that this standard is not yet widely supported.","errors":{"ERC2981InvalidDefaultRoyalty(uint256,uint256)":[{"details":"The default royalty set is invalid (eg. (numerator / denominator) >= 1)."}],"ERC2981InvalidDefaultRoyaltyReceiver(address)":[{"details":"The default royalty receiver is invalid."}],"ERC2981InvalidTokenRoyalty(uint256,uint256,uint256)":[{"details":"The royalty set for a specific `tokenId` is invalid (eg. (numerator / denominator) >= 1)."}],"ERC2981InvalidTokenRoyaltyReceiver(uint256,address)":[{"details":"The royalty receiver for `tokenId` is invalid."}]},"kind":"dev","methods":{"royaltyInfo(uint256,uint256)":{"details":"Returns how much royalty is owed and to whom, based on a sale price that may be denominated in any unit of exchange. The royalty amount is denominated and should be paid in that same unit of exchange. NOTE: ERC-2981 allows setting the royalty to 100% of the price. In that case all the price would be sent to the royalty receiver and 0 tokens to the seller. Contracts dealing with royalty should consider empty transfers."},"supportsInterface(bytes4)":{"details":"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas."}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"royaltyInfo(uint256,uint256)":"2a55205a","supportsInterface(bytes4)":"01ffc9a7"}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"numerator\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"denominator\",\"type\":\"uint256\"}],\"name\":\"ERC2981InvalidDefaultRoyalty\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC2981InvalidDefaultRoyaltyReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"numerator\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"denominator\",\"type\":\"uint256\"}],\"name\":\"ERC2981InvalidTokenRoyalty\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC2981InvalidTokenRoyaltyReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"salePrice\",\"type\":\"uint256\"}],\"name\":\"royaltyInfo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Implementation of the NFT Royalty Standard, a standardized way to retrieve royalty payment information. Royalty information can be specified globally for all token ids via {_setDefaultRoyalty}, and/or individually for specific token ids via {_setTokenRoyalty}. The latter takes precedence over the first. Royalty is specified as a fraction of sale price. {_feeDenominator} is overridable but defaults to 10000, meaning the fee is specified in basis points by default. IMPORTANT: ERC-2981 only specifies a way to signal royalty information and does not enforce its payment. See https://eips.ethereum.org/EIPS/eip-2981#optional-royalty-payments[Rationale] in the ERC. Marketplaces are expected to voluntarily pay royalties together with sales, but note that this standard is not yet widely supported.\",\"errors\":{\"ERC2981InvalidDefaultRoyalty(uint256,uint256)\":[{\"details\":\"The default royalty set is invalid (eg. (numerator / denominator) >= 1).\"}],\"ERC2981InvalidDefaultRoyaltyReceiver(address)\":[{\"details\":\"The default royalty receiver is invalid.\"}],\"ERC2981InvalidTokenRoyalty(uint256,uint256,uint256)\":[{\"details\":\"The royalty set for a specific `tokenId` is invalid (eg. (numerator / denominator) >= 1).\"}],\"ERC2981InvalidTokenRoyaltyReceiver(uint256,address)\":[{\"details\":\"The royalty receiver for `tokenId` is invalid.\"}]},\"kind\":\"dev\",\"methods\":{\"royaltyInfo(uint256,uint256)\":{\"details\":\"Returns how much royalty is owed and to whom, based on a sale price that may be denominated in any unit of exchange. The royalty amount is denominated and should be paid in that same unit of exchange. NOTE: ERC-2981 allows setting the royalty to 100% of the price. In that case all the price would be sent to the royalty receiver and 0 tokens to the seller. Contracts dealing with royalty should consider empty transfers.\"},\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/common/ERC2981.sol\":\"ERC2981\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/interfaces/IERC2981.sol\":{\"keccak256\":\"0xafab0e6c71905303c47dd254168cb31efc91f0ae284cde609b0202f97f85469e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://824d05aec56eb82a2a3c28eece530dc0792d3a008b09d01444e57cf4aceb0445\",\"dweb:/ipfs/QmVvqmJ5UobuRU9Q4JMyXxBfzKs2cpjbWXMNpxX4binTX8\"]},\"@openzeppelin/contracts/token/common/ERC2981.sol\":{\"keccak256\":\"0xa33062c6e0675a74a27b06a4ae4c6ad4d3b7219e27d9c146a4ac57295096d393\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://777543d88013fdd0ee7f47ac619fb13a1993bb667675d8816fde024f73cfbf2d\",\"dweb:/ipfs/QmfDS9uL1XZ2oUe1PH8eRCRyu3Hf98cK8ksGf4Ww7kg5zv\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0x2d9dc2fe26180f74c11c13663647d38e259e45f95eb88f57b61d2160b0109d3e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://81233d1f98060113d9922180bb0f14f8335856fe9f339134b09335e9f678c377\",\"dweb:/ipfs/QmWh6R35SarhAn4z2wH8SU456jJSYL2FgucfTFgbHJJN4E\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617\",\"dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u\"]}},\"version\":1}","storageLayout":{"storage":[{"astId":2829,"contract":"@openzeppelin/contracts/token/common/ERC2981.sol:ERC2981","label":"_defaultRoyaltyInfo","offset":0,"slot":"0","type":"t_struct(RoyaltyInfo)2826_storage"},{"astId":2834,"contract":"@openzeppelin/contracts/token/common/ERC2981.sol:ERC2981","label":"_tokenRoyaltyInfo","offset":0,"slot":"1","type":"t_mapping(t_uint256,t_struct(RoyaltyInfo)2826_storage)"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_mapping(t_uint256,t_struct(RoyaltyInfo)2826_storage)":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => struct ERC2981.RoyaltyInfo)","numberOfBytes":"32","value":"t_struct(RoyaltyInfo)2826_storage"},"t_struct(RoyaltyInfo)2826_storage":{"encoding":"inplace","label":"struct ERC2981.RoyaltyInfo","members":[{"astId":2823,"contract":"@openzeppelin/contracts/token/common/ERC2981.sol:ERC2981","label":"receiver","offset":0,"slot":"0","type":"t_address"},{"astId":2825,"contract":"@openzeppelin/contracts/token/common/ERC2981.sol:ERC2981","label":"royaltyFraction","offset":20,"slot":"0","type":"t_uint96"}],"numberOfBytes":"32"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint96":{"encoding":"inplace","label":"uint96","numberOfBytes":"12"}}},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/utils/Bytes.sol":{"Bytes":{"abi":[],"devdoc":{"details":"Bytes operations.","kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60556032600b8282823980515f1a607314602657634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f80fdfea2646970667358221220c67dd7fdc3183f2ccffbe8ba954eb31c5bcd56ebd252e7d4046f41097cc3af3c64736f6c634300081a0033","opcodes":"PUSH1 0x55 PUSH1 0x32 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH0 BYTE PUSH1 0x73 EQ PUSH1 0x26 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST ADDRESS PUSH0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC6 PUSH30 0xD7FDC3183F2CCFFBE8BA954EB31C5BCD56EBD252E7D4046F41097CC3AF3C PUSH5 0x736F6C6343 STOP ADDMOD BYTE STOP CALLER ","sourceMap":"198:14538:15:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;198:14538:15;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"730000000000000000000000000000000000000000301460806040525f80fdfea2646970667358221220c67dd7fdc3183f2ccffbe8ba954eb31c5bcd56ebd252e7d4046f41097cc3af3c64736f6c634300081a0033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC6 PUSH30 0xD7FDC3183F2CCFFBE8BA954EB31C5BCD56EBD252E7D4046F41097CC3AF3C PUSH5 0x736F6C6343 STOP ADDMOD BYTE STOP CALLER ","sourceMap":"198:14538:15:-:0;;;;;;;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Bytes operations.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Bytes.sol\":\"Bytes\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/Bytes.sol\":{\"keccak256\":\"0xf80e4b96b6849936ea0fabd76cf81b13d7276295fddb1e1c07afb3ddf650b0ac\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6430007255ac11c6e9c4331a418f3af52ff66fbbae959f645301d025b20aeb08\",\"dweb:/ipfs/QmQE5fjmBBRw9ndnzJuC2uskYss1gbaR7JdazoCf1FGoBj\"]},\"@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x59973a93b1f983f94e10529f46ca46544a9fec2b5f56fb1390bbe9e0dc79f857\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c55ef8f0b9719790c2ae6f81d80a59ffb89f2f0abe6bc065585bd79edce058c5\",\"dweb:/ipfs/QmNNmCbX9NjPXKqHJN8R1WC2rNeZSQrPZLd6FF6AKLyH5Y\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0xc8cae21c9ae4a46e5162ff9bf5b351d6fa6a6eba72d515f3bc1bdfeda7fdf083\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce830ebcf28e31643caba318996db3763c36d52cd0f23798ba83c135355d45e9\",\"dweb:/ipfs/QmdGPcvptHN7UBCbUYBbRX3hiRVRFLRwno8b4uga6uFNif\"]}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/utils/Context.sol":{"Context":{"abi":[],"devdoc":{"details":"Provides information about the current execution context, including the sender of the transaction and its data. While these are generally available via msg.sender and msg.data, they should not be accessed in such a direct manner, since when dealing with meta-transactions the account sending and paying for execution may not be the actual sender (as far as an application is concerned). This contract is only required for intermediate, library-like contracts.","kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Provides information about the current execution context, including the sender of the transaction and its data. While these are generally available via msg.sender and msg.data, they should not be accessed in such a direct manner, since when dealing with meta-transactions the account sending and paying for execution may not be the actual sender (as far as an application is concerned). This contract is only required for intermediate, library-like contracts.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Context.sol\":\"Context\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/utils/Panic.sol":{"Panic":{"abi":[],"devdoc":{"details":"Helper library for emitting standardized panic codes. ```solidity contract Example { using Panic for uint256; // Use any of the declared internal constants function foo() { Panic.GENERIC.panic(); } // Alternatively function foo() { Panic.panic(Panic.GENERIC); } } ``` Follows the list from https://github.com/ethereum/solidity/blob/v0.8.24/libsolutil/ErrorCodes.h[libsolutil]. _Available since v5.1._","kind":"dev","methods":{},"stateVariables":{"ARRAY_OUT_OF_BOUNDS":{"details":"array out of bounds access"},"ASSERT":{"details":"used by the assert() builtin"},"DIVISION_BY_ZERO":{"details":"division or modulo by zero"},"EMPTY_ARRAY_POP":{"details":"empty array pop"},"ENUM_CONVERSION_ERROR":{"details":"enum conversion error"},"GENERIC":{"details":"generic / unspecified error"},"INVALID_INTERNAL_FUNCTION":{"details":"calling invalid internal function"},"RESOURCE_ERROR":{"details":"resource error (too large allocation or too large array)"},"STORAGE_ENCODING_ERROR":{"details":"invalid encoding in storage"},"UNDER_OVERFLOW":{"details":"arithmetic underflow or overflow"}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60556032600b8282823980515f1a607314602657634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f80fdfea264697066735822122022069ac55900f6a29e5e40067718af40945cfaad89cf3030f909da111e3e7caf64736f6c634300081a0033","opcodes":"PUSH1 0x55 PUSH1 0x32 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH0 BYTE PUSH1 0x73 EQ PUSH1 0x26 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST ADDRESS PUSH0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x22 MOD SWAP11 0xC5 MSIZE STOP 0xF6 LOG2 SWAP15 MCOPY BLOCKHASH MOD PUSH24 0x18AF40945CFAAD89CF3030F909DA111E3E7CAF64736F6C63 NUMBER STOP ADDMOD BYTE STOP CALLER ","sourceMap":"657:1315:17:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;657:1315:17;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"730000000000000000000000000000000000000000301460806040525f80fdfea264697066735822122022069ac55900f6a29e5e40067718af40945cfaad89cf3030f909da111e3e7caf64736f6c634300081a0033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x22 MOD SWAP11 0xC5 MSIZE STOP 0xF6 LOG2 SWAP15 MCOPY BLOCKHASH MOD PUSH24 0x18AF40945CFAAD89CF3030F909DA111E3E7CAF64736F6C63 NUMBER STOP ADDMOD BYTE STOP CALLER ","sourceMap":"657:1315:17:-:0;;;;;;;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Helper library for emitting standardized panic codes. ```solidity contract Example { using Panic for uint256; // Use any of the declared internal constants function foo() { Panic.GENERIC.panic(); } // Alternatively function foo() { Panic.panic(Panic.GENERIC); } } ``` Follows the list from https://github.com/ethereum/solidity/blob/v0.8.24/libsolutil/ErrorCodes.h[libsolutil]. _Available since v5.1._\",\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"ARRAY_OUT_OF_BOUNDS\":{\"details\":\"array out of bounds access\"},\"ASSERT\":{\"details\":\"used by the assert() builtin\"},\"DIVISION_BY_ZERO\":{\"details\":\"division or modulo by zero\"},\"EMPTY_ARRAY_POP\":{\"details\":\"empty array pop\"},\"ENUM_CONVERSION_ERROR\":{\"details\":\"enum conversion error\"},\"GENERIC\":{\"details\":\"generic / unspecified error\"},\"INVALID_INTERNAL_FUNCTION\":{\"details\":\"calling invalid internal function\"},\"RESOURCE_ERROR\":{\"details\":\"resource error (too large allocation or too large array)\"},\"STORAGE_ENCODING_ERROR\":{\"details\":\"invalid encoding in storage\"},\"UNDER_OVERFLOW\":{\"details\":\"arithmetic underflow or overflow\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Panic.sol\":\"Panic\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/utils/Pausable.sol":{"Pausable":{"abi":[{"inputs":[],"name":"EnforcedPause","type":"error"},{"inputs":[],"name":"ExpectedPause","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"devdoc":{"details":"Contract module which allows children to implement an emergency stop mechanism that can be triggered by an authorized account. This module is used through inheritance. It will make available the modifiers `whenNotPaused` and `whenPaused`, which can be applied to the functions of your contract. Note that they will not be pausable by simply including this module, only once the modifiers are put in place.","errors":{"EnforcedPause()":[{"details":"The operation failed because the contract is paused."}],"ExpectedPause()":[{"details":"The operation failed because the contract is not paused."}]},"events":{"Paused(address)":{"details":"Emitted when the pause is triggered by `account`."},"Unpaused(address)":{"details":"Emitted when the pause is lifted by `account`."}},"kind":"dev","methods":{"paused()":{"details":"Returns true if the contract is paused, and false otherwise."}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"paused()":"5c975abb"}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"EnforcedPause\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExpectedPause\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Contract module which allows children to implement an emergency stop mechanism that can be triggered by an authorized account. This module is used through inheritance. It will make available the modifiers `whenNotPaused` and `whenPaused`, which can be applied to the functions of your contract. Note that they will not be pausable by simply including this module, only once the modifiers are put in place.\",\"errors\":{\"EnforcedPause()\":[{\"details\":\"The operation failed because the contract is paused.\"}],\"ExpectedPause()\":[{\"details\":\"The operation failed because the contract is not paused.\"}]},\"events\":{\"Paused(address)\":{\"details\":\"Emitted when the pause is triggered by `account`.\"},\"Unpaused(address)\":{\"details\":\"Emitted when the pause is lifted by `account`.\"}},\"kind\":\"dev\",\"methods\":{\"paused()\":{\"details\":\"Returns true if the contract is paused, and false otherwise.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Pausable.sol\":\"Pausable\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"@openzeppelin/contracts/utils/Pausable.sol\":{\"keccak256\":\"0xdb484371dfbb848cb6f5d70464e9ac9b2900e4164ead76bbce4fef0b44bcc68f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f9d6f6f6600a2bec622f699081b58350873b5e63ce05464d17d674a290bb8a7c\",\"dweb:/ipfs/QmQKVzSQY1PM3Bid4QhgVVZyx6B4Jx7XgaQzLKHj38vJz8\"]}},\"version\":1}","storageLayout":{"storage":[{"astId":3968,"contract":"@openzeppelin/contracts/utils/Pausable.sol:Pausable","label":"_paused","offset":0,"slot":"0","type":"t_bool"}],"types":{"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"}}},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/utils/ReentrancyGuard.sol":{"ReentrancyGuard":{"abi":[{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"}],"devdoc":{"custom:stateless":"","details":"Contract module that helps prevent reentrant calls to a function. Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier available, which can be applied to functions to make sure there are no nested (reentrant) calls to them. Note that because there is a single `nonReentrant` guard, functions marked as `nonReentrant` may not call one another. This can be worked around by making those functions `private`, and then adding `external` `nonReentrant` entry points to them. TIP: If EIP-1153 (transient storage) is available on the chain you're deploying at, consider using {ReentrancyGuardTransient} instead. TIP: If you would like to learn more about reentrancy and alternative ways to protect against it, check out our blog post https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. IMPORTANT: Deprecated. This storage-based reentrancy guard will be removed and replaced by the {ReentrancyGuardTransient} variant in v6.0.","errors":{"ReentrancyGuardReentrantCall()":[{"details":"Unauthorized reentrant call."}]},"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"}],\"devdoc\":{\"custom:stateless\":\"\",\"details\":\"Contract module that helps prevent reentrant calls to a function. Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier available, which can be applied to functions to make sure there are no nested (reentrant) calls to them. Note that because there is a single `nonReentrant` guard, functions marked as `nonReentrant` may not call one another. This can be worked around by making those functions `private`, and then adding `external` `nonReentrant` entry points to them. TIP: If EIP-1153 (transient storage) is available on the chain you're deploying at, consider using {ReentrancyGuardTransient} instead. TIP: If you would like to learn more about reentrancy and alternative ways to protect against it, check out our blog post https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. IMPORTANT: Deprecated. This storage-based reentrancy guard will be removed and replaced by the {ReentrancyGuardTransient} variant in v6.0.\",\"errors\":{\"ReentrancyGuardReentrantCall()\":[{\"details\":\"Unauthorized reentrant call.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/ReentrancyGuard.sol\":\"ReentrancyGuard\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/ReentrancyGuard.sol\":{\"keccak256\":\"0xa516cbf1c7d15d3517c2d668601ce016c54395bf5171918a14e2686977465f53\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e1d079e8edfb58efd23a311e315a4807b01b5d1cf153f8fa2d0608b9dec3e99\",\"dweb:/ipfs/QmTBExeX2SDTkn5xbk5ssbYSx7VqRp9H4Ux1CY4uQM4b9N\"]},\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b\",\"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM\"]}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/utils/StorageSlot.sol":{"StorageSlot":{"abi":[],"devdoc":{"details":"Library for reading and writing primitive types to specific storage slots. Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts. This library helps with reading and writing to such slots without the need for inline assembly. The functions in this library return Slot structs that contain a `value` member that can be used to read or write. Example usage to set ERC-1967 implementation slot: ```solidity contract ERC1967 { // Define the slot. Alternatively, use the SlotDerivation library to derive the slot. bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc; function _getImplementation() internal view returns (address) { return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value; } function _setImplementation(address newImplementation) internal { require(newImplementation.code.length > 0); StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation; } } ``` TIP: Consider using this library along with {SlotDerivation}.","kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60556032600b8282823980515f1a607314602657634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f80fdfea264697066735822122042851c92114da71f299d79fe664afa2e562fd3083c15ae52111e85361434430d64736f6c634300081a0033","opcodes":"PUSH1 0x55 PUSH1 0x32 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH0 BYTE PUSH1 0x73 EQ PUSH1 0x26 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST ADDRESS PUSH0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 TIMESTAMP DUP6 SHR SWAP3 GT 0x4D 0xA7 0x1F 0x29 SWAP14 PUSH26 0xFE664AFA2E562FD3083C15AE52111E85361434430D64736F6C63 NUMBER STOP ADDMOD BYTE STOP CALLER ","sourceMap":"1407:2774:20:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;1407:2774:20;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"730000000000000000000000000000000000000000301460806040525f80fdfea264697066735822122042851c92114da71f299d79fe664afa2e562fd3083c15ae52111e85361434430d64736f6c634300081a0033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 TIMESTAMP DUP6 SHR SWAP3 GT 0x4D 0xA7 0x1F 0x29 SWAP14 PUSH26 0xFE664AFA2E562FD3083C15AE52111E85361434430D64736F6C63 NUMBER STOP ADDMOD BYTE STOP CALLER ","sourceMap":"1407:2774:20:-:0;;;;;;;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Library for reading and writing primitive types to specific storage slots. Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts. This library helps with reading and writing to such slots without the need for inline assembly. The functions in this library return Slot structs that contain a `value` member that can be used to read or write. Example usage to set ERC-1967 implementation slot: ```solidity contract ERC1967 { // Define the slot. Alternatively, use the SlotDerivation library to derive the slot. bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc; function _getImplementation() internal view returns (address) { return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value; } function _setImplementation(address newImplementation) internal { require(newImplementation.code.length > 0); StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation; } } ``` TIP: Consider using this library along with {SlotDerivation}.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/StorageSlot.sol\":\"StorageSlot\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b\",\"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM\"]}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/utils/Strings.sol":{"Strings":{"abi":[{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"length","type":"uint256"}],"name":"StringsInsufficientHexLength","type":"error"},{"inputs":[],"name":"StringsInvalidAddressFormat","type":"error"},{"inputs":[],"name":"StringsInvalidChar","type":"error"}],"devdoc":{"details":"String operations.","errors":{"StringsInsufficientHexLength(uint256,uint256)":[{"details":"The `value` string doesn't fit in the specified `length`."}],"StringsInvalidAddressFormat()":[{"details":"The string being parsed is not a properly formatted address."}],"StringsInvalidChar()":[{"details":"The string being parsed contains characters that are not in scope of the given base."}]},"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60556032600b8282823980515f1a607314602657634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f80fdfea26469706673582212200a837edfa6e61bdbcebb2b67b2b1fdd0e5b329937f3bb67c3668d478cd08fe5664736f6c634300081a0033","opcodes":"PUSH1 0x55 PUSH1 0x32 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH0 BYTE PUSH1 0x73 EQ PUSH1 0x26 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST ADDRESS PUSH0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 EXP DUP4 PUSH31 0xDFA6E61BDBCEBB2B67B2B1FDD0E5B329937F3BB67C3668D478CD08FE566473 PUSH16 0x6C634300081A00330000000000000000 ","sourceMap":"332:21205:21:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;332:21205:21;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"730000000000000000000000000000000000000000301460806040525f80fdfea26469706673582212200a837edfa6e61bdbcebb2b67b2b1fdd0e5b329937f3bb67c3668d478cd08fe5664736f6c634300081a0033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 EXP DUP4 PUSH31 0xDFA6E61BDBCEBB2B67B2B1FDD0E5B329937F3BB67C3668D478CD08FE566473 PUSH16 0x6C634300081A00330000000000000000 ","sourceMap":"332:21205:21:-:0;;;;;;;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"StringsInsufficientHexLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StringsInvalidAddressFormat\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StringsInvalidChar\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"String operations.\",\"errors\":{\"StringsInsufficientHexLength(uint256,uint256)\":[{\"details\":\"The `value` string doesn't fit in the specified `length`.\"}],\"StringsInvalidAddressFormat()\":[{\"details\":\"The string being parsed is not a properly formatted address.\"}],\"StringsInvalidChar()\":[{\"details\":\"The string being parsed contains characters that are not in scope of the given base.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Strings.sol\":\"Strings\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/Bytes.sol\":{\"keccak256\":\"0xf80e4b96b6849936ea0fabd76cf81b13d7276295fddb1e1c07afb3ddf650b0ac\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6430007255ac11c6e9c4331a418f3af52ff66fbbae959f645301d025b20aeb08\",\"dweb:/ipfs/QmQE5fjmBBRw9ndnzJuC2uskYss1gbaR7JdazoCf1FGoBj\"]},\"@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x1fdc2de9585ab0f1c417f02a873a2b6343cd64bb7ffec6b00ffa11a4a158d9e8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1ab223a3d969c6cd7610049431dd42740960c477e45878f5d8b54411f7a32bdc\",\"dweb:/ipfs/QmWumhjvhpKcwx3vDPQninsNVTc3BGvqaihkQakFkQYpaS\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x59973a93b1f983f94e10529f46ca46544a9fec2b5f56fb1390bbe9e0dc79f857\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c55ef8f0b9719790c2ae6f81d80a59ffb89f2f0abe6bc065585bd79edce058c5\",\"dweb:/ipfs/QmNNmCbX9NjPXKqHJN8R1WC2rNeZSQrPZLd6FF6AKLyH5Y\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0xc8cae21c9ae4a46e5162ff9bf5b351d6fa6a6eba72d515f3bc1bdfeda7fdf083\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce830ebcf28e31643caba318996db3763c36d52cd0f23798ba83c135355d45e9\",\"dweb:/ipfs/QmdGPcvptHN7UBCbUYBbRX3hiRVRFLRwno8b4uga6uFNif\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03\",\"dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ\"]}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/utils/introspection/ERC165.sol":{"ERC165":{"abi":[{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"devdoc":{"details":"Implementation of the {IERC165} interface. Contracts that want to implement ERC-165 should inherit from this contract and override {supportsInterface} to check for the additional interface id that will be supported. For example: ```solidity function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); } ```","kind":"dev","methods":{"supportsInterface(bytes4)":{"details":"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas."}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"supportsInterface(bytes4)":"01ffc9a7"}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Implementation of the {IERC165} interface. Contracts that want to implement ERC-165 should inherit from this contract and override {supportsInterface} to check for the additional interface id that will be supported. For example: ```solidity function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); } ```\",\"kind\":\"dev\",\"methods\":{\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":\"ERC165\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0x2d9dc2fe26180f74c11c13663647d38e259e45f95eb88f57b61d2160b0109d3e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://81233d1f98060113d9922180bb0f14f8335856fe9f339134b09335e9f678c377\",\"dweb:/ipfs/QmWh6R35SarhAn4z2wH8SU456jJSYL2FgucfTFgbHJJN4E\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617\",\"dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u\"]}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/utils/introspection/IERC165.sol":{"IERC165":{"abi":[{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"devdoc":{"details":"Interface of the ERC-165 standard, as defined in the https://eips.ethereum.org/EIPS/eip-165[ERC]. Implementers can declare support of contract interfaces, which can then be queried by others ({ERC165Checker}). For an implementation, see {ERC165}.","kind":"dev","methods":{"supportsInterface(bytes4)":{"details":"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas."}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"supportsInterface(bytes4)":"01ffc9a7"}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC-165 standard, as defined in the https://eips.ethereum.org/EIPS/eip-165[ERC]. Implementers can declare support of contract interfaces, which can then be queried by others ({ERC165Checker}). For an implementation, see {ERC165}.\",\"kind\":\"dev\",\"methods\":{\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":\"IERC165\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617\",\"dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u\"]}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/utils/math/Math.sol":{"Math":{"abi":[],"devdoc":{"details":"Standard math utilities missing in the Solidity language.","kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60556032600b8282823980515f1a607314602657634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f80fdfea26469706673582212200095ce9411f7a751e3f9528ec5bdec90e7cea7cb900fb4e4125b2e0e2122ec0e64736f6c634300081a0033","opcodes":"PUSH1 0x55 PUSH1 0x32 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH0 BYTE PUSH1 0x73 EQ PUSH1 0x26 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST ADDRESS PUSH0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 STOP SWAP6 0xCE SWAP5 GT 0xF7 0xA7 MLOAD 0xE3 0xF9 MSTORE DUP15 0xC5 0xBD 0xEC SWAP1 0xE7 0xCE 0xA7 0xCB SWAP1 0xF 0xB4 0xE4 SLT JUMPDEST 0x2E 0xE 0x21 0x22 0xEC 0xE PUSH5 0x736F6C6343 STOP ADDMOD BYTE STOP CALLER ","sourceMap":"281:32382:24:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;281:32382:24;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"730000000000000000000000000000000000000000301460806040525f80fdfea26469706673582212200095ce9411f7a751e3f9528ec5bdec90e7cea7cb900fb4e4125b2e0e2122ec0e64736f6c634300081a0033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 STOP SWAP6 0xCE SWAP5 GT 0xF7 0xA7 MLOAD 0xE3 0xF9 MSTORE DUP15 0xC5 0xBD 0xEC SWAP1 0xE7 0xCE 0xA7 0xCB SWAP1 0xF 0xB4 0xE4 SLT JUMPDEST 0x2E 0xE 0x21 0x22 0xEC 0xE PUSH5 0x736F6C6343 STOP ADDMOD BYTE STOP CALLER ","sourceMap":"281:32382:24:-:0;;;;;;;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Standard math utilities missing in the Solidity language.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/math/Math.sol\":\"Math\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x59973a93b1f983f94e10529f46ca46544a9fec2b5f56fb1390bbe9e0dc79f857\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c55ef8f0b9719790c2ae6f81d80a59ffb89f2f0abe6bc065585bd79edce058c5\",\"dweb:/ipfs/QmNNmCbX9NjPXKqHJN8R1WC2rNeZSQrPZLd6FF6AKLyH5Y\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0xc8cae21c9ae4a46e5162ff9bf5b351d6fa6a6eba72d515f3bc1bdfeda7fdf083\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce830ebcf28e31643caba318996db3763c36d52cd0f23798ba83c135355d45e9\",\"dweb:/ipfs/QmdGPcvptHN7UBCbUYBbRX3hiRVRFLRwno8b4uga6uFNif\"]}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/utils/math/SafeCast.sol":{"SafeCast":{"abi":[{"inputs":[{"internalType":"uint8","name":"bits","type":"uint8"},{"internalType":"int256","name":"value","type":"int256"}],"name":"SafeCastOverflowedIntDowncast","type":"error"},{"inputs":[{"internalType":"int256","name":"value","type":"int256"}],"name":"SafeCastOverflowedIntToUint","type":"error"},{"inputs":[{"internalType":"uint8","name":"bits","type":"uint8"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"SafeCastOverflowedUintDowncast","type":"error"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"SafeCastOverflowedUintToInt","type":"error"}],"devdoc":{"details":"Wrappers over Solidity's uintXX/intXX/bool casting operators with added overflow checks. Downcasting from uint256/int256 in Solidity does not revert on overflow. This can easily result in undesired exploitation or bugs, since developers usually assume that overflows raise errors. `SafeCast` restores this intuition by reverting the transaction when such an operation overflows. Using this library instead of the unchecked operations eliminates an entire class of bugs, so it's recommended to use it always.","errors":{"SafeCastOverflowedIntDowncast(uint8,int256)":[{"details":"Value doesn't fit in an int of `bits` size."}],"SafeCastOverflowedIntToUint(int256)":[{"details":"An int value doesn't fit in a uint of `bits` size."}],"SafeCastOverflowedUintDowncast(uint8,uint256)":[{"details":"Value doesn't fit in a uint of `bits` size."}],"SafeCastOverflowedUintToInt(uint256)":[{"details":"A uint value doesn't fit in an int of `bits` size."}]},"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60556032600b8282823980515f1a607314602657634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f80fdfea2646970667358221220193a94c9e4f48ade38f2470be071758de2d1c2dbc3913cea4639c62edce19eda64736f6c634300081a0033","opcodes":"PUSH1 0x55 PUSH1 0x32 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH0 BYTE PUSH1 0x73 EQ PUSH1 0x26 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST ADDRESS PUSH0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 NOT GASPRICE SWAP5 0xC9 0xE4 DELEGATECALL DUP11 0xDE CODESIZE CALLCODE SELFBALANCE SIGNEXTEND 0xE0 PUSH18 0x758DE2D1C2DBC3913CEA4639C62EDCE19EDA PUSH5 0x736F6C6343 STOP ADDMOD BYTE STOP CALLER ","sourceMap":"769:34170:25:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;769:34170:25;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"730000000000000000000000000000000000000000301460806040525f80fdfea2646970667358221220193a94c9e4f48ade38f2470be071758de2d1c2dbc3913cea4639c62edce19eda64736f6c634300081a0033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 NOT GASPRICE SWAP5 0xC9 0xE4 DELEGATECALL DUP11 0xDE CODESIZE CALLCODE SELFBALANCE SIGNEXTEND 0xE0 PUSH18 0x758DE2D1C2DBC3913CEA4639C62EDCE19EDA PUSH5 0x736F6C6343 STOP ADDMOD BYTE STOP CALLER ","sourceMap":"769:34170:25:-:0;;;;;;;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"bits\",\"type\":\"uint8\"},{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"name\":\"SafeCastOverflowedIntDowncast\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"name\":\"SafeCastOverflowedIntToUint\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"bits\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintDowncast\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintToInt\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Wrappers over Solidity's uintXX/intXX/bool casting operators with added overflow checks. Downcasting from uint256/int256 in Solidity does not revert on overflow. This can easily result in undesired exploitation or bugs, since developers usually assume that overflows raise errors. `SafeCast` restores this intuition by reverting the transaction when such an operation overflows. Using this library instead of the unchecked operations eliminates an entire class of bugs, so it's recommended to use it always.\",\"errors\":{\"SafeCastOverflowedIntDowncast(uint8,int256)\":[{\"details\":\"Value doesn't fit in an int of `bits` size.\"}],\"SafeCastOverflowedIntToUint(int256)\":[{\"details\":\"An int value doesn't fit in a uint of `bits` size.\"}],\"SafeCastOverflowedUintDowncast(uint8,uint256)\":[{\"details\":\"Value doesn't fit in a uint of `bits` size.\"}],\"SafeCastOverflowedUintToInt(uint256)\":[{\"details\":\"A uint value doesn't fit in an int of `bits` size.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/math/SafeCast.sol\":\"SafeCast\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0xc8cae21c9ae4a46e5162ff9bf5b351d6fa6a6eba72d515f3bc1bdfeda7fdf083\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce830ebcf28e31643caba318996db3763c36d52cd0f23798ba83c135355d45e9\",\"dweb:/ipfs/QmdGPcvptHN7UBCbUYBbRX3hiRVRFLRwno8b4uga6uFNif\"]}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/utils/math/SignedMath.sol":{"SignedMath":{"abi":[],"devdoc":{"details":"Standard signed math utilities missing in the Solidity language.","kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60556032600b8282823980515f1a607314602657634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f80fdfea26469706673582212204b83036d7498f4e22547db3b139d17c4ffcde45da093dbbced6e203959e8748464736f6c634300081a0033","opcodes":"PUSH1 0x55 PUSH1 0x32 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH0 BYTE PUSH1 0x73 EQ PUSH1 0x26 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST ADDRESS PUSH0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x4B DUP4 SUB PUSH14 0x7498F4E22547DB3B139D17C4FFCD 0xE4 TSTORE LOG0 SWAP4 0xDB 0xBC 0xED PUSH15 0x203959E8748464736F6C634300081A STOP CALLER ","sourceMap":"258:2354:26:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;258:2354:26;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"730000000000000000000000000000000000000000301460806040525f80fdfea26469706673582212204b83036d7498f4e22547db3b139d17c4ffcde45da093dbbced6e203959e8748464736f6c634300081a0033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x4B DUP4 SUB PUSH14 0x7498F4E22547DB3B139D17C4FFCD 0xE4 TSTORE LOG0 SWAP4 0xDB 0xBC 0xED PUSH15 0x203959E8748464736F6C634300081A STOP CALLER ","sourceMap":"258:2354:26:-:0;;;;;;;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Standard signed math utilities missing in the Solidity language.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/math/SignedMath.sol\":\"SignedMath\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0xc8cae21c9ae4a46e5162ff9bf5b351d6fa6a6eba72d515f3bc1bdfeda7fdf083\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce830ebcf28e31643caba318996db3763c36d52cd0f23798ba83c135355d45e9\",\"dweb:/ipfs/QmdGPcvptHN7UBCbUYBbRX3hiRVRFLRwno8b4uga6uFNif\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03\",\"dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ\"]}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/TricksforBoosterNFT.sol":{"TricksforBoosterNFT":{"abi":[{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"string","name":"baseURI_","type":"string"},{"internalType":"string","name":"contractMetadataURI_","type":"string"},{"internalType":"address","name":"royaltyReceiver_","type":"address"},{"internalType":"uint96","name":"royaltyFeeBasisPoints_","type":"uint96"},{"internalType":"address","name":"initialAdmin_","type":"address"},{"internalType":"address","name":"initialMinter_","type":"address"},{"internalType":"uint48","name":"defaultAdminDelay_","type":"uint48"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AccessControlBadConfirmation","type":"error"},{"inputs":[{"internalType":"uint48","name":"schedule","type":"uint48"}],"name":"AccessControlEnforcedDefaultAdminDelay","type":"error"},{"inputs":[],"name":"AccessControlEnforcedDefaultAdminRules","type":"error"},{"inputs":[{"internalType":"address","name":"defaultAdmin","type":"address"}],"name":"AccessControlInvalidDefaultAdmin","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bytes32","name":"neededRole","type":"bytes32"}],"name":"AccessControlUnauthorizedAccount","type":"error"},{"inputs":[{"internalType":"uint256","name":"numerator","type":"uint256"},{"internalType":"uint256","name":"denominator","type":"uint256"}],"name":"ERC2981InvalidDefaultRoyalty","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC2981InvalidDefaultRoyaltyReceiver","type":"error"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"numerator","type":"uint256"},{"internalType":"uint256","name":"denominator","type":"uint256"}],"name":"ERC2981InvalidTokenRoyalty","type":"error"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC2981InvalidTokenRoyaltyReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"owner","type":"address"}],"name":"ERC721IncorrectOwner","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ERC721InsufficientApproval","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC721InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"ERC721InvalidOperator","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"ERC721InvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC721InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC721InvalidSender","type":"error"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ERC721NonexistentToken","type":"error"},{"inputs":[],"name":"EnforcedPause","type":"error"},{"inputs":[],"name":"ExpectedPause","type":"error"},{"inputs":[{"internalType":"uint8","name":"bits","type":"uint8"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"SafeCastOverflowedUintDowncast","type":"error"},{"inputs":[],"name":"ZeroAddress","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"previousURI","type":"string"},{"indexed":false,"internalType":"string","name":"newURI","type":"string"}],"name":"BaseURIUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"previousURI","type":"string"},{"indexed":false,"internalType":"string","name":"newURI","type":"string"}],"name":"ContractURIUpdated","type":"event"},{"anonymous":false,"inputs":[],"name":"DefaultAdminDelayChangeCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint48","name":"newDelay","type":"uint48"},{"indexed":false,"internalType":"uint48","name":"effectSchedule","type":"uint48"}],"name":"DefaultAdminDelayChangeScheduled","type":"event"},{"anonymous":false,"inputs":[],"name":"DefaultAdminTransferCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAdmin","type":"address"},{"indexed":false,"internalType":"uint48","name":"acceptSchedule","type":"uint48"}],"name":"DefaultAdminTransferScheduled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint96","name":"feeBasisPoints","type":"uint96"}],"name":"DefaultRoyaltyUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINTER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptDefaultAdminTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newAdmin","type":"address"}],"name":"beginDefaultAdminTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cancelDefaultAdminTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint48","name":"newDelay","type":"uint48"}],"name":"changeDefaultAdminDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"defaultAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"defaultAdminDelay","outputs":[{"internalType":"uint48","name":"","type":"uint48"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"defaultAdminDelayIncreaseWait","outputs":[{"internalType":"uint48","name":"","type":"uint48"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingDefaultAdmin","outputs":[{"internalType":"address","name":"newAdmin","type":"address"},{"internalType":"uint48","name":"schedule","type":"uint48"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingDefaultAdminDelay","outputs":[{"internalType":"uint48","name":"newDelay","type":"uint48"},{"internalType":"uint48","name":"schedule","type":"uint48"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rollbackDefaultAdminDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"salePrice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI_","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"contractMetadataURI_","type":"string"}],"name":"setContractURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint96","name":"feeBasisPoints","type":"uint96"}],"name":"setRoyaltyInfo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"details":"Does not include staking logic — staking is handled by TricksforBoosterStaking.","errors":{"AccessControlBadConfirmation()":[{"details":"The caller of a function is not the expected one. NOTE: Don't confuse with {AccessControlUnauthorizedAccount}."}],"AccessControlEnforcedDefaultAdminDelay(uint48)":[{"details":"The delay for transferring the default admin delay is enforced and the operation must wait until `schedule`. NOTE: `schedule` can be 0 indicating there's no transfer scheduled."}],"AccessControlEnforcedDefaultAdminRules()":[{"details":"At least one of the following rules was violated: - The `DEFAULT_ADMIN_ROLE` must only be managed by itself. - The `DEFAULT_ADMIN_ROLE` must only be held by one account at the time. - Any `DEFAULT_ADMIN_ROLE` transfer must be in two delayed steps."}],"AccessControlInvalidDefaultAdmin(address)":[{"details":"The new default admin is not a valid default admin."}],"AccessControlUnauthorizedAccount(address,bytes32)":[{"details":"The `account` is missing a role."}],"ERC2981InvalidDefaultRoyalty(uint256,uint256)":[{"details":"The default royalty set is invalid (eg. (numerator / denominator) >= 1)."}],"ERC2981InvalidDefaultRoyaltyReceiver(address)":[{"details":"The default royalty receiver is invalid."}],"ERC2981InvalidTokenRoyalty(uint256,uint256,uint256)":[{"details":"The royalty set for a specific `tokenId` is invalid (eg. (numerator / denominator) >= 1)."}],"ERC2981InvalidTokenRoyaltyReceiver(uint256,address)":[{"details":"The royalty receiver for `tokenId` is invalid."}],"ERC721IncorrectOwner(address,uint256,address)":[{"details":"Indicates an error related to the ownership over a particular token. Used in transfers.","params":{"owner":"Address of the current owner of a token.","sender":"Address whose tokens are being transferred.","tokenId":"Identifier number of a token."}}],"ERC721InsufficientApproval(address,uint256)":[{"details":"Indicates a failure with the `operator`’s approval. Used in transfers.","params":{"operator":"Address that may be allowed to operate on tokens without being their owner.","tokenId":"Identifier number of a token."}}],"ERC721InvalidApprover(address)":[{"details":"Indicates a failure with the `approver` of a token to be approved. Used in approvals.","params":{"approver":"Address initiating an approval operation."}}],"ERC721InvalidOperator(address)":[{"details":"Indicates a failure with the `operator` to be approved. Used in approvals.","params":{"operator":"Address that may be allowed to operate on tokens without being their owner."}}],"ERC721InvalidOwner(address)":[{"details":"Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-721. Used in balance queries.","params":{"owner":"Address of the current owner of a token."}}],"ERC721InvalidReceiver(address)":[{"details":"Indicates a failure with the token `receiver`. Used in transfers.","params":{"receiver":"Address to which tokens are being transferred."}}],"ERC721InvalidSender(address)":[{"details":"Indicates a failure with the token `sender`. Used in transfers.","params":{"sender":"Address whose tokens are being transferred."}}],"ERC721NonexistentToken(uint256)":[{"details":"Indicates a `tokenId` whose `owner` is the zero address.","params":{"tokenId":"Identifier number of a token."}}],"EnforcedPause()":[{"details":"The operation failed because the contract is paused."}],"ExpectedPause()":[{"details":"The operation failed because the contract is not paused."}],"SafeCastOverflowedUintDowncast(uint8,uint256)":[{"details":"Value doesn't fit in a uint of `bits` size."}]},"events":{"Approval(address,address,uint256)":{"details":"Emitted when `owner` enables `approved` to manage the `tokenId` token."},"ApprovalForAll(address,address,bool)":{"details":"Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets."},"DefaultAdminDelayChangeCanceled()":{"details":"Emitted when a {pendingDefaultAdminDelay} is reset if its schedule didn't pass."},"DefaultAdminDelayChangeScheduled(uint48,uint48)":{"details":"Emitted when a {defaultAdminDelay} change is started, setting `newDelay` as the next delay to be applied between default admin transfer after `effectSchedule` has passed."},"DefaultAdminTransferCanceled()":{"details":"Emitted when a {pendingDefaultAdmin} is reset if it was never accepted, regardless of its schedule."},"DefaultAdminTransferScheduled(address,uint48)":{"details":"Emitted when a {defaultAdmin} transfer is started, setting `newAdmin` as the next address to become the {defaultAdmin} by calling {acceptDefaultAdminTransfer} only after `acceptSchedule` passes."},"Paused(address)":{"details":"Emitted when the pause is triggered by `account`."},"RoleAdminChanged(bytes32,bytes32,bytes32)":{"details":"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted to signal this."},"RoleGranted(bytes32,address,address)":{"details":"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call. This account bears the admin role (for the granted role). Expected in cases where the role was granted using the internal {AccessControl-_grantRole}."},"RoleRevoked(bytes32,address,address)":{"details":"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)"},"Transfer(address,address,uint256)":{"details":"Emitted when `tokenId` token is transferred from `from` to `to`."},"Unpaused(address)":{"details":"Emitted when the pause is lifted by `account`."}},"kind":"dev","methods":{"acceptDefaultAdminTransfer()":{"details":"Completes a {defaultAdmin} transfer previously started with {beginDefaultAdminTransfer}. After calling the function: - `DEFAULT_ADMIN_ROLE` should be granted to the caller. - `DEFAULT_ADMIN_ROLE` should be revoked from the previous holder. - {pendingDefaultAdmin} should be reset to zero values. Requirements: - Only can be called by the {pendingDefaultAdmin}'s `newAdmin`. - The {pendingDefaultAdmin}'s `acceptSchedule` should've passed."},"approve(address,uint256)":{"details":"Gives permission to `to` to transfer `tokenId` token to another account. The approval is cleared when the token is transferred. Only a single account can be approved at a time, so approving the zero address clears previous approvals. Requirements: - The caller must own the token or be an approved operator. - `tokenId` must exist. Emits an {Approval} event."},"balanceOf(address)":{"details":"Returns the number of tokens in ``owner``'s account."},"beginDefaultAdminTransfer(address)":{"details":"Starts a {defaultAdmin} transfer by setting a {pendingDefaultAdmin} scheduled for acceptance after the current timestamp plus a {defaultAdminDelay}. Requirements: - Only can be called by the current {defaultAdmin}. Emits a {DefaultAdminTransferScheduled} event."},"cancelDefaultAdminTransfer()":{"details":"Cancels a {defaultAdmin} transfer previously started with {beginDefaultAdminTransfer}. A {pendingDefaultAdmin} not yet accepted can also be cancelled with this function. Requirements: - Only can be called by the current {defaultAdmin}. May emit a {DefaultAdminTransferCanceled} event."},"changeDefaultAdminDelay(uint48)":{"details":"Initiates a {defaultAdminDelay} update by setting a {pendingDefaultAdminDelay} scheduled for getting into effect after the current timestamp plus a {defaultAdminDelay}. This function guarantees that any call to {beginDefaultAdminTransfer} done between the timestamp this method is called and the {pendingDefaultAdminDelay} effect schedule will use the current {defaultAdminDelay} set before calling. The {pendingDefaultAdminDelay}'s effect schedule is defined in a way that waiting until the schedule and then calling {beginDefaultAdminTransfer} with the new delay will take at least the same as another {defaultAdmin} complete transfer (including acceptance). The schedule is designed for two scenarios: - When the delay is changed for a larger one the schedule is `block.timestamp + newDelay` capped by {defaultAdminDelayIncreaseWait}. - When the delay is changed for a shorter one, the schedule is `block.timestamp + (current delay - new delay)`. A {pendingDefaultAdminDelay} that never got into effect will be canceled in favor of a new scheduled change. Requirements: - Only can be called by the current {defaultAdmin}. Emits a {DefaultAdminDelayChangeScheduled} event and may emit a {DefaultAdminDelayChangeCanceled} event."},"constructor":{"params":{"baseURI_":"Base URI for token metadata (appended with tokenId)","contractMetadataURI_":"URI for OpenSea collection-level metadata","defaultAdminDelay_":"Delay in seconds for default-admin transfers","initialAdmin_":"Initial default administrator","initialMinter_":"Initial account authorized to mint","name_":"ERC-721 collection name","royaltyFeeBasisPoints_":"Royalty fee in basis points (10 000 = 100%)","royaltyReceiver_":"Address that receives royalty payments","symbol_":"ERC-721 collection symbol"}},"defaultAdmin()":{"details":"Returns the address of the current `DEFAULT_ADMIN_ROLE` holder."},"defaultAdminDelay()":{"details":"Returns the delay required to schedule the acceptance of a {defaultAdmin} transfer started. This delay will be added to the current timestamp when calling {beginDefaultAdminTransfer} to set the acceptance schedule. NOTE: If a delay change has been scheduled, it will take effect as soon as the schedule passes, making this function returns the new delay. See {changeDefaultAdminDelay}."},"defaultAdminDelayIncreaseWait()":{"details":"Maximum time in seconds for an increase to {defaultAdminDelay} (that is scheduled using {changeDefaultAdminDelay}) to take effect. Default to 5 days. When the {defaultAdminDelay} is scheduled to be increased, it goes into effect after the new delay has passed with the purpose of giving enough time for reverting any accidental change (i.e. using milliseconds instead of seconds) that may lock the contract. However, to avoid excessive schedules, the wait is capped by this function and it can be overridden for a custom {defaultAdminDelay} increase scheduling. IMPORTANT: Make sure to add a reasonable amount of time while overriding this value, otherwise, there's a risk of setting a high new delay that goes into effect almost immediately without the possibility of human intervention in the case of an input error (eg. set milliseconds instead of seconds)."},"getApproved(uint256)":{"details":"Returns the account approved for `tokenId` token. Requirements: - `tokenId` must exist."},"getRoleAdmin(bytes32)":{"details":"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}."},"grantRole(bytes32,address)":{"details":"See {AccessControl-grantRole}. Reverts for `DEFAULT_ADMIN_ROLE`."},"hasRole(bytes32,address)":{"details":"Returns `true` if `account` has been granted `role`."},"isApprovedForAll(address,address)":{"details":"Returns if the `operator` is allowed to manage all of the assets of `owner`. See {setApprovalForAll}"},"name()":{"details":"Returns the token collection name."},"owner()":{"details":"Gets the address of the owner."},"ownerOf(uint256)":{"details":"Returns the owner of the `tokenId` token. Requirements: - `tokenId` must exist."},"paused()":{"details":"Returns true if the contract is paused, and false otherwise."},"pendingDefaultAdmin()":{"details":"Returns a tuple of a `newAdmin` and an accept schedule. After the `schedule` passes, the `newAdmin` will be able to accept the {defaultAdmin} role by calling {acceptDefaultAdminTransfer}, completing the role transfer. A zero value only in `acceptSchedule` indicates no pending admin transfer. NOTE: A zero address `newAdmin` means that {defaultAdmin} is being renounced."},"pendingDefaultAdminDelay()":{"details":"Returns a tuple of `newDelay` and an effect schedule. After the `schedule` passes, the `newDelay` will get into effect immediately for every new {defaultAdmin} transfer started with {beginDefaultAdminTransfer}. A zero value only in `effectSchedule` indicates no pending delay change. NOTE: A zero value only for `newDelay` means that the next {defaultAdminDelay} will be zero after the effect schedule."},"renounceRole(bytes32,address)":{"details":"See {AccessControl-renounceRole}. For the `DEFAULT_ADMIN_ROLE`, it only allows renouncing in two steps by first calling {beginDefaultAdminTransfer} to the `address(0)`, so it's required that the {pendingDefaultAdmin} schedule has also passed when calling this function. After its execution, it will not be possible to call `onlyRole(DEFAULT_ADMIN_ROLE)` functions. NOTE: Renouncing `DEFAULT_ADMIN_ROLE` will leave the contract without a {defaultAdmin}, thereby disabling any functionality that is only available for it, and the possibility of reassigning a non-administrated role."},"revokeRole(bytes32,address)":{"details":"See {AccessControl-revokeRole}. Reverts for `DEFAULT_ADMIN_ROLE`."},"rollbackDefaultAdminDelay()":{"details":"Cancels a scheduled {defaultAdminDelay} change. Requirements: - Only can be called by the current {defaultAdmin}. May emit a {DefaultAdminDelayChangeCanceled} event."},"royaltyInfo(uint256,uint256)":{"details":"Returns how much royalty is owed and to whom, based on a sale price that may be denominated in any unit of exchange. The royalty amount is denominated and should be paid in that same unit of exchange. NOTE: ERC-2981 allows setting the royalty to 100% of the price. In that case all the price would be sent to the royalty receiver and 0 tokens to the seller. Contracts dealing with royalty should consider empty transfers."},"safeMint(address,uint256)":{"params":{"to":"Recipient address for the minted token.","tokenId":"Token ID to mint. Must not already exist."}},"safeTransferFrom(address,address,uint256)":{"details":"Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients are aware of the ERC-721 protocol to prevent tokens from being forever locked. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must exist and be owned by `from`. - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. Emits a {Transfer} event."},"safeTransferFrom(address,address,uint256,bytes)":{"details":"Safely transfers `tokenId` token from `from` to `to`. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must exist and be owned by `from`. - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. Emits a {Transfer} event."},"setApprovalForAll(address,bool)":{"details":"Approve or remove `operator` as an operator for the caller. Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. Requirements: - The `operator` cannot be the address zero. Emits an {ApprovalForAll} event."},"setBaseURI(string)":{"params":{"baseURI_":"New base URI string."}},"setContractURI(string)":{"params":{"contractMetadataURI_":"New collection metadata URI."}},"setRoyaltyInfo(address,uint96)":{"params":{"feeBasisPoints":"Royalty fee in basis points (10 000 = 100%).","receiver":"Address that receives royalty payments."}},"supportsInterface(bytes4)":{"details":"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas."},"symbol()":{"details":"Returns the token collection symbol."},"tokenURI(uint256)":{"details":"Returns the Uniform Resource Identifier (URI) for `tokenId` token."},"transferFrom(address,address,uint256)":{"details":"Transfers `tokenId` token from `from` to `to`. WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC-721 or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must understand this adds an external call which potentially creates a reentrancy vulnerability. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must be owned by `from`. - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. Emits a {Transfer} event."}},"title":"TricksforBoosterNFT","version":1},"evm":{"bytecode":{"functionDebugData":{"@_1667":{"entryPoint":null,"id":1667,"parameterSlots":2,"returnSlots":0},"@_679":{"entryPoint":null,"id":679,"parameterSlots":2,"returnSlots":0},"@_9536":{"entryPoint":null,"id":9536,"parameterSlots":9,"returnSlots":0},"@_feeDenominator_2957":{"entryPoint":null,"id":2957,"parameterSlots":0,"returnSlots":1},"@_grantRole_256":{"entryPoint":610,"id":256,"parameterSlots":2,"returnSlots":1},"@_grantRole_865":{"entryPoint":337,"id":865,"parameterSlots":2,"returnSlots":1},"@_msgSender_3889":{"entryPoint":null,"id":3889,"parameterSlots":0,"returnSlots":1},"@_setDefaultRoyalty_3003":{"entryPoint":448,"id":3003,"parameterSlots":2,"returnSlots":0},"@defaultAdmin_930":{"entryPoint":null,"id":930,"parameterSlots":0,"returnSlots":1},"@hasRole_80":{"entryPoint":null,"id":80,"parameterSlots":2,"returnSlots":1},"abi_decode_address_fromMemory":{"entryPoint":938,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_string_fromMemory":{"entryPoint":801,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_string_memory_ptrt_string_memory_ptrt_string_memory_ptrt_string_memory_ptrt_addresst_uint96t_addresst_addresst_uint48_fromMemory":{"entryPoint":1008,"id":null,"parameterSlots":2,"returnSlots":9},"abi_decode_uint48_fromMemory":{"entryPoint":987,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_uint96_fromMemory":{"entryPoint":965,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint96_t_uint256__to_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"array_dataslot_string_storage":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"clean_up_bytearray_end_slots_string_storage":{"entryPoint":1332,"id":null,"parameterSlots":3,"returnSlots":0},"copy_byte_array_to_storage_from_t_string_memory_ptr_to_t_string_storage":{"entryPoint":1408,"id":null,"parameterSlots":2,"returnSlots":0},"extract_byte_array_length":{"entryPoint":1276,"id":null,"parameterSlots":1,"returnSlots":1},"extract_used_part_and_set_length_of_short_byte_array":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"panic_error_0x41":{"entryPoint":781,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[{"ast":{"nativeSrc":"0:5832:30","nodeType":"YulBlock","src":"0:5832:30","statements":[{"nativeSrc":"6:3:30","nodeType":"YulBlock","src":"6:3:30","statements":[]},{"body":{"nativeSrc":"46:95:30","nodeType":"YulBlock","src":"46:95:30","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"63:1:30","nodeType":"YulLiteral","src":"63:1:30","type":"","value":"0"},{"arguments":[{"kind":"number","nativeSrc":"70:3:30","nodeType":"YulLiteral","src":"70:3:30","type":"","value":"224"},{"kind":"number","nativeSrc":"75:10:30","nodeType":"YulLiteral","src":"75:10:30","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nativeSrc":"66:3:30","nodeType":"YulIdentifier","src":"66:3:30"},"nativeSrc":"66:20:30","nodeType":"YulFunctionCall","src":"66:20:30"}],"functionName":{"name":"mstore","nativeSrc":"56:6:30","nodeType":"YulIdentifier","src":"56:6:30"},"nativeSrc":"56:31:30","nodeType":"YulFunctionCall","src":"56:31:30"},"nativeSrc":"56:31:30","nodeType":"YulExpressionStatement","src":"56:31:30"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"103:1:30","nodeType":"YulLiteral","src":"103:1:30","type":"","value":"4"},{"kind":"number","nativeSrc":"106:4:30","nodeType":"YulLiteral","src":"106:4:30","type":"","value":"0x41"}],"functionName":{"name":"mstore","nativeSrc":"96:6:30","nodeType":"YulIdentifier","src":"96:6:30"},"nativeSrc":"96:15:30","nodeType":"YulFunctionCall","src":"96:15:30"},"nativeSrc":"96:15:30","nodeType":"YulExpressionStatement","src":"96:15:30"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"127:1:30","nodeType":"YulLiteral","src":"127:1:30","type":"","value":"0"},{"kind":"number","nativeSrc":"130:4:30","nodeType":"YulLiteral","src":"130:4:30","type":"","value":"0x24"}],"functionName":{"name":"revert","nativeSrc":"120:6:30","nodeType":"YulIdentifier","src":"120:6:30"},"nativeSrc":"120:15:30","nodeType":"YulFunctionCall","src":"120:15:30"},"nativeSrc":"120:15:30","nodeType":"YulExpressionStatement","src":"120:15:30"}]},"name":"panic_error_0x41","nativeSrc":"14:127:30","nodeType":"YulFunctionDefinition","src":"14:127:30"},{"body":{"nativeSrc":"210:659:30","nodeType":"YulBlock","src":"210:659:30","statements":[{"body":{"nativeSrc":"259:16:30","nodeType":"YulBlock","src":"259:16:30","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"268:1:30","nodeType":"YulLiteral","src":"268:1:30","type":"","value":"0"},{"kind":"number","nativeSrc":"271:1:30","nodeType":"YulLiteral","src":"271:1:30","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"261:6:30","nodeType":"YulIdentifier","src":"261:6:30"},"nativeSrc":"261:12:30","nodeType":"YulFunctionCall","src":"261:12:30"},"nativeSrc":"261:12:30","nodeType":"YulExpressionStatement","src":"261:12:30"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nativeSrc":"238:6:30","nodeType":"YulIdentifier","src":"238:6:30"},{"kind":"number","nativeSrc":"246:4:30","nodeType":"YulLiteral","src":"246:4:30","type":"","value":"0x1f"}],"functionName":{"name":"add","nativeSrc":"234:3:30","nodeType":"YulIdentifier","src":"234:3:30"},"nativeSrc":"234:17:30","nodeType":"YulFunctionCall","src":"234:17:30"},{"name":"end","nativeSrc":"253:3:30","nodeType":"YulIdentifier","src":"253:3:30"}],"functionName":{"name":"slt","nativeSrc":"230:3:30","nodeType":"YulIdentifier","src":"230:3:30"},"nativeSrc":"230:27:30","nodeType":"YulFunctionCall","src":"230:27:30"}],"functionName":{"name":"iszero","nativeSrc":"223:6:30","nodeType":"YulIdentifier","src":"223:6:30"},"nativeSrc":"223:35:30","nodeType":"YulFunctionCall","src":"223:35:30"},"nativeSrc":"220:55:30","nodeType":"YulIf","src":"220:55:30"},{"nativeSrc":"284:27:30","nodeType":"YulVariableDeclaration","src":"284:27:30","value":{"arguments":[{"name":"offset","nativeSrc":"304:6:30","nodeType":"YulIdentifier","src":"304:6:30"}],"functionName":{"name":"mload","nativeSrc":"298:5:30","nodeType":"YulIdentifier","src":"298:5:30"},"nativeSrc":"298:13:30","nodeType":"YulFunctionCall","src":"298:13:30"},"variables":[{"name":"length","nativeSrc":"288:6:30","nodeType":"YulTypedName","src":"288:6:30","type":""}]},{"body":{"nativeSrc":"354:22:30","nodeType":"YulBlock","src":"354:22:30","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nativeSrc":"356:16:30","nodeType":"YulIdentifier","src":"356:16:30"},"nativeSrc":"356:18:30","nodeType":"YulFunctionCall","src":"356:18:30"},"nativeSrc":"356:18:30","nodeType":"YulExpressionStatement","src":"356:18:30"}]},"condition":{"arguments":[{"name":"length","nativeSrc":"326:6:30","nodeType":"YulIdentifier","src":"326:6:30"},{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"342:2:30","nodeType":"YulLiteral","src":"342:2:30","type":"","value":"64"},{"kind":"number","nativeSrc":"346:1:30","nodeType":"YulLiteral","src":"346:1:30","type":"","value":"1"}],"functionName":{"name":"shl","nativeSrc":"338:3:30","nodeType":"YulIdentifier","src":"338:3:30"},"nativeSrc":"338:10:30","nodeType":"YulFunctionCall","src":"338:10:30"},{"kind":"number","nativeSrc":"350:1:30","nodeType":"YulLiteral","src":"350:1:30","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"334:3:30","nodeType":"YulIdentifier","src":"334:3:30"},"nativeSrc":"334:18:30","nodeType":"YulFunctionCall","src":"334:18:30"}],"functionName":{"name":"gt","nativeSrc":"323:2:30","nodeType":"YulIdentifier","src":"323:2:30"},"nativeSrc":"323:30:30","nodeType":"YulFunctionCall","src":"323:30:30"},"nativeSrc":"320:56:30","nodeType":"YulIf","src":"320:56:30"},{"nativeSrc":"385:23:30","nodeType":"YulVariableDeclaration","src":"385:23:30","value":{"arguments":[{"kind":"number","nativeSrc":"405:2:30","nodeType":"YulLiteral","src":"405:2:30","type":"","value":"64"}],"functionName":{"name":"mload","nativeSrc":"399:5:30","nodeType":"YulIdentifier","src":"399:5:30"},"nativeSrc":"399:9:30","nodeType":"YulFunctionCall","src":"399:9:30"},"variables":[{"name":"memPtr","nativeSrc":"389:6:30","nodeType":"YulTypedName","src":"389:6:30","type":""}]},{"nativeSrc":"417:85:30","nodeType":"YulVariableDeclaration","src":"417:85:30","value":{"arguments":[{"name":"memPtr","nativeSrc":"439:6:30","nodeType":"YulIdentifier","src":"439:6:30"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"length","nativeSrc":"463:6:30","nodeType":"YulIdentifier","src":"463:6:30"},{"kind":"number","nativeSrc":"471:4:30","nodeType":"YulLiteral","src":"471:4:30","type":"","value":"0x1f"}],"functionName":{"name":"add","nativeSrc":"459:3:30","nodeType":"YulIdentifier","src":"459:3:30"},"nativeSrc":"459:17:30","nodeType":"YulFunctionCall","src":"459:17:30"},{"arguments":[{"kind":"number","nativeSrc":"482:2:30","nodeType":"YulLiteral","src":"482:2:30","type":"","value":"31"}],"functionName":{"name":"not","nativeSrc":"478:3:30","nodeType":"YulIdentifier","src":"478:3:30"},"nativeSrc":"478:7:30","nodeType":"YulFunctionCall","src":"478:7:30"}],"functionName":{"name":"and","nativeSrc":"455:3:30","nodeType":"YulIdentifier","src":"455:3:30"},"nativeSrc":"455:31:30","nodeType":"YulFunctionCall","src":"455:31:30"},{"kind":"number","nativeSrc":"488:2:30","nodeType":"YulLiteral","src":"488:2:30","type":"","value":"63"}],"functionName":{"name":"add","nativeSrc":"451:3:30","nodeType":"YulIdentifier","src":"451:3:30"},"nativeSrc":"451:40:30","nodeType":"YulFunctionCall","src":"451:40:30"},{"arguments":[{"kind":"number","nativeSrc":"497:2:30","nodeType":"YulLiteral","src":"497:2:30","type":"","value":"31"}],"functionName":{"name":"not","nativeSrc":"493:3:30","nodeType":"YulIdentifier","src":"493:3:30"},"nativeSrc":"493:7:30","nodeType":"YulFunctionCall","src":"493:7:30"}],"functionName":{"name":"and","nativeSrc":"447:3:30","nodeType":"YulIdentifier","src":"447:3:30"},"nativeSrc":"447:54:30","nodeType":"YulFunctionCall","src":"447:54:30"}],"functionName":{"name":"add","nativeSrc":"435:3:30","nodeType":"YulIdentifier","src":"435:3:30"},"nativeSrc":"435:67:30","nodeType":"YulFunctionCall","src":"435:67:30"},"variables":[{"name":"newFreePtr","nativeSrc":"421:10:30","nodeType":"YulTypedName","src":"421:10:30","type":""}]},{"body":{"nativeSrc":"577:22:30","nodeType":"YulBlock","src":"577:22:30","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nativeSrc":"579:16:30","nodeType":"YulIdentifier","src":"579:16:30"},"nativeSrc":"579:18:30","nodeType":"YulFunctionCall","src":"579:18:30"},"nativeSrc":"579:18:30","nodeType":"YulExpressionStatement","src":"579:18:30"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nativeSrc":"520:10:30","nodeType":"YulIdentifier","src":"520:10:30"},{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"540:2:30","nodeType":"YulLiteral","src":"540:2:30","type":"","value":"64"},{"kind":"number","nativeSrc":"544:1:30","nodeType":"YulLiteral","src":"544:1:30","type":"","value":"1"}],"functionName":{"name":"shl","nativeSrc":"536:3:30","nodeType":"YulIdentifier","src":"536:3:30"},"nativeSrc":"536:10:30","nodeType":"YulFunctionCall","src":"536:10:30"},{"kind":"number","nativeSrc":"548:1:30","nodeType":"YulLiteral","src":"548:1:30","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"532:3:30","nodeType":"YulIdentifier","src":"532:3:30"},"nativeSrc":"532:18:30","nodeType":"YulFunctionCall","src":"532:18:30"}],"functionName":{"name":"gt","nativeSrc":"517:2:30","nodeType":"YulIdentifier","src":"517:2:30"},"nativeSrc":"517:34:30","nodeType":"YulFunctionCall","src":"517:34:30"},{"arguments":[{"name":"newFreePtr","nativeSrc":"556:10:30","nodeType":"YulIdentifier","src":"556:10:30"},{"name":"memPtr","nativeSrc":"568:6:30","nodeType":"YulIdentifier","src":"568:6:30"}],"functionName":{"name":"lt","nativeSrc":"553:2:30","nodeType":"YulIdentifier","src":"553:2:30"},"nativeSrc":"553:22:30","nodeType":"YulFunctionCall","src":"553:22:30"}],"functionName":{"name":"or","nativeSrc":"514:2:30","nodeType":"YulIdentifier","src":"514:2:30"},"nativeSrc":"514:62:30","nodeType":"YulFunctionCall","src":"514:62:30"},"nativeSrc":"511:88:30","nodeType":"YulIf","src":"511:88:30"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"615:2:30","nodeType":"YulLiteral","src":"615:2:30","type":"","value":"64"},{"name":"newFreePtr","nativeSrc":"619:10:30","nodeType":"YulIdentifier","src":"619:10:30"}],"functionName":{"name":"mstore","nativeSrc":"608:6:30","nodeType":"YulIdentifier","src":"608:6:30"},"nativeSrc":"608:22:30","nodeType":"YulFunctionCall","src":"608:22:30"},"nativeSrc":"608:22:30","nodeType":"YulExpressionStatement","src":"608:22:30"},{"expression":{"arguments":[{"name":"memPtr","nativeSrc":"646:6:30","nodeType":"YulIdentifier","src":"646:6:30"},{"name":"length","nativeSrc":"654:6:30","nodeType":"YulIdentifier","src":"654:6:30"}],"functionName":{"name":"mstore","nativeSrc":"639:6:30","nodeType":"YulIdentifier","src":"639:6:30"},"nativeSrc":"639:22:30","nodeType":"YulFunctionCall","src":"639:22:30"},"nativeSrc":"639:22:30","nodeType":"YulExpressionStatement","src":"639:22:30"},{"body":{"nativeSrc":"713:16:30","nodeType":"YulBlock","src":"713:16:30","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"722:1:30","nodeType":"YulLiteral","src":"722:1:30","type":"","value":"0"},{"kind":"number","nativeSrc":"725:1:30","nodeType":"YulLiteral","src":"725:1:30","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"715:6:30","nodeType":"YulIdentifier","src":"715:6:30"},"nativeSrc":"715:12:30","nodeType":"YulFunctionCall","src":"715:12:30"},"nativeSrc":"715:12:30","nodeType":"YulExpressionStatement","src":"715:12:30"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nativeSrc":"684:6:30","nodeType":"YulIdentifier","src":"684:6:30"},{"name":"length","nativeSrc":"692:6:30","nodeType":"YulIdentifier","src":"692:6:30"}],"functionName":{"name":"add","nativeSrc":"680:3:30","nodeType":"YulIdentifier","src":"680:3:30"},"nativeSrc":"680:19:30","nodeType":"YulFunctionCall","src":"680:19:30"},{"kind":"number","nativeSrc":"701:4:30","nodeType":"YulLiteral","src":"701:4:30","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"676:3:30","nodeType":"YulIdentifier","src":"676:3:30"},"nativeSrc":"676:30:30","nodeType":"YulFunctionCall","src":"676:30:30"},{"name":"end","nativeSrc":"708:3:30","nodeType":"YulIdentifier","src":"708:3:30"}],"functionName":{"name":"gt","nativeSrc":"673:2:30","nodeType":"YulIdentifier","src":"673:2:30"},"nativeSrc":"673:39:30","nodeType":"YulFunctionCall","src":"673:39:30"},"nativeSrc":"670:59:30","nodeType":"YulIf","src":"670:59:30"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"748:6:30","nodeType":"YulIdentifier","src":"748:6:30"},{"kind":"number","nativeSrc":"756:4:30","nodeType":"YulLiteral","src":"756:4:30","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"744:3:30","nodeType":"YulIdentifier","src":"744:3:30"},"nativeSrc":"744:17:30","nodeType":"YulFunctionCall","src":"744:17:30"},{"arguments":[{"name":"offset","nativeSrc":"767:6:30","nodeType":"YulIdentifier","src":"767:6:30"},{"kind":"number","nativeSrc":"775:4:30","nodeType":"YulLiteral","src":"775:4:30","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"763:3:30","nodeType":"YulIdentifier","src":"763:3:30"},"nativeSrc":"763:17:30","nodeType":"YulFunctionCall","src":"763:17:30"},{"name":"length","nativeSrc":"782:6:30","nodeType":"YulIdentifier","src":"782:6:30"}],"functionName":{"name":"mcopy","nativeSrc":"738:5:30","nodeType":"YulIdentifier","src":"738:5:30"},"nativeSrc":"738:51:30","nodeType":"YulFunctionCall","src":"738:51:30"},"nativeSrc":"738:51:30","nodeType":"YulExpressionStatement","src":"738:51:30"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"813:6:30","nodeType":"YulIdentifier","src":"813:6:30"},{"name":"length","nativeSrc":"821:6:30","nodeType":"YulIdentifier","src":"821:6:30"}],"functionName":{"name":"add","nativeSrc":"809:3:30","nodeType":"YulIdentifier","src":"809:3:30"},"nativeSrc":"809:19:30","nodeType":"YulFunctionCall","src":"809:19:30"},{"kind":"number","nativeSrc":"830:4:30","nodeType":"YulLiteral","src":"830:4:30","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"805:3:30","nodeType":"YulIdentifier","src":"805:3:30"},"nativeSrc":"805:30:30","nodeType":"YulFunctionCall","src":"805:30:30"},{"kind":"number","nativeSrc":"837:1:30","nodeType":"YulLiteral","src":"837:1:30","type":"","value":"0"}],"functionName":{"name":"mstore","nativeSrc":"798:6:30","nodeType":"YulIdentifier","src":"798:6:30"},"nativeSrc":"798:41:30","nodeType":"YulFunctionCall","src":"798:41:30"},"nativeSrc":"798:41:30","nodeType":"YulExpressionStatement","src":"798:41:30"},{"nativeSrc":"848:15:30","nodeType":"YulAssignment","src":"848:15:30","value":{"name":"memPtr","nativeSrc":"857:6:30","nodeType":"YulIdentifier","src":"857:6:30"},"variableNames":[{"name":"array","nativeSrc":"848:5:30","nodeType":"YulIdentifier","src":"848:5:30"}]}]},"name":"abi_decode_string_fromMemory","nativeSrc":"146:723:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"184:6:30","nodeType":"YulTypedName","src":"184:6:30","type":""},{"name":"end","nativeSrc":"192:3:30","nodeType":"YulTypedName","src":"192:3:30","type":""}],"returnVariables":[{"name":"array","nativeSrc":"200:5:30","nodeType":"YulTypedName","src":"200:5:30","type":""}],"src":"146:723:30"},{"body":{"nativeSrc":"934:117:30","nodeType":"YulBlock","src":"934:117:30","statements":[{"nativeSrc":"944:22:30","nodeType":"YulAssignment","src":"944:22:30","value":{"arguments":[{"name":"offset","nativeSrc":"959:6:30","nodeType":"YulIdentifier","src":"959:6:30"}],"functionName":{"name":"mload","nativeSrc":"953:5:30","nodeType":"YulIdentifier","src":"953:5:30"},"nativeSrc":"953:13:30","nodeType":"YulFunctionCall","src":"953:13:30"},"variableNames":[{"name":"value","nativeSrc":"944:5:30","nodeType":"YulIdentifier","src":"944:5:30"}]},{"body":{"nativeSrc":"1029:16:30","nodeType":"YulBlock","src":"1029:16:30","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"1038:1:30","nodeType":"YulLiteral","src":"1038:1:30","type":"","value":"0"},{"kind":"number","nativeSrc":"1041:1:30","nodeType":"YulLiteral","src":"1041:1:30","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"1031:6:30","nodeType":"YulIdentifier","src":"1031:6:30"},"nativeSrc":"1031:12:30","nodeType":"YulFunctionCall","src":"1031:12:30"},"nativeSrc":"1031:12:30","nodeType":"YulExpressionStatement","src":"1031:12:30"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"988:5:30","nodeType":"YulIdentifier","src":"988:5:30"},{"arguments":[{"name":"value","nativeSrc":"999:5:30","nodeType":"YulIdentifier","src":"999:5:30"},{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"1014:3:30","nodeType":"YulLiteral","src":"1014:3:30","type":"","value":"160"},{"kind":"number","nativeSrc":"1019:1:30","nodeType":"YulLiteral","src":"1019:1:30","type":"","value":"1"}],"functionName":{"name":"shl","nativeSrc":"1010:3:30","nodeType":"YulIdentifier","src":"1010:3:30"},"nativeSrc":"1010:11:30","nodeType":"YulFunctionCall","src":"1010:11:30"},{"kind":"number","nativeSrc":"1023:1:30","nodeType":"YulLiteral","src":"1023:1:30","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"1006:3:30","nodeType":"YulIdentifier","src":"1006:3:30"},"nativeSrc":"1006:19:30","nodeType":"YulFunctionCall","src":"1006:19:30"}],"functionName":{"name":"and","nativeSrc":"995:3:30","nodeType":"YulIdentifier","src":"995:3:30"},"nativeSrc":"995:31:30","nodeType":"YulFunctionCall","src":"995:31:30"}],"functionName":{"name":"eq","nativeSrc":"985:2:30","nodeType":"YulIdentifier","src":"985:2:30"},"nativeSrc":"985:42:30","nodeType":"YulFunctionCall","src":"985:42:30"}],"functionName":{"name":"iszero","nativeSrc":"978:6:30","nodeType":"YulIdentifier","src":"978:6:30"},"nativeSrc":"978:50:30","nodeType":"YulFunctionCall","src":"978:50:30"},"nativeSrc":"975:70:30","nodeType":"YulIf","src":"975:70:30"}]},"name":"abi_decode_address_fromMemory","nativeSrc":"874:177:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"913:6:30","nodeType":"YulTypedName","src":"913:6:30","type":""}],"returnVariables":[{"name":"value","nativeSrc":"924:5:30","nodeType":"YulTypedName","src":"924:5:30","type":""}],"src":"874:177:30"},{"body":{"nativeSrc":"1115:116:30","nodeType":"YulBlock","src":"1115:116:30","statements":[{"nativeSrc":"1125:22:30","nodeType":"YulAssignment","src":"1125:22:30","value":{"arguments":[{"name":"offset","nativeSrc":"1140:6:30","nodeType":"YulIdentifier","src":"1140:6:30"}],"functionName":{"name":"mload","nativeSrc":"1134:5:30","nodeType":"YulIdentifier","src":"1134:5:30"},"nativeSrc":"1134:13:30","nodeType":"YulFunctionCall","src":"1134:13:30"},"variableNames":[{"name":"value","nativeSrc":"1125:5:30","nodeType":"YulIdentifier","src":"1125:5:30"}]},{"body":{"nativeSrc":"1209:16:30","nodeType":"YulBlock","src":"1209:16:30","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"1218:1:30","nodeType":"YulLiteral","src":"1218:1:30","type":"","value":"0"},{"kind":"number","nativeSrc":"1221:1:30","nodeType":"YulLiteral","src":"1221:1:30","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"1211:6:30","nodeType":"YulIdentifier","src":"1211:6:30"},"nativeSrc":"1211:12:30","nodeType":"YulFunctionCall","src":"1211:12:30"},"nativeSrc":"1211:12:30","nodeType":"YulExpressionStatement","src":"1211:12:30"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"1169:5:30","nodeType":"YulIdentifier","src":"1169:5:30"},{"arguments":[{"name":"value","nativeSrc":"1180:5:30","nodeType":"YulIdentifier","src":"1180:5:30"},{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"1195:2:30","nodeType":"YulLiteral","src":"1195:2:30","type":"","value":"96"},{"kind":"number","nativeSrc":"1199:1:30","nodeType":"YulLiteral","src":"1199:1:30","type":"","value":"1"}],"functionName":{"name":"shl","nativeSrc":"1191:3:30","nodeType":"YulIdentifier","src":"1191:3:30"},"nativeSrc":"1191:10:30","nodeType":"YulFunctionCall","src":"1191:10:30"},{"kind":"number","nativeSrc":"1203:1:30","nodeType":"YulLiteral","src":"1203:1:30","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"1187:3:30","nodeType":"YulIdentifier","src":"1187:3:30"},"nativeSrc":"1187:18:30","nodeType":"YulFunctionCall","src":"1187:18:30"}],"functionName":{"name":"and","nativeSrc":"1176:3:30","nodeType":"YulIdentifier","src":"1176:3:30"},"nativeSrc":"1176:30:30","nodeType":"YulFunctionCall","src":"1176:30:30"}],"functionName":{"name":"eq","nativeSrc":"1166:2:30","nodeType":"YulIdentifier","src":"1166:2:30"},"nativeSrc":"1166:41:30","nodeType":"YulFunctionCall","src":"1166:41:30"}],"functionName":{"name":"iszero","nativeSrc":"1159:6:30","nodeType":"YulIdentifier","src":"1159:6:30"},"nativeSrc":"1159:49:30","nodeType":"YulFunctionCall","src":"1159:49:30"},"nativeSrc":"1156:69:30","nodeType":"YulIf","src":"1156:69:30"}]},"name":"abi_decode_uint96_fromMemory","nativeSrc":"1056:175:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"1094:6:30","nodeType":"YulTypedName","src":"1094:6:30","type":""}],"returnVariables":[{"name":"value","nativeSrc":"1105:5:30","nodeType":"YulTypedName","src":"1105:5:30","type":""}],"src":"1056:175:30"},{"body":{"nativeSrc":"1295:112:30","nodeType":"YulBlock","src":"1295:112:30","statements":[{"nativeSrc":"1305:22:30","nodeType":"YulAssignment","src":"1305:22:30","value":{"arguments":[{"name":"offset","nativeSrc":"1320:6:30","nodeType":"YulIdentifier","src":"1320:6:30"}],"functionName":{"name":"mload","nativeSrc":"1314:5:30","nodeType":"YulIdentifier","src":"1314:5:30"},"nativeSrc":"1314:13:30","nodeType":"YulFunctionCall","src":"1314:13:30"},"variableNames":[{"name":"value","nativeSrc":"1305:5:30","nodeType":"YulIdentifier","src":"1305:5:30"}]},{"body":{"nativeSrc":"1385:16:30","nodeType":"YulBlock","src":"1385:16:30","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"1394:1:30","nodeType":"YulLiteral","src":"1394:1:30","type":"","value":"0"},{"kind":"number","nativeSrc":"1397:1:30","nodeType":"YulLiteral","src":"1397:1:30","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"1387:6:30","nodeType":"YulIdentifier","src":"1387:6:30"},"nativeSrc":"1387:12:30","nodeType":"YulFunctionCall","src":"1387:12:30"},"nativeSrc":"1387:12:30","nodeType":"YulExpressionStatement","src":"1387:12:30"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"1349:5:30","nodeType":"YulIdentifier","src":"1349:5:30"},{"arguments":[{"name":"value","nativeSrc":"1360:5:30","nodeType":"YulIdentifier","src":"1360:5:30"},{"kind":"number","nativeSrc":"1367:14:30","nodeType":"YulLiteral","src":"1367:14:30","type":"","value":"0xffffffffffff"}],"functionName":{"name":"and","nativeSrc":"1356:3:30","nodeType":"YulIdentifier","src":"1356:3:30"},"nativeSrc":"1356:26:30","nodeType":"YulFunctionCall","src":"1356:26:30"}],"functionName":{"name":"eq","nativeSrc":"1346:2:30","nodeType":"YulIdentifier","src":"1346:2:30"},"nativeSrc":"1346:37:30","nodeType":"YulFunctionCall","src":"1346:37:30"}],"functionName":{"name":"iszero","nativeSrc":"1339:6:30","nodeType":"YulIdentifier","src":"1339:6:30"},"nativeSrc":"1339:45:30","nodeType":"YulFunctionCall","src":"1339:45:30"},"nativeSrc":"1336:65:30","nodeType":"YulIf","src":"1336:65:30"}]},"name":"abi_decode_uint48_fromMemory","nativeSrc":"1236:171:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"1274:6:30","nodeType":"YulTypedName","src":"1274:6:30","type":""}],"returnVariables":[{"name":"value","nativeSrc":"1285:5:30","nodeType":"YulTypedName","src":"1285:5:30","type":""}],"src":"1236:171:30"},{"body":{"nativeSrc":"1667:1169:30","nodeType":"YulBlock","src":"1667:1169:30","statements":[{"body":{"nativeSrc":"1714:16:30","nodeType":"YulBlock","src":"1714:16:30","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"1723:1:30","nodeType":"YulLiteral","src":"1723:1:30","type":"","value":"0"},{"kind":"number","nativeSrc":"1726:1:30","nodeType":"YulLiteral","src":"1726:1:30","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"1716:6:30","nodeType":"YulIdentifier","src":"1716:6:30"},"nativeSrc":"1716:12:30","nodeType":"YulFunctionCall","src":"1716:12:30"},"nativeSrc":"1716:12:30","nodeType":"YulExpressionStatement","src":"1716:12:30"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"1688:7:30","nodeType":"YulIdentifier","src":"1688:7:30"},{"name":"headStart","nativeSrc":"1697:9:30","nodeType":"YulIdentifier","src":"1697:9:30"}],"functionName":{"name":"sub","nativeSrc":"1684:3:30","nodeType":"YulIdentifier","src":"1684:3:30"},"nativeSrc":"1684:23:30","nodeType":"YulFunctionCall","src":"1684:23:30"},{"kind":"number","nativeSrc":"1709:3:30","nodeType":"YulLiteral","src":"1709:3:30","type":"","value":"288"}],"functionName":{"name":"slt","nativeSrc":"1680:3:30","nodeType":"YulIdentifier","src":"1680:3:30"},"nativeSrc":"1680:33:30","nodeType":"YulFunctionCall","src":"1680:33:30"},"nativeSrc":"1677:53:30","nodeType":"YulIf","src":"1677:53:30"},{"nativeSrc":"1739:30:30","nodeType":"YulVariableDeclaration","src":"1739:30:30","value":{"arguments":[{"name":"headStart","nativeSrc":"1759:9:30","nodeType":"YulIdentifier","src":"1759:9:30"}],"functionName":{"name":"mload","nativeSrc":"1753:5:30","nodeType":"YulIdentifier","src":"1753:5:30"},"nativeSrc":"1753:16:30","nodeType":"YulFunctionCall","src":"1753:16:30"},"variables":[{"name":"offset","nativeSrc":"1743:6:30","nodeType":"YulTypedName","src":"1743:6:30","type":""}]},{"body":{"nativeSrc":"1812:16:30","nodeType":"YulBlock","src":"1812:16:30","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"1821:1:30","nodeType":"YulLiteral","src":"1821:1:30","type":"","value":"0"},{"kind":"number","nativeSrc":"1824:1:30","nodeType":"YulLiteral","src":"1824:1:30","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"1814:6:30","nodeType":"YulIdentifier","src":"1814:6:30"},"nativeSrc":"1814:12:30","nodeType":"YulFunctionCall","src":"1814:12:30"},"nativeSrc":"1814:12:30","nodeType":"YulExpressionStatement","src":"1814:12:30"}]},"condition":{"arguments":[{"name":"offset","nativeSrc":"1784:6:30","nodeType":"YulIdentifier","src":"1784:6:30"},{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"1800:2:30","nodeType":"YulLiteral","src":"1800:2:30","type":"","value":"64"},{"kind":"number","nativeSrc":"1804:1:30","nodeType":"YulLiteral","src":"1804:1:30","type":"","value":"1"}],"functionName":{"name":"shl","nativeSrc":"1796:3:30","nodeType":"YulIdentifier","src":"1796:3:30"},"nativeSrc":"1796:10:30","nodeType":"YulFunctionCall","src":"1796:10:30"},{"kind":"number","nativeSrc":"1808:1:30","nodeType":"YulLiteral","src":"1808:1:30","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"1792:3:30","nodeType":"YulIdentifier","src":"1792:3:30"},"nativeSrc":"1792:18:30","nodeType":"YulFunctionCall","src":"1792:18:30"}],"functionName":{"name":"gt","nativeSrc":"1781:2:30","nodeType":"YulIdentifier","src":"1781:2:30"},"nativeSrc":"1781:30:30","nodeType":"YulFunctionCall","src":"1781:30:30"},"nativeSrc":"1778:50:30","nodeType":"YulIf","src":"1778:50:30"},{"nativeSrc":"1837:71:30","nodeType":"YulAssignment","src":"1837:71:30","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"1880:9:30","nodeType":"YulIdentifier","src":"1880:9:30"},{"name":"offset","nativeSrc":"1891:6:30","nodeType":"YulIdentifier","src":"1891:6:30"}],"functionName":{"name":"add","nativeSrc":"1876:3:30","nodeType":"YulIdentifier","src":"1876:3:30"},"nativeSrc":"1876:22:30","nodeType":"YulFunctionCall","src":"1876:22:30"},{"name":"dataEnd","nativeSrc":"1900:7:30","nodeType":"YulIdentifier","src":"1900:7:30"}],"functionName":{"name":"abi_decode_string_fromMemory","nativeSrc":"1847:28:30","nodeType":"YulIdentifier","src":"1847:28:30"},"nativeSrc":"1847:61:30","nodeType":"YulFunctionCall","src":"1847:61:30"},"variableNames":[{"name":"value0","nativeSrc":"1837:6:30","nodeType":"YulIdentifier","src":"1837:6:30"}]},{"nativeSrc":"1917:41:30","nodeType":"YulVariableDeclaration","src":"1917:41:30","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"1943:9:30","nodeType":"YulIdentifier","src":"1943:9:30"},{"kind":"number","nativeSrc":"1954:2:30","nodeType":"YulLiteral","src":"1954:2:30","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"1939:3:30","nodeType":"YulIdentifier","src":"1939:3:30"},"nativeSrc":"1939:18:30","nodeType":"YulFunctionCall","src":"1939:18:30"}],"functionName":{"name":"mload","nativeSrc":"1933:5:30","nodeType":"YulIdentifier","src":"1933:5:30"},"nativeSrc":"1933:25:30","nodeType":"YulFunctionCall","src":"1933:25:30"},"variables":[{"name":"offset_1","nativeSrc":"1921:8:30","nodeType":"YulTypedName","src":"1921:8:30","type":""}]},{"body":{"nativeSrc":"2003:16:30","nodeType":"YulBlock","src":"2003:16:30","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"2012:1:30","nodeType":"YulLiteral","src":"2012:1:30","type":"","value":"0"},{"kind":"number","nativeSrc":"2015:1:30","nodeType":"YulLiteral","src":"2015:1:30","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"2005:6:30","nodeType":"YulIdentifier","src":"2005:6:30"},"nativeSrc":"2005:12:30","nodeType":"YulFunctionCall","src":"2005:12:30"},"nativeSrc":"2005:12:30","nodeType":"YulExpressionStatement","src":"2005:12:30"}]},"condition":{"arguments":[{"name":"offset_1","nativeSrc":"1973:8:30","nodeType":"YulIdentifier","src":"1973:8:30"},{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"1991:2:30","nodeType":"YulLiteral","src":"1991:2:30","type":"","value":"64"},{"kind":"number","nativeSrc":"1995:1:30","nodeType":"YulLiteral","src":"1995:1:30","type":"","value":"1"}],"functionName":{"name":"shl","nativeSrc":"1987:3:30","nodeType":"YulIdentifier","src":"1987:3:30"},"nativeSrc":"1987:10:30","nodeType":"YulFunctionCall","src":"1987:10:30"},{"kind":"number","nativeSrc":"1999:1:30","nodeType":"YulLiteral","src":"1999:1:30","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"1983:3:30","nodeType":"YulIdentifier","src":"1983:3:30"},"nativeSrc":"1983:18:30","nodeType":"YulFunctionCall","src":"1983:18:30"}],"functionName":{"name":"gt","nativeSrc":"1970:2:30","nodeType":"YulIdentifier","src":"1970:2:30"},"nativeSrc":"1970:32:30","nodeType":"YulFunctionCall","src":"1970:32:30"},"nativeSrc":"1967:52:30","nodeType":"YulIf","src":"1967:52:30"},{"nativeSrc":"2028:73:30","nodeType":"YulAssignment","src":"2028:73:30","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"2071:9:30","nodeType":"YulIdentifier","src":"2071:9:30"},{"name":"offset_1","nativeSrc":"2082:8:30","nodeType":"YulIdentifier","src":"2082:8:30"}],"functionName":{"name":"add","nativeSrc":"2067:3:30","nodeType":"YulIdentifier","src":"2067:3:30"},"nativeSrc":"2067:24:30","nodeType":"YulFunctionCall","src":"2067:24:30"},{"name":"dataEnd","nativeSrc":"2093:7:30","nodeType":"YulIdentifier","src":"2093:7:30"}],"functionName":{"name":"abi_decode_string_fromMemory","nativeSrc":"2038:28:30","nodeType":"YulIdentifier","src":"2038:28:30"},"nativeSrc":"2038:63:30","nodeType":"YulFunctionCall","src":"2038:63:30"},"variableNames":[{"name":"value1","nativeSrc":"2028:6:30","nodeType":"YulIdentifier","src":"2028:6:30"}]},{"nativeSrc":"2110:41:30","nodeType":"YulVariableDeclaration","src":"2110:41:30","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"2136:9:30","nodeType":"YulIdentifier","src":"2136:9:30"},{"kind":"number","nativeSrc":"2147:2:30","nodeType":"YulLiteral","src":"2147:2:30","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"2132:3:30","nodeType":"YulIdentifier","src":"2132:3:30"},"nativeSrc":"2132:18:30","nodeType":"YulFunctionCall","src":"2132:18:30"}],"functionName":{"name":"mload","nativeSrc":"2126:5:30","nodeType":"YulIdentifier","src":"2126:5:30"},"nativeSrc":"2126:25:30","nodeType":"YulFunctionCall","src":"2126:25:30"},"variables":[{"name":"offset_2","nativeSrc":"2114:8:30","nodeType":"YulTypedName","src":"2114:8:30","type":""}]},{"body":{"nativeSrc":"2196:16:30","nodeType":"YulBlock","src":"2196:16:30","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"2205:1:30","nodeType":"YulLiteral","src":"2205:1:30","type":"","value":"0"},{"kind":"number","nativeSrc":"2208:1:30","nodeType":"YulLiteral","src":"2208:1:30","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"2198:6:30","nodeType":"YulIdentifier","src":"2198:6:30"},"nativeSrc":"2198:12:30","nodeType":"YulFunctionCall","src":"2198:12:30"},"nativeSrc":"2198:12:30","nodeType":"YulExpressionStatement","src":"2198:12:30"}]},"condition":{"arguments":[{"name":"offset_2","nativeSrc":"2166:8:30","nodeType":"YulIdentifier","src":"2166:8:30"},{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"2184:2:30","nodeType":"YulLiteral","src":"2184:2:30","type":"","value":"64"},{"kind":"number","nativeSrc":"2188:1:30","nodeType":"YulLiteral","src":"2188:1:30","type":"","value":"1"}],"functionName":{"name":"shl","nativeSrc":"2180:3:30","nodeType":"YulIdentifier","src":"2180:3:30"},"nativeSrc":"2180:10:30","nodeType":"YulFunctionCall","src":"2180:10:30"},{"kind":"number","nativeSrc":"2192:1:30","nodeType":"YulLiteral","src":"2192:1:30","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"2176:3:30","nodeType":"YulIdentifier","src":"2176:3:30"},"nativeSrc":"2176:18:30","nodeType":"YulFunctionCall","src":"2176:18:30"}],"functionName":{"name":"gt","nativeSrc":"2163:2:30","nodeType":"YulIdentifier","src":"2163:2:30"},"nativeSrc":"2163:32:30","nodeType":"YulFunctionCall","src":"2163:32:30"},"nativeSrc":"2160:52:30","nodeType":"YulIf","src":"2160:52:30"},{"nativeSrc":"2221:73:30","nodeType":"YulAssignment","src":"2221:73:30","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"2264:9:30","nodeType":"YulIdentifier","src":"2264:9:30"},{"name":"offset_2","nativeSrc":"2275:8:30","nodeType":"YulIdentifier","src":"2275:8:30"}],"functionName":{"name":"add","nativeSrc":"2260:3:30","nodeType":"YulIdentifier","src":"2260:3:30"},"nativeSrc":"2260:24:30","nodeType":"YulFunctionCall","src":"2260:24:30"},{"name":"dataEnd","nativeSrc":"2286:7:30","nodeType":"YulIdentifier","src":"2286:7:30"}],"functionName":{"name":"abi_decode_string_fromMemory","nativeSrc":"2231:28:30","nodeType":"YulIdentifier","src":"2231:28:30"},"nativeSrc":"2231:63:30","nodeType":"YulFunctionCall","src":"2231:63:30"},"variableNames":[{"name":"value2","nativeSrc":"2221:6:30","nodeType":"YulIdentifier","src":"2221:6:30"}]},{"nativeSrc":"2303:41:30","nodeType":"YulVariableDeclaration","src":"2303:41:30","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"2329:9:30","nodeType":"YulIdentifier","src":"2329:9:30"},{"kind":"number","nativeSrc":"2340:2:30","nodeType":"YulLiteral","src":"2340:2:30","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"2325:3:30","nodeType":"YulIdentifier","src":"2325:3:30"},"nativeSrc":"2325:18:30","nodeType":"YulFunctionCall","src":"2325:18:30"}],"functionName":{"name":"mload","nativeSrc":"2319:5:30","nodeType":"YulIdentifier","src":"2319:5:30"},"nativeSrc":"2319:25:30","nodeType":"YulFunctionCall","src":"2319:25:30"},"variables":[{"name":"offset_3","nativeSrc":"2307:8:30","nodeType":"YulTypedName","src":"2307:8:30","type":""}]},{"body":{"nativeSrc":"2389:16:30","nodeType":"YulBlock","src":"2389:16:30","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"2398:1:30","nodeType":"YulLiteral","src":"2398:1:30","type":"","value":"0"},{"kind":"number","nativeSrc":"2401:1:30","nodeType":"YulLiteral","src":"2401:1:30","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"2391:6:30","nodeType":"YulIdentifier","src":"2391:6:30"},"nativeSrc":"2391:12:30","nodeType":"YulFunctionCall","src":"2391:12:30"},"nativeSrc":"2391:12:30","nodeType":"YulExpressionStatement","src":"2391:12:30"}]},"condition":{"arguments":[{"name":"offset_3","nativeSrc":"2359:8:30","nodeType":"YulIdentifier","src":"2359:8:30"},{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"2377:2:30","nodeType":"YulLiteral","src":"2377:2:30","type":"","value":"64"},{"kind":"number","nativeSrc":"2381:1:30","nodeType":"YulLiteral","src":"2381:1:30","type":"","value":"1"}],"functionName":{"name":"shl","nativeSrc":"2373:3:30","nodeType":"YulIdentifier","src":"2373:3:30"},"nativeSrc":"2373:10:30","nodeType":"YulFunctionCall","src":"2373:10:30"},{"kind":"number","nativeSrc":"2385:1:30","nodeType":"YulLiteral","src":"2385:1:30","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"2369:3:30","nodeType":"YulIdentifier","src":"2369:3:30"},"nativeSrc":"2369:18:30","nodeType":"YulFunctionCall","src":"2369:18:30"}],"functionName":{"name":"gt","nativeSrc":"2356:2:30","nodeType":"YulIdentifier","src":"2356:2:30"},"nativeSrc":"2356:32:30","nodeType":"YulFunctionCall","src":"2356:32:30"},"nativeSrc":"2353:52:30","nodeType":"YulIf","src":"2353:52:30"},{"nativeSrc":"2414:73:30","nodeType":"YulAssignment","src":"2414:73:30","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"2457:9:30","nodeType":"YulIdentifier","src":"2457:9:30"},{"name":"offset_3","nativeSrc":"2468:8:30","nodeType":"YulIdentifier","src":"2468:8:30"}],"functionName":{"name":"add","nativeSrc":"2453:3:30","nodeType":"YulIdentifier","src":"2453:3:30"},"nativeSrc":"2453:24:30","nodeType":"YulFunctionCall","src":"2453:24:30"},{"name":"dataEnd","nativeSrc":"2479:7:30","nodeType":"YulIdentifier","src":"2479:7:30"}],"functionName":{"name":"abi_decode_string_fromMemory","nativeSrc":"2424:28:30","nodeType":"YulIdentifier","src":"2424:28:30"},"nativeSrc":"2424:63:30","nodeType":"YulFunctionCall","src":"2424:63:30"},"variableNames":[{"name":"value3","nativeSrc":"2414:6:30","nodeType":"YulIdentifier","src":"2414:6:30"}]},{"nativeSrc":"2496:60:30","nodeType":"YulAssignment","src":"2496:60:30","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"2540:9:30","nodeType":"YulIdentifier","src":"2540:9:30"},{"kind":"number","nativeSrc":"2551:3:30","nodeType":"YulLiteral","src":"2551:3:30","type":"","value":"128"}],"functionName":{"name":"add","nativeSrc":"2536:3:30","nodeType":"YulIdentifier","src":"2536:3:30"},"nativeSrc":"2536:19:30","nodeType":"YulFunctionCall","src":"2536:19:30"}],"functionName":{"name":"abi_decode_address_fromMemory","nativeSrc":"2506:29:30","nodeType":"YulIdentifier","src":"2506:29:30"},"nativeSrc":"2506:50:30","nodeType":"YulFunctionCall","src":"2506:50:30"},"variableNames":[{"name":"value4","nativeSrc":"2496:6:30","nodeType":"YulIdentifier","src":"2496:6:30"}]},{"nativeSrc":"2565:59:30","nodeType":"YulAssignment","src":"2565:59:30","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"2608:9:30","nodeType":"YulIdentifier","src":"2608:9:30"},{"kind":"number","nativeSrc":"2619:3:30","nodeType":"YulLiteral","src":"2619:3:30","type":"","value":"160"}],"functionName":{"name":"add","nativeSrc":"2604:3:30","nodeType":"YulIdentifier","src":"2604:3:30"},"nativeSrc":"2604:19:30","nodeType":"YulFunctionCall","src":"2604:19:30"}],"functionName":{"name":"abi_decode_uint96_fromMemory","nativeSrc":"2575:28:30","nodeType":"YulIdentifier","src":"2575:28:30"},"nativeSrc":"2575:49:30","nodeType":"YulFunctionCall","src":"2575:49:30"},"variableNames":[{"name":"value5","nativeSrc":"2565:6:30","nodeType":"YulIdentifier","src":"2565:6:30"}]},{"nativeSrc":"2633:60:30","nodeType":"YulAssignment","src":"2633:60:30","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"2677:9:30","nodeType":"YulIdentifier","src":"2677:9:30"},{"kind":"number","nativeSrc":"2688:3:30","nodeType":"YulLiteral","src":"2688:3:30","type":"","value":"192"}],"functionName":{"name":"add","nativeSrc":"2673:3:30","nodeType":"YulIdentifier","src":"2673:3:30"},"nativeSrc":"2673:19:30","nodeType":"YulFunctionCall","src":"2673:19:30"}],"functionName":{"name":"abi_decode_address_fromMemory","nativeSrc":"2643:29:30","nodeType":"YulIdentifier","src":"2643:29:30"},"nativeSrc":"2643:50:30","nodeType":"YulFunctionCall","src":"2643:50:30"},"variableNames":[{"name":"value6","nativeSrc":"2633:6:30","nodeType":"YulIdentifier","src":"2633:6:30"}]},{"nativeSrc":"2702:60:30","nodeType":"YulAssignment","src":"2702:60:30","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"2746:9:30","nodeType":"YulIdentifier","src":"2746:9:30"},{"kind":"number","nativeSrc":"2757:3:30","nodeType":"YulLiteral","src":"2757:3:30","type":"","value":"224"}],"functionName":{"name":"add","nativeSrc":"2742:3:30","nodeType":"YulIdentifier","src":"2742:3:30"},"nativeSrc":"2742:19:30","nodeType":"YulFunctionCall","src":"2742:19:30"}],"functionName":{"name":"abi_decode_address_fromMemory","nativeSrc":"2712:29:30","nodeType":"YulIdentifier","src":"2712:29:30"},"nativeSrc":"2712:50:30","nodeType":"YulFunctionCall","src":"2712:50:30"},"variableNames":[{"name":"value7","nativeSrc":"2702:6:30","nodeType":"YulIdentifier","src":"2702:6:30"}]},{"nativeSrc":"2771:59:30","nodeType":"YulAssignment","src":"2771:59:30","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"2814:9:30","nodeType":"YulIdentifier","src":"2814:9:30"},{"kind":"number","nativeSrc":"2825:3:30","nodeType":"YulLiteral","src":"2825:3:30","type":"","value":"256"}],"functionName":{"name":"add","nativeSrc":"2810:3:30","nodeType":"YulIdentifier","src":"2810:3:30"},"nativeSrc":"2810:19:30","nodeType":"YulFunctionCall","src":"2810:19:30"}],"functionName":{"name":"abi_decode_uint48_fromMemory","nativeSrc":"2781:28:30","nodeType":"YulIdentifier","src":"2781:28:30"},"nativeSrc":"2781:49:30","nodeType":"YulFunctionCall","src":"2781:49:30"},"variableNames":[{"name":"value8","nativeSrc":"2771:6:30","nodeType":"YulIdentifier","src":"2771:6:30"}]}]},"name":"abi_decode_tuple_t_string_memory_ptrt_string_memory_ptrt_string_memory_ptrt_string_memory_ptrt_addresst_uint96t_addresst_addresst_uint48_fromMemory","nativeSrc":"1412:1424:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"1569:9:30","nodeType":"YulTypedName","src":"1569:9:30","type":""},{"name":"dataEnd","nativeSrc":"1580:7:30","nodeType":"YulTypedName","src":"1580:7:30","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"1592:6:30","nodeType":"YulTypedName","src":"1592:6:30","type":""},{"name":"value1","nativeSrc":"1600:6:30","nodeType":"YulTypedName","src":"1600:6:30","type":""},{"name":"value2","nativeSrc":"1608:6:30","nodeType":"YulTypedName","src":"1608:6:30","type":""},{"name":"value3","nativeSrc":"1616:6:30","nodeType":"YulTypedName","src":"1616:6:30","type":""},{"name":"value4","nativeSrc":"1624:6:30","nodeType":"YulTypedName","src":"1624:6:30","type":""},{"name":"value5","nativeSrc":"1632:6:30","nodeType":"YulTypedName","src":"1632:6:30","type":""},{"name":"value6","nativeSrc":"1640:6:30","nodeType":"YulTypedName","src":"1640:6:30","type":""},{"name":"value7","nativeSrc":"1648:6:30","nodeType":"YulTypedName","src":"1648:6:30","type":""},{"name":"value8","nativeSrc":"1656:6:30","nodeType":"YulTypedName","src":"1656:6:30","type":""}],"src":"1412:1424:30"},{"body":{"nativeSrc":"2896:325:30","nodeType":"YulBlock","src":"2896:325:30","statements":[{"nativeSrc":"2906:22:30","nodeType":"YulAssignment","src":"2906:22:30","value":{"arguments":[{"kind":"number","nativeSrc":"2920:1:30","nodeType":"YulLiteral","src":"2920:1:30","type":"","value":"1"},{"name":"data","nativeSrc":"2923:4:30","nodeType":"YulIdentifier","src":"2923:4:30"}],"functionName":{"name":"shr","nativeSrc":"2916:3:30","nodeType":"YulIdentifier","src":"2916:3:30"},"nativeSrc":"2916:12:30","nodeType":"YulFunctionCall","src":"2916:12:30"},"variableNames":[{"name":"length","nativeSrc":"2906:6:30","nodeType":"YulIdentifier","src":"2906:6:30"}]},{"nativeSrc":"2937:38:30","nodeType":"YulVariableDeclaration","src":"2937:38:30","value":{"arguments":[{"name":"data","nativeSrc":"2967:4:30","nodeType":"YulIdentifier","src":"2967:4:30"},{"kind":"number","nativeSrc":"2973:1:30","nodeType":"YulLiteral","src":"2973:1:30","type":"","value":"1"}],"functionName":{"name":"and","nativeSrc":"2963:3:30","nodeType":"YulIdentifier","src":"2963:3:30"},"nativeSrc":"2963:12:30","nodeType":"YulFunctionCall","src":"2963:12:30"},"variables":[{"name":"outOfPlaceEncoding","nativeSrc":"2941:18:30","nodeType":"YulTypedName","src":"2941:18:30","type":""}]},{"body":{"nativeSrc":"3014:31:30","nodeType":"YulBlock","src":"3014:31:30","statements":[{"nativeSrc":"3016:27:30","nodeType":"YulAssignment","src":"3016:27:30","value":{"arguments":[{"name":"length","nativeSrc":"3030:6:30","nodeType":"YulIdentifier","src":"3030:6:30"},{"kind":"number","nativeSrc":"3038:4:30","nodeType":"YulLiteral","src":"3038:4:30","type":"","value":"0x7f"}],"functionName":{"name":"and","nativeSrc":"3026:3:30","nodeType":"YulIdentifier","src":"3026:3:30"},"nativeSrc":"3026:17:30","nodeType":"YulFunctionCall","src":"3026:17:30"},"variableNames":[{"name":"length","nativeSrc":"3016:6:30","nodeType":"YulIdentifier","src":"3016:6:30"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nativeSrc":"2994:18:30","nodeType":"YulIdentifier","src":"2994:18:30"}],"functionName":{"name":"iszero","nativeSrc":"2987:6:30","nodeType":"YulIdentifier","src":"2987:6:30"},"nativeSrc":"2987:26:30","nodeType":"YulFunctionCall","src":"2987:26:30"},"nativeSrc":"2984:61:30","nodeType":"YulIf","src":"2984:61:30"},{"body":{"nativeSrc":"3104:111:30","nodeType":"YulBlock","src":"3104:111:30","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"3125:1:30","nodeType":"YulLiteral","src":"3125:1:30","type":"","value":"0"},{"arguments":[{"kind":"number","nativeSrc":"3132:3:30","nodeType":"YulLiteral","src":"3132:3:30","type":"","value":"224"},{"kind":"number","nativeSrc":"3137:10:30","nodeType":"YulLiteral","src":"3137:10:30","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nativeSrc":"3128:3:30","nodeType":"YulIdentifier","src":"3128:3:30"},"nativeSrc":"3128:20:30","nodeType":"YulFunctionCall","src":"3128:20:30"}],"functionName":{"name":"mstore","nativeSrc":"3118:6:30","nodeType":"YulIdentifier","src":"3118:6:30"},"nativeSrc":"3118:31:30","nodeType":"YulFunctionCall","src":"3118:31:30"},"nativeSrc":"3118:31:30","nodeType":"YulExpressionStatement","src":"3118:31:30"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"3169:1:30","nodeType":"YulLiteral","src":"3169:1:30","type":"","value":"4"},{"kind":"number","nativeSrc":"3172:4:30","nodeType":"YulLiteral","src":"3172:4:30","type":"","value":"0x22"}],"functionName":{"name":"mstore","nativeSrc":"3162:6:30","nodeType":"YulIdentifier","src":"3162:6:30"},"nativeSrc":"3162:15:30","nodeType":"YulFunctionCall","src":"3162:15:30"},"nativeSrc":"3162:15:30","nodeType":"YulExpressionStatement","src":"3162:15:30"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"3197:1:30","nodeType":"YulLiteral","src":"3197:1:30","type":"","value":"0"},{"kind":"number","nativeSrc":"3200:4:30","nodeType":"YulLiteral","src":"3200:4:30","type":"","value":"0x24"}],"functionName":{"name":"revert","nativeSrc":"3190:6:30","nodeType":"YulIdentifier","src":"3190:6:30"},"nativeSrc":"3190:15:30","nodeType":"YulFunctionCall","src":"3190:15:30"},"nativeSrc":"3190:15:30","nodeType":"YulExpressionStatement","src":"3190:15:30"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nativeSrc":"3060:18:30","nodeType":"YulIdentifier","src":"3060:18:30"},{"arguments":[{"name":"length","nativeSrc":"3083:6:30","nodeType":"YulIdentifier","src":"3083:6:30"},{"kind":"number","nativeSrc":"3091:2:30","nodeType":"YulLiteral","src":"3091:2:30","type":"","value":"32"}],"functionName":{"name":"lt","nativeSrc":"3080:2:30","nodeType":"YulIdentifier","src":"3080:2:30"},"nativeSrc":"3080:14:30","nodeType":"YulFunctionCall","src":"3080:14:30"}],"functionName":{"name":"eq","nativeSrc":"3057:2:30","nodeType":"YulIdentifier","src":"3057:2:30"},"nativeSrc":"3057:38:30","nodeType":"YulFunctionCall","src":"3057:38:30"},"nativeSrc":"3054:161:30","nodeType":"YulIf","src":"3054:161:30"}]},"name":"extract_byte_array_length","nativeSrc":"2841:380:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nativeSrc":"2876:4:30","nodeType":"YulTypedName","src":"2876:4:30","type":""}],"returnVariables":[{"name":"length","nativeSrc":"2885:6:30","nodeType":"YulTypedName","src":"2885:6:30","type":""}],"src":"2841:380:30"},{"body":{"nativeSrc":"3282:65:30","nodeType":"YulBlock","src":"3282:65:30","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"3299:1:30","nodeType":"YulLiteral","src":"3299:1:30","type":"","value":"0"},{"name":"ptr","nativeSrc":"3302:3:30","nodeType":"YulIdentifier","src":"3302:3:30"}],"functionName":{"name":"mstore","nativeSrc":"3292:6:30","nodeType":"YulIdentifier","src":"3292:6:30"},"nativeSrc":"3292:14:30","nodeType":"YulFunctionCall","src":"3292:14:30"},"nativeSrc":"3292:14:30","nodeType":"YulExpressionStatement","src":"3292:14:30"},{"nativeSrc":"3315:26:30","nodeType":"YulAssignment","src":"3315:26:30","value":{"arguments":[{"kind":"number","nativeSrc":"3333:1:30","nodeType":"YulLiteral","src":"3333:1:30","type":"","value":"0"},{"kind":"number","nativeSrc":"3336:4:30","nodeType":"YulLiteral","src":"3336:4:30","type":"","value":"0x20"}],"functionName":{"name":"keccak256","nativeSrc":"3323:9:30","nodeType":"YulIdentifier","src":"3323:9:30"},"nativeSrc":"3323:18:30","nodeType":"YulFunctionCall","src":"3323:18:30"},"variableNames":[{"name":"data","nativeSrc":"3315:4:30","nodeType":"YulIdentifier","src":"3315:4:30"}]}]},"name":"array_dataslot_string_storage","nativeSrc":"3226:121:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"ptr","nativeSrc":"3265:3:30","nodeType":"YulTypedName","src":"3265:3:30","type":""}],"returnVariables":[{"name":"data","nativeSrc":"3273:4:30","nodeType":"YulTypedName","src":"3273:4:30","type":""}],"src":"3226:121:30"},{"body":{"nativeSrc":"3433:437:30","nodeType":"YulBlock","src":"3433:437:30","statements":[{"body":{"nativeSrc":"3466:398:30","nodeType":"YulBlock","src":"3466:398:30","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"3487:1:30","nodeType":"YulLiteral","src":"3487:1:30","type":"","value":"0"},{"name":"array","nativeSrc":"3490:5:30","nodeType":"YulIdentifier","src":"3490:5:30"}],"functionName":{"name":"mstore","nativeSrc":"3480:6:30","nodeType":"YulIdentifier","src":"3480:6:30"},"nativeSrc":"3480:16:30","nodeType":"YulFunctionCall","src":"3480:16:30"},"nativeSrc":"3480:16:30","nodeType":"YulExpressionStatement","src":"3480:16:30"},{"nativeSrc":"3509:30:30","nodeType":"YulVariableDeclaration","src":"3509:30:30","value":{"arguments":[{"kind":"number","nativeSrc":"3531:1:30","nodeType":"YulLiteral","src":"3531:1:30","type":"","value":"0"},{"kind":"number","nativeSrc":"3534:4:30","nodeType":"YulLiteral","src":"3534:4:30","type":"","value":"0x20"}],"functionName":{"name":"keccak256","nativeSrc":"3521:9:30","nodeType":"YulIdentifier","src":"3521:9:30"},"nativeSrc":"3521:18:30","nodeType":"YulFunctionCall","src":"3521:18:30"},"variables":[{"name":"data","nativeSrc":"3513:4:30","nodeType":"YulTypedName","src":"3513:4:30","type":""}]},{"nativeSrc":"3552:57:30","nodeType":"YulVariableDeclaration","src":"3552:57:30","value":{"arguments":[{"name":"data","nativeSrc":"3575:4:30","nodeType":"YulIdentifier","src":"3575:4:30"},{"arguments":[{"kind":"number","nativeSrc":"3585:1:30","nodeType":"YulLiteral","src":"3585:1:30","type":"","value":"5"},{"arguments":[{"name":"startIndex","nativeSrc":"3592:10:30","nodeType":"YulIdentifier","src":"3592:10:30"},{"kind":"number","nativeSrc":"3604:2:30","nodeType":"YulLiteral","src":"3604:2:30","type":"","value":"31"}],"functionName":{"name":"add","nativeSrc":"3588:3:30","nodeType":"YulIdentifier","src":"3588:3:30"},"nativeSrc":"3588:19:30","nodeType":"YulFunctionCall","src":"3588:19:30"}],"functionName":{"name":"shr","nativeSrc":"3581:3:30","nodeType":"YulIdentifier","src":"3581:3:30"},"nativeSrc":"3581:27:30","nodeType":"YulFunctionCall","src":"3581:27:30"}],"functionName":{"name":"add","nativeSrc":"3571:3:30","nodeType":"YulIdentifier","src":"3571:3:30"},"nativeSrc":"3571:38:30","nodeType":"YulFunctionCall","src":"3571:38:30"},"variables":[{"name":"deleteStart","nativeSrc":"3556:11:30","nodeType":"YulTypedName","src":"3556:11:30","type":""}]},{"body":{"nativeSrc":"3646:23:30","nodeType":"YulBlock","src":"3646:23:30","statements":[{"nativeSrc":"3648:19:30","nodeType":"YulAssignment","src":"3648:19:30","value":{"name":"data","nativeSrc":"3663:4:30","nodeType":"YulIdentifier","src":"3663:4:30"},"variableNames":[{"name":"deleteStart","nativeSrc":"3648:11:30","nodeType":"YulIdentifier","src":"3648:11:30"}]}]},"condition":{"arguments":[{"name":"startIndex","nativeSrc":"3628:10:30","nodeType":"YulIdentifier","src":"3628:10:30"},{"kind":"number","nativeSrc":"3640:4:30","nodeType":"YulLiteral","src":"3640:4:30","type":"","value":"0x20"}],"functionName":{"name":"lt","nativeSrc":"3625:2:30","nodeType":"YulIdentifier","src":"3625:2:30"},"nativeSrc":"3625:20:30","nodeType":"YulFunctionCall","src":"3625:20:30"},"nativeSrc":"3622:47:30","nodeType":"YulIf","src":"3622:47:30"},{"nativeSrc":"3682:41:30","nodeType":"YulVariableDeclaration","src":"3682:41:30","value":{"arguments":[{"name":"data","nativeSrc":"3696:4:30","nodeType":"YulIdentifier","src":"3696:4:30"},{"arguments":[{"kind":"number","nativeSrc":"3706:1:30","nodeType":"YulLiteral","src":"3706:1:30","type":"","value":"5"},{"arguments":[{"name":"len","nativeSrc":"3713:3:30","nodeType":"YulIdentifier","src":"3713:3:30"},{"kind":"number","nativeSrc":"3718:2:30","nodeType":"YulLiteral","src":"3718:2:30","type":"","value":"31"}],"functionName":{"name":"add","nativeSrc":"3709:3:30","nodeType":"YulIdentifier","src":"3709:3:30"},"nativeSrc":"3709:12:30","nodeType":"YulFunctionCall","src":"3709:12:30"}],"functionName":{"name":"shr","nativeSrc":"3702:3:30","nodeType":"YulIdentifier","src":"3702:3:30"},"nativeSrc":"3702:20:30","nodeType":"YulFunctionCall","src":"3702:20:30"}],"functionName":{"name":"add","nativeSrc":"3692:3:30","nodeType":"YulIdentifier","src":"3692:3:30"},"nativeSrc":"3692:31:30","nodeType":"YulFunctionCall","src":"3692:31:30"},"variables":[{"name":"_1","nativeSrc":"3686:2:30","nodeType":"YulTypedName","src":"3686:2:30","type":""}]},{"nativeSrc":"3736:24:30","nodeType":"YulVariableDeclaration","src":"3736:24:30","value":{"name":"deleteStart","nativeSrc":"3749:11:30","nodeType":"YulIdentifier","src":"3749:11:30"},"variables":[{"name":"start","nativeSrc":"3740:5:30","nodeType":"YulTypedName","src":"3740:5:30","type":""}]},{"body":{"nativeSrc":"3834:20:30","nodeType":"YulBlock","src":"3834:20:30","statements":[{"expression":{"arguments":[{"name":"start","nativeSrc":"3843:5:30","nodeType":"YulIdentifier","src":"3843:5:30"},{"kind":"number","nativeSrc":"3850:1:30","nodeType":"YulLiteral","src":"3850:1:30","type":"","value":"0"}],"functionName":{"name":"sstore","nativeSrc":"3836:6:30","nodeType":"YulIdentifier","src":"3836:6:30"},"nativeSrc":"3836:16:30","nodeType":"YulFunctionCall","src":"3836:16:30"},"nativeSrc":"3836:16:30","nodeType":"YulExpressionStatement","src":"3836:16:30"}]},"condition":{"arguments":[{"name":"start","nativeSrc":"3784:5:30","nodeType":"YulIdentifier","src":"3784:5:30"},{"name":"_1","nativeSrc":"3791:2:30","nodeType":"YulIdentifier","src":"3791:2:30"}],"functionName":{"name":"lt","nativeSrc":"3781:2:30","nodeType":"YulIdentifier","src":"3781:2:30"},"nativeSrc":"3781:13:30","nodeType":"YulFunctionCall","src":"3781:13:30"},"nativeSrc":"3773:81:30","nodeType":"YulForLoop","post":{"nativeSrc":"3795:26:30","nodeType":"YulBlock","src":"3795:26:30","statements":[{"nativeSrc":"3797:22:30","nodeType":"YulAssignment","src":"3797:22:30","value":{"arguments":[{"name":"start","nativeSrc":"3810:5:30","nodeType":"YulIdentifier","src":"3810:5:30"},{"kind":"number","nativeSrc":"3817:1:30","nodeType":"YulLiteral","src":"3817:1:30","type":"","value":"1"}],"functionName":{"name":"add","nativeSrc":"3806:3:30","nodeType":"YulIdentifier","src":"3806:3:30"},"nativeSrc":"3806:13:30","nodeType":"YulFunctionCall","src":"3806:13:30"},"variableNames":[{"name":"start","nativeSrc":"3797:5:30","nodeType":"YulIdentifier","src":"3797:5:30"}]}]},"pre":{"nativeSrc":"3777:3:30","nodeType":"YulBlock","src":"3777:3:30","statements":[]},"src":"3773:81:30"}]},"condition":{"arguments":[{"name":"len","nativeSrc":"3449:3:30","nodeType":"YulIdentifier","src":"3449:3:30"},{"kind":"number","nativeSrc":"3454:2:30","nodeType":"YulLiteral","src":"3454:2:30","type":"","value":"31"}],"functionName":{"name":"gt","nativeSrc":"3446:2:30","nodeType":"YulIdentifier","src":"3446:2:30"},"nativeSrc":"3446:11:30","nodeType":"YulFunctionCall","src":"3446:11:30"},"nativeSrc":"3443:421:30","nodeType":"YulIf","src":"3443:421:30"}]},"name":"clean_up_bytearray_end_slots_string_storage","nativeSrc":"3352:518:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"array","nativeSrc":"3405:5:30","nodeType":"YulTypedName","src":"3405:5:30","type":""},{"name":"len","nativeSrc":"3412:3:30","nodeType":"YulTypedName","src":"3412:3:30","type":""},{"name":"startIndex","nativeSrc":"3417:10:30","nodeType":"YulTypedName","src":"3417:10:30","type":""}],"src":"3352:518:30"},{"body":{"nativeSrc":"3960:81:30","nodeType":"YulBlock","src":"3960:81:30","statements":[{"nativeSrc":"3970:65:30","nodeType":"YulAssignment","src":"3970:65:30","value":{"arguments":[{"arguments":[{"name":"data","nativeSrc":"3985:4:30","nodeType":"YulIdentifier","src":"3985:4:30"},{"arguments":[{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"4003:1:30","nodeType":"YulLiteral","src":"4003:1:30","type":"","value":"3"},{"name":"len","nativeSrc":"4006:3:30","nodeType":"YulIdentifier","src":"4006:3:30"}],"functionName":{"name":"shl","nativeSrc":"3999:3:30","nodeType":"YulIdentifier","src":"3999:3:30"},"nativeSrc":"3999:11:30","nodeType":"YulFunctionCall","src":"3999:11:30"},{"arguments":[{"kind":"number","nativeSrc":"4016:1:30","nodeType":"YulLiteral","src":"4016:1:30","type":"","value":"0"}],"functionName":{"name":"not","nativeSrc":"4012:3:30","nodeType":"YulIdentifier","src":"4012:3:30"},"nativeSrc":"4012:6:30","nodeType":"YulFunctionCall","src":"4012:6:30"}],"functionName":{"name":"shr","nativeSrc":"3995:3:30","nodeType":"YulIdentifier","src":"3995:3:30"},"nativeSrc":"3995:24:30","nodeType":"YulFunctionCall","src":"3995:24:30"}],"functionName":{"name":"not","nativeSrc":"3991:3:30","nodeType":"YulIdentifier","src":"3991:3:30"},"nativeSrc":"3991:29:30","nodeType":"YulFunctionCall","src":"3991:29:30"}],"functionName":{"name":"and","nativeSrc":"3981:3:30","nodeType":"YulIdentifier","src":"3981:3:30"},"nativeSrc":"3981:40:30","nodeType":"YulFunctionCall","src":"3981:40:30"},{"arguments":[{"kind":"number","nativeSrc":"4027:1:30","nodeType":"YulLiteral","src":"4027:1:30","type":"","value":"1"},{"name":"len","nativeSrc":"4030:3:30","nodeType":"YulIdentifier","src":"4030:3:30"}],"functionName":{"name":"shl","nativeSrc":"4023:3:30","nodeType":"YulIdentifier","src":"4023:3:30"},"nativeSrc":"4023:11:30","nodeType":"YulFunctionCall","src":"4023:11:30"}],"functionName":{"name":"or","nativeSrc":"3978:2:30","nodeType":"YulIdentifier","src":"3978:2:30"},"nativeSrc":"3978:57:30","nodeType":"YulFunctionCall","src":"3978:57:30"},"variableNames":[{"name":"used","nativeSrc":"3970:4:30","nodeType":"YulIdentifier","src":"3970:4:30"}]}]},"name":"extract_used_part_and_set_length_of_short_byte_array","nativeSrc":"3875:166:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nativeSrc":"3937:4:30","nodeType":"YulTypedName","src":"3937:4:30","type":""},{"name":"len","nativeSrc":"3943:3:30","nodeType":"YulTypedName","src":"3943:3:30","type":""}],"returnVariables":[{"name":"used","nativeSrc":"3951:4:30","nodeType":"YulTypedName","src":"3951:4:30","type":""}],"src":"3875:166:30"},{"body":{"nativeSrc":"4142:1203:30","nodeType":"YulBlock","src":"4142:1203:30","statements":[{"nativeSrc":"4152:24:30","nodeType":"YulVariableDeclaration","src":"4152:24:30","value":{"arguments":[{"name":"src","nativeSrc":"4172:3:30","nodeType":"YulIdentifier","src":"4172:3:30"}],"functionName":{"name":"mload","nativeSrc":"4166:5:30","nodeType":"YulIdentifier","src":"4166:5:30"},"nativeSrc":"4166:10:30","nodeType":"YulFunctionCall","src":"4166:10:30"},"variables":[{"name":"newLen","nativeSrc":"4156:6:30","nodeType":"YulTypedName","src":"4156:6:30","type":""}]},{"body":{"nativeSrc":"4219:22:30","nodeType":"YulBlock","src":"4219:22:30","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nativeSrc":"4221:16:30","nodeType":"YulIdentifier","src":"4221:16:30"},"nativeSrc":"4221:18:30","nodeType":"YulFunctionCall","src":"4221:18:30"},"nativeSrc":"4221:18:30","nodeType":"YulExpressionStatement","src":"4221:18:30"}]},"condition":{"arguments":[{"name":"newLen","nativeSrc":"4191:6:30","nodeType":"YulIdentifier","src":"4191:6:30"},{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"4207:2:30","nodeType":"YulLiteral","src":"4207:2:30","type":"","value":"64"},{"kind":"number","nativeSrc":"4211:1:30","nodeType":"YulLiteral","src":"4211:1:30","type":"","value":"1"}],"functionName":{"name":"shl","nativeSrc":"4203:3:30","nodeType":"YulIdentifier","src":"4203:3:30"},"nativeSrc":"4203:10:30","nodeType":"YulFunctionCall","src":"4203:10:30"},{"kind":"number","nativeSrc":"4215:1:30","nodeType":"YulLiteral","src":"4215:1:30","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"4199:3:30","nodeType":"YulIdentifier","src":"4199:3:30"},"nativeSrc":"4199:18:30","nodeType":"YulFunctionCall","src":"4199:18:30"}],"functionName":{"name":"gt","nativeSrc":"4188:2:30","nodeType":"YulIdentifier","src":"4188:2:30"},"nativeSrc":"4188:30:30","nodeType":"YulFunctionCall","src":"4188:30:30"},"nativeSrc":"4185:56:30","nodeType":"YulIf","src":"4185:56:30"},{"expression":{"arguments":[{"name":"slot","nativeSrc":"4294:4:30","nodeType":"YulIdentifier","src":"4294:4:30"},{"arguments":[{"arguments":[{"name":"slot","nativeSrc":"4332:4:30","nodeType":"YulIdentifier","src":"4332:4:30"}],"functionName":{"name":"sload","nativeSrc":"4326:5:30","nodeType":"YulIdentifier","src":"4326:5:30"},"nativeSrc":"4326:11:30","nodeType":"YulFunctionCall","src":"4326:11:30"}],"functionName":{"name":"extract_byte_array_length","nativeSrc":"4300:25:30","nodeType":"YulIdentifier","src":"4300:25:30"},"nativeSrc":"4300:38:30","nodeType":"YulFunctionCall","src":"4300:38:30"},{"name":"newLen","nativeSrc":"4340:6:30","nodeType":"YulIdentifier","src":"4340:6:30"}],"functionName":{"name":"clean_up_bytearray_end_slots_string_storage","nativeSrc":"4250:43:30","nodeType":"YulIdentifier","src":"4250:43:30"},"nativeSrc":"4250:97:30","nodeType":"YulFunctionCall","src":"4250:97:30"},"nativeSrc":"4250:97:30","nodeType":"YulExpressionStatement","src":"4250:97:30"},{"nativeSrc":"4356:18:30","nodeType":"YulVariableDeclaration","src":"4356:18:30","value":{"kind":"number","nativeSrc":"4373:1:30","nodeType":"YulLiteral","src":"4373:1:30","type":"","value":"0"},"variables":[{"name":"srcOffset","nativeSrc":"4360:9:30","nodeType":"YulTypedName","src":"4360:9:30","type":""}]},{"nativeSrc":"4383:17:30","nodeType":"YulAssignment","src":"4383:17:30","value":{"kind":"number","nativeSrc":"4396:4:30","nodeType":"YulLiteral","src":"4396:4:30","type":"","value":"0x20"},"variableNames":[{"name":"srcOffset","nativeSrc":"4383:9:30","nodeType":"YulIdentifier","src":"4383:9:30"}]},{"cases":[{"body":{"nativeSrc":"4446:642:30","nodeType":"YulBlock","src":"4446:642:30","statements":[{"nativeSrc":"4460:35:30","nodeType":"YulVariableDeclaration","src":"4460:35:30","value":{"arguments":[{"name":"newLen","nativeSrc":"4479:6:30","nodeType":"YulIdentifier","src":"4479:6:30"},{"arguments":[{"kind":"number","nativeSrc":"4491:2:30","nodeType":"YulLiteral","src":"4491:2:30","type":"","value":"31"}],"functionName":{"name":"not","nativeSrc":"4487:3:30","nodeType":"YulIdentifier","src":"4487:3:30"},"nativeSrc":"4487:7:30","nodeType":"YulFunctionCall","src":"4487:7:30"}],"functionName":{"name":"and","nativeSrc":"4475:3:30","nodeType":"YulIdentifier","src":"4475:3:30"},"nativeSrc":"4475:20:30","nodeType":"YulFunctionCall","src":"4475:20:30"},"variables":[{"name":"loopEnd","nativeSrc":"4464:7:30","nodeType":"YulTypedName","src":"4464:7:30","type":""}]},{"nativeSrc":"4508:49:30","nodeType":"YulVariableDeclaration","src":"4508:49:30","value":{"arguments":[{"name":"slot","nativeSrc":"4552:4:30","nodeType":"YulIdentifier","src":"4552:4:30"}],"functionName":{"name":"array_dataslot_string_storage","nativeSrc":"4522:29:30","nodeType":"YulIdentifier","src":"4522:29:30"},"nativeSrc":"4522:35:30","nodeType":"YulFunctionCall","src":"4522:35:30"},"variables":[{"name":"dstPtr","nativeSrc":"4512:6:30","nodeType":"YulTypedName","src":"4512:6:30","type":""}]},{"nativeSrc":"4570:10:30","nodeType":"YulVariableDeclaration","src":"4570:10:30","value":{"kind":"number","nativeSrc":"4579:1:30","nodeType":"YulLiteral","src":"4579:1:30","type":"","value":"0"},"variables":[{"name":"i","nativeSrc":"4574:1:30","nodeType":"YulTypedName","src":"4574:1:30","type":""}]},{"body":{"nativeSrc":"4650:165:30","nodeType":"YulBlock","src":"4650:165:30","statements":[{"expression":{"arguments":[{"name":"dstPtr","nativeSrc":"4675:6:30","nodeType":"YulIdentifier","src":"4675:6:30"},{"arguments":[{"arguments":[{"name":"src","nativeSrc":"4693:3:30","nodeType":"YulIdentifier","src":"4693:3:30"},{"name":"srcOffset","nativeSrc":"4698:9:30","nodeType":"YulIdentifier","src":"4698:9:30"}],"functionName":{"name":"add","nativeSrc":"4689:3:30","nodeType":"YulIdentifier","src":"4689:3:30"},"nativeSrc":"4689:19:30","nodeType":"YulFunctionCall","src":"4689:19:30"}],"functionName":{"name":"mload","nativeSrc":"4683:5:30","nodeType":"YulIdentifier","src":"4683:5:30"},"nativeSrc":"4683:26:30","nodeType":"YulFunctionCall","src":"4683:26:30"}],"functionName":{"name":"sstore","nativeSrc":"4668:6:30","nodeType":"YulIdentifier","src":"4668:6:30"},"nativeSrc":"4668:42:30","nodeType":"YulFunctionCall","src":"4668:42:30"},"nativeSrc":"4668:42:30","nodeType":"YulExpressionStatement","src":"4668:42:30"},{"nativeSrc":"4727:24:30","nodeType":"YulAssignment","src":"4727:24:30","value":{"arguments":[{"name":"dstPtr","nativeSrc":"4741:6:30","nodeType":"YulIdentifier","src":"4741:6:30"},{"kind":"number","nativeSrc":"4749:1:30","nodeType":"YulLiteral","src":"4749:1:30","type":"","value":"1"}],"functionName":{"name":"add","nativeSrc":"4737:3:30","nodeType":"YulIdentifier","src":"4737:3:30"},"nativeSrc":"4737:14:30","nodeType":"YulFunctionCall","src":"4737:14:30"},"variableNames":[{"name":"dstPtr","nativeSrc":"4727:6:30","nodeType":"YulIdentifier","src":"4727:6:30"}]},{"nativeSrc":"4768:33:30","nodeType":"YulAssignment","src":"4768:33:30","value":{"arguments":[{"name":"srcOffset","nativeSrc":"4785:9:30","nodeType":"YulIdentifier","src":"4785:9:30"},{"kind":"number","nativeSrc":"4796:4:30","nodeType":"YulLiteral","src":"4796:4:30","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"4781:3:30","nodeType":"YulIdentifier","src":"4781:3:30"},"nativeSrc":"4781:20:30","nodeType":"YulFunctionCall","src":"4781:20:30"},"variableNames":[{"name":"srcOffset","nativeSrc":"4768:9:30","nodeType":"YulIdentifier","src":"4768:9:30"}]}]},"condition":{"arguments":[{"name":"i","nativeSrc":"4604:1:30","nodeType":"YulIdentifier","src":"4604:1:30"},{"name":"loopEnd","nativeSrc":"4607:7:30","nodeType":"YulIdentifier","src":"4607:7:30"}],"functionName":{"name":"lt","nativeSrc":"4601:2:30","nodeType":"YulIdentifier","src":"4601:2:30"},"nativeSrc":"4601:14:30","nodeType":"YulFunctionCall","src":"4601:14:30"},"nativeSrc":"4593:222:30","nodeType":"YulForLoop","post":{"nativeSrc":"4616:21:30","nodeType":"YulBlock","src":"4616:21:30","statements":[{"nativeSrc":"4618:17:30","nodeType":"YulAssignment","src":"4618:17:30","value":{"arguments":[{"name":"i","nativeSrc":"4627:1:30","nodeType":"YulIdentifier","src":"4627:1:30"},{"kind":"number","nativeSrc":"4630:4:30","nodeType":"YulLiteral","src":"4630:4:30","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"4623:3:30","nodeType":"YulIdentifier","src":"4623:3:30"},"nativeSrc":"4623:12:30","nodeType":"YulFunctionCall","src":"4623:12:30"},"variableNames":[{"name":"i","nativeSrc":"4618:1:30","nodeType":"YulIdentifier","src":"4618:1:30"}]}]},"pre":{"nativeSrc":"4597:3:30","nodeType":"YulBlock","src":"4597:3:30","statements":[]},"src":"4593:222:30"},{"body":{"nativeSrc":"4863:166:30","nodeType":"YulBlock","src":"4863:166:30","statements":[{"nativeSrc":"4881:43:30","nodeType":"YulVariableDeclaration","src":"4881:43:30","value":{"arguments":[{"arguments":[{"name":"src","nativeSrc":"4908:3:30","nodeType":"YulIdentifier","src":"4908:3:30"},{"name":"srcOffset","nativeSrc":"4913:9:30","nodeType":"YulIdentifier","src":"4913:9:30"}],"functionName":{"name":"add","nativeSrc":"4904:3:30","nodeType":"YulIdentifier","src":"4904:3:30"},"nativeSrc":"4904:19:30","nodeType":"YulFunctionCall","src":"4904:19:30"}],"functionName":{"name":"mload","nativeSrc":"4898:5:30","nodeType":"YulIdentifier","src":"4898:5:30"},"nativeSrc":"4898:26:30","nodeType":"YulFunctionCall","src":"4898:26:30"},"variables":[{"name":"lastValue","nativeSrc":"4885:9:30","nodeType":"YulTypedName","src":"4885:9:30","type":""}]},{"expression":{"arguments":[{"name":"dstPtr","nativeSrc":"4948:6:30","nodeType":"YulIdentifier","src":"4948:6:30"},{"arguments":[{"name":"lastValue","nativeSrc":"4960:9:30","nodeType":"YulIdentifier","src":"4960:9:30"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"4987:1:30","nodeType":"YulLiteral","src":"4987:1:30","type":"","value":"3"},{"name":"newLen","nativeSrc":"4990:6:30","nodeType":"YulIdentifier","src":"4990:6:30"}],"functionName":{"name":"shl","nativeSrc":"4983:3:30","nodeType":"YulIdentifier","src":"4983:3:30"},"nativeSrc":"4983:14:30","nodeType":"YulFunctionCall","src":"4983:14:30"},{"kind":"number","nativeSrc":"4999:3:30","nodeType":"YulLiteral","src":"4999:3:30","type":"","value":"248"}],"functionName":{"name":"and","nativeSrc":"4979:3:30","nodeType":"YulIdentifier","src":"4979:3:30"},"nativeSrc":"4979:24:30","nodeType":"YulFunctionCall","src":"4979:24:30"},{"arguments":[{"kind":"number","nativeSrc":"5009:1:30","nodeType":"YulLiteral","src":"5009:1:30","type":"","value":"0"}],"functionName":{"name":"not","nativeSrc":"5005:3:30","nodeType":"YulIdentifier","src":"5005:3:30"},"nativeSrc":"5005:6:30","nodeType":"YulFunctionCall","src":"5005:6:30"}],"functionName":{"name":"shr","nativeSrc":"4975:3:30","nodeType":"YulIdentifier","src":"4975:3:30"},"nativeSrc":"4975:37:30","nodeType":"YulFunctionCall","src":"4975:37:30"}],"functionName":{"name":"not","nativeSrc":"4971:3:30","nodeType":"YulIdentifier","src":"4971:3:30"},"nativeSrc":"4971:42:30","nodeType":"YulFunctionCall","src":"4971:42:30"}],"functionName":{"name":"and","nativeSrc":"4956:3:30","nodeType":"YulIdentifier","src":"4956:3:30"},"nativeSrc":"4956:58:30","nodeType":"YulFunctionCall","src":"4956:58:30"}],"functionName":{"name":"sstore","nativeSrc":"4941:6:30","nodeType":"YulIdentifier","src":"4941:6:30"},"nativeSrc":"4941:74:30","nodeType":"YulFunctionCall","src":"4941:74:30"},"nativeSrc":"4941:74:30","nodeType":"YulExpressionStatement","src":"4941:74:30"}]},"condition":{"arguments":[{"name":"loopEnd","nativeSrc":"4834:7:30","nodeType":"YulIdentifier","src":"4834:7:30"},{"name":"newLen","nativeSrc":"4843:6:30","nodeType":"YulIdentifier","src":"4843:6:30"}],"functionName":{"name":"lt","nativeSrc":"4831:2:30","nodeType":"YulIdentifier","src":"4831:2:30"},"nativeSrc":"4831:19:30","nodeType":"YulFunctionCall","src":"4831:19:30"},"nativeSrc":"4828:201:30","nodeType":"YulIf","src":"4828:201:30"},{"expression":{"arguments":[{"name":"slot","nativeSrc":"5049:4:30","nodeType":"YulIdentifier","src":"5049:4:30"},{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"5063:1:30","nodeType":"YulLiteral","src":"5063:1:30","type":"","value":"1"},{"name":"newLen","nativeSrc":"5066:6:30","nodeType":"YulIdentifier","src":"5066:6:30"}],"functionName":{"name":"shl","nativeSrc":"5059:3:30","nodeType":"YulIdentifier","src":"5059:3:30"},"nativeSrc":"5059:14:30","nodeType":"YulFunctionCall","src":"5059:14:30"},{"kind":"number","nativeSrc":"5075:1:30","nodeType":"YulLiteral","src":"5075:1:30","type":"","value":"1"}],"functionName":{"name":"add","nativeSrc":"5055:3:30","nodeType":"YulIdentifier","src":"5055:3:30"},"nativeSrc":"5055:22:30","nodeType":"YulFunctionCall","src":"5055:22:30"}],"functionName":{"name":"sstore","nativeSrc":"5042:6:30","nodeType":"YulIdentifier","src":"5042:6:30"},"nativeSrc":"5042:36:30","nodeType":"YulFunctionCall","src":"5042:36:30"},"nativeSrc":"5042:36:30","nodeType":"YulExpressionStatement","src":"5042:36:30"}]},"nativeSrc":"4439:649:30","nodeType":"YulCase","src":"4439:649:30","value":{"kind":"number","nativeSrc":"4444:1:30","nodeType":"YulLiteral","src":"4444:1:30","type":"","value":"1"}},{"body":{"nativeSrc":"5105:234:30","nodeType":"YulBlock","src":"5105:234:30","statements":[{"nativeSrc":"5119:14:30","nodeType":"YulVariableDeclaration","src":"5119:14:30","value":{"kind":"number","nativeSrc":"5132:1:30","nodeType":"YulLiteral","src":"5132:1:30","type":"","value":"0"},"variables":[{"name":"value","nativeSrc":"5123:5:30","nodeType":"YulTypedName","src":"5123:5:30","type":""}]},{"body":{"nativeSrc":"5168:67:30","nodeType":"YulBlock","src":"5168:67:30","statements":[{"nativeSrc":"5186:35:30","nodeType":"YulAssignment","src":"5186:35:30","value":{"arguments":[{"arguments":[{"name":"src","nativeSrc":"5205:3:30","nodeType":"YulIdentifier","src":"5205:3:30"},{"name":"srcOffset","nativeSrc":"5210:9:30","nodeType":"YulIdentifier","src":"5210:9:30"}],"functionName":{"name":"add","nativeSrc":"5201:3:30","nodeType":"YulIdentifier","src":"5201:3:30"},"nativeSrc":"5201:19:30","nodeType":"YulFunctionCall","src":"5201:19:30"}],"functionName":{"name":"mload","nativeSrc":"5195:5:30","nodeType":"YulIdentifier","src":"5195:5:30"},"nativeSrc":"5195:26:30","nodeType":"YulFunctionCall","src":"5195:26:30"},"variableNames":[{"name":"value","nativeSrc":"5186:5:30","nodeType":"YulIdentifier","src":"5186:5:30"}]}]},"condition":{"name":"newLen","nativeSrc":"5149:6:30","nodeType":"YulIdentifier","src":"5149:6:30"},"nativeSrc":"5146:89:30","nodeType":"YulIf","src":"5146:89:30"},{"expression":{"arguments":[{"name":"slot","nativeSrc":"5255:4:30","nodeType":"YulIdentifier","src":"5255:4:30"},{"arguments":[{"name":"value","nativeSrc":"5314:5:30","nodeType":"YulIdentifier","src":"5314:5:30"},{"name":"newLen","nativeSrc":"5321:6:30","nodeType":"YulIdentifier","src":"5321:6:30"}],"functionName":{"name":"extract_used_part_and_set_length_of_short_byte_array","nativeSrc":"5261:52:30","nodeType":"YulIdentifier","src":"5261:52:30"},"nativeSrc":"5261:67:30","nodeType":"YulFunctionCall","src":"5261:67:30"}],"functionName":{"name":"sstore","nativeSrc":"5248:6:30","nodeType":"YulIdentifier","src":"5248:6:30"},"nativeSrc":"5248:81:30","nodeType":"YulFunctionCall","src":"5248:81:30"},"nativeSrc":"5248:81:30","nodeType":"YulExpressionStatement","src":"5248:81:30"}]},"nativeSrc":"5097:242:30","nodeType":"YulCase","src":"5097:242:30","value":"default"}],"expression":{"arguments":[{"name":"newLen","nativeSrc":"4419:6:30","nodeType":"YulIdentifier","src":"4419:6:30"},{"kind":"number","nativeSrc":"4427:2:30","nodeType":"YulLiteral","src":"4427:2:30","type":"","value":"31"}],"functionName":{"name":"gt","nativeSrc":"4416:2:30","nodeType":"YulIdentifier","src":"4416:2:30"},"nativeSrc":"4416:14:30","nodeType":"YulFunctionCall","src":"4416:14:30"},"nativeSrc":"4409:930:30","nodeType":"YulSwitch","src":"4409:930:30"}]},"name":"copy_byte_array_to_storage_from_t_string_memory_ptr_to_t_string_storage","nativeSrc":"4046:1299:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"slot","nativeSrc":"4127:4:30","nodeType":"YulTypedName","src":"4127:4:30","type":""},{"name":"src","nativeSrc":"4133:3:30","nodeType":"YulTypedName","src":"4133:3:30","type":""}],"src":"4046:1299:30"},{"body":{"nativeSrc":"5451:102:30","nodeType":"YulBlock","src":"5451:102:30","statements":[{"nativeSrc":"5461:26:30","nodeType":"YulAssignment","src":"5461:26:30","value":{"arguments":[{"name":"headStart","nativeSrc":"5473:9:30","nodeType":"YulIdentifier","src":"5473:9:30"},{"kind":"number","nativeSrc":"5484:2:30","nodeType":"YulLiteral","src":"5484:2:30","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"5469:3:30","nodeType":"YulIdentifier","src":"5469:3:30"},"nativeSrc":"5469:18:30","nodeType":"YulFunctionCall","src":"5469:18:30"},"variableNames":[{"name":"tail","nativeSrc":"5461:4:30","nodeType":"YulIdentifier","src":"5461:4:30"}]},{"expression":{"arguments":[{"name":"headStart","nativeSrc":"5503:9:30","nodeType":"YulIdentifier","src":"5503:9:30"},{"arguments":[{"name":"value0","nativeSrc":"5518:6:30","nodeType":"YulIdentifier","src":"5518:6:30"},{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"5534:3:30","nodeType":"YulLiteral","src":"5534:3:30","type":"","value":"160"},{"kind":"number","nativeSrc":"5539:1:30","nodeType":"YulLiteral","src":"5539:1:30","type":"","value":"1"}],"functionName":{"name":"shl","nativeSrc":"5530:3:30","nodeType":"YulIdentifier","src":"5530:3:30"},"nativeSrc":"5530:11:30","nodeType":"YulFunctionCall","src":"5530:11:30"},{"kind":"number","nativeSrc":"5543:1:30","nodeType":"YulLiteral","src":"5543:1:30","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"5526:3:30","nodeType":"YulIdentifier","src":"5526:3:30"},"nativeSrc":"5526:19:30","nodeType":"YulFunctionCall","src":"5526:19:30"}],"functionName":{"name":"and","nativeSrc":"5514:3:30","nodeType":"YulIdentifier","src":"5514:3:30"},"nativeSrc":"5514:32:30","nodeType":"YulFunctionCall","src":"5514:32:30"}],"functionName":{"name":"mstore","nativeSrc":"5496:6:30","nodeType":"YulIdentifier","src":"5496:6:30"},"nativeSrc":"5496:51:30","nodeType":"YulFunctionCall","src":"5496:51:30"},"nativeSrc":"5496:51:30","nodeType":"YulExpressionStatement","src":"5496:51:30"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nativeSrc":"5350:203:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"5420:9:30","nodeType":"YulTypedName","src":"5420:9:30","type":""},{"name":"value0","nativeSrc":"5431:6:30","nodeType":"YulTypedName","src":"5431:6:30","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"5442:4:30","nodeType":"YulTypedName","src":"5442:4:30","type":""}],"src":"5350:203:30"},{"body":{"nativeSrc":"5686:144:30","nodeType":"YulBlock","src":"5686:144:30","statements":[{"nativeSrc":"5696:26:30","nodeType":"YulAssignment","src":"5696:26:30","value":{"arguments":[{"name":"headStart","nativeSrc":"5708:9:30","nodeType":"YulIdentifier","src":"5708:9:30"},{"kind":"number","nativeSrc":"5719:2:30","nodeType":"YulLiteral","src":"5719:2:30","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"5704:3:30","nodeType":"YulIdentifier","src":"5704:3:30"},"nativeSrc":"5704:18:30","nodeType":"YulFunctionCall","src":"5704:18:30"},"variableNames":[{"name":"tail","nativeSrc":"5696:4:30","nodeType":"YulIdentifier","src":"5696:4:30"}]},{"expression":{"arguments":[{"name":"headStart","nativeSrc":"5738:9:30","nodeType":"YulIdentifier","src":"5738:9:30"},{"arguments":[{"name":"value0","nativeSrc":"5753:6:30","nodeType":"YulIdentifier","src":"5753:6:30"},{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"5769:2:30","nodeType":"YulLiteral","src":"5769:2:30","type":"","value":"96"},{"kind":"number","nativeSrc":"5773:1:30","nodeType":"YulLiteral","src":"5773:1:30","type":"","value":"1"}],"functionName":{"name":"shl","nativeSrc":"5765:3:30","nodeType":"YulIdentifier","src":"5765:3:30"},"nativeSrc":"5765:10:30","nodeType":"YulFunctionCall","src":"5765:10:30"},{"kind":"number","nativeSrc":"5777:1:30","nodeType":"YulLiteral","src":"5777:1:30","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"5761:3:30","nodeType":"YulIdentifier","src":"5761:3:30"},"nativeSrc":"5761:18:30","nodeType":"YulFunctionCall","src":"5761:18:30"}],"functionName":{"name":"and","nativeSrc":"5749:3:30","nodeType":"YulIdentifier","src":"5749:3:30"},"nativeSrc":"5749:31:30","nodeType":"YulFunctionCall","src":"5749:31:30"}],"functionName":{"name":"mstore","nativeSrc":"5731:6:30","nodeType":"YulIdentifier","src":"5731:6:30"},"nativeSrc":"5731:50:30","nodeType":"YulFunctionCall","src":"5731:50:30"},"nativeSrc":"5731:50:30","nodeType":"YulExpressionStatement","src":"5731:50:30"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"5801:9:30","nodeType":"YulIdentifier","src":"5801:9:30"},{"kind":"number","nativeSrc":"5812:2:30","nodeType":"YulLiteral","src":"5812:2:30","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"5797:3:30","nodeType":"YulIdentifier","src":"5797:3:30"},"nativeSrc":"5797:18:30","nodeType":"YulFunctionCall","src":"5797:18:30"},{"name":"value1","nativeSrc":"5817:6:30","nodeType":"YulIdentifier","src":"5817:6:30"}],"functionName":{"name":"mstore","nativeSrc":"5790:6:30","nodeType":"YulIdentifier","src":"5790:6:30"},"nativeSrc":"5790:34:30","nodeType":"YulFunctionCall","src":"5790:34:30"},"nativeSrc":"5790:34:30","nodeType":"YulExpressionStatement","src":"5790:34:30"}]},"name":"abi_encode_tuple_t_uint96_t_uint256__to_t_uint256_t_uint256__fromStack_reversed","nativeSrc":"5558:272:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"5647:9:30","nodeType":"YulTypedName","src":"5647:9:30","type":""},{"name":"value1","nativeSrc":"5658:6:30","nodeType":"YulTypedName","src":"5658:6:30","type":""},{"name":"value0","nativeSrc":"5666:6:30","nodeType":"YulTypedName","src":"5666:6:30","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"5677:4:30","nodeType":"YulTypedName","src":"5677:4:30","type":""}],"src":"5558:272:30"}]},"contents":"{\n { }\n function panic_error_0x41()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n function abi_decode_string_fromMemory(offset, end) -> array\n {\n if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n let length := mload(offset)\n if gt(length, sub(shl(64, 1), 1)) { panic_error_0x41() }\n let memPtr := mload(64)\n let newFreePtr := add(memPtr, and(add(and(add(length, 0x1f), not(31)), 63), not(31)))\n if or(gt(newFreePtr, sub(shl(64, 1), 1)), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n mstore(memPtr, length)\n if gt(add(add(offset, length), 0x20), end) { revert(0, 0) }\n mcopy(add(memPtr, 0x20), add(offset, 0x20), length)\n mstore(add(add(memPtr, length), 0x20), 0)\n array := memPtr\n }\n function abi_decode_address_fromMemory(offset) -> value\n {\n value := mload(offset)\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n }\n function abi_decode_uint96_fromMemory(offset) -> value\n {\n value := mload(offset)\n if iszero(eq(value, and(value, sub(shl(96, 1), 1)))) { revert(0, 0) }\n }\n function abi_decode_uint48_fromMemory(offset) -> value\n {\n value := mload(offset)\n if iszero(eq(value, and(value, 0xffffffffffff))) { revert(0, 0) }\n }\n function abi_decode_tuple_t_string_memory_ptrt_string_memory_ptrt_string_memory_ptrt_string_memory_ptrt_addresst_uint96t_addresst_addresst_uint48_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6, value7, value8\n {\n if slt(sub(dataEnd, headStart), 288) { revert(0, 0) }\n let offset := mload(headStart)\n if gt(offset, sub(shl(64, 1), 1)) { revert(0, 0) }\n value0 := abi_decode_string_fromMemory(add(headStart, offset), dataEnd)\n let offset_1 := mload(add(headStart, 32))\n if gt(offset_1, sub(shl(64, 1), 1)) { revert(0, 0) }\n value1 := abi_decode_string_fromMemory(add(headStart, offset_1), dataEnd)\n let offset_2 := mload(add(headStart, 64))\n if gt(offset_2, sub(shl(64, 1), 1)) { revert(0, 0) }\n value2 := abi_decode_string_fromMemory(add(headStart, offset_2), dataEnd)\n let offset_3 := mload(add(headStart, 96))\n if gt(offset_3, sub(shl(64, 1), 1)) { revert(0, 0) }\n value3 := abi_decode_string_fromMemory(add(headStart, offset_3), dataEnd)\n value4 := abi_decode_address_fromMemory(add(headStart, 128))\n value5 := abi_decode_uint96_fromMemory(add(headStart, 160))\n value6 := abi_decode_address_fromMemory(add(headStart, 192))\n value7 := abi_decode_address_fromMemory(add(headStart, 224))\n value8 := abi_decode_uint48_fromMemory(add(headStart, 256))\n }\n function extract_byte_array_length(data) -> length\n {\n length := shr(1, data)\n let outOfPlaceEncoding := and(data, 1)\n if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n if eq(outOfPlaceEncoding, lt(length, 32))\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x22)\n revert(0, 0x24)\n }\n }\n function array_dataslot_string_storage(ptr) -> data\n {\n mstore(0, ptr)\n data := keccak256(0, 0x20)\n }\n function clean_up_bytearray_end_slots_string_storage(array, len, startIndex)\n {\n if gt(len, 31)\n {\n mstore(0, array)\n let data := keccak256(0, 0x20)\n let deleteStart := add(data, shr(5, add(startIndex, 31)))\n if lt(startIndex, 0x20) { deleteStart := data }\n let _1 := add(data, shr(5, add(len, 31)))\n let start := deleteStart\n for { } lt(start, _1) { start := add(start, 1) }\n { sstore(start, 0) }\n }\n }\n function extract_used_part_and_set_length_of_short_byte_array(data, len) -> used\n {\n used := or(and(data, not(shr(shl(3, len), not(0)))), shl(1, len))\n }\n function copy_byte_array_to_storage_from_t_string_memory_ptr_to_t_string_storage(slot, src)\n {\n let newLen := mload(src)\n if gt(newLen, sub(shl(64, 1), 1)) { panic_error_0x41() }\n clean_up_bytearray_end_slots_string_storage(slot, extract_byte_array_length(sload(slot)), newLen)\n let srcOffset := 0\n srcOffset := 0x20\n switch gt(newLen, 31)\n case 1 {\n let loopEnd := and(newLen, not(31))\n let dstPtr := array_dataslot_string_storage(slot)\n let i := 0\n for { } lt(i, loopEnd) { i := add(i, 0x20) }\n {\n sstore(dstPtr, mload(add(src, srcOffset)))\n dstPtr := add(dstPtr, 1)\n srcOffset := add(srcOffset, 0x20)\n }\n if lt(loopEnd, newLen)\n {\n let lastValue := mload(add(src, srcOffset))\n sstore(dstPtr, and(lastValue, not(shr(and(shl(3, newLen), 248), not(0)))))\n }\n sstore(slot, add(shl(1, newLen), 1))\n }\n default {\n let value := 0\n if newLen\n {\n value := mload(add(src, srcOffset))\n }\n sstore(slot, extract_used_part_and_set_length_of_short_byte_array(value, newLen))\n }\n }\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n }\n function abi_encode_tuple_t_uint96_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n mstore(headStart, and(value0, sub(shl(96, 1), 1)))\n mstore(add(headStart, 32), value1)\n }\n}","id":30,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"608060405234801561000f575f80fd5b5060405161295238038061295283398101604081905261002e916103f0565b80838a8a5f61003d8382610580565b50600161004a8282610580565b5050506001600160a01b03811661007b57604051636116401160e11b81525f60048201526024015b60405180910390fd5b600980546001600160d01b0316600160d01b65ffffffffffff8516021790556100a45f82610151565b5050506001600160a01b03851615806100c457506001600160a01b038316155b806100d657506001600160a01b038216155b156100f45760405163d92e233d60e01b815260040160405180910390fd5b600c6101008882610580565b50600d61010d8782610580565b5061011885856101c0565b6101427f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a683610151565b5050505050505050505061063a565b5f826101ad575f61016a600a546001600160a01b031690565b6001600160a01b03161461019157604051631fe1e13d60e11b815260040160405180910390fd5b600a80546001600160a01b0319166001600160a01b0384161790555b6101b78383610262565b90505b92915050565b6127106001600160601b0382168110156101ff57604051636f483d0960e01b81526001600160601b038316600482015260248101829052604401610072565b6001600160a01b03831661022857604051635b6cc80560e11b81525f6004820152602401610072565b50604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600655565b5f8281526008602090815260408083206001600160a01b038516845290915281205460ff16610306575f8381526008602090815260408083206001600160a01b03861684529091529020805460ff191660011790556102be3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101ba565b505f6101ba565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112610330575f80fd5b81516001600160401b038111156103495761034961030d565b604051601f8201601f19908116603f011681016001600160401b03811182821017156103775761037761030d565b60405281815283820160200185101561038e575f80fd5b8160208501602083015e5f918101602001919091529392505050565b80516001600160a01b03811681146103c0575f80fd5b919050565b80516001600160601b03811681146103c0575f80fd5b805165ffffffffffff811681146103c0575f80fd5b5f805f805f805f805f6101208a8c031215610409575f80fd5b89516001600160401b0381111561041e575f80fd5b61042a8c828d01610321565b60208c0151909a5090506001600160401b03811115610447575f80fd5b6104538c828d01610321565b60408c015190995090506001600160401b03811115610470575f80fd5b61047c8c828d01610321565b60608c015190985090506001600160401b03811115610499575f80fd5b6104a58c828d01610321565b9650506104b460808b016103aa565b94506104c260a08b016103c5565b93506104d060c08b016103aa565b92506104de60e08b016103aa565b91506104ed6101008b016103db565b90509295985092959850929598565b600181811c9082168061051057607f821691505b60208210810361052e57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561057b57805f5260205f20601f840160051c810160208510156105595750805b601f840160051c820191505b81811015610578575f8155600101610565565b50505b505050565b81516001600160401b038111156105995761059961030d565b6105ad816105a784546104fc565b84610534565b6020601f8211600181146105df575f83156105c85750848201515b5f19600385901b1c1916600184901b178455610578565b5f84815260208120601f198516915b8281101561060e57878501518255602094850194600190920191016105ee565b508482101561062b57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b61230b806106475f395ff3fe608060405234801561000f575f80fd5b506004361061024a575f3560e01c806370a0823111610140578063a22cb465116100bf578063cf6eefb711610084578063cf6eefb714610503578063d539139314610531578063d547741f14610558578063d602b9fd1461056b578063e8a3d48514610573578063e985e9c51461057b575f80fd5b8063a22cb465146104ba578063b88d4fde146104cd578063c87b56dd146104e0578063cc8463c8146104f3578063cefc1429146104fb575f80fd5b8063938e3d7b11610105578063938e3d7b1461045e57806395d89b4114610471578063a144819414610479578063a1eda53c1461048c578063a217fddf146104b3575f80fd5b806370a08231146104175780638456cb591461042a57806384ef8ffc146104325780638da5cb5b1461044357806391d148541461044b575f80fd5b80632f2ff15d116101cc5780635c975abb116101915780635c975abb146103cb578063634e93da146103d65780636352211e146103e9578063649a5ec7146103fc5780636c0360eb1461040f575f80fd5b80632f2ff15d1461037757806336568abe1461038a5780633f4ba83a1461039d57806342842e0e146103a557806355f804b3146103b8575f80fd5b8063095ea7b311610212578063095ea7b3146102e75780630aa6220b146102fa57806323b872dd14610302578063248a9ca3146103155780632a55205a14610345575f80fd5b806301ffc9a71461024e578063022d63fb1461027657806302fa7c471461029257806306fdde03146102a7578063081812fc146102bc575b5f80fd5b61026161025c366004611ce7565b61058e565b60405190151581526020015b60405180910390f35b620697805b60405165ffffffffffff909116815260200161026d565b6102a56102a0366004611d1d565b61059e565b005b6102af610625565b60405161026d9190611d8b565b6102cf6102ca366004611d9d565b6106b4565b6040516001600160a01b03909116815260200161026d565b6102a56102f5366004611db4565b6106db565b6102a56106ea565b6102a5610310366004611ddc565b6106ff565b610337610323366004611d9d565b5f9081526008602052604090206001015490565b60405190815260200161026d565b610358610353366004611e16565b61078d565b604080516001600160a01b03909316835260208301919091520161026d565b6102a5610385366004611e36565b610810565b6102a5610398366004611e36565b610838565b6102a56108de565b6102a56103b3366004611ddc565b6108f0565b6102a56103c6366004611e60565b61090f565b600b5460ff16610261565b6102a56103e4366004611ece565b6109f8565b6102cf6103f7366004611d9d565b610a0b565b6102a561040a366004611ee7565b610a15565b6102af610a28565b610337610425366004611ece565b610a37565b6102a5610a7c565b600a546001600160a01b03166102cf565b6102cf610a8e565b610261610459366004611e36565b610aa6565b6102a561046c366004611e60565b610ad0565b6102af610bab565b6102a5610487366004611db4565b610bba565b610494610bf6565b6040805165ffffffffffff93841681529290911660208301520161026d565b6103375f81565b6102a56104c8366004611f0c565b610c48565b6102a56104db366004611f4e565b610c53565b6102af6104ee366004611d9d565b610c6b565b61027b610cd0565b6102a5610d2e565b61050b610d6d565b604080516001600160a01b03909316835265ffffffffffff90911660208301520161026d565b6103377f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b6102a5610566366004611e36565b610d8e565b6102a5610db6565b6102af610dc8565b61026161058936600461202b565b610dd7565b5f61059882610e04565b92915050565b5f6105a881610e28565b6001600160a01b0383166105cf5760405163d92e233d60e01b815260040160405180910390fd5b6105d98383610e32565b6040516001600160601b03831681526001600160a01b038416907fe12d7d5bdb8218a22277dca8f854dd4573a1cea3d3e4808dc567df9eb1c14bf49060200160405180910390a2505050565b60605f805461063390612053565b80601f016020809104026020016040519081016040528092919081815260200182805461065f90612053565b80156106aa5780601f10610681576101008083540402835291602001916106aa565b820191905f5260205f20905b81548152906001019060200180831161068d57829003601f168201915b5050505050905090565b5f6106be82610ed4565b505f828152600460205260409020546001600160a01b0316610598565b6106e6828233610f0c565b5050565b5f6106f481610e28565b6106fc610f19565b50565b6001600160a01b03821661072d57604051633250574960e11b81525f60048201526024015b60405180910390fd5b5f610739838333610f25565b9050836001600160a01b0316816001600160a01b031614610787576040516364283d7b60e01b81526001600160a01b0380861660048301526024820184905282166044820152606401610724565b50505050565b5f82815260076020526040812080548291906001600160a01b03811690600160a01b90046001600160601b0316816107e05750506006546001600160a01b03811690600160a01b90046001600160601b03165b5f6127106107f76001600160601b0384168961209f565b61080191906120b6565b92989297509195505050505050565b8161082e57604051631fe1e13d60e11b815260040160405180910390fd5b6106e68282611017565b811580156108535750600a546001600160a01b038281169116145b156108d4575f80610862610d6d565b90925090506001600160a01b038216151580610884575065ffffffffffff8116155b8061089757504265ffffffffffff821610155b156108bf576040516319ca5ebb60e01b815265ffffffffffff82166004820152602401610724565b50506009805465ffffffffffff60a01b191690555b6106e6828261103b565b5f6108e881610e28565b6106fc61106e565b61090a83838360405180602001604052805f815250610c53565b505050565b5f61091981610e28565b5f600c805461092790612053565b80601f016020809104026020016040519081016040528092919081815260200182805461095390612053565b801561099e5780601f106109755761010080835404028352916020019161099e565b820191905f5260205f20905b81548152906001019060200180831161098157829003601f168201915b505050505090508383600c91826109b6929190612119565b507f309b29ded109b9e28fb9885757b3e0096eb75c51d23aa4635d68bcd569f6adc18185856040516109ea939291906121d3565b60405180910390a150505050565b5f610a0281610e28565b6106e6826110c0565b5f61059882610ed4565b5f610a1f81610e28565b6106e682611132565b6060600c805461063390612053565b5f6001600160a01b038216610a61576040516322718ad960e21b81525f6004820152602401610724565b506001600160a01b03165f9081526003602052604090205490565b5f610a8681610e28565b6106fc6111a1565b5f610aa1600a546001600160a01b031690565b905090565b5f9182526008602090815260408084206001600160a01b0393909316845291905290205460ff1690565b5f610ada81610e28565b5f600d8054610ae890612053565b80601f0160208091040260200160405190810160405280929190818152602001828054610b1490612053565b8015610b5f5780601f10610b3657610100808354040283529160200191610b5f565b820191905f5260205f20905b815481529060010190602001808311610b4257829003601f168201915b505050505090508383600d9182610b77929190612119565b507fc9c7c3fe08b88b4df9d4d47ef47d2c43d55c025a0ba88ca442580ed9e7348a168185856040516109ea939291906121d3565b60606001805461063390612053565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6610be481610e28565b610bec6111de565b61090a8383611202565b600a545f90600160d01b900465ffffffffffff168015158015610c2157504265ffffffffffff821610155b610c2c575f80610c40565b600a54600160a01b900465ffffffffffff16815b915091509091565b6106e633838361121b565b610c5e8484846106ff565b61078733858585856112e2565b6060610c7682610ed4565b505f610c80610a28565b90505f815111610c9e5760405180602001604052805f815250610cc9565b80610ca88461140a565b604051602001610cb992919061222e565b6040516020818303038152906040525b9392505050565b600a545f90600160d01b900465ffffffffffff168015158015610cfa57504265ffffffffffff8216105b610d1557600954600160d01b900465ffffffffffff16610d28565b600a54600160a01b900465ffffffffffff165b91505090565b5f610d37610d6d565b509050336001600160a01b03821614610d6557604051636116401160e11b8152336004820152602401610724565b6106fc61149a565b6009546001600160a01b03811691600160a01b90910465ffffffffffff1690565b81610dac57604051631fe1e13d60e11b815260040160405180910390fd5b6106e68282611530565b5f610dc081610e28565b6106fc611554565b6060600d805461063390612053565b6001600160a01b039182165f90815260056020908152604080832093909416825291909152205460ff1690565b5f6001600160e01b031982166318a4c3c360e11b148061059857506105988261155e565b6106fc8133611582565b6127106001600160601b038216811015610e7157604051636f483d0960e01b81526001600160601b038316600482015260248101829052604401610724565b6001600160a01b038316610e9a57604051635b6cc80560e11b81525f6004820152602401610724565b50604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600655565b5f818152600260205260408120546001600160a01b03168061059857604051637e27328960e01b815260048101849052602401610724565b61090a83838360016115bb565b610f235f806116bf565b565b5f828152600260205260408120546001600160a01b0390811690831615610f5157610f5181848661177e565b6001600160a01b03811615610f8b57610f6c5f855f806115bb565b6001600160a01b0381165f90815260036020526040902080545f190190555b6001600160a01b03851615610fb9576001600160a01b0385165f908152600360205260409020805460010190555b5f8481526002602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b5f8281526008602052604090206001015461103181610e28565b61078783836117e2565b6001600160a01b03811633146110645760405163334bd91960e11b815260040160405180910390fd5b61090a8282611848565b611076611884565b600b805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b5f6110c9610cd0565b6110d2426118a7565b6110dc9190612242565b90506110e882826118dd565b60405165ffffffffffff821681526001600160a01b038316907f3377dc44241e779dd06afab5b788a35ca5f3b778836e2990bdb26a2a4b2e5ed69060200160405180910390a25050565b5f61113c8261195a565b611145426118a7565b61114f9190612242565b905061115b82826116bf565b6040805165ffffffffffff8085168252831660208201527ff1038c18cf84a56e432fdbfaf746924b7ea511dfe03a6506a0ceba4888788d9b910160405180910390a15050565b6111a96111de565b600b805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586110a33390565b600b5460ff1615610f235760405163d93c066560e01b815260040160405180910390fd5b6106e6828260405180602001604052805f8152506119a1565b6001600160a01b0383166112445760405163a9fbf51f60e01b81525f6004820152602401610724565b6001600160a01b03821661127657604051630b61174360e31b81526001600160a01b0383166004820152602401610724565b6001600160a01b038381165f81815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383163b1561140357604051630a85bd0160e11b81526001600160a01b0384169063150b7a0290611324908890889087908790600401612260565b6020604051808303815f875af192505050801561135e575060408051601f3d908101601f1916820190925261135b9181019061229c565b60015b6113c5573d80801561138b576040519150601f19603f3d011682016040523d82523d5f602084013e611390565b606091505b5080515f036113bd57604051633250574960e11b81526001600160a01b0385166004820152602401610724565b805160208201fd5b6001600160e01b03198116630a85bd0160e11b1461140157604051633250574960e11b81526001600160a01b0385166004820152602401610724565b505b5050505050565b60605f611416836119b8565b60010190505f8167ffffffffffffffff81111561143557611435611f3a565b6040519080825280601f01601f19166020018201604052801561145f576020820181803683370190505b5090508181016020015b5f19016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461146957509392505050565b5f806114a4610d6d565b915091506114b98165ffffffffffff16151590565b15806114cd57504265ffffffffffff821610155b156114f5576040516319ca5ebb60e01b815265ffffffffffff82166004820152602401610724565b6115105f61150b600a546001600160a01b031690565b611848565b5061151b5f836117e2565b5050600980546001600160d01b031916905550565b5f8281526008602052604090206001015461154a81610e28565b6107878383611848565b610f235f806118dd565b5f6001600160e01b03198216637965db0b60e01b1480610598575061059882611a8f565b61158c8282610aa6565b6106e65760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610724565b80806115cf57506001600160a01b03821615155b15611690575f6115de84610ed4565b90506001600160a01b0383161580159061160a5750826001600160a01b0316816001600160a01b031614155b801561161d575061161b8184610dd7565b155b156116465760405163a9fbf51f60e01b81526001600160a01b0384166004820152602401610724565b811561168e5783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b50505f90815260046020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b600a54600160d01b900465ffffffffffff168015611741574265ffffffffffff8216101561171857600a54600980546001600160d01b0316600160a01b90920465ffffffffffff16600160d01b02919091179055611741565b6040517f2b1fa2edafe6f7b9e97c1a9e0c3660e645beb2dcaa2d45bdbf9beaf5472e1ec5905f90a15b50600a80546001600160a01b0316600160a01b65ffffffffffff948516026001600160d01b031617600160d01b9290931691909102919091179055565b611789838383611ab3565b61090a576001600160a01b0383166117b757604051637e27328960e01b815260048101829052602401610724565b60405163177e802f60e01b81526001600160a01b038316600482015260248101829052604401610724565b5f8261183e575f6117fb600a546001600160a01b031690565b6001600160a01b03161461182257604051631fe1e13d60e11b815260040160405180910390fd5b600a80546001600160a01b0319166001600160a01b0384161790555b610cc98383611b17565b5f821580156118645750600a546001600160a01b038381169116145b1561187a57600a80546001600160a01b03191690555b610cc98383611ba8565b600b5460ff16610f2357604051638dfc202b60e01b815260040160405180910390fd5b5f65ffffffffffff8211156118d9576040516306dfcc6560e41b81526030600482015260248101839052604401610724565b5090565b5f6118e6610d6d565b6009805465ffffffffffff8616600160a01b026001600160d01b03199091166001600160a01b03881617179055915061192890508165ffffffffffff16151590565b1561090a576040517f8886ebfc4259abdbc16601dd8fb5678e54878f47b3c34836cfc51154a9605109905f90a1505050565b5f80611964610cd0565b90508065ffffffffffff168365ffffffffffff161161198c5761198783826122b7565b610cc9565b610cc965ffffffffffff841662069780611c13565b6119ab8383611c22565b61090a335f8585856112e2565b5f8072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106119f65772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310611a22576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310611a4057662386f26fc10000830492506010015b6305f5e1008310611a58576305f5e100830492506008015b6127108310611a6c57612710830492506004015b60648310611a7e576064830492506002015b600a83106105985760010192915050565b5f6001600160e01b0319821663152a902d60e11b1480610598575061059882611c83565b5f6001600160a01b03831615801590611b0f5750826001600160a01b0316846001600160a01b03161480611aec5750611aec8484610dd7565b80611b0f57505f828152600460205260409020546001600160a01b038481169116145b949350505050565b5f611b228383610aa6565b611ba1575f8381526008602090815260408083206001600160a01b03861684529091529020805460ff19166001179055611b593390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610598565b505f610598565b5f611bb38383610aa6565b15611ba1575f8381526008602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610598565b5f828218828410028218610cc9565b6001600160a01b038216611c4b57604051633250574960e11b81525f6004820152602401610724565b5f611c5783835f610f25565b90506001600160a01b0381161561090a576040516339e3563760e11b81525f6004820152602401610724565b5f6001600160e01b031982166380ac58cd60e01b1480611cb357506001600160e01b03198216635b5e139f60e01b145b8061059857506301ffc9a760e01b6001600160e01b0319831614610598565b6001600160e01b0319811681146106fc575f80fd5b5f60208284031215611cf7575f80fd5b8135610cc981611cd2565b80356001600160a01b0381168114611d18575f80fd5b919050565b5f8060408385031215611d2e575f80fd5b611d3783611d02565b915060208301356001600160601b0381168114611d52575f80fd5b809150509250929050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610cc96020830184611d5d565b5f60208284031215611dad575f80fd5b5035919050565b5f8060408385031215611dc5575f80fd5b611dce83611d02565b946020939093013593505050565b5f805f60608486031215611dee575f80fd5b611df784611d02565b9250611e0560208501611d02565b929592945050506040919091013590565b5f8060408385031215611e27575f80fd5b50508035926020909101359150565b5f8060408385031215611e47575f80fd5b82359150611e5760208401611d02565b90509250929050565b5f8060208385031215611e71575f80fd5b823567ffffffffffffffff811115611e87575f80fd5b8301601f81018513611e97575f80fd5b803567ffffffffffffffff811115611ead575f80fd5b856020828401011115611ebe575f80fd5b6020919091019590945092505050565b5f60208284031215611ede575f80fd5b610cc982611d02565b5f60208284031215611ef7575f80fd5b813565ffffffffffff81168114610cc9575f80fd5b5f8060408385031215611f1d575f80fd5b611f2683611d02565b915060208301358015158114611d52575f80fd5b634e487b7160e01b5f52604160045260245ffd5b5f805f8060808587031215611f61575f80fd5b611f6a85611d02565b9350611f7860208601611d02565b925060408501359150606085013567ffffffffffffffff811115611f9a575f80fd5b8501601f81018713611faa575f80fd5b803567ffffffffffffffff811115611fc457611fc4611f3a565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715611ff357611ff3611f3a565b60405281815282820160200189101561200a575f80fd5b816020840160208301375f6020838301015280935050505092959194509250565b5f806040838503121561203c575f80fd5b61204583611d02565b9150611e5760208401611d02565b600181811c9082168061206757607f821691505b60208210810361208557634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176105985761059861208b565b5f826120d057634e487b7160e01b5f52601260045260245ffd5b500490565b601f82111561090a57805f5260205f20601f840160051c810160208510156120fa5750805b601f840160051c820191505b81811015611403575f8155600101612106565b67ffffffffffffffff83111561213157612131611f3a565b6121458361213f8354612053565b836120d5565b5f601f841160018114612176575f851561215f5750838201355b5f19600387901b1c1916600186901b178355611403565b5f83815260208120601f198716915b828110156121a55786850135825560209485019460019092019101612185565b50868210156121c1575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b604081525f6121e56040830186611d5d565b8281036020840152838152838560208301375f602085830101526020601f19601f860116820101915050949350505050565b5f81518060208401855e5f93019283525090919050565b5f611b0f61223c8386612217565b84612217565b65ffffffffffff81811683821601908111156105985761059861208b565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f9061229290830184611d5d565b9695505050505050565b5f602082840312156122ac575f80fd5b8151610cc981611cd2565b65ffffffffffff82811682821603908111156105985761059861208b56fea26469706673582212206c61f9cbc8861ecf23317af095dbbbb42c5ff32ed8e4a71b91c7a2a6aa06803564736f6c634300081a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0xF JUMPI PUSH0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x2952 CODESIZE SUB DUP1 PUSH2 0x2952 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2E SWAP2 PUSH2 0x3F0 JUMP JUMPDEST DUP1 DUP4 DUP11 DUP11 PUSH0 PUSH2 0x3D DUP4 DUP3 PUSH2 0x580 JUMP JUMPDEST POP PUSH1 0x1 PUSH2 0x4A DUP3 DUP3 PUSH2 0x580 JUMP JUMPDEST POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x7B JUMPI PUSH1 0x40 MLOAD PUSH4 0x61164011 PUSH1 0xE1 SHL DUP2 MSTORE PUSH0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x9 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xD0 SHL SUB AND PUSH1 0x1 PUSH1 0xD0 SHL PUSH6 0xFFFFFFFFFFFF DUP6 AND MUL OR SWAP1 SSTORE PUSH2 0xA4 PUSH0 DUP3 PUSH2 0x151 JUMP JUMPDEST POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND ISZERO DUP1 PUSH2 0xC4 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND ISZERO JUMPDEST DUP1 PUSH2 0xD6 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ISZERO JUMPDEST ISZERO PUSH2 0xF4 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0xC PUSH2 0x100 DUP9 DUP3 PUSH2 0x580 JUMP JUMPDEST POP PUSH1 0xD PUSH2 0x10D DUP8 DUP3 PUSH2 0x580 JUMP JUMPDEST POP PUSH2 0x118 DUP6 DUP6 PUSH2 0x1C0 JUMP JUMPDEST PUSH2 0x142 PUSH32 0x9F2DF0FED2C77648DE5860A4CC508CD0818C85B8B8A1AB4CEEEF8D981C8956A6 DUP4 PUSH2 0x151 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP POP PUSH2 0x63A JUMP JUMPDEST PUSH0 DUP3 PUSH2 0x1AD JUMPI PUSH0 PUSH2 0x16A PUSH1 0xA SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x191 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1FE1E13D PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0xA DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND OR SWAP1 SSTORE JUMPDEST PUSH2 0x1B7 DUP4 DUP4 PUSH2 0x262 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x2710 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP3 AND DUP2 LT ISZERO PUSH2 0x1FF JUMPI PUSH1 0x40 MLOAD PUSH4 0x6F483D09 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x44 ADD PUSH2 0x72 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x228 JUMPI PUSH1 0x40 MLOAD PUSH4 0x5B6CC805 PUSH1 0xE1 SHL DUP2 MSTORE PUSH0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x72 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP1 DUP4 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB SWAP1 SWAP2 AND PUSH1 0x20 SWAP1 SWAP3 ADD DUP3 SWAP1 MSTORE PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 SWAP2 MUL OR PUSH1 0x6 SSTORE JUMP JUMPDEST PUSH0 DUP3 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x306 JUMPI PUSH0 DUP4 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH2 0x2BE CALLER SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH32 0x2F8788117E7EFF1D82E926EC794901D17C78024A50270940304540A733656F0D PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP PUSH1 0x1 PUSH2 0x1BA JUMP JUMPDEST POP PUSH0 PUSH2 0x1BA JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x330 JUMPI PUSH0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x349 JUMPI PUSH2 0x349 PUSH2 0x30D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x377 JUMPI PUSH2 0x377 PUSH2 0x30D JUMP JUMPDEST PUSH1 0x40 MSTORE DUP2 DUP2 MSTORE DUP4 DUP3 ADD PUSH1 0x20 ADD DUP6 LT ISZERO PUSH2 0x38E JUMPI PUSH0 DUP1 REVERT JUMPDEST DUP2 PUSH1 0x20 DUP6 ADD PUSH1 0x20 DUP4 ADD MCOPY PUSH0 SWAP2 DUP2 ADD PUSH1 0x20 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x3C0 JUMPI PUSH0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x3C0 JUMPI PUSH0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH6 0xFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x3C0 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 DUP1 PUSH0 DUP1 PUSH0 DUP1 PUSH0 DUP1 PUSH0 PUSH2 0x120 DUP11 DUP13 SUB SLT ISZERO PUSH2 0x409 JUMPI PUSH0 DUP1 REVERT JUMPDEST DUP10 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x41E JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH2 0x42A DUP13 DUP3 DUP14 ADD PUSH2 0x321 JUMP JUMPDEST PUSH1 0x20 DUP13 ADD MLOAD SWAP1 SWAP11 POP SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x447 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH2 0x453 DUP13 DUP3 DUP14 ADD PUSH2 0x321 JUMP JUMPDEST PUSH1 0x40 DUP13 ADD MLOAD SWAP1 SWAP10 POP SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x470 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH2 0x47C DUP13 DUP3 DUP14 ADD PUSH2 0x321 JUMP JUMPDEST PUSH1 0x60 DUP13 ADD MLOAD SWAP1 SWAP9 POP SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x499 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH2 0x4A5 DUP13 DUP3 DUP14 ADD PUSH2 0x321 JUMP JUMPDEST SWAP7 POP POP PUSH2 0x4B4 PUSH1 0x80 DUP12 ADD PUSH2 0x3AA JUMP JUMPDEST SWAP5 POP PUSH2 0x4C2 PUSH1 0xA0 DUP12 ADD PUSH2 0x3C5 JUMP JUMPDEST SWAP4 POP PUSH2 0x4D0 PUSH1 0xC0 DUP12 ADD PUSH2 0x3AA JUMP JUMPDEST SWAP3 POP PUSH2 0x4DE PUSH1 0xE0 DUP12 ADD PUSH2 0x3AA JUMP JUMPDEST SWAP2 POP PUSH2 0x4ED PUSH2 0x100 DUP12 ADD PUSH2 0x3DB JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP9 POP SWAP3 SWAP6 SWAP9 POP SWAP3 SWAP6 SWAP9 JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x510 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 SUB PUSH2 0x52E JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1F DUP3 GT ISZERO PUSH2 0x57B JUMPI DUP1 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 PUSH1 0x1F DUP5 ADD PUSH1 0x5 SHR DUP2 ADD PUSH1 0x20 DUP6 LT ISZERO PUSH2 0x559 JUMPI POP DUP1 JUMPDEST PUSH1 0x1F DUP5 ADD PUSH1 0x5 SHR DUP3 ADD SWAP2 POP JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x578 JUMPI PUSH0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x565 JUMP JUMPDEST POP POP JUMPDEST POP POP POP JUMP JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x599 JUMPI PUSH2 0x599 PUSH2 0x30D JUMP JUMPDEST PUSH2 0x5AD DUP2 PUSH2 0x5A7 DUP5 SLOAD PUSH2 0x4FC JUMP JUMPDEST DUP5 PUSH2 0x534 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x1F DUP3 GT PUSH1 0x1 DUP2 EQ PUSH2 0x5DF JUMPI PUSH0 DUP4 ISZERO PUSH2 0x5C8 JUMPI POP DUP5 DUP3 ADD MLOAD JUMPDEST PUSH0 NOT PUSH1 0x3 DUP6 SWAP1 SHL SHR NOT AND PUSH1 0x1 DUP5 SWAP1 SHL OR DUP5 SSTORE PUSH2 0x578 JUMP JUMPDEST PUSH0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 KECCAK256 PUSH1 0x1F NOT DUP6 AND SWAP2 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x60E JUMPI DUP8 DUP6 ADD MLOAD DUP3 SSTORE PUSH1 0x20 SWAP5 DUP6 ADD SWAP5 PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 ADD PUSH2 0x5EE JUMP JUMPDEST POP DUP5 DUP3 LT ISZERO PUSH2 0x62B JUMPI DUP7 DUP5 ADD MLOAD PUSH0 NOT PUSH1 0x3 DUP8 SWAP1 SHL PUSH1 0xF8 AND SHR NOT AND DUP2 SSTORE JUMPDEST POP POP POP POP PUSH1 0x1 SWAP1 DUP2 SHL ADD SWAP1 SSTORE POP JUMP JUMPDEST PUSH2 0x230B DUP1 PUSH2 0x647 PUSH0 CODECOPY PUSH0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0xF JUMPI PUSH0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x24A JUMPI PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x70A08231 GT PUSH2 0x140 JUMPI DUP1 PUSH4 0xA22CB465 GT PUSH2 0xBF JUMPI DUP1 PUSH4 0xCF6EEFB7 GT PUSH2 0x84 JUMPI DUP1 PUSH4 0xCF6EEFB7 EQ PUSH2 0x503 JUMPI DUP1 PUSH4 0xD5391393 EQ PUSH2 0x531 JUMPI DUP1 PUSH4 0xD547741F EQ PUSH2 0x558 JUMPI DUP1 PUSH4 0xD602B9FD EQ PUSH2 0x56B JUMPI DUP1 PUSH4 0xE8A3D485 EQ PUSH2 0x573 JUMPI DUP1 PUSH4 0xE985E9C5 EQ PUSH2 0x57B JUMPI PUSH0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA22CB465 EQ PUSH2 0x4BA JUMPI DUP1 PUSH4 0xB88D4FDE EQ PUSH2 0x4CD JUMPI DUP1 PUSH4 0xC87B56DD EQ PUSH2 0x4E0 JUMPI DUP1 PUSH4 0xCC8463C8 EQ PUSH2 0x4F3 JUMPI DUP1 PUSH4 0xCEFC1429 EQ PUSH2 0x4FB JUMPI PUSH0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x938E3D7B GT PUSH2 0x105 JUMPI DUP1 PUSH4 0x938E3D7B EQ PUSH2 0x45E JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x471 JUMPI DUP1 PUSH4 0xA1448194 EQ PUSH2 0x479 JUMPI DUP1 PUSH4 0xA1EDA53C EQ PUSH2 0x48C JUMPI DUP1 PUSH4 0xA217FDDF EQ PUSH2 0x4B3 JUMPI PUSH0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x70A08231 EQ PUSH2 0x417 JUMPI DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x42A JUMPI DUP1 PUSH4 0x84EF8FFC EQ PUSH2 0x432 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x443 JUMPI DUP1 PUSH4 0x91D14854 EQ PUSH2 0x44B JUMPI PUSH0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x2F2FF15D GT PUSH2 0x1CC JUMPI DUP1 PUSH4 0x5C975ABB GT PUSH2 0x191 JUMPI DUP1 PUSH4 0x5C975ABB EQ PUSH2 0x3CB JUMPI DUP1 PUSH4 0x634E93DA EQ PUSH2 0x3D6 JUMPI DUP1 PUSH4 0x6352211E EQ PUSH2 0x3E9 JUMPI DUP1 PUSH4 0x649A5EC7 EQ PUSH2 0x3FC JUMPI DUP1 PUSH4 0x6C0360EB EQ PUSH2 0x40F JUMPI PUSH0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x2F2FF15D EQ PUSH2 0x377 JUMPI DUP1 PUSH4 0x36568ABE EQ PUSH2 0x38A JUMPI DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0x39D JUMPI DUP1 PUSH4 0x42842E0E EQ PUSH2 0x3A5 JUMPI DUP1 PUSH4 0x55F804B3 EQ PUSH2 0x3B8 JUMPI PUSH0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x95EA7B3 GT PUSH2 0x212 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x2E7 JUMPI DUP1 PUSH4 0xAA6220B EQ PUSH2 0x2FA JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x302 JUMPI DUP1 PUSH4 0x248A9CA3 EQ PUSH2 0x315 JUMPI DUP1 PUSH4 0x2A55205A EQ PUSH2 0x345 JUMPI PUSH0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1FFC9A7 EQ PUSH2 0x24E JUMPI DUP1 PUSH4 0x22D63FB EQ PUSH2 0x276 JUMPI DUP1 PUSH4 0x2FA7C47 EQ PUSH2 0x292 JUMPI DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x2A7 JUMPI DUP1 PUSH4 0x81812FC EQ PUSH2 0x2BC JUMPI JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH2 0x261 PUSH2 0x25C CALLDATASIZE PUSH1 0x4 PUSH2 0x1CE7 JUMP JUMPDEST PUSH2 0x58E JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH3 0x69780 JUMPDEST PUSH1 0x40 MLOAD PUSH6 0xFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x26D JUMP JUMPDEST PUSH2 0x2A5 PUSH2 0x2A0 CALLDATASIZE PUSH1 0x4 PUSH2 0x1D1D JUMP JUMPDEST PUSH2 0x59E JUMP JUMPDEST STOP JUMPDEST PUSH2 0x2AF PUSH2 0x625 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x26D SWAP2 SWAP1 PUSH2 0x1D8B JUMP JUMPDEST PUSH2 0x2CF PUSH2 0x2CA CALLDATASIZE PUSH1 0x4 PUSH2 0x1D9D JUMP JUMPDEST PUSH2 0x6B4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x26D JUMP JUMPDEST PUSH2 0x2A5 PUSH2 0x2F5 CALLDATASIZE PUSH1 0x4 PUSH2 0x1DB4 JUMP JUMPDEST PUSH2 0x6DB JUMP JUMPDEST PUSH2 0x2A5 PUSH2 0x6EA JUMP JUMPDEST PUSH2 0x2A5 PUSH2 0x310 CALLDATASIZE PUSH1 0x4 PUSH2 0x1DDC JUMP JUMPDEST PUSH2 0x6FF JUMP JUMPDEST PUSH2 0x337 PUSH2 0x323 CALLDATASIZE PUSH1 0x4 PUSH2 0x1D9D JUMP JUMPDEST PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x26D JUMP JUMPDEST PUSH2 0x358 PUSH2 0x353 CALLDATASIZE PUSH1 0x4 PUSH2 0x1E16 JUMP JUMPDEST PUSH2 0x78D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP4 AND DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x26D JUMP JUMPDEST PUSH2 0x2A5 PUSH2 0x385 CALLDATASIZE PUSH1 0x4 PUSH2 0x1E36 JUMP JUMPDEST PUSH2 0x810 JUMP JUMPDEST PUSH2 0x2A5 PUSH2 0x398 CALLDATASIZE PUSH1 0x4 PUSH2 0x1E36 JUMP JUMPDEST PUSH2 0x838 JUMP JUMPDEST PUSH2 0x2A5 PUSH2 0x8DE JUMP JUMPDEST PUSH2 0x2A5 PUSH2 0x3B3 CALLDATASIZE PUSH1 0x4 PUSH2 0x1DDC JUMP JUMPDEST PUSH2 0x8F0 JUMP JUMPDEST PUSH2 0x2A5 PUSH2 0x3C6 CALLDATASIZE PUSH1 0x4 PUSH2 0x1E60 JUMP JUMPDEST PUSH2 0x90F JUMP JUMPDEST PUSH1 0xB SLOAD PUSH1 0xFF AND PUSH2 0x261 JUMP JUMPDEST PUSH2 0x2A5 PUSH2 0x3E4 CALLDATASIZE PUSH1 0x4 PUSH2 0x1ECE JUMP JUMPDEST PUSH2 0x9F8 JUMP JUMPDEST PUSH2 0x2CF PUSH2 0x3F7 CALLDATASIZE PUSH1 0x4 PUSH2 0x1D9D JUMP JUMPDEST PUSH2 0xA0B JUMP JUMPDEST PUSH2 0x2A5 PUSH2 0x40A CALLDATASIZE PUSH1 0x4 PUSH2 0x1EE7 JUMP JUMPDEST PUSH2 0xA15 JUMP JUMPDEST PUSH2 0x2AF PUSH2 0xA28 JUMP JUMPDEST PUSH2 0x337 PUSH2 0x425 CALLDATASIZE PUSH1 0x4 PUSH2 0x1ECE JUMP JUMPDEST PUSH2 0xA37 JUMP JUMPDEST PUSH2 0x2A5 PUSH2 0xA7C JUMP JUMPDEST PUSH1 0xA SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2CF JUMP JUMPDEST PUSH2 0x2CF PUSH2 0xA8E JUMP JUMPDEST PUSH2 0x261 PUSH2 0x459 CALLDATASIZE PUSH1 0x4 PUSH2 0x1E36 JUMP JUMPDEST PUSH2 0xAA6 JUMP JUMPDEST PUSH2 0x2A5 PUSH2 0x46C CALLDATASIZE PUSH1 0x4 PUSH2 0x1E60 JUMP JUMPDEST PUSH2 0xAD0 JUMP JUMPDEST PUSH2 0x2AF PUSH2 0xBAB JUMP JUMPDEST PUSH2 0x2A5 PUSH2 0x487 CALLDATASIZE PUSH1 0x4 PUSH2 0x1DB4 JUMP JUMPDEST PUSH2 0xBBA JUMP JUMPDEST PUSH2 0x494 PUSH2 0xBF6 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH6 0xFFFFFFFFFFFF SWAP4 DUP5 AND DUP2 MSTORE SWAP3 SWAP1 SWAP2 AND PUSH1 0x20 DUP4 ADD MSTORE ADD PUSH2 0x26D JUMP JUMPDEST PUSH2 0x337 PUSH0 DUP2 JUMP JUMPDEST PUSH2 0x2A5 PUSH2 0x4C8 CALLDATASIZE PUSH1 0x4 PUSH2 0x1F0C JUMP JUMPDEST PUSH2 0xC48 JUMP JUMPDEST PUSH2 0x2A5 PUSH2 0x4DB CALLDATASIZE PUSH1 0x4 PUSH2 0x1F4E JUMP JUMPDEST PUSH2 0xC53 JUMP JUMPDEST PUSH2 0x2AF PUSH2 0x4EE CALLDATASIZE PUSH1 0x4 PUSH2 0x1D9D JUMP JUMPDEST PUSH2 0xC6B JUMP JUMPDEST PUSH2 0x27B PUSH2 0xCD0 JUMP JUMPDEST PUSH2 0x2A5 PUSH2 0xD2E JUMP JUMPDEST PUSH2 0x50B PUSH2 0xD6D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP4 AND DUP4 MSTORE PUSH6 0xFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x20 DUP4 ADD MSTORE ADD PUSH2 0x26D JUMP JUMPDEST PUSH2 0x337 PUSH32 0x9F2DF0FED2C77648DE5860A4CC508CD0818C85B8B8A1AB4CEEEF8D981C8956A6 DUP2 JUMP JUMPDEST PUSH2 0x2A5 PUSH2 0x566 CALLDATASIZE PUSH1 0x4 PUSH2 0x1E36 JUMP JUMPDEST PUSH2 0xD8E JUMP JUMPDEST PUSH2 0x2A5 PUSH2 0xDB6 JUMP JUMPDEST PUSH2 0x2AF PUSH2 0xDC8 JUMP JUMPDEST PUSH2 0x261 PUSH2 0x589 CALLDATASIZE PUSH1 0x4 PUSH2 0x202B JUMP JUMPDEST PUSH2 0xDD7 JUMP JUMPDEST PUSH0 PUSH2 0x598 DUP3 PUSH2 0xE04 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 PUSH2 0x5A8 DUP2 PUSH2 0xE28 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x5CF JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x5D9 DUP4 DUP4 PUSH2 0xE32 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP4 AND DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 PUSH32 0xE12D7D5BDB8218A22277DCA8F854DD4573A1CEA3D3E4808DC567DF9EB1C14BF4 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH0 DUP1 SLOAD PUSH2 0x633 SWAP1 PUSH2 0x2053 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x65F SWAP1 PUSH2 0x2053 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x6AA JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x681 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x6AA JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x68D JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH0 PUSH2 0x6BE DUP3 PUSH2 0xED4 JUMP JUMPDEST POP PUSH0 DUP3 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x598 JUMP JUMPDEST PUSH2 0x6E6 DUP3 DUP3 CALLER PUSH2 0xF0C JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH0 PUSH2 0x6F4 DUP2 PUSH2 0xE28 JUMP JUMPDEST PUSH2 0x6FC PUSH2 0xF19 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x72D JUMPI PUSH1 0x40 MLOAD PUSH4 0x32505749 PUSH1 0xE1 SHL DUP2 MSTORE PUSH0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH0 PUSH2 0x739 DUP4 DUP4 CALLER PUSH2 0xF25 JUMP JUMPDEST SWAP1 POP DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x787 JUMPI PUSH1 0x40 MLOAD PUSH4 0x64283D7B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP5 SWAP1 MSTORE DUP3 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x724 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH0 DUP3 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP3 SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND SWAP1 PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND DUP2 PUSH2 0x7E0 JUMPI POP POP PUSH1 0x6 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND SWAP1 PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND JUMPDEST PUSH0 PUSH2 0x2710 PUSH2 0x7F7 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP5 AND DUP10 PUSH2 0x209F JUMP JUMPDEST PUSH2 0x801 SWAP2 SWAP1 PUSH2 0x20B6 JUMP JUMPDEST SWAP3 SWAP9 SWAP3 SWAP8 POP SWAP2 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST DUP2 PUSH2 0x82E JUMPI PUSH1 0x40 MLOAD PUSH4 0x1FE1E13D PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x6E6 DUP3 DUP3 PUSH2 0x1017 JUMP JUMPDEST DUP2 ISZERO DUP1 ISZERO PUSH2 0x853 JUMPI POP PUSH1 0xA SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP2 AND EQ JUMPDEST ISZERO PUSH2 0x8D4 JUMPI PUSH0 DUP1 PUSH2 0x862 PUSH2 0xD6D JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ISZERO ISZERO DUP1 PUSH2 0x884 JUMPI POP PUSH6 0xFFFFFFFFFFFF DUP2 AND ISZERO JUMPDEST DUP1 PUSH2 0x897 JUMPI POP TIMESTAMP PUSH6 0xFFFFFFFFFFFF DUP3 AND LT ISZERO JUMPDEST ISZERO PUSH2 0x8BF JUMPI PUSH1 0x40 MLOAD PUSH4 0x19CA5EBB PUSH1 0xE0 SHL DUP2 MSTORE PUSH6 0xFFFFFFFFFFFF DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x724 JUMP JUMPDEST POP POP PUSH1 0x9 DUP1 SLOAD PUSH6 0xFFFFFFFFFFFF PUSH1 0xA0 SHL NOT AND SWAP1 SSTORE JUMPDEST PUSH2 0x6E6 DUP3 DUP3 PUSH2 0x103B JUMP JUMPDEST PUSH0 PUSH2 0x8E8 DUP2 PUSH2 0xE28 JUMP JUMPDEST PUSH2 0x6FC PUSH2 0x106E JUMP JUMPDEST PUSH2 0x90A DUP4 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH0 DUP2 MSTORE POP PUSH2 0xC53 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH0 PUSH2 0x919 DUP2 PUSH2 0xE28 JUMP JUMPDEST PUSH0 PUSH1 0xC DUP1 SLOAD PUSH2 0x927 SWAP1 PUSH2 0x2053 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x953 SWAP1 PUSH2 0x2053 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x99E JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x975 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x99E JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x981 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP DUP4 DUP4 PUSH1 0xC SWAP2 DUP3 PUSH2 0x9B6 SWAP3 SWAP2 SWAP1 PUSH2 0x2119 JUMP JUMPDEST POP PUSH32 0x309B29DED109B9E28FB9885757B3E0096EB75C51D23AA4635D68BCD569F6ADC1 DUP2 DUP6 DUP6 PUSH1 0x40 MLOAD PUSH2 0x9EA SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x21D3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP POP JUMP JUMPDEST PUSH0 PUSH2 0xA02 DUP2 PUSH2 0xE28 JUMP JUMPDEST PUSH2 0x6E6 DUP3 PUSH2 0x10C0 JUMP JUMPDEST PUSH0 PUSH2 0x598 DUP3 PUSH2 0xED4 JUMP JUMPDEST PUSH0 PUSH2 0xA1F DUP2 PUSH2 0xE28 JUMP JUMPDEST PUSH2 0x6E6 DUP3 PUSH2 0x1132 JUMP JUMPDEST PUSH1 0x60 PUSH1 0xC DUP1 SLOAD PUSH2 0x633 SWAP1 PUSH2 0x2053 JUMP JUMPDEST PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xA61 JUMPI PUSH1 0x40 MLOAD PUSH4 0x22718AD9 PUSH1 0xE2 SHL DUP2 MSTORE PUSH0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x724 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH0 PUSH2 0xA86 DUP2 PUSH2 0xE28 JUMP JUMPDEST PUSH2 0x6FC PUSH2 0x11A1 JUMP JUMPDEST PUSH0 PUSH2 0xAA1 PUSH1 0xA SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH0 SWAP2 DUP3 MSTORE PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 SWAP1 SWAP4 AND DUP5 MSTORE SWAP2 SWAP1 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH0 PUSH2 0xADA DUP2 PUSH2 0xE28 JUMP JUMPDEST PUSH0 PUSH1 0xD DUP1 SLOAD PUSH2 0xAE8 SWAP1 PUSH2 0x2053 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0xB14 SWAP1 PUSH2 0x2053 JUMP JUMPDEST DUP1 ISZERO PUSH2 0xB5F JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xB36 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xB5F JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xB42 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP DUP4 DUP4 PUSH1 0xD SWAP2 DUP3 PUSH2 0xB77 SWAP3 SWAP2 SWAP1 PUSH2 0x2119 JUMP JUMPDEST POP PUSH32 0xC9C7C3FE08B88B4DF9D4D47EF47D2C43D55C025A0BA88CA442580ED9E7348A16 DUP2 DUP6 DUP6 PUSH1 0x40 MLOAD PUSH2 0x9EA SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x21D3 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x1 DUP1 SLOAD PUSH2 0x633 SWAP1 PUSH2 0x2053 JUMP JUMPDEST PUSH32 0x9F2DF0FED2C77648DE5860A4CC508CD0818C85B8B8A1AB4CEEEF8D981C8956A6 PUSH2 0xBE4 DUP2 PUSH2 0xE28 JUMP JUMPDEST PUSH2 0xBEC PUSH2 0x11DE JUMP JUMPDEST PUSH2 0x90A DUP4 DUP4 PUSH2 0x1202 JUMP JUMPDEST PUSH1 0xA SLOAD PUSH0 SWAP1 PUSH1 0x1 PUSH1 0xD0 SHL SWAP1 DIV PUSH6 0xFFFFFFFFFFFF AND DUP1 ISZERO ISZERO DUP1 ISZERO PUSH2 0xC21 JUMPI POP TIMESTAMP PUSH6 0xFFFFFFFFFFFF DUP3 AND LT ISZERO JUMPDEST PUSH2 0xC2C JUMPI PUSH0 DUP1 PUSH2 0xC40 JUMP JUMPDEST PUSH1 0xA SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH6 0xFFFFFFFFFFFF AND DUP2 JUMPDEST SWAP2 POP SWAP2 POP SWAP1 SWAP2 JUMP JUMPDEST PUSH2 0x6E6 CALLER DUP4 DUP4 PUSH2 0x121B JUMP JUMPDEST PUSH2 0xC5E DUP5 DUP5 DUP5 PUSH2 0x6FF JUMP JUMPDEST PUSH2 0x787 CALLER DUP6 DUP6 DUP6 DUP6 PUSH2 0x12E2 JUMP JUMPDEST PUSH1 0x60 PUSH2 0xC76 DUP3 PUSH2 0xED4 JUMP JUMPDEST POP PUSH0 PUSH2 0xC80 PUSH2 0xA28 JUMP JUMPDEST SWAP1 POP PUSH0 DUP2 MLOAD GT PUSH2 0xC9E JUMPI PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH0 DUP2 MSTORE POP PUSH2 0xCC9 JUMP JUMPDEST DUP1 PUSH2 0xCA8 DUP5 PUSH2 0x140A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0xCB9 SWAP3 SWAP2 SWAP1 PUSH2 0x222E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0xA SLOAD PUSH0 SWAP1 PUSH1 0x1 PUSH1 0xD0 SHL SWAP1 DIV PUSH6 0xFFFFFFFFFFFF AND DUP1 ISZERO ISZERO DUP1 ISZERO PUSH2 0xCFA JUMPI POP TIMESTAMP PUSH6 0xFFFFFFFFFFFF DUP3 AND LT JUMPDEST PUSH2 0xD15 JUMPI PUSH1 0x9 SLOAD PUSH1 0x1 PUSH1 0xD0 SHL SWAP1 DIV PUSH6 0xFFFFFFFFFFFF AND PUSH2 0xD28 JUMP JUMPDEST PUSH1 0xA SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH6 0xFFFFFFFFFFFF AND JUMPDEST SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH0 PUSH2 0xD37 PUSH2 0xD6D JUMP JUMPDEST POP SWAP1 POP CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND EQ PUSH2 0xD65 JUMPI PUSH1 0x40 MLOAD PUSH4 0x61164011 PUSH1 0xE1 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x724 JUMP JUMPDEST PUSH2 0x6FC PUSH2 0x149A JUMP JUMPDEST PUSH1 0x9 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND SWAP2 PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 SWAP2 DIV PUSH6 0xFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST DUP2 PUSH2 0xDAC JUMPI PUSH1 0x40 MLOAD PUSH4 0x1FE1E13D PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x6E6 DUP3 DUP3 PUSH2 0x1530 JUMP JUMPDEST PUSH0 PUSH2 0xDC0 DUP2 PUSH2 0xE28 JUMP JUMPDEST PUSH2 0x6FC PUSH2 0x1554 JUMP JUMPDEST PUSH1 0x60 PUSH1 0xD DUP1 SLOAD PUSH2 0x633 SWAP1 PUSH2 0x2053 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP3 AND PUSH4 0x18A4C3C3 PUSH1 0xE1 SHL EQ DUP1 PUSH2 0x598 JUMPI POP PUSH2 0x598 DUP3 PUSH2 0x155E JUMP JUMPDEST PUSH2 0x6FC DUP2 CALLER PUSH2 0x1582 JUMP JUMPDEST PUSH2 0x2710 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP3 AND DUP2 LT ISZERO PUSH2 0xE71 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6F483D09 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x44 ADD PUSH2 0x724 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0xE9A JUMPI PUSH1 0x40 MLOAD PUSH4 0x5B6CC805 PUSH1 0xE1 SHL DUP2 MSTORE PUSH0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x724 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP1 DUP4 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB SWAP1 SWAP2 AND PUSH1 0x20 SWAP1 SWAP3 ADD DUP3 SWAP1 MSTORE PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 SWAP2 MUL OR PUSH1 0x6 SSTORE JUMP JUMPDEST PUSH0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP1 PUSH2 0x598 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7E273289 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0x24 ADD PUSH2 0x724 JUMP JUMPDEST PUSH2 0x90A DUP4 DUP4 DUP4 PUSH1 0x1 PUSH2 0x15BB JUMP JUMPDEST PUSH2 0xF23 PUSH0 DUP1 PUSH2 0x16BF JUMP JUMPDEST JUMP JUMPDEST PUSH0 DUP3 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP1 DUP4 AND ISZERO PUSH2 0xF51 JUMPI PUSH2 0xF51 DUP2 DUP5 DUP7 PUSH2 0x177E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO PUSH2 0xF8B JUMPI PUSH2 0xF6C PUSH0 DUP6 PUSH0 DUP1 PUSH2 0x15BB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH0 NOT ADD SWAP1 SSTORE JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND ISZERO PUSH2 0xFB9 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 ADD SWAP1 SSTORE JUMPDEST PUSH0 DUP5 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 DUP2 AND SWAP2 DUP3 OR SWAP1 SWAP3 SSTORE SWAP2 MLOAD DUP8 SWAP4 SWAP2 DUP6 AND SWAP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 LOG4 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH0 DUP3 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD PUSH2 0x1031 DUP2 PUSH2 0xE28 JUMP JUMPDEST PUSH2 0x787 DUP4 DUP4 PUSH2 0x17E2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND CALLER EQ PUSH2 0x1064 JUMPI PUSH1 0x40 MLOAD PUSH4 0x334BD919 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x90A DUP3 DUP3 PUSH2 0x1848 JUMP JUMPDEST PUSH2 0x1076 PUSH2 0x1884 JUMP JUMPDEST PUSH1 0xB DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH32 0x5DB9EE0A495BF2E6FF9C91A7834C1BA4FDD244A5E8AA4E537BD38AEAE4B073AA CALLER JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH0 PUSH2 0x10C9 PUSH2 0xCD0 JUMP JUMPDEST PUSH2 0x10D2 TIMESTAMP PUSH2 0x18A7 JUMP JUMPDEST PUSH2 0x10DC SWAP2 SWAP1 PUSH2 0x2242 JUMP JUMPDEST SWAP1 POP PUSH2 0x10E8 DUP3 DUP3 PUSH2 0x18DD JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH6 0xFFFFFFFFFFFF DUP3 AND DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH32 0x3377DC44241E779DD06AFAB5B788A35CA5F3B778836E2990BDB26A2A4B2E5ED6 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH0 PUSH2 0x113C DUP3 PUSH2 0x195A JUMP JUMPDEST PUSH2 0x1145 TIMESTAMP PUSH2 0x18A7 JUMP JUMPDEST PUSH2 0x114F SWAP2 SWAP1 PUSH2 0x2242 JUMP JUMPDEST SWAP1 POP PUSH2 0x115B DUP3 DUP3 PUSH2 0x16BF JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH6 0xFFFFFFFFFFFF DUP1 DUP6 AND DUP3 MSTORE DUP4 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0xF1038C18CF84A56E432FDBFAF746924B7EA511DFE03A6506A0CEBA4888788D9B SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP JUMP JUMPDEST PUSH2 0x11A9 PUSH2 0x11DE JUMP JUMPDEST PUSH1 0xB DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH32 0x62E78CEA01BEE320CD4E420270B5EA74000D11B0C9F74754EBDBFC544B05A258 PUSH2 0x10A3 CALLER SWAP1 JUMP JUMPDEST PUSH1 0xB SLOAD PUSH1 0xFF AND ISZERO PUSH2 0xF23 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD93C0665 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x6E6 DUP3 DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH0 DUP2 MSTORE POP PUSH2 0x19A1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x1244 JUMPI PUSH1 0x40 MLOAD PUSH4 0xA9FBF51F PUSH1 0xE0 SHL DUP2 MSTORE PUSH0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x724 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x1276 JUMPI PUSH1 0x40 MLOAD PUSH4 0xB611743 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x724 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND DUP7 ISZERO ISZERO SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE SWAP2 MLOAD SWAP2 DUP3 MSTORE PUSH32 0x17307EAB39AB6107E8899845AD3D59BD9653F200F220920489CA2B5937696C31 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND EXTCODESIZE ISZERO PUSH2 0x1403 JUMPI PUSH1 0x40 MLOAD PUSH4 0xA85BD01 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 PUSH4 0x150B7A02 SWAP1 PUSH2 0x1324 SWAP1 DUP9 SWAP1 DUP9 SWAP1 DUP8 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x2260 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH0 DUP8 GAS CALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x135E JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x135B SWAP2 DUP2 ADD SWAP1 PUSH2 0x229C JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x13C5 JUMPI RETURNDATASIZE DUP1 DUP1 ISZERO PUSH2 0x138B JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x1390 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP DUP1 MLOAD PUSH0 SUB PUSH2 0x13BD JUMPI PUSH1 0x40 MLOAD PUSH4 0x32505749 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x724 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 DUP3 ADD REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP2 AND PUSH4 0xA85BD01 PUSH1 0xE1 SHL EQ PUSH2 0x1401 JUMPI PUSH1 0x40 MLOAD PUSH4 0x32505749 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x724 JUMP JUMPDEST POP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH0 PUSH2 0x1416 DUP4 PUSH2 0x19B8 JUMP JUMPDEST PUSH1 0x1 ADD SWAP1 POP PUSH0 DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1435 JUMPI PUSH2 0x1435 PUSH2 0x1F3A JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x145F JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP DUP2 DUP2 ADD PUSH1 0x20 ADD JUMPDEST PUSH0 NOT ADD PUSH16 0x181899199A1A9B1B9C1CB0B131B232B3 PUSH1 0x81 SHL PUSH1 0xA DUP7 MOD BYTE DUP2 MSTORE8 PUSH1 0xA DUP6 DIV SWAP5 POP DUP5 PUSH2 0x1469 JUMPI POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x14A4 PUSH2 0xD6D JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x14B9 DUP2 PUSH6 0xFFFFFFFFFFFF AND ISZERO ISZERO SWAP1 JUMP JUMPDEST ISZERO DUP1 PUSH2 0x14CD JUMPI POP TIMESTAMP PUSH6 0xFFFFFFFFFFFF DUP3 AND LT ISZERO JUMPDEST ISZERO PUSH2 0x14F5 JUMPI PUSH1 0x40 MLOAD PUSH4 0x19CA5EBB PUSH1 0xE0 SHL DUP2 MSTORE PUSH6 0xFFFFFFFFFFFF DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x724 JUMP JUMPDEST PUSH2 0x1510 PUSH0 PUSH2 0x150B PUSH1 0xA SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x1848 JUMP JUMPDEST POP PUSH2 0x151B PUSH0 DUP4 PUSH2 0x17E2 JUMP JUMPDEST POP POP PUSH1 0x9 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xD0 SHL SUB NOT AND SWAP1 SSTORE POP JUMP JUMPDEST PUSH0 DUP3 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD PUSH2 0x154A DUP2 PUSH2 0xE28 JUMP JUMPDEST PUSH2 0x787 DUP4 DUP4 PUSH2 0x1848 JUMP JUMPDEST PUSH2 0xF23 PUSH0 DUP1 PUSH2 0x18DD JUMP JUMPDEST PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP3 AND PUSH4 0x7965DB0B PUSH1 0xE0 SHL EQ DUP1 PUSH2 0x598 JUMPI POP PUSH2 0x598 DUP3 PUSH2 0x1A8F JUMP JUMPDEST PUSH2 0x158C DUP3 DUP3 PUSH2 0xAA6 JUMP JUMPDEST PUSH2 0x6E6 JUMPI PUSH1 0x40 MLOAD PUSH4 0xE2517D3F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x44 ADD PUSH2 0x724 JUMP JUMPDEST DUP1 DUP1 PUSH2 0x15CF JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x1690 JUMPI PUSH0 PUSH2 0x15DE DUP5 PUSH2 0xED4 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND ISZERO DUP1 ISZERO SWAP1 PUSH2 0x160A JUMPI POP DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x161D JUMPI POP PUSH2 0x161B DUP2 DUP5 PUSH2 0xDD7 JUMP JUMPDEST ISZERO JUMPDEST ISZERO PUSH2 0x1646 JUMPI PUSH1 0x40 MLOAD PUSH4 0xA9FBF51F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x724 JUMP JUMPDEST DUP2 ISZERO PUSH2 0x168E JUMPI DUP4 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 JUMPDEST POP JUMPDEST POP POP PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0xA SLOAD PUSH1 0x1 PUSH1 0xD0 SHL SWAP1 DIV PUSH6 0xFFFFFFFFFFFF AND DUP1 ISZERO PUSH2 0x1741 JUMPI TIMESTAMP PUSH6 0xFFFFFFFFFFFF DUP3 AND LT ISZERO PUSH2 0x1718 JUMPI PUSH1 0xA SLOAD PUSH1 0x9 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xD0 SHL SUB AND PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 SWAP3 DIV PUSH6 0xFFFFFFFFFFFF AND PUSH1 0x1 PUSH1 0xD0 SHL MUL SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x1741 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x2B1FA2EDAFE6F7B9E97C1A9E0C3660E645BEB2DCAA2D45BDBF9BEAF5472E1EC5 SWAP1 PUSH0 SWAP1 LOG1 JUMPDEST POP PUSH1 0xA DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0xA0 SHL PUSH6 0xFFFFFFFFFFFF SWAP5 DUP6 AND MUL PUSH1 0x1 PUSH1 0x1 PUSH1 0xD0 SHL SUB AND OR PUSH1 0x1 PUSH1 0xD0 SHL SWAP3 SWAP1 SWAP4 AND SWAP2 SWAP1 SWAP2 MUL SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x1789 DUP4 DUP4 DUP4 PUSH2 0x1AB3 JUMP JUMPDEST PUSH2 0x90A JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x17B7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7E273289 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x24 ADD PUSH2 0x724 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x177E802F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x44 ADD PUSH2 0x724 JUMP JUMPDEST PUSH0 DUP3 PUSH2 0x183E JUMPI PUSH0 PUSH2 0x17FB PUSH1 0xA SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x1822 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1FE1E13D PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0xA DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND OR SWAP1 SSTORE JUMPDEST PUSH2 0xCC9 DUP4 DUP4 PUSH2 0x1B17 JUMP JUMPDEST PUSH0 DUP3 ISZERO DUP1 ISZERO PUSH2 0x1864 JUMPI POP PUSH1 0xA SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 AND EQ JUMPDEST ISZERO PUSH2 0x187A JUMPI PUSH1 0xA DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE JUMPDEST PUSH2 0xCC9 DUP4 DUP4 PUSH2 0x1BA8 JUMP JUMPDEST PUSH1 0xB SLOAD PUSH1 0xFF AND PUSH2 0xF23 JUMPI PUSH1 0x40 MLOAD PUSH4 0x8DFC202B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH0 PUSH6 0xFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x18D9 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6DFCC65 PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x30 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x44 ADD PUSH2 0x724 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH0 PUSH2 0x18E6 PUSH2 0xD6D JUMP JUMPDEST PUSH1 0x9 DUP1 SLOAD PUSH6 0xFFFFFFFFFFFF DUP7 AND PUSH1 0x1 PUSH1 0xA0 SHL MUL PUSH1 0x1 PUSH1 0x1 PUSH1 0xD0 SHL SUB NOT SWAP1 SWAP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND OR OR SWAP1 SSTORE SWAP2 POP PUSH2 0x1928 SWAP1 POP DUP2 PUSH6 0xFFFFFFFFFFFF AND ISZERO ISZERO SWAP1 JUMP JUMPDEST ISZERO PUSH2 0x90A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8886EBFC4259ABDBC16601DD8FB5678E54878F47B3C34836CFC51154A9605109 SWAP1 PUSH0 SWAP1 LOG1 POP POP POP JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x1964 PUSH2 0xCD0 JUMP JUMPDEST SWAP1 POP DUP1 PUSH6 0xFFFFFFFFFFFF AND DUP4 PUSH6 0xFFFFFFFFFFFF AND GT PUSH2 0x198C JUMPI PUSH2 0x1987 DUP4 DUP3 PUSH2 0x22B7 JUMP JUMPDEST PUSH2 0xCC9 JUMP JUMPDEST PUSH2 0xCC9 PUSH6 0xFFFFFFFFFFFF DUP5 AND PUSH3 0x69780 PUSH2 0x1C13 JUMP JUMPDEST PUSH2 0x19AB DUP4 DUP4 PUSH2 0x1C22 JUMP JUMPDEST PUSH2 0x90A CALLER PUSH0 DUP6 DUP6 DUP6 PUSH2 0x12E2 JUMP JUMPDEST PUSH0 DUP1 PUSH19 0x184F03E93FF9F4DAA797ED6E38ED64BF6A1F01 PUSH1 0x40 SHL DUP4 LT PUSH2 0x19F6 JUMPI PUSH19 0x184F03E93FF9F4DAA797ED6E38ED64BF6A1F01 PUSH1 0x40 SHL DUP4 DIV SWAP3 POP PUSH1 0x40 ADD JUMPDEST PUSH14 0x4EE2D6D415B85ACEF8100000000 DUP4 LT PUSH2 0x1A22 JUMPI PUSH14 0x4EE2D6D415B85ACEF8100000000 DUP4 DIV SWAP3 POP PUSH1 0x20 ADD JUMPDEST PUSH7 0x2386F26FC10000 DUP4 LT PUSH2 0x1A40 JUMPI PUSH7 0x2386F26FC10000 DUP4 DIV SWAP3 POP PUSH1 0x10 ADD JUMPDEST PUSH4 0x5F5E100 DUP4 LT PUSH2 0x1A58 JUMPI PUSH4 0x5F5E100 DUP4 DIV SWAP3 POP PUSH1 0x8 ADD JUMPDEST PUSH2 0x2710 DUP4 LT PUSH2 0x1A6C JUMPI PUSH2 0x2710 DUP4 DIV SWAP3 POP PUSH1 0x4 ADD JUMPDEST PUSH1 0x64 DUP4 LT PUSH2 0x1A7E JUMPI PUSH1 0x64 DUP4 DIV SWAP3 POP PUSH1 0x2 ADD JUMPDEST PUSH1 0xA DUP4 LT PUSH2 0x598 JUMPI PUSH1 0x1 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP3 AND PUSH4 0x152A902D PUSH1 0xE1 SHL EQ DUP1 PUSH2 0x598 JUMPI POP PUSH2 0x598 DUP3 PUSH2 0x1C83 JUMP JUMPDEST PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND ISZERO DUP1 ISZERO SWAP1 PUSH2 0x1B0F JUMPI POP DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ DUP1 PUSH2 0x1AEC JUMPI POP PUSH2 0x1AEC DUP5 DUP5 PUSH2 0xDD7 JUMP JUMPDEST DUP1 PUSH2 0x1B0F JUMPI POP PUSH0 DUP3 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND SWAP2 AND EQ JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH0 PUSH2 0x1B22 DUP4 DUP4 PUSH2 0xAA6 JUMP JUMPDEST PUSH2 0x1BA1 JUMPI PUSH0 DUP4 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH2 0x1B59 CALLER SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH32 0x2F8788117E7EFF1D82E926EC794901D17C78024A50270940304540A733656F0D PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP PUSH1 0x1 PUSH2 0x598 JUMP JUMPDEST POP PUSH0 PUSH2 0x598 JUMP JUMPDEST PUSH0 PUSH2 0x1BB3 DUP4 DUP4 PUSH2 0xAA6 JUMP JUMPDEST ISZERO PUSH2 0x1BA1 JUMPI PUSH0 DUP4 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND DUP1 DUP6 MSTORE SWAP3 MSTORE DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD CALLER SWAP3 DUP7 SWAP2 PUSH32 0xF6391F5C32D9C69D2A47EA670B442974B53935D1EDC7FD64EB21E047A839171B SWAP2 SWAP1 LOG4 POP PUSH1 0x1 PUSH2 0x598 JUMP JUMPDEST PUSH0 DUP3 DUP3 XOR DUP3 DUP5 LT MUL DUP3 XOR PUSH2 0xCC9 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x1C4B JUMPI PUSH1 0x40 MLOAD PUSH4 0x32505749 PUSH1 0xE1 SHL DUP2 MSTORE PUSH0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x724 JUMP JUMPDEST PUSH0 PUSH2 0x1C57 DUP4 DUP4 PUSH0 PUSH2 0xF25 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO PUSH2 0x90A JUMPI PUSH1 0x40 MLOAD PUSH4 0x39E35637 PUSH1 0xE1 SHL DUP2 MSTORE PUSH0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x724 JUMP JUMPDEST PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP3 AND PUSH4 0x80AC58CD PUSH1 0xE0 SHL EQ DUP1 PUSH2 0x1CB3 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP3 AND PUSH4 0x5B5E139F PUSH1 0xE0 SHL EQ JUMPDEST DUP1 PUSH2 0x598 JUMPI POP PUSH4 0x1FFC9A7 PUSH1 0xE0 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP4 AND EQ PUSH2 0x598 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP2 AND DUP2 EQ PUSH2 0x6FC JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1CF7 JUMPI PUSH0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0xCC9 DUP2 PUSH2 0x1CD2 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x1D18 JUMPI PUSH0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1D2E JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH2 0x1D37 DUP4 PUSH2 0x1D02 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x1D52 JUMPI PUSH0 DUP1 REVERT JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH0 DUP2 MLOAD DUP1 DUP5 MSTORE DUP1 PUSH1 0x20 DUP5 ADD PUSH1 0x20 DUP7 ADD MCOPY PUSH0 PUSH1 0x20 DUP3 DUP7 ADD ADD MSTORE PUSH1 0x20 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP6 ADD ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH0 PUSH2 0xCC9 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x1D5D JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1DAD JUMPI PUSH0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1DC5 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH2 0x1DCE DUP4 PUSH2 0x1D02 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH0 DUP1 PUSH0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1DEE JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH2 0x1DF7 DUP5 PUSH2 0x1D02 JUMP JUMPDEST SWAP3 POP PUSH2 0x1E05 PUSH1 0x20 DUP6 ADD PUSH2 0x1D02 JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1E27 JUMPI PUSH0 DUP1 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1E47 JUMPI PUSH0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD SWAP2 POP PUSH2 0x1E57 PUSH1 0x20 DUP5 ADD PUSH2 0x1D02 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH0 DUP1 PUSH1 0x20 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1E71 JUMPI PUSH0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1E87 JUMPI PUSH0 DUP1 REVERT JUMPDEST DUP4 ADD PUSH1 0x1F DUP2 ADD DUP6 SGT PUSH2 0x1E97 JUMPI PUSH0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1EAD JUMPI PUSH0 DUP1 REVERT JUMPDEST DUP6 PUSH1 0x20 DUP3 DUP5 ADD ADD GT ISZERO PUSH2 0x1EBE JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH1 0x20 SWAP2 SWAP1 SWAP2 ADD SWAP6 SWAP1 SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1EDE JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH2 0xCC9 DUP3 PUSH2 0x1D02 JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1EF7 JUMPI PUSH0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH6 0xFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0xCC9 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1F1D JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH2 0x1F26 DUP4 PUSH2 0x1D02 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x1D52 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 PUSH0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x1F61 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH2 0x1F6A DUP6 PUSH2 0x1D02 JUMP JUMPDEST SWAP4 POP PUSH2 0x1F78 PUSH1 0x20 DUP7 ADD PUSH2 0x1D02 JUMP JUMPDEST SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD SWAP2 POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1F9A JUMPI PUSH0 DUP1 REVERT JUMPDEST DUP6 ADD PUSH1 0x1F DUP2 ADD DUP8 SGT PUSH2 0x1FAA JUMPI PUSH0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1FC4 JUMPI PUSH2 0x1FC4 PUSH2 0x1F3A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x1FF3 JUMPI PUSH2 0x1FF3 PUSH2 0x1F3A JUMP JUMPDEST PUSH1 0x40 MSTORE DUP2 DUP2 MSTORE DUP3 DUP3 ADD PUSH1 0x20 ADD DUP10 LT ISZERO PUSH2 0x200A JUMPI PUSH0 DUP1 REVERT JUMPDEST DUP2 PUSH1 0x20 DUP5 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH0 PUSH1 0x20 DUP4 DUP4 ADD ADD MSTORE DUP1 SWAP4 POP POP POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x203C JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH2 0x2045 DUP4 PUSH2 0x1D02 JUMP JUMPDEST SWAP2 POP PUSH2 0x1E57 PUSH1 0x20 DUP5 ADD PUSH2 0x1D02 JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x2067 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 SUB PUSH2 0x2085 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP1 DUP3 MUL DUP2 ISZERO DUP3 DUP3 DIV DUP5 EQ OR PUSH2 0x598 JUMPI PUSH2 0x598 PUSH2 0x208B JUMP JUMPDEST PUSH0 DUP3 PUSH2 0x20D0 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH1 0x1F DUP3 GT ISZERO PUSH2 0x90A JUMPI DUP1 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 PUSH1 0x1F DUP5 ADD PUSH1 0x5 SHR DUP2 ADD PUSH1 0x20 DUP6 LT ISZERO PUSH2 0x20FA JUMPI POP DUP1 JUMPDEST PUSH1 0x1F DUP5 ADD PUSH1 0x5 SHR DUP3 ADD SWAP2 POP JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1403 JUMPI PUSH0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x2106 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT ISZERO PUSH2 0x2131 JUMPI PUSH2 0x2131 PUSH2 0x1F3A JUMP JUMPDEST PUSH2 0x2145 DUP4 PUSH2 0x213F DUP4 SLOAD PUSH2 0x2053 JUMP JUMPDEST DUP4 PUSH2 0x20D5 JUMP JUMPDEST PUSH0 PUSH1 0x1F DUP5 GT PUSH1 0x1 DUP2 EQ PUSH2 0x2176 JUMPI PUSH0 DUP6 ISZERO PUSH2 0x215F JUMPI POP DUP4 DUP3 ADD CALLDATALOAD JUMPDEST PUSH0 NOT PUSH1 0x3 DUP8 SWAP1 SHL SHR NOT AND PUSH1 0x1 DUP7 SWAP1 SHL OR DUP4 SSTORE PUSH2 0x1403 JUMP JUMPDEST PUSH0 DUP4 DUP2 MSTORE PUSH1 0x20 DUP2 KECCAK256 PUSH1 0x1F NOT DUP8 AND SWAP2 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x21A5 JUMPI DUP7 DUP6 ADD CALLDATALOAD DUP3 SSTORE PUSH1 0x20 SWAP5 DUP6 ADD SWAP5 PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 ADD PUSH2 0x2185 JUMP JUMPDEST POP DUP7 DUP3 LT ISZERO PUSH2 0x21C1 JUMPI PUSH0 NOT PUSH1 0xF8 DUP9 PUSH1 0x3 SHL AND SHR NOT DUP5 DUP8 ADD CALLDATALOAD AND DUP2 SSTORE JUMPDEST POP POP PUSH1 0x1 DUP6 PUSH1 0x1 SHL ADD DUP4 SSTORE POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 MSTORE PUSH0 PUSH2 0x21E5 PUSH1 0x40 DUP4 ADD DUP7 PUSH2 0x1D5D JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x20 DUP5 ADD MSTORE DUP4 DUP2 MSTORE DUP4 DUP6 PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH0 PUSH1 0x20 DUP6 DUP4 ADD ADD MSTORE PUSH1 0x20 PUSH1 0x1F NOT PUSH1 0x1F DUP7 ADD AND DUP3 ADD ADD SWAP2 POP POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH0 DUP2 MLOAD DUP1 PUSH1 0x20 DUP5 ADD DUP6 MCOPY PUSH0 SWAP4 ADD SWAP3 DUP4 MSTORE POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 PUSH2 0x1B0F PUSH2 0x223C DUP4 DUP7 PUSH2 0x2217 JUMP JUMPDEST DUP5 PUSH2 0x2217 JUMP JUMPDEST PUSH6 0xFFFFFFFFFFFF DUP2 DUP2 AND DUP4 DUP3 AND ADD SWAP1 DUP2 GT ISZERO PUSH2 0x598 JUMPI PUSH2 0x598 PUSH2 0x208B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND DUP3 MSTORE DUP5 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x80 PUSH1 0x60 DUP3 ADD DUP2 SWAP1 MSTORE PUSH0 SWAP1 PUSH2 0x2292 SWAP1 DUP4 ADD DUP5 PUSH2 0x1D5D JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x22AC JUMPI PUSH0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0xCC9 DUP2 PUSH2 0x1CD2 JUMP JUMPDEST PUSH6 0xFFFFFFFFFFFF DUP3 DUP2 AND DUP3 DUP3 AND SUB SWAP1 DUP2 GT ISZERO PUSH2 0x598 JUMPI PUSH2 0x598 PUSH2 0x208B JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH13 0x61F9CBC8861ECF23317AF095DB 0xBB 0xB4 0x2C PUSH0 RETURN 0x2E 0xD8 0xE4 0xA7 SHL SWAP2 0xC7 LOG2 0xA6 0xAA MOD DUP1 CALLDATALOAD PUSH5 0x736F6C6343 STOP ADDMOD BYTE STOP CALLER ","sourceMap":"678:6691:27:-:0;;;2863:780;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3242:18;3262:13;3195:5;3202:7;1446:5:9;:13;3195:5:27;1446::9;:13;:::i;:::-;-1:-1:-1;1469:7:9;:17;1479:7;1469;:17;:::i;:::-;-1:-1:-1;;;;;;;;2540:33:4;;2536:115;;2596:44;;-1:-1:-1;;;2596:44:4;;2637:1;2596:44;;;5496:51:30;5469:18;;2596:44:4;;;;;;;;2536:115;2660:13;:28;;-1:-1:-1;;;;;2660:28:4;-1:-1:-1;;;2660:28:4;;;;;;;2698:51;-1:-1:-1;2729:19:4;2698:10;:51::i;:::-;-1:-1:-1;;;;;;;;3291:30:27;::::2;::::0;;:61:::2;;-1:-1:-1::0;;;;;;3325:27:27;::::2;::::0;3291:61:::2;:93;;;-1:-1:-1::0;;;;;;3356:28:27;::::2;::::0;3291:93:::2;3287:144;;;3407:13;;-1:-1:-1::0;;;3407:13:27::2;;;;;;;;;;;3287:144;3440:13;:24;3456:8:::0;3440:13;:24:::2;:::i;:::-;-1:-1:-1::0;3474:20:27::2;:43;3497:20:::0;3474;:43:::2;:::i;:::-;-1:-1:-1::0;3527:60:27::2;3546:16:::0;3564:22;3527:18:::2;:60::i;:::-;3597:39;1054:24;3621:14:::0;3597:10:::2;:39::i;:::-;;2863:780:::0;;;;;;;;;678:6691;;5611:370:4;5697:4;5717;5713:214;;5789:1;5763:14;6846:20;;-1:-1:-1;;;;;6846:20:4;;6767:106;5763:14;-1:-1:-1;;;;;5763:28:4;;5759:114;;5818:40;;-1:-1:-1;;;5818:40:4;;;;;;;;;;;5759:114;5886:20;:30;;-1:-1:-1;;;;;;5886:30:4;-1:-1:-1;;;;;5886:30:4;;;;;5713:214;5943:31;5960:4;5966:7;5943:16;:31::i;:::-;5936:38;;5611:370;;;;;:::o;3618:507:14:-;3345:5;-1:-1:-1;;;;;3765:26:14;;;-1:-1:-1;3761:173:14;;;3868:55;;-1:-1:-1;;;3868:55:14;;-1:-1:-1;;;;;5749:31:30;;3868:55:14;;;5731:50:30;5797:18;;;5790:34;;;5704:18;;3868:55:14;5558:272:30;3761:173:14;-1:-1:-1;;;;;3947:22:14;;3943:108;;3992:48;;-1:-1:-1;;;3992:48:14;;4037:1;3992:48;;;5496:51:30;5469:18;;3992:48:14;5350:203:30;3943:108:14;-1:-1:-1;4083:35:14;;;;;;;;;-1:-1:-1;;;;;4083:35:14;;;;;;-1:-1:-1;;;;;4083:35:14;;;;;;;;;;-1:-1:-1;;;4061:57:14;;;;:19;:57;3618:507::o;6145:316:0:-;6222:4;2920:12;;;:6;:12;;;;;;;;-1:-1:-1;;;;;2920:29:0;;;;;;;;;;;;6238:217;;6281:12;;;;:6;:12;;;;;;;;-1:-1:-1;;;;;6281:29:0;;;;;;;;;:36;;-1:-1:-1;;6281:36:0;6313:4;6281:36;;;6363:12;735:10:16;;656:96;6363:12:0;-1:-1:-1;;;;;6336:40:0;6354:7;-1:-1:-1;;;;;6336:40:0;6348:4;6336:40;;;;;;;;;;-1:-1:-1;6397:4:0;6390:11;;6238:217;-1:-1:-1;6439:5:0;6432:12;;14:127:30;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:723;200:5;253:3;246:4;238:6;234:17;230:27;220:55;;271:1;268;261:12;220:55;298:13;;-1:-1:-1;;;;;323:30:30;;320:56;;;356:18;;:::i;:::-;405:2;399:9;497:2;459:17;;-1:-1:-1;;455:31:30;;;488:2;451:40;447:54;435:67;;-1:-1:-1;;;;;517:34:30;;553:22;;;514:62;511:88;;;579:18;;:::i;:::-;615:2;608:22;639;;;680:19;;;701:4;676:30;673:39;-1:-1:-1;670:59:30;;;725:1;722;715:12;670:59;782:6;775:4;767:6;763:17;756:4;748:6;744:17;738:51;837:1;809:19;;;830:4;805:30;798:41;;;;813:6;146:723;-1:-1:-1;;;146:723:30:o;874:177::-;953:13;;-1:-1:-1;;;;;995:31:30;;985:42;;975:70;;1041:1;1038;1031:12;975:70;874:177;;;:::o;1056:175::-;1134:13;;-1:-1:-1;;;;;1176:30:30;;1166:41;;1156:69;;1221:1;1218;1211:12;1236:171;1314:13;;1367:14;1356:26;;1346:37;;1336:65;;1397:1;1394;1387:12;1412:1424;1592:6;1600;1608;1616;1624;1632;1640;1648;1656;1709:3;1697:9;1688:7;1684:23;1680:33;1677:53;;;1726:1;1723;1716:12;1677:53;1753:16;;-1:-1:-1;;;;;1781:30:30;;1778:50;;;1824:1;1821;1814:12;1778:50;1847:61;1900:7;1891:6;1880:9;1876:22;1847:61;:::i;:::-;1954:2;1939:18;;1933:25;1837:71;;-1:-1:-1;1933:25:30;-1:-1:-1;;;;;;1970:32:30;;1967:52;;;2015:1;2012;2005:12;1967:52;2038:63;2093:7;2082:8;2071:9;2067:24;2038:63;:::i;:::-;2147:2;2132:18;;2126:25;2028:73;;-1:-1:-1;2126:25:30;-1:-1:-1;;;;;;2163:32:30;;2160:52;;;2208:1;2205;2198:12;2160:52;2231:63;2286:7;2275:8;2264:9;2260:24;2231:63;:::i;:::-;2340:2;2325:18;;2319:25;2221:73;;-1:-1:-1;2319:25:30;-1:-1:-1;;;;;;2356:32:30;;2353:52;;;2401:1;2398;2391:12;2353:52;2424:63;2479:7;2468:8;2457:9;2453:24;2424:63;:::i;:::-;2414:73;;;2506:50;2551:3;2540:9;2536:19;2506:50;:::i;:::-;2496:60;;2575:49;2619:3;2608:9;2604:19;2575:49;:::i;:::-;2565:59;;2643:50;2688:3;2677:9;2673:19;2643:50;:::i;:::-;2633:60;;2712:50;2757:3;2746:9;2742:19;2712:50;:::i;:::-;2702:60;;2781:49;2825:3;2814:9;2810:19;2781:49;:::i;:::-;2771:59;;1412:1424;;;;;;;;;;;:::o;2841:380::-;2920:1;2916:12;;;;2963;;;2984:61;;3038:4;3030:6;3026:17;3016:27;;2984:61;3091:2;3083:6;3080:14;3060:18;3057:38;3054:161;;3137:10;3132:3;3128:20;3125:1;3118:31;3172:4;3169:1;3162:15;3200:4;3197:1;3190:15;3054:161;;2841:380;;;:::o;3352:518::-;3454:2;3449:3;3446:11;3443:421;;;3490:5;3487:1;3480:16;3534:4;3531:1;3521:18;3604:2;3592:10;3588:19;3585:1;3581:27;3575:4;3571:38;3640:4;3628:10;3625:20;3622:47;;;-1:-1:-1;3663:4:30;3622:47;3718:2;3713:3;3709:12;3706:1;3702:20;3696:4;3692:31;3682:41;;3773:81;3791:2;3784:5;3781:13;3773:81;;;3850:1;3836:16;;3817:1;3806:13;3773:81;;;3777:3;;3443:421;3352:518;;;:::o;4046:1299::-;4166:10;;-1:-1:-1;;;;;4188:30:30;;4185:56;;;4221:18;;:::i;:::-;4250:97;4340:6;4300:38;4332:4;4326:11;4300:38;:::i;:::-;4294:4;4250:97;:::i;:::-;4396:4;4427:2;4416:14;;4444:1;4439:649;;;;5132:1;5149:6;5146:89;;;-1:-1:-1;5201:19:30;;;5195:26;5146:89;-1:-1:-1;;4003:1:30;3999:11;;;3995:24;3991:29;3981:40;4027:1;4023:11;;;3978:57;5248:81;;4409:930;;4439:649;3299:1;3292:14;;;3336:4;3323:18;;-1:-1:-1;;4475:20:30;;;4593:222;4607:7;4604:1;4601:14;4593:222;;;4689:19;;;4683:26;4668:42;;4796:4;4781:20;;;;4749:1;4737:14;;;;4623:12;4593:222;;;4597:3;4843:6;4834:7;4831:19;4828:201;;;4904:19;;;4898:26;-1:-1:-1;;4987:1:30;4983:14;;;4999:3;4979:24;4975:37;4971:42;4956:58;4941:74;;4828:201;-1:-1:-1;;;;5075:1:30;5059:14;;;5055:22;5042:36;;-1:-1:-1;4046:1299:30:o;5558:272::-;678:6691:27;;;;;;"},"deployedBytecode":{"functionDebugData":{"@DEFAULT_ADMIN_ROLE_29":{"entryPoint":null,"id":29,"parameterSlots":0,"returnSlots":0},"@MINTER_ROLE_9437":{"entryPoint":null,"id":9437,"parameterSlots":0,"returnSlots":0},"@_acceptDefaultAdminTransfer_1139":{"entryPoint":5274,"id":1139,"parameterSlots":0,"returnSlots":0},"@_approve_2421":{"entryPoint":3852,"id":2421,"parameterSlots":3,"returnSlots":0},"@_approve_2487":{"entryPoint":5563,"id":2487,"parameterSlots":4,"returnSlots":0},"@_baseURI_9683":{"entryPoint":null,"id":9683,"parameterSlots":0,"returnSlots":1},"@_beginDefaultAdminTransfer_1047":{"entryPoint":4288,"id":1047,"parameterSlots":1,"returnSlots":0},"@_cancelDefaultAdminTransfer_1071":{"entryPoint":5460,"id":1071,"parameterSlots":0,"returnSlots":0},"@_changeDefaultAdminDelay_1182":{"entryPoint":4402,"id":1182,"parameterSlots":1,"returnSlots":0},"@_checkAuthorized_2061":{"entryPoint":6014,"id":2061,"parameterSlots":3,"returnSlots":0},"@_checkRole_114":{"entryPoint":5506,"id":114,"parameterSlots":2,"returnSlots":0},"@_checkRole_93":{"entryPoint":3624,"id":93,"parameterSlots":1,"returnSlots":0},"@_delayChangeWait_1234":{"entryPoint":6490,"id":1234,"parameterSlots":1,"returnSlots":1},"@_feeDenominator_2957":{"entryPoint":null,"id":2957,"parameterSlots":0,"returnSlots":1},"@_getApproved_1988":{"entryPoint":null,"id":1988,"parameterSlots":1,"returnSlots":1},"@_grantRole_256":{"entryPoint":6935,"id":256,"parameterSlots":2,"returnSlots":1},"@_grantRole_865":{"entryPoint":6114,"id":865,"parameterSlots":2,"returnSlots":1},"@_hasSchedulePassed_1330":{"entryPoint":null,"id":1330,"parameterSlots":1,"returnSlots":1},"@_isAuthorized_2024":{"entryPoint":6835,"id":2024,"parameterSlots":3,"returnSlots":1},"@_isScheduleSet_1316":{"entryPoint":null,"id":1316,"parameterSlots":1,"returnSlots":1},"@_mint_2217":{"entryPoint":7202,"id":2217,"parameterSlots":2,"returnSlots":0},"@_msgSender_3889":{"entryPoint":null,"id":3889,"parameterSlots":0,"returnSlots":1},"@_ownerOf_1975":{"entryPoint":null,"id":1975,"parameterSlots":1,"returnSlots":1},"@_pause_4050":{"entryPoint":4513,"id":4050,"parameterSlots":0,"returnSlots":0},"@_requireNotPaused_4021":{"entryPoint":4574,"id":4021,"parameterSlots":0,"returnSlots":0},"@_requireOwned_2568":{"entryPoint":3796,"id":2568,"parameterSlots":1,"returnSlots":1},"@_requirePaused_4034":{"entryPoint":6276,"id":4034,"parameterSlots":0,"returnSlots":0},"@_revokeRole_294":{"entryPoint":7080,"id":294,"parameterSlots":2,"returnSlots":1},"@_revokeRole_896":{"entryPoint":6216,"id":896,"parameterSlots":2,"returnSlots":1},"@_rollbackDefaultAdminDelay_1203":{"entryPoint":3865,"id":1203,"parameterSlots":0,"returnSlots":0},"@_safeMint_2232":{"entryPoint":4610,"id":2232,"parameterSlots":2,"returnSlots":0},"@_safeMint_2262":{"entryPoint":6561,"id":2262,"parameterSlots":3,"returnSlots":0},"@_setApprovalForAll_2539":{"entryPoint":4635,"id":2539,"parameterSlots":3,"returnSlots":0},"@_setDefaultRoyalty_3003":{"entryPoint":3634,"id":3003,"parameterSlots":2,"returnSlots":0},"@_setPendingDefaultAdmin_1264":{"entryPoint":6365,"id":1264,"parameterSlots":2,"returnSlots":0},"@_setPendingDelay_1303":{"entryPoint":5823,"id":1303,"parameterSlots":2,"returnSlots":0},"@_unpause_4066":{"entryPoint":4206,"id":4066,"parameterSlots":0,"returnSlots":0},"@_update_2167":{"entryPoint":3877,"id":2167,"parameterSlots":3,"returnSlots":1},"@acceptDefaultAdminTransfer_1095":{"entryPoint":3374,"id":1095,"parameterSlots":0,"returnSlots":0},"@approve_1818":{"entryPoint":1755,"id":1818,"parameterSlots":2,"returnSlots":0},"@balanceOf_1726":{"entryPoint":2615,"id":1726,"parameterSlots":1,"returnSlots":1},"@baseURI_9673":{"entryPoint":2600,"id":9673,"parameterSlots":0,"returnSlots":1},"@beginDefaultAdminTransfer_1019":{"entryPoint":2552,"id":1019,"parameterSlots":1,"returnSlots":0},"@cancelDefaultAdminTransfer_1058":{"entryPoint":3510,"id":1058,"parameterSlots":0,"returnSlots":0},"@changeDefaultAdminDelay_1153":{"entryPoint":2581,"id":1153,"parameterSlots":1,"returnSlots":0},"@checkOnERC721Received_2808":{"entryPoint":4834,"id":2808,"parameterSlots":5,"returnSlots":0},"@contractURI_9664":{"entryPoint":3528,"id":9664,"parameterSlots":0,"returnSlots":1},"@defaultAdminDelayIncreaseWait_1005":{"entryPoint":null,"id":1005,"parameterSlots":0,"returnSlots":1},"@defaultAdminDelay_966":{"entryPoint":3280,"id":966,"parameterSlots":0,"returnSlots":1},"@defaultAdmin_930":{"entryPoint":null,"id":930,"parameterSlots":0,"returnSlots":1},"@getApproved_1835":{"entryPoint":1716,"id":1835,"parameterSlots":1,"returnSlots":1},"@getRoleAdmin_128":{"entryPoint":null,"id":128,"parameterSlots":1,"returnSlots":1},"@grantRole_147":{"entryPoint":4119,"id":147,"parameterSlots":2,"returnSlots":0},"@grantRole_738":{"entryPoint":2064,"id":738,"parameterSlots":2,"returnSlots":0},"@hasRole_80":{"entryPoint":2726,"id":80,"parameterSlots":2,"returnSlots":1},"@isApprovedForAll_1868":{"entryPoint":3543,"id":1868,"parameterSlots":2,"returnSlots":1},"@log10_7318":{"entryPoint":6584,"id":7318,"parameterSlots":1,"returnSlots":1},"@min_6177":{"entryPoint":7187,"id":6177,"parameterSlots":2,"returnSlots":1},"@name_1748":{"entryPoint":1573,"id":1748,"parameterSlots":0,"returnSlots":1},"@ownerOf_1739":{"entryPoint":2571,"id":1739,"parameterSlots":1,"returnSlots":1},"@owner_711":{"entryPoint":2702,"id":711,"parameterSlots":0,"returnSlots":1},"@pause_9644":{"entryPoint":2684,"id":9644,"parameterSlots":0,"returnSlots":0},"@paused_4009":{"entryPoint":null,"id":4009,"parameterSlots":0,"returnSlots":1},"@pendingDefaultAdminDelay_996":{"entryPoint":3062,"id":996,"parameterSlots":0,"returnSlots":2},"@pendingDefaultAdmin_943":{"entryPoint":3437,"id":943,"parameterSlots":0,"returnSlots":2},"@renounceRole_189":{"entryPoint":4155,"id":189,"parameterSlots":2,"returnSlots":0},"@renounceRole_826":{"entryPoint":2104,"id":826,"parameterSlots":2,"returnSlots":0},"@revokeRole_166":{"entryPoint":5424,"id":166,"parameterSlots":2,"returnSlots":0},"@revokeRole_765":{"entryPoint":3470,"id":765,"parameterSlots":2,"returnSlots":0},"@rollbackDefaultAdminDelay_1193":{"entryPoint":1770,"id":1193,"parameterSlots":0,"returnSlots":0},"@royaltyInfo_2948":{"entryPoint":1933,"id":2948,"parameterSlots":2,"returnSlots":2},"@safeMint_9555":{"entryPoint":3002,"id":9555,"parameterSlots":2,"returnSlots":0},"@safeTransferFrom_1932":{"entryPoint":2288,"id":1932,"parameterSlots":3,"returnSlots":0},"@safeTransferFrom_1962":{"entryPoint":3155,"id":1962,"parameterSlots":4,"returnSlots":0},"@setApprovalForAll_1851":{"entryPoint":3144,"id":1851,"parameterSlots":2,"returnSlots":0},"@setBaseURI_9578":{"entryPoint":2319,"id":9578,"parameterSlots":2,"returnSlots":0},"@setContractURI_9601":{"entryPoint":2768,"id":9601,"parameterSlots":2,"returnSlots":0},"@setRoyaltyInfo_9633":{"entryPoint":1438,"id":9633,"parameterSlots":2,"returnSlots":0},"@supportsInterface_1698":{"entryPoint":7299,"id":1698,"parameterSlots":1,"returnSlots":1},"@supportsInterface_2886":{"entryPoint":6799,"id":2886,"parameterSlots":1,"returnSlots":1},"@supportsInterface_5837":{"entryPoint":null,"id":5837,"parameterSlots":1,"returnSlots":1},"@supportsInterface_62":{"entryPoint":5470,"id":62,"parameterSlots":1,"returnSlots":1},"@supportsInterface_701":{"entryPoint":3588,"id":701,"parameterSlots":1,"returnSlots":1},"@supportsInterface_9701":{"entryPoint":1422,"id":9701,"parameterSlots":1,"returnSlots":1},"@symbol_1757":{"entryPoint":2987,"id":1757,"parameterSlots":0,"returnSlots":1},"@ternary_6139":{"entryPoint":null,"id":6139,"parameterSlots":3,"returnSlots":1},"@toString_4397":{"entryPoint":5130,"id":4397,"parameterSlots":1,"returnSlots":1},"@toUint48_8262":{"entryPoint":6311,"id":8262,"parameterSlots":1,"returnSlots":1},"@toUint_9271":{"entryPoint":null,"id":9271,"parameterSlots":1,"returnSlots":1},"@tokenURI_1793":{"entryPoint":3179,"id":1793,"parameterSlots":1,"returnSlots":1},"@transferFrom_1914":{"entryPoint":1791,"id":1914,"parameterSlots":3,"returnSlots":0},"@unpause_9655":{"entryPoint":2270,"id":9655,"parameterSlots":0,"returnSlots":0},"abi_decode_address":{"entryPoint":7426,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":7886,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_address":{"entryPoint":8235,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_addresst_uint256":{"entryPoint":7644,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_addresst_addresst_uint256t_bytes_memory_ptr":{"entryPoint":8014,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_addresst_bool":{"entryPoint":7948,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_uint256":{"entryPoint":7604,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_uint96":{"entryPoint":7453,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_bytes32":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bytes32t_address":{"entryPoint":7734,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_bytes4":{"entryPoint":7399,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bytes4_fromMemory":{"entryPoint":8860,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_string_calldata_ptr":{"entryPoint":7776,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_uint256":{"entryPoint":7581,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256t_uint256":{"entryPoint":7702,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_uint48":{"entryPoint":7911,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_string":{"entryPoint":8727,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_string_memory_ptr":{"entryPoint":7517,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_packed_t_string_memory_ptr_t_string_memory_ptr__to_t_string_memory_ptr_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":8750,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_uint256_t_bytes_memory_ptr__to_t_address_t_address_t_uint256_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":8800,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_address_t_bytes32__to_t_address_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256_t_address__to_t_address_t_uint256_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_address_t_uint48__to_t_address_t_uint48__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_rational_48_by_1_t_uint256__to_t_uint8_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":7563,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr_t_string_calldata_ptr__to_t_string_memory_ptr_t_string_memory_ptr__fromStack_reversed":{"entryPoint":8659,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint48__to_t_uint48__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint48_t_uint48__to_t_uint48_t_uint48__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_uint96__to_t_uint96__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint96_t_uint256__to_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"array_dataslot_string_storage":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"checked_add_t_uint48":{"entryPoint":8770,"id":null,"parameterSlots":2,"returnSlots":1},"checked_div_t_uint256":{"entryPoint":8374,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_t_uint256":{"entryPoint":8351,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint48":{"entryPoint":8887,"id":null,"parameterSlots":2,"returnSlots":1},"clean_up_bytearray_end_slots_string_storage":{"entryPoint":8405,"id":null,"parameterSlots":3,"returnSlots":0},"copy_byte_array_to_storage_from_t_string_calldata_ptr_to_t_string_storage":{"entryPoint":8473,"id":null,"parameterSlots":3,"returnSlots":0},"extract_byte_array_length":{"entryPoint":8275,"id":null,"parameterSlots":1,"returnSlots":1},"extract_used_part_and_set_length_of_short_byte_array":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"panic_error_0x11":{"entryPoint":8331,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x12":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":7994,"id":null,"parameterSlots":0,"returnSlots":0},"validator_revert_bytes4":{"entryPoint":7378,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nativeSrc":"0:14817:30","nodeType":"YulBlock","src":"0:14817:30","statements":[{"nativeSrc":"6:3:30","nodeType":"YulBlock","src":"6:3:30","statements":[]},{"body":{"nativeSrc":"58:87:30","nodeType":"YulBlock","src":"58:87:30","statements":[{"body":{"nativeSrc":"123:16:30","nodeType":"YulBlock","src":"123:16:30","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"132:1:30","nodeType":"YulLiteral","src":"132:1:30","type":"","value":"0"},{"kind":"number","nativeSrc":"135:1:30","nodeType":"YulLiteral","src":"135:1:30","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"125:6:30","nodeType":"YulIdentifier","src":"125:6:30"},"nativeSrc":"125:12:30","nodeType":"YulFunctionCall","src":"125:12:30"},"nativeSrc":"125:12:30","nodeType":"YulExpressionStatement","src":"125:12:30"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"81:5:30","nodeType":"YulIdentifier","src":"81:5:30"},{"arguments":[{"name":"value","nativeSrc":"92:5:30","nodeType":"YulIdentifier","src":"92:5:30"},{"arguments":[{"kind":"number","nativeSrc":"103:3:30","nodeType":"YulLiteral","src":"103:3:30","type":"","value":"224"},{"kind":"number","nativeSrc":"108:10:30","nodeType":"YulLiteral","src":"108:10:30","type":"","value":"0xffffffff"}],"functionName":{"name":"shl","nativeSrc":"99:3:30","nodeType":"YulIdentifier","src":"99:3:30"},"nativeSrc":"99:20:30","nodeType":"YulFunctionCall","src":"99:20:30"}],"functionName":{"name":"and","nativeSrc":"88:3:30","nodeType":"YulIdentifier","src":"88:3:30"},"nativeSrc":"88:32:30","nodeType":"YulFunctionCall","src":"88:32:30"}],"functionName":{"name":"eq","nativeSrc":"78:2:30","nodeType":"YulIdentifier","src":"78:2:30"},"nativeSrc":"78:43:30","nodeType":"YulFunctionCall","src":"78:43:30"}],"functionName":{"name":"iszero","nativeSrc":"71:6:30","nodeType":"YulIdentifier","src":"71:6:30"},"nativeSrc":"71:51:30","nodeType":"YulFunctionCall","src":"71:51:30"},"nativeSrc":"68:71:30","nodeType":"YulIf","src":"68:71:30"}]},"name":"validator_revert_bytes4","nativeSrc":"14:131:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"47:5:30","nodeType":"YulTypedName","src":"47:5:30","type":""}],"src":"14:131:30"},{"body":{"nativeSrc":"219:176:30","nodeType":"YulBlock","src":"219:176:30","statements":[{"body":{"nativeSrc":"265:16:30","nodeType":"YulBlock","src":"265:16:30","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"274:1:30","nodeType":"YulLiteral","src":"274:1:30","type":"","value":"0"},{"kind":"number","nativeSrc":"277:1:30","nodeType":"YulLiteral","src":"277:1:30","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"267:6:30","nodeType":"YulIdentifier","src":"267:6:30"},"nativeSrc":"267:12:30","nodeType":"YulFunctionCall","src":"267:12:30"},"nativeSrc":"267:12:30","nodeType":"YulExpressionStatement","src":"267:12:30"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"240:7:30","nodeType":"YulIdentifier","src":"240:7:30"},{"name":"headStart","nativeSrc":"249:9:30","nodeType":"YulIdentifier","src":"249:9:30"}],"functionName":{"name":"sub","nativeSrc":"236:3:30","nodeType":"YulIdentifier","src":"236:3:30"},"nativeSrc":"236:23:30","nodeType":"YulFunctionCall","src":"236:23:30"},{"kind":"number","nativeSrc":"261:2:30","nodeType":"YulLiteral","src":"261:2:30","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"232:3:30","nodeType":"YulIdentifier","src":"232:3:30"},"nativeSrc":"232:32:30","nodeType":"YulFunctionCall","src":"232:32:30"},"nativeSrc":"229:52:30","nodeType":"YulIf","src":"229:52:30"},{"nativeSrc":"290:36:30","nodeType":"YulVariableDeclaration","src":"290:36:30","value":{"arguments":[{"name":"headStart","nativeSrc":"316:9:30","nodeType":"YulIdentifier","src":"316:9:30"}],"functionName":{"name":"calldataload","nativeSrc":"303:12:30","nodeType":"YulIdentifier","src":"303:12:30"},"nativeSrc":"303:23:30","nodeType":"YulFunctionCall","src":"303:23:30"},"variables":[{"name":"value","nativeSrc":"294:5:30","nodeType":"YulTypedName","src":"294:5:30","type":""}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"359:5:30","nodeType":"YulIdentifier","src":"359:5:30"}],"functionName":{"name":"validator_revert_bytes4","nativeSrc":"335:23:30","nodeType":"YulIdentifier","src":"335:23:30"},"nativeSrc":"335:30:30","nodeType":"YulFunctionCall","src":"335:30:30"},"nativeSrc":"335:30:30","nodeType":"YulExpressionStatement","src":"335:30:30"},{"nativeSrc":"374:15:30","nodeType":"YulAssignment","src":"374:15:30","value":{"name":"value","nativeSrc":"384:5:30","nodeType":"YulIdentifier","src":"384:5:30"},"variableNames":[{"name":"value0","nativeSrc":"374:6:30","nodeType":"YulIdentifier","src":"374:6:30"}]}]},"name":"abi_decode_tuple_t_bytes4","nativeSrc":"150:245:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"185:9:30","nodeType":"YulTypedName","src":"185:9:30","type":""},{"name":"dataEnd","nativeSrc":"196:7:30","nodeType":"YulTypedName","src":"196:7:30","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"208:6:30","nodeType":"YulTypedName","src":"208:6:30","type":""}],"src":"150:245:30"},{"body":{"nativeSrc":"495:92:30","nodeType":"YulBlock","src":"495:92:30","statements":[{"nativeSrc":"505:26:30","nodeType":"YulAssignment","src":"505:26:30","value":{"arguments":[{"name":"headStart","nativeSrc":"517:9:30","nodeType":"YulIdentifier","src":"517:9:30"},{"kind":"number","nativeSrc":"528:2:30","nodeType":"YulLiteral","src":"528:2:30","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"513:3:30","nodeType":"YulIdentifier","src":"513:3:30"},"nativeSrc":"513:18:30","nodeType":"YulFunctionCall","src":"513:18:30"},"variableNames":[{"name":"tail","nativeSrc":"505:4:30","nodeType":"YulIdentifier","src":"505:4:30"}]},{"expression":{"arguments":[{"name":"headStart","nativeSrc":"547:9:30","nodeType":"YulIdentifier","src":"547:9:30"},{"arguments":[{"arguments":[{"name":"value0","nativeSrc":"572:6:30","nodeType":"YulIdentifier","src":"572:6:30"}],"functionName":{"name":"iszero","nativeSrc":"565:6:30","nodeType":"YulIdentifier","src":"565:6:30"},"nativeSrc":"565:14:30","nodeType":"YulFunctionCall","src":"565:14:30"}],"functionName":{"name":"iszero","nativeSrc":"558:6:30","nodeType":"YulIdentifier","src":"558:6:30"},"nativeSrc":"558:22:30","nodeType":"YulFunctionCall","src":"558:22:30"}],"functionName":{"name":"mstore","nativeSrc":"540:6:30","nodeType":"YulIdentifier","src":"540:6:30"},"nativeSrc":"540:41:30","nodeType":"YulFunctionCall","src":"540:41:30"},"nativeSrc":"540:41:30","nodeType":"YulExpressionStatement","src":"540:41:30"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nativeSrc":"400:187:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"464:9:30","nodeType":"YulTypedName","src":"464:9:30","type":""},{"name":"value0","nativeSrc":"475:6:30","nodeType":"YulTypedName","src":"475:6:30","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"486:4:30","nodeType":"YulTypedName","src":"486:4:30","type":""}],"src":"400:187:30"},{"body":{"nativeSrc":"691:97:30","nodeType":"YulBlock","src":"691:97:30","statements":[{"nativeSrc":"701:26:30","nodeType":"YulAssignment","src":"701:26:30","value":{"arguments":[{"name":"headStart","nativeSrc":"713:9:30","nodeType":"YulIdentifier","src":"713:9:30"},{"kind":"number","nativeSrc":"724:2:30","nodeType":"YulLiteral","src":"724:2:30","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"709:3:30","nodeType":"YulIdentifier","src":"709:3:30"},"nativeSrc":"709:18:30","nodeType":"YulFunctionCall","src":"709:18:30"},"variableNames":[{"name":"tail","nativeSrc":"701:4:30","nodeType":"YulIdentifier","src":"701:4:30"}]},{"expression":{"arguments":[{"name":"headStart","nativeSrc":"743:9:30","nodeType":"YulIdentifier","src":"743:9:30"},{"arguments":[{"name":"value0","nativeSrc":"758:6:30","nodeType":"YulIdentifier","src":"758:6:30"},{"kind":"number","nativeSrc":"766:14:30","nodeType":"YulLiteral","src":"766:14:30","type":"","value":"0xffffffffffff"}],"functionName":{"name":"and","nativeSrc":"754:3:30","nodeType":"YulIdentifier","src":"754:3:30"},"nativeSrc":"754:27:30","nodeType":"YulFunctionCall","src":"754:27:30"}],"functionName":{"name":"mstore","nativeSrc":"736:6:30","nodeType":"YulIdentifier","src":"736:6:30"},"nativeSrc":"736:46:30","nodeType":"YulFunctionCall","src":"736:46:30"},"nativeSrc":"736:46:30","nodeType":"YulExpressionStatement","src":"736:46:30"}]},"name":"abi_encode_tuple_t_uint48__to_t_uint48__fromStack_reversed","nativeSrc":"592:196:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"660:9:30","nodeType":"YulTypedName","src":"660:9:30","type":""},{"name":"value0","nativeSrc":"671:6:30","nodeType":"YulTypedName","src":"671:6:30","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"682:4:30","nodeType":"YulTypedName","src":"682:4:30","type":""}],"src":"592:196:30"},{"body":{"nativeSrc":"842:124:30","nodeType":"YulBlock","src":"842:124:30","statements":[{"nativeSrc":"852:29:30","nodeType":"YulAssignment","src":"852:29:30","value":{"arguments":[{"name":"offset","nativeSrc":"874:6:30","nodeType":"YulIdentifier","src":"874:6:30"}],"functionName":{"name":"calldataload","nativeSrc":"861:12:30","nodeType":"YulIdentifier","src":"861:12:30"},"nativeSrc":"861:20:30","nodeType":"YulFunctionCall","src":"861:20:30"},"variableNames":[{"name":"value","nativeSrc":"852:5:30","nodeType":"YulIdentifier","src":"852:5:30"}]},{"body":{"nativeSrc":"944:16:30","nodeType":"YulBlock","src":"944:16:30","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"953:1:30","nodeType":"YulLiteral","src":"953:1:30","type":"","value":"0"},{"kind":"number","nativeSrc":"956:1:30","nodeType":"YulLiteral","src":"956:1:30","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"946:6:30","nodeType":"YulIdentifier","src":"946:6:30"},"nativeSrc":"946:12:30","nodeType":"YulFunctionCall","src":"946:12:30"},"nativeSrc":"946:12:30","nodeType":"YulExpressionStatement","src":"946:12:30"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"903:5:30","nodeType":"YulIdentifier","src":"903:5:30"},{"arguments":[{"name":"value","nativeSrc":"914:5:30","nodeType":"YulIdentifier","src":"914:5:30"},{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"929:3:30","nodeType":"YulLiteral","src":"929:3:30","type":"","value":"160"},{"kind":"number","nativeSrc":"934:1:30","nodeType":"YulLiteral","src":"934:1:30","type":"","value":"1"}],"functionName":{"name":"shl","nativeSrc":"925:3:30","nodeType":"YulIdentifier","src":"925:3:30"},"nativeSrc":"925:11:30","nodeType":"YulFunctionCall","src":"925:11:30"},{"kind":"number","nativeSrc":"938:1:30","nodeType":"YulLiteral","src":"938:1:30","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"921:3:30","nodeType":"YulIdentifier","src":"921:3:30"},"nativeSrc":"921:19:30","nodeType":"YulFunctionCall","src":"921:19:30"}],"functionName":{"name":"and","nativeSrc":"910:3:30","nodeType":"YulIdentifier","src":"910:3:30"},"nativeSrc":"910:31:30","nodeType":"YulFunctionCall","src":"910:31:30"}],"functionName":{"name":"eq","nativeSrc":"900:2:30","nodeType":"YulIdentifier","src":"900:2:30"},"nativeSrc":"900:42:30","nodeType":"YulFunctionCall","src":"900:42:30"}],"functionName":{"name":"iszero","nativeSrc":"893:6:30","nodeType":"YulIdentifier","src":"893:6:30"},"nativeSrc":"893:50:30","nodeType":"YulFunctionCall","src":"893:50:30"},"nativeSrc":"890:70:30","nodeType":"YulIf","src":"890:70:30"}]},"name":"abi_decode_address","nativeSrc":"793:173:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"821:6:30","nodeType":"YulTypedName","src":"821:6:30","type":""}],"returnVariables":[{"name":"value","nativeSrc":"832:5:30","nodeType":"YulTypedName","src":"832:5:30","type":""}],"src":"793:173:30"},{"body":{"nativeSrc":"1057:280:30","nodeType":"YulBlock","src":"1057:280:30","statements":[{"body":{"nativeSrc":"1103:16:30","nodeType":"YulBlock","src":"1103:16:30","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"1112:1:30","nodeType":"YulLiteral","src":"1112:1:30","type":"","value":"0"},{"kind":"number","nativeSrc":"1115:1:30","nodeType":"YulLiteral","src":"1115:1:30","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"1105:6:30","nodeType":"YulIdentifier","src":"1105:6:30"},"nativeSrc":"1105:12:30","nodeType":"YulFunctionCall","src":"1105:12:30"},"nativeSrc":"1105:12:30","nodeType":"YulExpressionStatement","src":"1105:12:30"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"1078:7:30","nodeType":"YulIdentifier","src":"1078:7:30"},{"name":"headStart","nativeSrc":"1087:9:30","nodeType":"YulIdentifier","src":"1087:9:30"}],"functionName":{"name":"sub","nativeSrc":"1074:3:30","nodeType":"YulIdentifier","src":"1074:3:30"},"nativeSrc":"1074:23:30","nodeType":"YulFunctionCall","src":"1074:23:30"},{"kind":"number","nativeSrc":"1099:2:30","nodeType":"YulLiteral","src":"1099:2:30","type":"","value":"64"}],"functionName":{"name":"slt","nativeSrc":"1070:3:30","nodeType":"YulIdentifier","src":"1070:3:30"},"nativeSrc":"1070:32:30","nodeType":"YulFunctionCall","src":"1070:32:30"},"nativeSrc":"1067:52:30","nodeType":"YulIf","src":"1067:52:30"},{"nativeSrc":"1128:39:30","nodeType":"YulAssignment","src":"1128:39:30","value":{"arguments":[{"name":"headStart","nativeSrc":"1157:9:30","nodeType":"YulIdentifier","src":"1157:9:30"}],"functionName":{"name":"abi_decode_address","nativeSrc":"1138:18:30","nodeType":"YulIdentifier","src":"1138:18:30"},"nativeSrc":"1138:29:30","nodeType":"YulFunctionCall","src":"1138:29:30"},"variableNames":[{"name":"value0","nativeSrc":"1128:6:30","nodeType":"YulIdentifier","src":"1128:6:30"}]},{"nativeSrc":"1176:45:30","nodeType":"YulVariableDeclaration","src":"1176:45:30","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"1206:9:30","nodeType":"YulIdentifier","src":"1206:9:30"},{"kind":"number","nativeSrc":"1217:2:30","nodeType":"YulLiteral","src":"1217:2:30","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"1202:3:30","nodeType":"YulIdentifier","src":"1202:3:30"},"nativeSrc":"1202:18:30","nodeType":"YulFunctionCall","src":"1202:18:30"}],"functionName":{"name":"calldataload","nativeSrc":"1189:12:30","nodeType":"YulIdentifier","src":"1189:12:30"},"nativeSrc":"1189:32:30","nodeType":"YulFunctionCall","src":"1189:32:30"},"variables":[{"name":"value","nativeSrc":"1180:5:30","nodeType":"YulTypedName","src":"1180:5:30","type":""}]},{"body":{"nativeSrc":"1291:16:30","nodeType":"YulBlock","src":"1291:16:30","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"1300:1:30","nodeType":"YulLiteral","src":"1300:1:30","type":"","value":"0"},{"kind":"number","nativeSrc":"1303:1:30","nodeType":"YulLiteral","src":"1303:1:30","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"1293:6:30","nodeType":"YulIdentifier","src":"1293:6:30"},"nativeSrc":"1293:12:30","nodeType":"YulFunctionCall","src":"1293:12:30"},"nativeSrc":"1293:12:30","nodeType":"YulExpressionStatement","src":"1293:12:30"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"1243:5:30","nodeType":"YulIdentifier","src":"1243:5:30"},{"arguments":[{"name":"value","nativeSrc":"1254:5:30","nodeType":"YulIdentifier","src":"1254:5:30"},{"kind":"number","nativeSrc":"1261:26:30","nodeType":"YulLiteral","src":"1261:26:30","type":"","value":"0xffffffffffffffffffffffff"}],"functionName":{"name":"and","nativeSrc":"1250:3:30","nodeType":"YulIdentifier","src":"1250:3:30"},"nativeSrc":"1250:38:30","nodeType":"YulFunctionCall","src":"1250:38:30"}],"functionName":{"name":"eq","nativeSrc":"1240:2:30","nodeType":"YulIdentifier","src":"1240:2:30"},"nativeSrc":"1240:49:30","nodeType":"YulFunctionCall","src":"1240:49:30"}],"functionName":{"name":"iszero","nativeSrc":"1233:6:30","nodeType":"YulIdentifier","src":"1233:6:30"},"nativeSrc":"1233:57:30","nodeType":"YulFunctionCall","src":"1233:57:30"},"nativeSrc":"1230:77:30","nodeType":"YulIf","src":"1230:77:30"},{"nativeSrc":"1316:15:30","nodeType":"YulAssignment","src":"1316:15:30","value":{"name":"value","nativeSrc":"1326:5:30","nodeType":"YulIdentifier","src":"1326:5:30"},"variableNames":[{"name":"value1","nativeSrc":"1316:6:30","nodeType":"YulIdentifier","src":"1316:6:30"}]}]},"name":"abi_decode_tuple_t_addresst_uint96","nativeSrc":"971:366:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"1015:9:30","nodeType":"YulTypedName","src":"1015:9:30","type":""},{"name":"dataEnd","nativeSrc":"1026:7:30","nodeType":"YulTypedName","src":"1026:7:30","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"1038:6:30","nodeType":"YulTypedName","src":"1038:6:30","type":""},{"name":"value1","nativeSrc":"1046:6:30","nodeType":"YulTypedName","src":"1046:6:30","type":""}],"src":"971:366:30"},{"body":{"nativeSrc":"1403:239:30","nodeType":"YulBlock","src":"1403:239:30","statements":[{"nativeSrc":"1413:26:30","nodeType":"YulVariableDeclaration","src":"1413:26:30","value":{"arguments":[{"name":"value","nativeSrc":"1433:5:30","nodeType":"YulIdentifier","src":"1433:5:30"}],"functionName":{"name":"mload","nativeSrc":"1427:5:30","nodeType":"YulIdentifier","src":"1427:5:30"},"nativeSrc":"1427:12:30","nodeType":"YulFunctionCall","src":"1427:12:30"},"variables":[{"name":"length","nativeSrc":"1417:6:30","nodeType":"YulTypedName","src":"1417:6:30","type":""}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"1455:3:30","nodeType":"YulIdentifier","src":"1455:3:30"},{"name":"length","nativeSrc":"1460:6:30","nodeType":"YulIdentifier","src":"1460:6:30"}],"functionName":{"name":"mstore","nativeSrc":"1448:6:30","nodeType":"YulIdentifier","src":"1448:6:30"},"nativeSrc":"1448:19:30","nodeType":"YulFunctionCall","src":"1448:19:30"},"nativeSrc":"1448:19:30","nodeType":"YulExpressionStatement","src":"1448:19:30"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nativeSrc":"1486:3:30","nodeType":"YulIdentifier","src":"1486:3:30"},{"kind":"number","nativeSrc":"1491:4:30","nodeType":"YulLiteral","src":"1491:4:30","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"1482:3:30","nodeType":"YulIdentifier","src":"1482:3:30"},"nativeSrc":"1482:14:30","nodeType":"YulFunctionCall","src":"1482:14:30"},{"arguments":[{"name":"value","nativeSrc":"1502:5:30","nodeType":"YulIdentifier","src":"1502:5:30"},{"kind":"number","nativeSrc":"1509:4:30","nodeType":"YulLiteral","src":"1509:4:30","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"1498:3:30","nodeType":"YulIdentifier","src":"1498:3:30"},"nativeSrc":"1498:16:30","nodeType":"YulFunctionCall","src":"1498:16:30"},{"name":"length","nativeSrc":"1516:6:30","nodeType":"YulIdentifier","src":"1516:6:30"}],"functionName":{"name":"mcopy","nativeSrc":"1476:5:30","nodeType":"YulIdentifier","src":"1476:5:30"},"nativeSrc":"1476:47:30","nodeType":"YulFunctionCall","src":"1476:47:30"},"nativeSrc":"1476:47:30","nodeType":"YulExpressionStatement","src":"1476:47:30"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nativeSrc":"1547:3:30","nodeType":"YulIdentifier","src":"1547:3:30"},{"name":"length","nativeSrc":"1552:6:30","nodeType":"YulIdentifier","src":"1552:6:30"}],"functionName":{"name":"add","nativeSrc":"1543:3:30","nodeType":"YulIdentifier","src":"1543:3:30"},"nativeSrc":"1543:16:30","nodeType":"YulFunctionCall","src":"1543:16:30"},{"kind":"number","nativeSrc":"1561:4:30","nodeType":"YulLiteral","src":"1561:4:30","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"1539:3:30","nodeType":"YulIdentifier","src":"1539:3:30"},"nativeSrc":"1539:27:30","nodeType":"YulFunctionCall","src":"1539:27:30"},{"kind":"number","nativeSrc":"1568:1:30","nodeType":"YulLiteral","src":"1568:1:30","type":"","value":"0"}],"functionName":{"name":"mstore","nativeSrc":"1532:6:30","nodeType":"YulIdentifier","src":"1532:6:30"},"nativeSrc":"1532:38:30","nodeType":"YulFunctionCall","src":"1532:38:30"},"nativeSrc":"1532:38:30","nodeType":"YulExpressionStatement","src":"1532:38:30"},{"nativeSrc":"1579:57:30","nodeType":"YulAssignment","src":"1579:57:30","value":{"arguments":[{"arguments":[{"name":"pos","nativeSrc":"1594:3:30","nodeType":"YulIdentifier","src":"1594:3:30"},{"arguments":[{"arguments":[{"name":"length","nativeSrc":"1607:6:30","nodeType":"YulIdentifier","src":"1607:6:30"},{"kind":"number","nativeSrc":"1615:2:30","nodeType":"YulLiteral","src":"1615:2:30","type":"","value":"31"}],"functionName":{"name":"add","nativeSrc":"1603:3:30","nodeType":"YulIdentifier","src":"1603:3:30"},"nativeSrc":"1603:15:30","nodeType":"YulFunctionCall","src":"1603:15:30"},{"arguments":[{"kind":"number","nativeSrc":"1624:2:30","nodeType":"YulLiteral","src":"1624:2:30","type":"","value":"31"}],"functionName":{"name":"not","nativeSrc":"1620:3:30","nodeType":"YulIdentifier","src":"1620:3:30"},"nativeSrc":"1620:7:30","nodeType":"YulFunctionCall","src":"1620:7:30"}],"functionName":{"name":"and","nativeSrc":"1599:3:30","nodeType":"YulIdentifier","src":"1599:3:30"},"nativeSrc":"1599:29:30","nodeType":"YulFunctionCall","src":"1599:29:30"}],"functionName":{"name":"add","nativeSrc":"1590:3:30","nodeType":"YulIdentifier","src":"1590:3:30"},"nativeSrc":"1590:39:30","nodeType":"YulFunctionCall","src":"1590:39:30"},{"kind":"number","nativeSrc":"1631:4:30","nodeType":"YulLiteral","src":"1631:4:30","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"1586:3:30","nodeType":"YulIdentifier","src":"1586:3:30"},"nativeSrc":"1586:50:30","nodeType":"YulFunctionCall","src":"1586:50:30"},"variableNames":[{"name":"end","nativeSrc":"1579:3:30","nodeType":"YulIdentifier","src":"1579:3:30"}]}]},"name":"abi_encode_string_memory_ptr","nativeSrc":"1342:300:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"1380:5:30","nodeType":"YulTypedName","src":"1380:5:30","type":""},{"name":"pos","nativeSrc":"1387:3:30","nodeType":"YulTypedName","src":"1387:3:30","type":""}],"returnVariables":[{"name":"end","nativeSrc":"1395:3:30","nodeType":"YulTypedName","src":"1395:3:30","type":""}],"src":"1342:300:30"},{"body":{"nativeSrc":"1768:110:30","nodeType":"YulBlock","src":"1768:110:30","statements":[{"expression":{"arguments":[{"name":"headStart","nativeSrc":"1785:9:30","nodeType":"YulIdentifier","src":"1785:9:30"},{"kind":"number","nativeSrc":"1796:2:30","nodeType":"YulLiteral","src":"1796:2:30","type":"","value":"32"}],"functionName":{"name":"mstore","nativeSrc":"1778:6:30","nodeType":"YulIdentifier","src":"1778:6:30"},"nativeSrc":"1778:21:30","nodeType":"YulFunctionCall","src":"1778:21:30"},"nativeSrc":"1778:21:30","nodeType":"YulExpressionStatement","src":"1778:21:30"},{"nativeSrc":"1808:64:30","nodeType":"YulAssignment","src":"1808:64:30","value":{"arguments":[{"name":"value0","nativeSrc":"1845:6:30","nodeType":"YulIdentifier","src":"1845:6:30"},{"arguments":[{"name":"headStart","nativeSrc":"1857:9:30","nodeType":"YulIdentifier","src":"1857:9:30"},{"kind":"number","nativeSrc":"1868:2:30","nodeType":"YulLiteral","src":"1868:2:30","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"1853:3:30","nodeType":"YulIdentifier","src":"1853:3:30"},"nativeSrc":"1853:18:30","nodeType":"YulFunctionCall","src":"1853:18:30"}],"functionName":{"name":"abi_encode_string_memory_ptr","nativeSrc":"1816:28:30","nodeType":"YulIdentifier","src":"1816:28:30"},"nativeSrc":"1816:56:30","nodeType":"YulFunctionCall","src":"1816:56:30"},"variableNames":[{"name":"tail","nativeSrc":"1808:4:30","nodeType":"YulIdentifier","src":"1808:4:30"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"1647:231:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"1737:9:30","nodeType":"YulTypedName","src":"1737:9:30","type":""},{"name":"value0","nativeSrc":"1748:6:30","nodeType":"YulTypedName","src":"1748:6:30","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"1759:4:30","nodeType":"YulTypedName","src":"1759:4:30","type":""}],"src":"1647:231:30"},{"body":{"nativeSrc":"1953:156:30","nodeType":"YulBlock","src":"1953:156:30","statements":[{"body":{"nativeSrc":"1999:16:30","nodeType":"YulBlock","src":"1999:16:30","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"2008:1:30","nodeType":"YulLiteral","src":"2008:1:30","type":"","value":"0"},{"kind":"number","nativeSrc":"2011:1:30","nodeType":"YulLiteral","src":"2011:1:30","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"2001:6:30","nodeType":"YulIdentifier","src":"2001:6:30"},"nativeSrc":"2001:12:30","nodeType":"YulFunctionCall","src":"2001:12:30"},"nativeSrc":"2001:12:30","nodeType":"YulExpressionStatement","src":"2001:12:30"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"1974:7:30","nodeType":"YulIdentifier","src":"1974:7:30"},{"name":"headStart","nativeSrc":"1983:9:30","nodeType":"YulIdentifier","src":"1983:9:30"}],"functionName":{"name":"sub","nativeSrc":"1970:3:30","nodeType":"YulIdentifier","src":"1970:3:30"},"nativeSrc":"1970:23:30","nodeType":"YulFunctionCall","src":"1970:23:30"},{"kind":"number","nativeSrc":"1995:2:30","nodeType":"YulLiteral","src":"1995:2:30","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"1966:3:30","nodeType":"YulIdentifier","src":"1966:3:30"},"nativeSrc":"1966:32:30","nodeType":"YulFunctionCall","src":"1966:32:30"},"nativeSrc":"1963:52:30","nodeType":"YulIf","src":"1963:52:30"},{"nativeSrc":"2024:14:30","nodeType":"YulVariableDeclaration","src":"2024:14:30","value":{"kind":"number","nativeSrc":"2037:1:30","nodeType":"YulLiteral","src":"2037:1:30","type":"","value":"0"},"variables":[{"name":"value","nativeSrc":"2028:5:30","nodeType":"YulTypedName","src":"2028:5:30","type":""}]},{"nativeSrc":"2047:32:30","nodeType":"YulAssignment","src":"2047:32:30","value":{"arguments":[{"name":"headStart","nativeSrc":"2069:9:30","nodeType":"YulIdentifier","src":"2069:9:30"}],"functionName":{"name":"calldataload","nativeSrc":"2056:12:30","nodeType":"YulIdentifier","src":"2056:12:30"},"nativeSrc":"2056:23:30","nodeType":"YulFunctionCall","src":"2056:23:30"},"variableNames":[{"name":"value","nativeSrc":"2047:5:30","nodeType":"YulIdentifier","src":"2047:5:30"}]},{"nativeSrc":"2088:15:30","nodeType":"YulAssignment","src":"2088:15:30","value":{"name":"value","nativeSrc":"2098:5:30","nodeType":"YulIdentifier","src":"2098:5:30"},"variableNames":[{"name":"value0","nativeSrc":"2088:6:30","nodeType":"YulIdentifier","src":"2088:6:30"}]}]},"name":"abi_decode_tuple_t_uint256","nativeSrc":"1883:226:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"1919:9:30","nodeType":"YulTypedName","src":"1919:9:30","type":""},{"name":"dataEnd","nativeSrc":"1930:7:30","nodeType":"YulTypedName","src":"1930:7:30","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"1942:6:30","nodeType":"YulTypedName","src":"1942:6:30","type":""}],"src":"1883:226:30"},{"body":{"nativeSrc":"2215:102:30","nodeType":"YulBlock","src":"2215:102:30","statements":[{"nativeSrc":"2225:26:30","nodeType":"YulAssignment","src":"2225:26:30","value":{"arguments":[{"name":"headStart","nativeSrc":"2237:9:30","nodeType":"YulIdentifier","src":"2237:9:30"},{"kind":"number","nativeSrc":"2248:2:30","nodeType":"YulLiteral","src":"2248:2:30","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"2233:3:30","nodeType":"YulIdentifier","src":"2233:3:30"},"nativeSrc":"2233:18:30","nodeType":"YulFunctionCall","src":"2233:18:30"},"variableNames":[{"name":"tail","nativeSrc":"2225:4:30","nodeType":"YulIdentifier","src":"2225:4:30"}]},{"expression":{"arguments":[{"name":"headStart","nativeSrc":"2267:9:30","nodeType":"YulIdentifier","src":"2267:9:30"},{"arguments":[{"name":"value0","nativeSrc":"2282:6:30","nodeType":"YulIdentifier","src":"2282:6:30"},{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"2298:3:30","nodeType":"YulLiteral","src":"2298:3:30","type":"","value":"160"},{"kind":"number","nativeSrc":"2303:1:30","nodeType":"YulLiteral","src":"2303:1:30","type":"","value":"1"}],"functionName":{"name":"shl","nativeSrc":"2294:3:30","nodeType":"YulIdentifier","src":"2294:3:30"},"nativeSrc":"2294:11:30","nodeType":"YulFunctionCall","src":"2294:11:30"},{"kind":"number","nativeSrc":"2307:1:30","nodeType":"YulLiteral","src":"2307:1:30","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"2290:3:30","nodeType":"YulIdentifier","src":"2290:3:30"},"nativeSrc":"2290:19:30","nodeType":"YulFunctionCall","src":"2290:19:30"}],"functionName":{"name":"and","nativeSrc":"2278:3:30","nodeType":"YulIdentifier","src":"2278:3:30"},"nativeSrc":"2278:32:30","nodeType":"YulFunctionCall","src":"2278:32:30"}],"functionName":{"name":"mstore","nativeSrc":"2260:6:30","nodeType":"YulIdentifier","src":"2260:6:30"},"nativeSrc":"2260:51:30","nodeType":"YulFunctionCall","src":"2260:51:30"},"nativeSrc":"2260:51:30","nodeType":"YulExpressionStatement","src":"2260:51:30"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nativeSrc":"2114:203:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"2184:9:30","nodeType":"YulTypedName","src":"2184:9:30","type":""},{"name":"value0","nativeSrc":"2195:6:30","nodeType":"YulTypedName","src":"2195:6:30","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"2206:4:30","nodeType":"YulTypedName","src":"2206:4:30","type":""}],"src":"2114:203:30"},{"body":{"nativeSrc":"2409:213:30","nodeType":"YulBlock","src":"2409:213:30","statements":[{"body":{"nativeSrc":"2455:16:30","nodeType":"YulBlock","src":"2455:16:30","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"2464:1:30","nodeType":"YulLiteral","src":"2464:1:30","type":"","value":"0"},{"kind":"number","nativeSrc":"2467:1:30","nodeType":"YulLiteral","src":"2467:1:30","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"2457:6:30","nodeType":"YulIdentifier","src":"2457:6:30"},"nativeSrc":"2457:12:30","nodeType":"YulFunctionCall","src":"2457:12:30"},"nativeSrc":"2457:12:30","nodeType":"YulExpressionStatement","src":"2457:12:30"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"2430:7:30","nodeType":"YulIdentifier","src":"2430:7:30"},{"name":"headStart","nativeSrc":"2439:9:30","nodeType":"YulIdentifier","src":"2439:9:30"}],"functionName":{"name":"sub","nativeSrc":"2426:3:30","nodeType":"YulIdentifier","src":"2426:3:30"},"nativeSrc":"2426:23:30","nodeType":"YulFunctionCall","src":"2426:23:30"},{"kind":"number","nativeSrc":"2451:2:30","nodeType":"YulLiteral","src":"2451:2:30","type":"","value":"64"}],"functionName":{"name":"slt","nativeSrc":"2422:3:30","nodeType":"YulIdentifier","src":"2422:3:30"},"nativeSrc":"2422:32:30","nodeType":"YulFunctionCall","src":"2422:32:30"},"nativeSrc":"2419:52:30","nodeType":"YulIf","src":"2419:52:30"},{"nativeSrc":"2480:39:30","nodeType":"YulAssignment","src":"2480:39:30","value":{"arguments":[{"name":"headStart","nativeSrc":"2509:9:30","nodeType":"YulIdentifier","src":"2509:9:30"}],"functionName":{"name":"abi_decode_address","nativeSrc":"2490:18:30","nodeType":"YulIdentifier","src":"2490:18:30"},"nativeSrc":"2490:29:30","nodeType":"YulFunctionCall","src":"2490:29:30"},"variableNames":[{"name":"value0","nativeSrc":"2480:6:30","nodeType":"YulIdentifier","src":"2480:6:30"}]},{"nativeSrc":"2528:14:30","nodeType":"YulVariableDeclaration","src":"2528:14:30","value":{"kind":"number","nativeSrc":"2541:1:30","nodeType":"YulLiteral","src":"2541:1:30","type":"","value":"0"},"variables":[{"name":"value","nativeSrc":"2532:5:30","nodeType":"YulTypedName","src":"2532:5:30","type":""}]},{"nativeSrc":"2551:41:30","nodeType":"YulAssignment","src":"2551:41:30","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"2577:9:30","nodeType":"YulIdentifier","src":"2577:9:30"},{"kind":"number","nativeSrc":"2588:2:30","nodeType":"YulLiteral","src":"2588:2:30","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"2573:3:30","nodeType":"YulIdentifier","src":"2573:3:30"},"nativeSrc":"2573:18:30","nodeType":"YulFunctionCall","src":"2573:18:30"}],"functionName":{"name":"calldataload","nativeSrc":"2560:12:30","nodeType":"YulIdentifier","src":"2560:12:30"},"nativeSrc":"2560:32:30","nodeType":"YulFunctionCall","src":"2560:32:30"},"variableNames":[{"name":"value","nativeSrc":"2551:5:30","nodeType":"YulIdentifier","src":"2551:5:30"}]},{"nativeSrc":"2601:15:30","nodeType":"YulAssignment","src":"2601:15:30","value":{"name":"value","nativeSrc":"2611:5:30","nodeType":"YulIdentifier","src":"2611:5:30"},"variableNames":[{"name":"value1","nativeSrc":"2601:6:30","nodeType":"YulIdentifier","src":"2601:6:30"}]}]},"name":"abi_decode_tuple_t_addresst_uint256","nativeSrc":"2322:300:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"2367:9:30","nodeType":"YulTypedName","src":"2367:9:30","type":""},{"name":"dataEnd","nativeSrc":"2378:7:30","nodeType":"YulTypedName","src":"2378:7:30","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"2390:6:30","nodeType":"YulTypedName","src":"2390:6:30","type":""},{"name":"value1","nativeSrc":"2398:6:30","nodeType":"YulTypedName","src":"2398:6:30","type":""}],"src":"2322:300:30"},{"body":{"nativeSrc":"2731:270:30","nodeType":"YulBlock","src":"2731:270:30","statements":[{"body":{"nativeSrc":"2777:16:30","nodeType":"YulBlock","src":"2777:16:30","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"2786:1:30","nodeType":"YulLiteral","src":"2786:1:30","type":"","value":"0"},{"kind":"number","nativeSrc":"2789:1:30","nodeType":"YulLiteral","src":"2789:1:30","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"2779:6:30","nodeType":"YulIdentifier","src":"2779:6:30"},"nativeSrc":"2779:12:30","nodeType":"YulFunctionCall","src":"2779:12:30"},"nativeSrc":"2779:12:30","nodeType":"YulExpressionStatement","src":"2779:12:30"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"2752:7:30","nodeType":"YulIdentifier","src":"2752:7:30"},{"name":"headStart","nativeSrc":"2761:9:30","nodeType":"YulIdentifier","src":"2761:9:30"}],"functionName":{"name":"sub","nativeSrc":"2748:3:30","nodeType":"YulIdentifier","src":"2748:3:30"},"nativeSrc":"2748:23:30","nodeType":"YulFunctionCall","src":"2748:23:30"},{"kind":"number","nativeSrc":"2773:2:30","nodeType":"YulLiteral","src":"2773:2:30","type":"","value":"96"}],"functionName":{"name":"slt","nativeSrc":"2744:3:30","nodeType":"YulIdentifier","src":"2744:3:30"},"nativeSrc":"2744:32:30","nodeType":"YulFunctionCall","src":"2744:32:30"},"nativeSrc":"2741:52:30","nodeType":"YulIf","src":"2741:52:30"},{"nativeSrc":"2802:39:30","nodeType":"YulAssignment","src":"2802:39:30","value":{"arguments":[{"name":"headStart","nativeSrc":"2831:9:30","nodeType":"YulIdentifier","src":"2831:9:30"}],"functionName":{"name":"abi_decode_address","nativeSrc":"2812:18:30","nodeType":"YulIdentifier","src":"2812:18:30"},"nativeSrc":"2812:29:30","nodeType":"YulFunctionCall","src":"2812:29:30"},"variableNames":[{"name":"value0","nativeSrc":"2802:6:30","nodeType":"YulIdentifier","src":"2802:6:30"}]},{"nativeSrc":"2850:48:30","nodeType":"YulAssignment","src":"2850:48:30","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"2883:9:30","nodeType":"YulIdentifier","src":"2883:9:30"},{"kind":"number","nativeSrc":"2894:2:30","nodeType":"YulLiteral","src":"2894:2:30","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"2879:3:30","nodeType":"YulIdentifier","src":"2879:3:30"},"nativeSrc":"2879:18:30","nodeType":"YulFunctionCall","src":"2879:18:30"}],"functionName":{"name":"abi_decode_address","nativeSrc":"2860:18:30","nodeType":"YulIdentifier","src":"2860:18:30"},"nativeSrc":"2860:38:30","nodeType":"YulFunctionCall","src":"2860:38:30"},"variableNames":[{"name":"value1","nativeSrc":"2850:6:30","nodeType":"YulIdentifier","src":"2850:6:30"}]},{"nativeSrc":"2907:14:30","nodeType":"YulVariableDeclaration","src":"2907:14:30","value":{"kind":"number","nativeSrc":"2920:1:30","nodeType":"YulLiteral","src":"2920:1:30","type":"","value":"0"},"variables":[{"name":"value","nativeSrc":"2911:5:30","nodeType":"YulTypedName","src":"2911:5:30","type":""}]},{"nativeSrc":"2930:41:30","nodeType":"YulAssignment","src":"2930:41:30","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"2956:9:30","nodeType":"YulIdentifier","src":"2956:9:30"},{"kind":"number","nativeSrc":"2967:2:30","nodeType":"YulLiteral","src":"2967:2:30","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"2952:3:30","nodeType":"YulIdentifier","src":"2952:3:30"},"nativeSrc":"2952:18:30","nodeType":"YulFunctionCall","src":"2952:18:30"}],"functionName":{"name":"calldataload","nativeSrc":"2939:12:30","nodeType":"YulIdentifier","src":"2939:12:30"},"nativeSrc":"2939:32:30","nodeType":"YulFunctionCall","src":"2939:32:30"},"variableNames":[{"name":"value","nativeSrc":"2930:5:30","nodeType":"YulIdentifier","src":"2930:5:30"}]},{"nativeSrc":"2980:15:30","nodeType":"YulAssignment","src":"2980:15:30","value":{"name":"value","nativeSrc":"2990:5:30","nodeType":"YulIdentifier","src":"2990:5:30"},"variableNames":[{"name":"value2","nativeSrc":"2980:6:30","nodeType":"YulIdentifier","src":"2980:6:30"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256","nativeSrc":"2627:374:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"2681:9:30","nodeType":"YulTypedName","src":"2681:9:30","type":""},{"name":"dataEnd","nativeSrc":"2692:7:30","nodeType":"YulTypedName","src":"2692:7:30","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"2704:6:30","nodeType":"YulTypedName","src":"2704:6:30","type":""},{"name":"value1","nativeSrc":"2712:6:30","nodeType":"YulTypedName","src":"2712:6:30","type":""},{"name":"value2","nativeSrc":"2720:6:30","nodeType":"YulTypedName","src":"2720:6:30","type":""}],"src":"2627:374:30"},{"body":{"nativeSrc":"3076:156:30","nodeType":"YulBlock","src":"3076:156:30","statements":[{"body":{"nativeSrc":"3122:16:30","nodeType":"YulBlock","src":"3122:16:30","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"3131:1:30","nodeType":"YulLiteral","src":"3131:1:30","type":"","value":"0"},{"kind":"number","nativeSrc":"3134:1:30","nodeType":"YulLiteral","src":"3134:1:30","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"3124:6:30","nodeType":"YulIdentifier","src":"3124:6:30"},"nativeSrc":"3124:12:30","nodeType":"YulFunctionCall","src":"3124:12:30"},"nativeSrc":"3124:12:30","nodeType":"YulExpressionStatement","src":"3124:12:30"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"3097:7:30","nodeType":"YulIdentifier","src":"3097:7:30"},{"name":"headStart","nativeSrc":"3106:9:30","nodeType":"YulIdentifier","src":"3106:9:30"}],"functionName":{"name":"sub","nativeSrc":"3093:3:30","nodeType":"YulIdentifier","src":"3093:3:30"},"nativeSrc":"3093:23:30","nodeType":"YulFunctionCall","src":"3093:23:30"},{"kind":"number","nativeSrc":"3118:2:30","nodeType":"YulLiteral","src":"3118:2:30","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"3089:3:30","nodeType":"YulIdentifier","src":"3089:3:30"},"nativeSrc":"3089:32:30","nodeType":"YulFunctionCall","src":"3089:32:30"},"nativeSrc":"3086:52:30","nodeType":"YulIf","src":"3086:52:30"},{"nativeSrc":"3147:14:30","nodeType":"YulVariableDeclaration","src":"3147:14:30","value":{"kind":"number","nativeSrc":"3160:1:30","nodeType":"YulLiteral","src":"3160:1:30","type":"","value":"0"},"variables":[{"name":"value","nativeSrc":"3151:5:30","nodeType":"YulTypedName","src":"3151:5:30","type":""}]},{"nativeSrc":"3170:32:30","nodeType":"YulAssignment","src":"3170:32:30","value":{"arguments":[{"name":"headStart","nativeSrc":"3192:9:30","nodeType":"YulIdentifier","src":"3192:9:30"}],"functionName":{"name":"calldataload","nativeSrc":"3179:12:30","nodeType":"YulIdentifier","src":"3179:12:30"},"nativeSrc":"3179:23:30","nodeType":"YulFunctionCall","src":"3179:23:30"},"variableNames":[{"name":"value","nativeSrc":"3170:5:30","nodeType":"YulIdentifier","src":"3170:5:30"}]},{"nativeSrc":"3211:15:30","nodeType":"YulAssignment","src":"3211:15:30","value":{"name":"value","nativeSrc":"3221:5:30","nodeType":"YulIdentifier","src":"3221:5:30"},"variableNames":[{"name":"value0","nativeSrc":"3211:6:30","nodeType":"YulIdentifier","src":"3211:6:30"}]}]},"name":"abi_decode_tuple_t_bytes32","nativeSrc":"3006:226:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"3042:9:30","nodeType":"YulTypedName","src":"3042:9:30","type":""},{"name":"dataEnd","nativeSrc":"3053:7:30","nodeType":"YulTypedName","src":"3053:7:30","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"3065:6:30","nodeType":"YulTypedName","src":"3065:6:30","type":""}],"src":"3006:226:30"},{"body":{"nativeSrc":"3338:76:30","nodeType":"YulBlock","src":"3338:76:30","statements":[{"nativeSrc":"3348:26:30","nodeType":"YulAssignment","src":"3348:26:30","value":{"arguments":[{"name":"headStart","nativeSrc":"3360:9:30","nodeType":"YulIdentifier","src":"3360:9:30"},{"kind":"number","nativeSrc":"3371:2:30","nodeType":"YulLiteral","src":"3371:2:30","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"3356:3:30","nodeType":"YulIdentifier","src":"3356:3:30"},"nativeSrc":"3356:18:30","nodeType":"YulFunctionCall","src":"3356:18:30"},"variableNames":[{"name":"tail","nativeSrc":"3348:4:30","nodeType":"YulIdentifier","src":"3348:4:30"}]},{"expression":{"arguments":[{"name":"headStart","nativeSrc":"3390:9:30","nodeType":"YulIdentifier","src":"3390:9:30"},{"name":"value0","nativeSrc":"3401:6:30","nodeType":"YulIdentifier","src":"3401:6:30"}],"functionName":{"name":"mstore","nativeSrc":"3383:6:30","nodeType":"YulIdentifier","src":"3383:6:30"},"nativeSrc":"3383:25:30","nodeType":"YulFunctionCall","src":"3383:25:30"},"nativeSrc":"3383:25:30","nodeType":"YulExpressionStatement","src":"3383:25:30"}]},"name":"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed","nativeSrc":"3237:177:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"3307:9:30","nodeType":"YulTypedName","src":"3307:9:30","type":""},{"name":"value0","nativeSrc":"3318:6:30","nodeType":"YulTypedName","src":"3318:6:30","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"3329:4:30","nodeType":"YulTypedName","src":"3329:4:30","type":""}],"src":"3237:177:30"},{"body":{"nativeSrc":"3506:259:30","nodeType":"YulBlock","src":"3506:259:30","statements":[{"body":{"nativeSrc":"3552:16:30","nodeType":"YulBlock","src":"3552:16:30","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"3561:1:30","nodeType":"YulLiteral","src":"3561:1:30","type":"","value":"0"},{"kind":"number","nativeSrc":"3564:1:30","nodeType":"YulLiteral","src":"3564:1:30","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"3554:6:30","nodeType":"YulIdentifier","src":"3554:6:30"},"nativeSrc":"3554:12:30","nodeType":"YulFunctionCall","src":"3554:12:30"},"nativeSrc":"3554:12:30","nodeType":"YulExpressionStatement","src":"3554:12:30"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"3527:7:30","nodeType":"YulIdentifier","src":"3527:7:30"},{"name":"headStart","nativeSrc":"3536:9:30","nodeType":"YulIdentifier","src":"3536:9:30"}],"functionName":{"name":"sub","nativeSrc":"3523:3:30","nodeType":"YulIdentifier","src":"3523:3:30"},"nativeSrc":"3523:23:30","nodeType":"YulFunctionCall","src":"3523:23:30"},{"kind":"number","nativeSrc":"3548:2:30","nodeType":"YulLiteral","src":"3548:2:30","type":"","value":"64"}],"functionName":{"name":"slt","nativeSrc":"3519:3:30","nodeType":"YulIdentifier","src":"3519:3:30"},"nativeSrc":"3519:32:30","nodeType":"YulFunctionCall","src":"3519:32:30"},"nativeSrc":"3516:52:30","nodeType":"YulIf","src":"3516:52:30"},{"nativeSrc":"3577:14:30","nodeType":"YulVariableDeclaration","src":"3577:14:30","value":{"kind":"number","nativeSrc":"3590:1:30","nodeType":"YulLiteral","src":"3590:1:30","type":"","value":"0"},"variables":[{"name":"value","nativeSrc":"3581:5:30","nodeType":"YulTypedName","src":"3581:5:30","type":""}]},{"nativeSrc":"3600:32:30","nodeType":"YulAssignment","src":"3600:32:30","value":{"arguments":[{"name":"headStart","nativeSrc":"3622:9:30","nodeType":"YulIdentifier","src":"3622:9:30"}],"functionName":{"name":"calldataload","nativeSrc":"3609:12:30","nodeType":"YulIdentifier","src":"3609:12:30"},"nativeSrc":"3609:23:30","nodeType":"YulFunctionCall","src":"3609:23:30"},"variableNames":[{"name":"value","nativeSrc":"3600:5:30","nodeType":"YulIdentifier","src":"3600:5:30"}]},{"nativeSrc":"3641:15:30","nodeType":"YulAssignment","src":"3641:15:30","value":{"name":"value","nativeSrc":"3651:5:30","nodeType":"YulIdentifier","src":"3651:5:30"},"variableNames":[{"name":"value0","nativeSrc":"3641:6:30","nodeType":"YulIdentifier","src":"3641:6:30"}]},{"nativeSrc":"3665:16:30","nodeType":"YulVariableDeclaration","src":"3665:16:30","value":{"kind":"number","nativeSrc":"3680:1:30","nodeType":"YulLiteral","src":"3680:1:30","type":"","value":"0"},"variables":[{"name":"value_1","nativeSrc":"3669:7:30","nodeType":"YulTypedName","src":"3669:7:30","type":""}]},{"nativeSrc":"3690:43:30","nodeType":"YulAssignment","src":"3690:43:30","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"3718:9:30","nodeType":"YulIdentifier","src":"3718:9:30"},{"kind":"number","nativeSrc":"3729:2:30","nodeType":"YulLiteral","src":"3729:2:30","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"3714:3:30","nodeType":"YulIdentifier","src":"3714:3:30"},"nativeSrc":"3714:18:30","nodeType":"YulFunctionCall","src":"3714:18:30"}],"functionName":{"name":"calldataload","nativeSrc":"3701:12:30","nodeType":"YulIdentifier","src":"3701:12:30"},"nativeSrc":"3701:32:30","nodeType":"YulFunctionCall","src":"3701:32:30"},"variableNames":[{"name":"value_1","nativeSrc":"3690:7:30","nodeType":"YulIdentifier","src":"3690:7:30"}]},{"nativeSrc":"3742:17:30","nodeType":"YulAssignment","src":"3742:17:30","value":{"name":"value_1","nativeSrc":"3752:7:30","nodeType":"YulIdentifier","src":"3752:7:30"},"variableNames":[{"name":"value1","nativeSrc":"3742:6:30","nodeType":"YulIdentifier","src":"3742:6:30"}]}]},"name":"abi_decode_tuple_t_uint256t_uint256","nativeSrc":"3419:346:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"3464:9:30","nodeType":"YulTypedName","src":"3464:9:30","type":""},{"name":"dataEnd","nativeSrc":"3475:7:30","nodeType":"YulTypedName","src":"3475:7:30","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"3487:6:30","nodeType":"YulTypedName","src":"3487:6:30","type":""},{"name":"value1","nativeSrc":"3495:6:30","nodeType":"YulTypedName","src":"3495:6:30","type":""}],"src":"3419:346:30"},{"body":{"nativeSrc":"3899:145:30","nodeType":"YulBlock","src":"3899:145:30","statements":[{"nativeSrc":"3909:26:30","nodeType":"YulAssignment","src":"3909:26:30","value":{"arguments":[{"name":"headStart","nativeSrc":"3921:9:30","nodeType":"YulIdentifier","src":"3921:9:30"},{"kind":"number","nativeSrc":"3932:2:30","nodeType":"YulLiteral","src":"3932:2:30","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"3917:3:30","nodeType":"YulIdentifier","src":"3917:3:30"},"nativeSrc":"3917:18:30","nodeType":"YulFunctionCall","src":"3917:18:30"},"variableNames":[{"name":"tail","nativeSrc":"3909:4:30","nodeType":"YulIdentifier","src":"3909:4:30"}]},{"expression":{"arguments":[{"name":"headStart","nativeSrc":"3951:9:30","nodeType":"YulIdentifier","src":"3951:9:30"},{"arguments":[{"name":"value0","nativeSrc":"3966:6:30","nodeType":"YulIdentifier","src":"3966:6:30"},{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"3982:3:30","nodeType":"YulLiteral","src":"3982:3:30","type":"","value":"160"},{"kind":"number","nativeSrc":"3987:1:30","nodeType":"YulLiteral","src":"3987:1:30","type":"","value":"1"}],"functionName":{"name":"shl","nativeSrc":"3978:3:30","nodeType":"YulIdentifier","src":"3978:3:30"},"nativeSrc":"3978:11:30","nodeType":"YulFunctionCall","src":"3978:11:30"},{"kind":"number","nativeSrc":"3991:1:30","nodeType":"YulLiteral","src":"3991:1:30","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"3974:3:30","nodeType":"YulIdentifier","src":"3974:3:30"},"nativeSrc":"3974:19:30","nodeType":"YulFunctionCall","src":"3974:19:30"}],"functionName":{"name":"and","nativeSrc":"3962:3:30","nodeType":"YulIdentifier","src":"3962:3:30"},"nativeSrc":"3962:32:30","nodeType":"YulFunctionCall","src":"3962:32:30"}],"functionName":{"name":"mstore","nativeSrc":"3944:6:30","nodeType":"YulIdentifier","src":"3944:6:30"},"nativeSrc":"3944:51:30","nodeType":"YulFunctionCall","src":"3944:51:30"},"nativeSrc":"3944:51:30","nodeType":"YulExpressionStatement","src":"3944:51:30"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"4015:9:30","nodeType":"YulIdentifier","src":"4015:9:30"},{"kind":"number","nativeSrc":"4026:2:30","nodeType":"YulLiteral","src":"4026:2:30","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"4011:3:30","nodeType":"YulIdentifier","src":"4011:3:30"},"nativeSrc":"4011:18:30","nodeType":"YulFunctionCall","src":"4011:18:30"},{"name":"value1","nativeSrc":"4031:6:30","nodeType":"YulIdentifier","src":"4031:6:30"}],"functionName":{"name":"mstore","nativeSrc":"4004:6:30","nodeType":"YulIdentifier","src":"4004:6:30"},"nativeSrc":"4004:34:30","nodeType":"YulFunctionCall","src":"4004:34:30"},"nativeSrc":"4004:34:30","nodeType":"YulExpressionStatement","src":"4004:34:30"}]},"name":"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed","nativeSrc":"3770:274:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"3860:9:30","nodeType":"YulTypedName","src":"3860:9:30","type":""},{"name":"value1","nativeSrc":"3871:6:30","nodeType":"YulTypedName","src":"3871:6:30","type":""},{"name":"value0","nativeSrc":"3879:6:30","nodeType":"YulTypedName","src":"3879:6:30","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"3890:4:30","nodeType":"YulTypedName","src":"3890:4:30","type":""}],"src":"3770:274:30"},{"body":{"nativeSrc":"4136:213:30","nodeType":"YulBlock","src":"4136:213:30","statements":[{"body":{"nativeSrc":"4182:16:30","nodeType":"YulBlock","src":"4182:16:30","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"4191:1:30","nodeType":"YulLiteral","src":"4191:1:30","type":"","value":"0"},{"kind":"number","nativeSrc":"4194:1:30","nodeType":"YulLiteral","src":"4194:1:30","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"4184:6:30","nodeType":"YulIdentifier","src":"4184:6:30"},"nativeSrc":"4184:12:30","nodeType":"YulFunctionCall","src":"4184:12:30"},"nativeSrc":"4184:12:30","nodeType":"YulExpressionStatement","src":"4184:12:30"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"4157:7:30","nodeType":"YulIdentifier","src":"4157:7:30"},{"name":"headStart","nativeSrc":"4166:9:30","nodeType":"YulIdentifier","src":"4166:9:30"}],"functionName":{"name":"sub","nativeSrc":"4153:3:30","nodeType":"YulIdentifier","src":"4153:3:30"},"nativeSrc":"4153:23:30","nodeType":"YulFunctionCall","src":"4153:23:30"},{"kind":"number","nativeSrc":"4178:2:30","nodeType":"YulLiteral","src":"4178:2:30","type":"","value":"64"}],"functionName":{"name":"slt","nativeSrc":"4149:3:30","nodeType":"YulIdentifier","src":"4149:3:30"},"nativeSrc":"4149:32:30","nodeType":"YulFunctionCall","src":"4149:32:30"},"nativeSrc":"4146:52:30","nodeType":"YulIf","src":"4146:52:30"},{"nativeSrc":"4207:14:30","nodeType":"YulVariableDeclaration","src":"4207:14:30","value":{"kind":"number","nativeSrc":"4220:1:30","nodeType":"YulLiteral","src":"4220:1:30","type":"","value":"0"},"variables":[{"name":"value","nativeSrc":"4211:5:30","nodeType":"YulTypedName","src":"4211:5:30","type":""}]},{"nativeSrc":"4230:32:30","nodeType":"YulAssignment","src":"4230:32:30","value":{"arguments":[{"name":"headStart","nativeSrc":"4252:9:30","nodeType":"YulIdentifier","src":"4252:9:30"}],"functionName":{"name":"calldataload","nativeSrc":"4239:12:30","nodeType":"YulIdentifier","src":"4239:12:30"},"nativeSrc":"4239:23:30","nodeType":"YulFunctionCall","src":"4239:23:30"},"variableNames":[{"name":"value","nativeSrc":"4230:5:30","nodeType":"YulIdentifier","src":"4230:5:30"}]},{"nativeSrc":"4271:15:30","nodeType":"YulAssignment","src":"4271:15:30","value":{"name":"value","nativeSrc":"4281:5:30","nodeType":"YulIdentifier","src":"4281:5:30"},"variableNames":[{"name":"value0","nativeSrc":"4271:6:30","nodeType":"YulIdentifier","src":"4271:6:30"}]},{"nativeSrc":"4295:48:30","nodeType":"YulAssignment","src":"4295:48:30","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"4328:9:30","nodeType":"YulIdentifier","src":"4328:9:30"},{"kind":"number","nativeSrc":"4339:2:30","nodeType":"YulLiteral","src":"4339:2:30","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"4324:3:30","nodeType":"YulIdentifier","src":"4324:3:30"},"nativeSrc":"4324:18:30","nodeType":"YulFunctionCall","src":"4324:18:30"}],"functionName":{"name":"abi_decode_address","nativeSrc":"4305:18:30","nodeType":"YulIdentifier","src":"4305:18:30"},"nativeSrc":"4305:38:30","nodeType":"YulFunctionCall","src":"4305:38:30"},"variableNames":[{"name":"value1","nativeSrc":"4295:6:30","nodeType":"YulIdentifier","src":"4295:6:30"}]}]},"name":"abi_decode_tuple_t_bytes32t_address","nativeSrc":"4049:300:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"4094:9:30","nodeType":"YulTypedName","src":"4094:9:30","type":""},{"name":"dataEnd","nativeSrc":"4105:7:30","nodeType":"YulTypedName","src":"4105:7:30","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"4117:6:30","nodeType":"YulTypedName","src":"4117:6:30","type":""},{"name":"value1","nativeSrc":"4125:6:30","nodeType":"YulTypedName","src":"4125:6:30","type":""}],"src":"4049:300:30"},{"body":{"nativeSrc":"4444:497:30","nodeType":"YulBlock","src":"4444:497:30","statements":[{"body":{"nativeSrc":"4490:16:30","nodeType":"YulBlock","src":"4490:16:30","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"4499:1:30","nodeType":"YulLiteral","src":"4499:1:30","type":"","value":"0"},{"kind":"number","nativeSrc":"4502:1:30","nodeType":"YulLiteral","src":"4502:1:30","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"4492:6:30","nodeType":"YulIdentifier","src":"4492:6:30"},"nativeSrc":"4492:12:30","nodeType":"YulFunctionCall","src":"4492:12:30"},"nativeSrc":"4492:12:30","nodeType":"YulExpressionStatement","src":"4492:12:30"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"4465:7:30","nodeType":"YulIdentifier","src":"4465:7:30"},{"name":"headStart","nativeSrc":"4474:9:30","nodeType":"YulIdentifier","src":"4474:9:30"}],"functionName":{"name":"sub","nativeSrc":"4461:3:30","nodeType":"YulIdentifier","src":"4461:3:30"},"nativeSrc":"4461:23:30","nodeType":"YulFunctionCall","src":"4461:23:30"},{"kind":"number","nativeSrc":"4486:2:30","nodeType":"YulLiteral","src":"4486:2:30","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"4457:3:30","nodeType":"YulIdentifier","src":"4457:3:30"},"nativeSrc":"4457:32:30","nodeType":"YulFunctionCall","src":"4457:32:30"},"nativeSrc":"4454:52:30","nodeType":"YulIf","src":"4454:52:30"},{"nativeSrc":"4515:37:30","nodeType":"YulVariableDeclaration","src":"4515:37:30","value":{"arguments":[{"name":"headStart","nativeSrc":"4542:9:30","nodeType":"YulIdentifier","src":"4542:9:30"}],"functionName":{"name":"calldataload","nativeSrc":"4529:12:30","nodeType":"YulIdentifier","src":"4529:12:30"},"nativeSrc":"4529:23:30","nodeType":"YulFunctionCall","src":"4529:23:30"},"variables":[{"name":"offset","nativeSrc":"4519:6:30","nodeType":"YulTypedName","src":"4519:6:30","type":""}]},{"body":{"nativeSrc":"4595:16:30","nodeType":"YulBlock","src":"4595:16:30","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"4604:1:30","nodeType":"YulLiteral","src":"4604:1:30","type":"","value":"0"},{"kind":"number","nativeSrc":"4607:1:30","nodeType":"YulLiteral","src":"4607:1:30","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"4597:6:30","nodeType":"YulIdentifier","src":"4597:6:30"},"nativeSrc":"4597:12:30","nodeType":"YulFunctionCall","src":"4597:12:30"},"nativeSrc":"4597:12:30","nodeType":"YulExpressionStatement","src":"4597:12:30"}]},"condition":{"arguments":[{"name":"offset","nativeSrc":"4567:6:30","nodeType":"YulIdentifier","src":"4567:6:30"},{"kind":"number","nativeSrc":"4575:18:30","nodeType":"YulLiteral","src":"4575:18:30","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"4564:2:30","nodeType":"YulIdentifier","src":"4564:2:30"},"nativeSrc":"4564:30:30","nodeType":"YulFunctionCall","src":"4564:30:30"},"nativeSrc":"4561:50:30","nodeType":"YulIf","src":"4561:50:30"},{"nativeSrc":"4620:32:30","nodeType":"YulVariableDeclaration","src":"4620:32:30","value":{"arguments":[{"name":"headStart","nativeSrc":"4634:9:30","nodeType":"YulIdentifier","src":"4634:9:30"},{"name":"offset","nativeSrc":"4645:6:30","nodeType":"YulIdentifier","src":"4645:6:30"}],"functionName":{"name":"add","nativeSrc":"4630:3:30","nodeType":"YulIdentifier","src":"4630:3:30"},"nativeSrc":"4630:22:30","nodeType":"YulFunctionCall","src":"4630:22:30"},"variables":[{"name":"_1","nativeSrc":"4624:2:30","nodeType":"YulTypedName","src":"4624:2:30","type":""}]},{"body":{"nativeSrc":"4700:16:30","nodeType":"YulBlock","src":"4700:16:30","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"4709:1:30","nodeType":"YulLiteral","src":"4709:1:30","type":"","value":"0"},{"kind":"number","nativeSrc":"4712:1:30","nodeType":"YulLiteral","src":"4712:1:30","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"4702:6:30","nodeType":"YulIdentifier","src":"4702:6:30"},"nativeSrc":"4702:12:30","nodeType":"YulFunctionCall","src":"4702:12:30"},"nativeSrc":"4702:12:30","nodeType":"YulExpressionStatement","src":"4702:12:30"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_1","nativeSrc":"4679:2:30","nodeType":"YulIdentifier","src":"4679:2:30"},{"kind":"number","nativeSrc":"4683:4:30","nodeType":"YulLiteral","src":"4683:4:30","type":"","value":"0x1f"}],"functionName":{"name":"add","nativeSrc":"4675:3:30","nodeType":"YulIdentifier","src":"4675:3:30"},"nativeSrc":"4675:13:30","nodeType":"YulFunctionCall","src":"4675:13:30"},{"name":"dataEnd","nativeSrc":"4690:7:30","nodeType":"YulIdentifier","src":"4690:7:30"}],"functionName":{"name":"slt","nativeSrc":"4671:3:30","nodeType":"YulIdentifier","src":"4671:3:30"},"nativeSrc":"4671:27:30","nodeType":"YulFunctionCall","src":"4671:27:30"}],"functionName":{"name":"iszero","nativeSrc":"4664:6:30","nodeType":"YulIdentifier","src":"4664:6:30"},"nativeSrc":"4664:35:30","nodeType":"YulFunctionCall","src":"4664:35:30"},"nativeSrc":"4661:55:30","nodeType":"YulIf","src":"4661:55:30"},{"nativeSrc":"4725:30:30","nodeType":"YulVariableDeclaration","src":"4725:30:30","value":{"arguments":[{"name":"_1","nativeSrc":"4752:2:30","nodeType":"YulIdentifier","src":"4752:2:30"}],"functionName":{"name":"calldataload","nativeSrc":"4739:12:30","nodeType":"YulIdentifier","src":"4739:12:30"},"nativeSrc":"4739:16:30","nodeType":"YulFunctionCall","src":"4739:16:30"},"variables":[{"name":"length","nativeSrc":"4729:6:30","nodeType":"YulTypedName","src":"4729:6:30","type":""}]},{"body":{"nativeSrc":"4798:16:30","nodeType":"YulBlock","src":"4798:16:30","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"4807:1:30","nodeType":"YulLiteral","src":"4807:1:30","type":"","value":"0"},{"kind":"number","nativeSrc":"4810:1:30","nodeType":"YulLiteral","src":"4810:1:30","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"4800:6:30","nodeType":"YulIdentifier","src":"4800:6:30"},"nativeSrc":"4800:12:30","nodeType":"YulFunctionCall","src":"4800:12:30"},"nativeSrc":"4800:12:30","nodeType":"YulExpressionStatement","src":"4800:12:30"}]},"condition":{"arguments":[{"name":"length","nativeSrc":"4770:6:30","nodeType":"YulIdentifier","src":"4770:6:30"},{"kind":"number","nativeSrc":"4778:18:30","nodeType":"YulLiteral","src":"4778:18:30","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"4767:2:30","nodeType":"YulIdentifier","src":"4767:2:30"},"nativeSrc":"4767:30:30","nodeType":"YulFunctionCall","src":"4767:30:30"},"nativeSrc":"4764:50:30","nodeType":"YulIf","src":"4764:50:30"},{"body":{"nativeSrc":"4864:16:30","nodeType":"YulBlock","src":"4864:16:30","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"4873:1:30","nodeType":"YulLiteral","src":"4873:1:30","type":"","value":"0"},{"kind":"number","nativeSrc":"4876:1:30","nodeType":"YulLiteral","src":"4876:1:30","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"4866:6:30","nodeType":"YulIdentifier","src":"4866:6:30"},"nativeSrc":"4866:12:30","nodeType":"YulFunctionCall","src":"4866:12:30"},"nativeSrc":"4866:12:30","nodeType":"YulExpressionStatement","src":"4866:12:30"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_1","nativeSrc":"4837:2:30","nodeType":"YulIdentifier","src":"4837:2:30"},{"name":"length","nativeSrc":"4841:6:30","nodeType":"YulIdentifier","src":"4841:6:30"}],"functionName":{"name":"add","nativeSrc":"4833:3:30","nodeType":"YulIdentifier","src":"4833:3:30"},"nativeSrc":"4833:15:30","nodeType":"YulFunctionCall","src":"4833:15:30"},{"kind":"number","nativeSrc":"4850:2:30","nodeType":"YulLiteral","src":"4850:2:30","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"4829:3:30","nodeType":"YulIdentifier","src":"4829:3:30"},"nativeSrc":"4829:24:30","nodeType":"YulFunctionCall","src":"4829:24:30"},{"name":"dataEnd","nativeSrc":"4855:7:30","nodeType":"YulIdentifier","src":"4855:7:30"}],"functionName":{"name":"gt","nativeSrc":"4826:2:30","nodeType":"YulIdentifier","src":"4826:2:30"},"nativeSrc":"4826:37:30","nodeType":"YulFunctionCall","src":"4826:37:30"},"nativeSrc":"4823:57:30","nodeType":"YulIf","src":"4823:57:30"},{"nativeSrc":"4889:21:30","nodeType":"YulAssignment","src":"4889:21:30","value":{"arguments":[{"name":"_1","nativeSrc":"4903:2:30","nodeType":"YulIdentifier","src":"4903:2:30"},{"kind":"number","nativeSrc":"4907:2:30","nodeType":"YulLiteral","src":"4907:2:30","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"4899:3:30","nodeType":"YulIdentifier","src":"4899:3:30"},"nativeSrc":"4899:11:30","nodeType":"YulFunctionCall","src":"4899:11:30"},"variableNames":[{"name":"value0","nativeSrc":"4889:6:30","nodeType":"YulIdentifier","src":"4889:6:30"}]},{"nativeSrc":"4919:16:30","nodeType":"YulAssignment","src":"4919:16:30","value":{"name":"length","nativeSrc":"4929:6:30","nodeType":"YulIdentifier","src":"4929:6:30"},"variableNames":[{"name":"value1","nativeSrc":"4919:6:30","nodeType":"YulIdentifier","src":"4919:6:30"}]}]},"name":"abi_decode_tuple_t_string_calldata_ptr","nativeSrc":"4354:587:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"4402:9:30","nodeType":"YulTypedName","src":"4402:9:30","type":""},{"name":"dataEnd","nativeSrc":"4413:7:30","nodeType":"YulTypedName","src":"4413:7:30","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"4425:6:30","nodeType":"YulTypedName","src":"4425:6:30","type":""},{"name":"value1","nativeSrc":"4433:6:30","nodeType":"YulTypedName","src":"4433:6:30","type":""}],"src":"4354:587:30"},{"body":{"nativeSrc":"5016:116:30","nodeType":"YulBlock","src":"5016:116:30","statements":[{"body":{"nativeSrc":"5062:16:30","nodeType":"YulBlock","src":"5062:16:30","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"5071:1:30","nodeType":"YulLiteral","src":"5071:1:30","type":"","value":"0"},{"kind":"number","nativeSrc":"5074:1:30","nodeType":"YulLiteral","src":"5074:1:30","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"5064:6:30","nodeType":"YulIdentifier","src":"5064:6:30"},"nativeSrc":"5064:12:30","nodeType":"YulFunctionCall","src":"5064:12:30"},"nativeSrc":"5064:12:30","nodeType":"YulExpressionStatement","src":"5064:12:30"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"5037:7:30","nodeType":"YulIdentifier","src":"5037:7:30"},{"name":"headStart","nativeSrc":"5046:9:30","nodeType":"YulIdentifier","src":"5046:9:30"}],"functionName":{"name":"sub","nativeSrc":"5033:3:30","nodeType":"YulIdentifier","src":"5033:3:30"},"nativeSrc":"5033:23:30","nodeType":"YulFunctionCall","src":"5033:23:30"},{"kind":"number","nativeSrc":"5058:2:30","nodeType":"YulLiteral","src":"5058:2:30","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"5029:3:30","nodeType":"YulIdentifier","src":"5029:3:30"},"nativeSrc":"5029:32:30","nodeType":"YulFunctionCall","src":"5029:32:30"},"nativeSrc":"5026:52:30","nodeType":"YulIf","src":"5026:52:30"},{"nativeSrc":"5087:39:30","nodeType":"YulAssignment","src":"5087:39:30","value":{"arguments":[{"name":"headStart","nativeSrc":"5116:9:30","nodeType":"YulIdentifier","src":"5116:9:30"}],"functionName":{"name":"abi_decode_address","nativeSrc":"5097:18:30","nodeType":"YulIdentifier","src":"5097:18:30"},"nativeSrc":"5097:29:30","nodeType":"YulFunctionCall","src":"5097:29:30"},"variableNames":[{"name":"value0","nativeSrc":"5087:6:30","nodeType":"YulIdentifier","src":"5087:6:30"}]}]},"name":"abi_decode_tuple_t_address","nativeSrc":"4946:186:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"4982:9:30","nodeType":"YulTypedName","src":"4982:9:30","type":""},{"name":"dataEnd","nativeSrc":"4993:7:30","nodeType":"YulTypedName","src":"4993:7:30","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"5005:6:30","nodeType":"YulTypedName","src":"5005:6:30","type":""}],"src":"4946:186:30"},{"body":{"nativeSrc":"5206:211:30","nodeType":"YulBlock","src":"5206:211:30","statements":[{"body":{"nativeSrc":"5252:16:30","nodeType":"YulBlock","src":"5252:16:30","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"5261:1:30","nodeType":"YulLiteral","src":"5261:1:30","type":"","value":"0"},{"kind":"number","nativeSrc":"5264:1:30","nodeType":"YulLiteral","src":"5264:1:30","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"5254:6:30","nodeType":"YulIdentifier","src":"5254:6:30"},"nativeSrc":"5254:12:30","nodeType":"YulFunctionCall","src":"5254:12:30"},"nativeSrc":"5254:12:30","nodeType":"YulExpressionStatement","src":"5254:12:30"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"5227:7:30","nodeType":"YulIdentifier","src":"5227:7:30"},{"name":"headStart","nativeSrc":"5236:9:30","nodeType":"YulIdentifier","src":"5236:9:30"}],"functionName":{"name":"sub","nativeSrc":"5223:3:30","nodeType":"YulIdentifier","src":"5223:3:30"},"nativeSrc":"5223:23:30","nodeType":"YulFunctionCall","src":"5223:23:30"},{"kind":"number","nativeSrc":"5248:2:30","nodeType":"YulLiteral","src":"5248:2:30","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"5219:3:30","nodeType":"YulIdentifier","src":"5219:3:30"},"nativeSrc":"5219:32:30","nodeType":"YulFunctionCall","src":"5219:32:30"},"nativeSrc":"5216:52:30","nodeType":"YulIf","src":"5216:52:30"},{"nativeSrc":"5277:36:30","nodeType":"YulVariableDeclaration","src":"5277:36:30","value":{"arguments":[{"name":"headStart","nativeSrc":"5303:9:30","nodeType":"YulIdentifier","src":"5303:9:30"}],"functionName":{"name":"calldataload","nativeSrc":"5290:12:30","nodeType":"YulIdentifier","src":"5290:12:30"},"nativeSrc":"5290:23:30","nodeType":"YulFunctionCall","src":"5290:23:30"},"variables":[{"name":"value","nativeSrc":"5281:5:30","nodeType":"YulTypedName","src":"5281:5:30","type":""}]},{"body":{"nativeSrc":"5371:16:30","nodeType":"YulBlock","src":"5371:16:30","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"5380:1:30","nodeType":"YulLiteral","src":"5380:1:30","type":"","value":"0"},{"kind":"number","nativeSrc":"5383:1:30","nodeType":"YulLiteral","src":"5383:1:30","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"5373:6:30","nodeType":"YulIdentifier","src":"5373:6:30"},"nativeSrc":"5373:12:30","nodeType":"YulFunctionCall","src":"5373:12:30"},"nativeSrc":"5373:12:30","nodeType":"YulExpressionStatement","src":"5373:12:30"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"5335:5:30","nodeType":"YulIdentifier","src":"5335:5:30"},{"arguments":[{"name":"value","nativeSrc":"5346:5:30","nodeType":"YulIdentifier","src":"5346:5:30"},{"kind":"number","nativeSrc":"5353:14:30","nodeType":"YulLiteral","src":"5353:14:30","type":"","value":"0xffffffffffff"}],"functionName":{"name":"and","nativeSrc":"5342:3:30","nodeType":"YulIdentifier","src":"5342:3:30"},"nativeSrc":"5342:26:30","nodeType":"YulFunctionCall","src":"5342:26:30"}],"functionName":{"name":"eq","nativeSrc":"5332:2:30","nodeType":"YulIdentifier","src":"5332:2:30"},"nativeSrc":"5332:37:30","nodeType":"YulFunctionCall","src":"5332:37:30"}],"functionName":{"name":"iszero","nativeSrc":"5325:6:30","nodeType":"YulIdentifier","src":"5325:6:30"},"nativeSrc":"5325:45:30","nodeType":"YulFunctionCall","src":"5325:45:30"},"nativeSrc":"5322:65:30","nodeType":"YulIf","src":"5322:65:30"},{"nativeSrc":"5396:15:30","nodeType":"YulAssignment","src":"5396:15:30","value":{"name":"value","nativeSrc":"5406:5:30","nodeType":"YulIdentifier","src":"5406:5:30"},"variableNames":[{"name":"value0","nativeSrc":"5396:6:30","nodeType":"YulIdentifier","src":"5396:6:30"}]}]},"name":"abi_decode_tuple_t_uint48","nativeSrc":"5137:280:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"5172:9:30","nodeType":"YulTypedName","src":"5172:9:30","type":""},{"name":"dataEnd","nativeSrc":"5183:7:30","nodeType":"YulTypedName","src":"5183:7:30","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"5195:6:30","nodeType":"YulTypedName","src":"5195:6:30","type":""}],"src":"5137:280:30"},{"body":{"nativeSrc":"5523:76:30","nodeType":"YulBlock","src":"5523:76:30","statements":[{"nativeSrc":"5533:26:30","nodeType":"YulAssignment","src":"5533:26:30","value":{"arguments":[{"name":"headStart","nativeSrc":"5545:9:30","nodeType":"YulIdentifier","src":"5545:9:30"},{"kind":"number","nativeSrc":"5556:2:30","nodeType":"YulLiteral","src":"5556:2:30","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"5541:3:30","nodeType":"YulIdentifier","src":"5541:3:30"},"nativeSrc":"5541:18:30","nodeType":"YulFunctionCall","src":"5541:18:30"},"variableNames":[{"name":"tail","nativeSrc":"5533:4:30","nodeType":"YulIdentifier","src":"5533:4:30"}]},{"expression":{"arguments":[{"name":"headStart","nativeSrc":"5575:9:30","nodeType":"YulIdentifier","src":"5575:9:30"},{"name":"value0","nativeSrc":"5586:6:30","nodeType":"YulIdentifier","src":"5586:6:30"}],"functionName":{"name":"mstore","nativeSrc":"5568:6:30","nodeType":"YulIdentifier","src":"5568:6:30"},"nativeSrc":"5568:25:30","nodeType":"YulFunctionCall","src":"5568:25:30"},"nativeSrc":"5568:25:30","nodeType":"YulExpressionStatement","src":"5568:25:30"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nativeSrc":"5422:177:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"5492:9:30","nodeType":"YulTypedName","src":"5492:9:30","type":""},{"name":"value0","nativeSrc":"5503:6:30","nodeType":"YulTypedName","src":"5503:6:30","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"5514:4:30","nodeType":"YulTypedName","src":"5514:4:30","type":""}],"src":"5422:177:30"},{"body":{"nativeSrc":"5729:161:30","nodeType":"YulBlock","src":"5729:161:30","statements":[{"nativeSrc":"5739:26:30","nodeType":"YulAssignment","src":"5739:26:30","value":{"arguments":[{"name":"headStart","nativeSrc":"5751:9:30","nodeType":"YulIdentifier","src":"5751:9:30"},{"kind":"number","nativeSrc":"5762:2:30","nodeType":"YulLiteral","src":"5762:2:30","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"5747:3:30","nodeType":"YulIdentifier","src":"5747:3:30"},"nativeSrc":"5747:18:30","nodeType":"YulFunctionCall","src":"5747:18:30"},"variableNames":[{"name":"tail","nativeSrc":"5739:4:30","nodeType":"YulIdentifier","src":"5739:4:30"}]},{"expression":{"arguments":[{"name":"headStart","nativeSrc":"5781:9:30","nodeType":"YulIdentifier","src":"5781:9:30"},{"arguments":[{"name":"value0","nativeSrc":"5796:6:30","nodeType":"YulIdentifier","src":"5796:6:30"},{"kind":"number","nativeSrc":"5804:14:30","nodeType":"YulLiteral","src":"5804:14:30","type":"","value":"0xffffffffffff"}],"functionName":{"name":"and","nativeSrc":"5792:3:30","nodeType":"YulIdentifier","src":"5792:3:30"},"nativeSrc":"5792:27:30","nodeType":"YulFunctionCall","src":"5792:27:30"}],"functionName":{"name":"mstore","nativeSrc":"5774:6:30","nodeType":"YulIdentifier","src":"5774:6:30"},"nativeSrc":"5774:46:30","nodeType":"YulFunctionCall","src":"5774:46:30"},"nativeSrc":"5774:46:30","nodeType":"YulExpressionStatement","src":"5774:46:30"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"5840:9:30","nodeType":"YulIdentifier","src":"5840:9:30"},{"kind":"number","nativeSrc":"5851:2:30","nodeType":"YulLiteral","src":"5851:2:30","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"5836:3:30","nodeType":"YulIdentifier","src":"5836:3:30"},"nativeSrc":"5836:18:30","nodeType":"YulFunctionCall","src":"5836:18:30"},{"arguments":[{"name":"value1","nativeSrc":"5860:6:30","nodeType":"YulIdentifier","src":"5860:6:30"},{"kind":"number","nativeSrc":"5868:14:30","nodeType":"YulLiteral","src":"5868:14:30","type":"","value":"0xffffffffffff"}],"functionName":{"name":"and","nativeSrc":"5856:3:30","nodeType":"YulIdentifier","src":"5856:3:30"},"nativeSrc":"5856:27:30","nodeType":"YulFunctionCall","src":"5856:27:30"}],"functionName":{"name":"mstore","nativeSrc":"5829:6:30","nodeType":"YulIdentifier","src":"5829:6:30"},"nativeSrc":"5829:55:30","nodeType":"YulFunctionCall","src":"5829:55:30"},"nativeSrc":"5829:55:30","nodeType":"YulExpressionStatement","src":"5829:55:30"}]},"name":"abi_encode_tuple_t_uint48_t_uint48__to_t_uint48_t_uint48__fromStack_reversed","nativeSrc":"5604:286:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"5690:9:30","nodeType":"YulTypedName","src":"5690:9:30","type":""},{"name":"value1","nativeSrc":"5701:6:30","nodeType":"YulTypedName","src":"5701:6:30","type":""},{"name":"value0","nativeSrc":"5709:6:30","nodeType":"YulTypedName","src":"5709:6:30","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"5720:4:30","nodeType":"YulTypedName","src":"5720:4:30","type":""}],"src":"5604:286:30"},{"body":{"nativeSrc":"5979:263:30","nodeType":"YulBlock","src":"5979:263:30","statements":[{"body":{"nativeSrc":"6025:16:30","nodeType":"YulBlock","src":"6025:16:30","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"6034:1:30","nodeType":"YulLiteral","src":"6034:1:30","type":"","value":"0"},{"kind":"number","nativeSrc":"6037:1:30","nodeType":"YulLiteral","src":"6037:1:30","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"6027:6:30","nodeType":"YulIdentifier","src":"6027:6:30"},"nativeSrc":"6027:12:30","nodeType":"YulFunctionCall","src":"6027:12:30"},"nativeSrc":"6027:12:30","nodeType":"YulExpressionStatement","src":"6027:12:30"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"6000:7:30","nodeType":"YulIdentifier","src":"6000:7:30"},{"name":"headStart","nativeSrc":"6009:9:30","nodeType":"YulIdentifier","src":"6009:9:30"}],"functionName":{"name":"sub","nativeSrc":"5996:3:30","nodeType":"YulIdentifier","src":"5996:3:30"},"nativeSrc":"5996:23:30","nodeType":"YulFunctionCall","src":"5996:23:30"},{"kind":"number","nativeSrc":"6021:2:30","nodeType":"YulLiteral","src":"6021:2:30","type":"","value":"64"}],"functionName":{"name":"slt","nativeSrc":"5992:3:30","nodeType":"YulIdentifier","src":"5992:3:30"},"nativeSrc":"5992:32:30","nodeType":"YulFunctionCall","src":"5992:32:30"},"nativeSrc":"5989:52:30","nodeType":"YulIf","src":"5989:52:30"},{"nativeSrc":"6050:39:30","nodeType":"YulAssignment","src":"6050:39:30","value":{"arguments":[{"name":"headStart","nativeSrc":"6079:9:30","nodeType":"YulIdentifier","src":"6079:9:30"}],"functionName":{"name":"abi_decode_address","nativeSrc":"6060:18:30","nodeType":"YulIdentifier","src":"6060:18:30"},"nativeSrc":"6060:29:30","nodeType":"YulFunctionCall","src":"6060:29:30"},"variableNames":[{"name":"value0","nativeSrc":"6050:6:30","nodeType":"YulIdentifier","src":"6050:6:30"}]},{"nativeSrc":"6098:45:30","nodeType":"YulVariableDeclaration","src":"6098:45:30","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"6128:9:30","nodeType":"YulIdentifier","src":"6128:9:30"},{"kind":"number","nativeSrc":"6139:2:30","nodeType":"YulLiteral","src":"6139:2:30","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"6124:3:30","nodeType":"YulIdentifier","src":"6124:3:30"},"nativeSrc":"6124:18:30","nodeType":"YulFunctionCall","src":"6124:18:30"}],"functionName":{"name":"calldataload","nativeSrc":"6111:12:30","nodeType":"YulIdentifier","src":"6111:12:30"},"nativeSrc":"6111:32:30","nodeType":"YulFunctionCall","src":"6111:32:30"},"variables":[{"name":"value","nativeSrc":"6102:5:30","nodeType":"YulTypedName","src":"6102:5:30","type":""}]},{"body":{"nativeSrc":"6196:16:30","nodeType":"YulBlock","src":"6196:16:30","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"6205:1:30","nodeType":"YulLiteral","src":"6205:1:30","type":"","value":"0"},{"kind":"number","nativeSrc":"6208:1:30","nodeType":"YulLiteral","src":"6208:1:30","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"6198:6:30","nodeType":"YulIdentifier","src":"6198:6:30"},"nativeSrc":"6198:12:30","nodeType":"YulFunctionCall","src":"6198:12:30"},"nativeSrc":"6198:12:30","nodeType":"YulExpressionStatement","src":"6198:12:30"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"6165:5:30","nodeType":"YulIdentifier","src":"6165:5:30"},{"arguments":[{"arguments":[{"name":"value","nativeSrc":"6186:5:30","nodeType":"YulIdentifier","src":"6186:5:30"}],"functionName":{"name":"iszero","nativeSrc":"6179:6:30","nodeType":"YulIdentifier","src":"6179:6:30"},"nativeSrc":"6179:13:30","nodeType":"YulFunctionCall","src":"6179:13:30"}],"functionName":{"name":"iszero","nativeSrc":"6172:6:30","nodeType":"YulIdentifier","src":"6172:6:30"},"nativeSrc":"6172:21:30","nodeType":"YulFunctionCall","src":"6172:21:30"}],"functionName":{"name":"eq","nativeSrc":"6162:2:30","nodeType":"YulIdentifier","src":"6162:2:30"},"nativeSrc":"6162:32:30","nodeType":"YulFunctionCall","src":"6162:32:30"}],"functionName":{"name":"iszero","nativeSrc":"6155:6:30","nodeType":"YulIdentifier","src":"6155:6:30"},"nativeSrc":"6155:40:30","nodeType":"YulFunctionCall","src":"6155:40:30"},"nativeSrc":"6152:60:30","nodeType":"YulIf","src":"6152:60:30"},{"nativeSrc":"6221:15:30","nodeType":"YulAssignment","src":"6221:15:30","value":{"name":"value","nativeSrc":"6231:5:30","nodeType":"YulIdentifier","src":"6231:5:30"},"variableNames":[{"name":"value1","nativeSrc":"6221:6:30","nodeType":"YulIdentifier","src":"6221:6:30"}]}]},"name":"abi_decode_tuple_t_addresst_bool","nativeSrc":"5895:347:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"5937:9:30","nodeType":"YulTypedName","src":"5937:9:30","type":""},{"name":"dataEnd","nativeSrc":"5948:7:30","nodeType":"YulTypedName","src":"5948:7:30","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"5960:6:30","nodeType":"YulTypedName","src":"5960:6:30","type":""},{"name":"value1","nativeSrc":"5968:6:30","nodeType":"YulTypedName","src":"5968:6:30","type":""}],"src":"5895:347:30"},{"body":{"nativeSrc":"6279:95:30","nodeType":"YulBlock","src":"6279:95:30","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"6296:1:30","nodeType":"YulLiteral","src":"6296:1:30","type":"","value":"0"},{"arguments":[{"kind":"number","nativeSrc":"6303:3:30","nodeType":"YulLiteral","src":"6303:3:30","type":"","value":"224"},{"kind":"number","nativeSrc":"6308:10:30","nodeType":"YulLiteral","src":"6308:10:30","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nativeSrc":"6299:3:30","nodeType":"YulIdentifier","src":"6299:3:30"},"nativeSrc":"6299:20:30","nodeType":"YulFunctionCall","src":"6299:20:30"}],"functionName":{"name":"mstore","nativeSrc":"6289:6:30","nodeType":"YulIdentifier","src":"6289:6:30"},"nativeSrc":"6289:31:30","nodeType":"YulFunctionCall","src":"6289:31:30"},"nativeSrc":"6289:31:30","nodeType":"YulExpressionStatement","src":"6289:31:30"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"6336:1:30","nodeType":"YulLiteral","src":"6336:1:30","type":"","value":"4"},{"kind":"number","nativeSrc":"6339:4:30","nodeType":"YulLiteral","src":"6339:4:30","type":"","value":"0x41"}],"functionName":{"name":"mstore","nativeSrc":"6329:6:30","nodeType":"YulIdentifier","src":"6329:6:30"},"nativeSrc":"6329:15:30","nodeType":"YulFunctionCall","src":"6329:15:30"},"nativeSrc":"6329:15:30","nodeType":"YulExpressionStatement","src":"6329:15:30"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"6360:1:30","nodeType":"YulLiteral","src":"6360:1:30","type":"","value":"0"},{"kind":"number","nativeSrc":"6363:4:30","nodeType":"YulLiteral","src":"6363:4:30","type":"","value":"0x24"}],"functionName":{"name":"revert","nativeSrc":"6353:6:30","nodeType":"YulIdentifier","src":"6353:6:30"},"nativeSrc":"6353:15:30","nodeType":"YulFunctionCall","src":"6353:15:30"},"nativeSrc":"6353:15:30","nodeType":"YulExpressionStatement","src":"6353:15:30"}]},"name":"panic_error_0x41","nativeSrc":"6247:127:30","nodeType":"YulFunctionDefinition","src":"6247:127:30"},{"body":{"nativeSrc":"6509:1077:30","nodeType":"YulBlock","src":"6509:1077:30","statements":[{"body":{"nativeSrc":"6556:16:30","nodeType":"YulBlock","src":"6556:16:30","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"6565:1:30","nodeType":"YulLiteral","src":"6565:1:30","type":"","value":"0"},{"kind":"number","nativeSrc":"6568:1:30","nodeType":"YulLiteral","src":"6568:1:30","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"6558:6:30","nodeType":"YulIdentifier","src":"6558:6:30"},"nativeSrc":"6558:12:30","nodeType":"YulFunctionCall","src":"6558:12:30"},"nativeSrc":"6558:12:30","nodeType":"YulExpressionStatement","src":"6558:12:30"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"6530:7:30","nodeType":"YulIdentifier","src":"6530:7:30"},{"name":"headStart","nativeSrc":"6539:9:30","nodeType":"YulIdentifier","src":"6539:9:30"}],"functionName":{"name":"sub","nativeSrc":"6526:3:30","nodeType":"YulIdentifier","src":"6526:3:30"},"nativeSrc":"6526:23:30","nodeType":"YulFunctionCall","src":"6526:23:30"},{"kind":"number","nativeSrc":"6551:3:30","nodeType":"YulLiteral","src":"6551:3:30","type":"","value":"128"}],"functionName":{"name":"slt","nativeSrc":"6522:3:30","nodeType":"YulIdentifier","src":"6522:3:30"},"nativeSrc":"6522:33:30","nodeType":"YulFunctionCall","src":"6522:33:30"},"nativeSrc":"6519:53:30","nodeType":"YulIf","src":"6519:53:30"},{"nativeSrc":"6581:39:30","nodeType":"YulAssignment","src":"6581:39:30","value":{"arguments":[{"name":"headStart","nativeSrc":"6610:9:30","nodeType":"YulIdentifier","src":"6610:9:30"}],"functionName":{"name":"abi_decode_address","nativeSrc":"6591:18:30","nodeType":"YulIdentifier","src":"6591:18:30"},"nativeSrc":"6591:29:30","nodeType":"YulFunctionCall","src":"6591:29:30"},"variableNames":[{"name":"value0","nativeSrc":"6581:6:30","nodeType":"YulIdentifier","src":"6581:6:30"}]},{"nativeSrc":"6629:48:30","nodeType":"YulAssignment","src":"6629:48:30","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"6662:9:30","nodeType":"YulIdentifier","src":"6662:9:30"},{"kind":"number","nativeSrc":"6673:2:30","nodeType":"YulLiteral","src":"6673:2:30","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"6658:3:30","nodeType":"YulIdentifier","src":"6658:3:30"},"nativeSrc":"6658:18:30","nodeType":"YulFunctionCall","src":"6658:18:30"}],"functionName":{"name":"abi_decode_address","nativeSrc":"6639:18:30","nodeType":"YulIdentifier","src":"6639:18:30"},"nativeSrc":"6639:38:30","nodeType":"YulFunctionCall","src":"6639:38:30"},"variableNames":[{"name":"value1","nativeSrc":"6629:6:30","nodeType":"YulIdentifier","src":"6629:6:30"}]},{"nativeSrc":"6686:14:30","nodeType":"YulVariableDeclaration","src":"6686:14:30","value":{"kind":"number","nativeSrc":"6699:1:30","nodeType":"YulLiteral","src":"6699:1:30","type":"","value":"0"},"variables":[{"name":"value","nativeSrc":"6690:5:30","nodeType":"YulTypedName","src":"6690:5:30","type":""}]},{"nativeSrc":"6709:41:30","nodeType":"YulAssignment","src":"6709:41:30","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"6735:9:30","nodeType":"YulIdentifier","src":"6735:9:30"},{"kind":"number","nativeSrc":"6746:2:30","nodeType":"YulLiteral","src":"6746:2:30","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"6731:3:30","nodeType":"YulIdentifier","src":"6731:3:30"},"nativeSrc":"6731:18:30","nodeType":"YulFunctionCall","src":"6731:18:30"}],"functionName":{"name":"calldataload","nativeSrc":"6718:12:30","nodeType":"YulIdentifier","src":"6718:12:30"},"nativeSrc":"6718:32:30","nodeType":"YulFunctionCall","src":"6718:32:30"},"variableNames":[{"name":"value","nativeSrc":"6709:5:30","nodeType":"YulIdentifier","src":"6709:5:30"}]},{"nativeSrc":"6759:15:30","nodeType":"YulAssignment","src":"6759:15:30","value":{"name":"value","nativeSrc":"6769:5:30","nodeType":"YulIdentifier","src":"6769:5:30"},"variableNames":[{"name":"value2","nativeSrc":"6759:6:30","nodeType":"YulIdentifier","src":"6759:6:30"}]},{"nativeSrc":"6783:46:30","nodeType":"YulVariableDeclaration","src":"6783:46:30","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"6814:9:30","nodeType":"YulIdentifier","src":"6814:9:30"},{"kind":"number","nativeSrc":"6825:2:30","nodeType":"YulLiteral","src":"6825:2:30","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"6810:3:30","nodeType":"YulIdentifier","src":"6810:3:30"},"nativeSrc":"6810:18:30","nodeType":"YulFunctionCall","src":"6810:18:30"}],"functionName":{"name":"calldataload","nativeSrc":"6797:12:30","nodeType":"YulIdentifier","src":"6797:12:30"},"nativeSrc":"6797:32:30","nodeType":"YulFunctionCall","src":"6797:32:30"},"variables":[{"name":"offset","nativeSrc":"6787:6:30","nodeType":"YulTypedName","src":"6787:6:30","type":""}]},{"body":{"nativeSrc":"6872:16:30","nodeType":"YulBlock","src":"6872:16:30","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"6881:1:30","nodeType":"YulLiteral","src":"6881:1:30","type":"","value":"0"},{"kind":"number","nativeSrc":"6884:1:30","nodeType":"YulLiteral","src":"6884:1:30","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"6874:6:30","nodeType":"YulIdentifier","src":"6874:6:30"},"nativeSrc":"6874:12:30","nodeType":"YulFunctionCall","src":"6874:12:30"},"nativeSrc":"6874:12:30","nodeType":"YulExpressionStatement","src":"6874:12:30"}]},"condition":{"arguments":[{"name":"offset","nativeSrc":"6844:6:30","nodeType":"YulIdentifier","src":"6844:6:30"},{"kind":"number","nativeSrc":"6852:18:30","nodeType":"YulLiteral","src":"6852:18:30","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"6841:2:30","nodeType":"YulIdentifier","src":"6841:2:30"},"nativeSrc":"6841:30:30","nodeType":"YulFunctionCall","src":"6841:30:30"},"nativeSrc":"6838:50:30","nodeType":"YulIf","src":"6838:50:30"},{"nativeSrc":"6897:32:30","nodeType":"YulVariableDeclaration","src":"6897:32:30","value":{"arguments":[{"name":"headStart","nativeSrc":"6911:9:30","nodeType":"YulIdentifier","src":"6911:9:30"},{"name":"offset","nativeSrc":"6922:6:30","nodeType":"YulIdentifier","src":"6922:6:30"}],"functionName":{"name":"add","nativeSrc":"6907:3:30","nodeType":"YulIdentifier","src":"6907:3:30"},"nativeSrc":"6907:22:30","nodeType":"YulFunctionCall","src":"6907:22:30"},"variables":[{"name":"_1","nativeSrc":"6901:2:30","nodeType":"YulTypedName","src":"6901:2:30","type":""}]},{"body":{"nativeSrc":"6977:16:30","nodeType":"YulBlock","src":"6977:16:30","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"6986:1:30","nodeType":"YulLiteral","src":"6986:1:30","type":"","value":"0"},{"kind":"number","nativeSrc":"6989:1:30","nodeType":"YulLiteral","src":"6989:1:30","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"6979:6:30","nodeType":"YulIdentifier","src":"6979:6:30"},"nativeSrc":"6979:12:30","nodeType":"YulFunctionCall","src":"6979:12:30"},"nativeSrc":"6979:12:30","nodeType":"YulExpressionStatement","src":"6979:12:30"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_1","nativeSrc":"6956:2:30","nodeType":"YulIdentifier","src":"6956:2:30"},{"kind":"number","nativeSrc":"6960:4:30","nodeType":"YulLiteral","src":"6960:4:30","type":"","value":"0x1f"}],"functionName":{"name":"add","nativeSrc":"6952:3:30","nodeType":"YulIdentifier","src":"6952:3:30"},"nativeSrc":"6952:13:30","nodeType":"YulFunctionCall","src":"6952:13:30"},{"name":"dataEnd","nativeSrc":"6967:7:30","nodeType":"YulIdentifier","src":"6967:7:30"}],"functionName":{"name":"slt","nativeSrc":"6948:3:30","nodeType":"YulIdentifier","src":"6948:3:30"},"nativeSrc":"6948:27:30","nodeType":"YulFunctionCall","src":"6948:27:30"}],"functionName":{"name":"iszero","nativeSrc":"6941:6:30","nodeType":"YulIdentifier","src":"6941:6:30"},"nativeSrc":"6941:35:30","nodeType":"YulFunctionCall","src":"6941:35:30"},"nativeSrc":"6938:55:30","nodeType":"YulIf","src":"6938:55:30"},{"nativeSrc":"7002:30:30","nodeType":"YulVariableDeclaration","src":"7002:30:30","value":{"arguments":[{"name":"_1","nativeSrc":"7029:2:30","nodeType":"YulIdentifier","src":"7029:2:30"}],"functionName":{"name":"calldataload","nativeSrc":"7016:12:30","nodeType":"YulIdentifier","src":"7016:12:30"},"nativeSrc":"7016:16:30","nodeType":"YulFunctionCall","src":"7016:16:30"},"variables":[{"name":"length","nativeSrc":"7006:6:30","nodeType":"YulTypedName","src":"7006:6:30","type":""}]},{"body":{"nativeSrc":"7075:22:30","nodeType":"YulBlock","src":"7075:22:30","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nativeSrc":"7077:16:30","nodeType":"YulIdentifier","src":"7077:16:30"},"nativeSrc":"7077:18:30","nodeType":"YulFunctionCall","src":"7077:18:30"},"nativeSrc":"7077:18:30","nodeType":"YulExpressionStatement","src":"7077:18:30"}]},"condition":{"arguments":[{"name":"length","nativeSrc":"7047:6:30","nodeType":"YulIdentifier","src":"7047:6:30"},{"kind":"number","nativeSrc":"7055:18:30","nodeType":"YulLiteral","src":"7055:18:30","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"7044:2:30","nodeType":"YulIdentifier","src":"7044:2:30"},"nativeSrc":"7044:30:30","nodeType":"YulFunctionCall","src":"7044:30:30"},"nativeSrc":"7041:56:30","nodeType":"YulIf","src":"7041:56:30"},{"nativeSrc":"7106:23:30","nodeType":"YulVariableDeclaration","src":"7106:23:30","value":{"arguments":[{"kind":"number","nativeSrc":"7126:2:30","nodeType":"YulLiteral","src":"7126:2:30","type":"","value":"64"}],"functionName":{"name":"mload","nativeSrc":"7120:5:30","nodeType":"YulIdentifier","src":"7120:5:30"},"nativeSrc":"7120:9:30","nodeType":"YulFunctionCall","src":"7120:9:30"},"variables":[{"name":"memPtr","nativeSrc":"7110:6:30","nodeType":"YulTypedName","src":"7110:6:30","type":""}]},{"nativeSrc":"7138:85:30","nodeType":"YulVariableDeclaration","src":"7138:85:30","value":{"arguments":[{"name":"memPtr","nativeSrc":"7160:6:30","nodeType":"YulIdentifier","src":"7160:6:30"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"length","nativeSrc":"7184:6:30","nodeType":"YulIdentifier","src":"7184:6:30"},{"kind":"number","nativeSrc":"7192:4:30","nodeType":"YulLiteral","src":"7192:4:30","type":"","value":"0x1f"}],"functionName":{"name":"add","nativeSrc":"7180:3:30","nodeType":"YulIdentifier","src":"7180:3:30"},"nativeSrc":"7180:17:30","nodeType":"YulFunctionCall","src":"7180:17:30"},{"arguments":[{"kind":"number","nativeSrc":"7203:2:30","nodeType":"YulLiteral","src":"7203:2:30","type":"","value":"31"}],"functionName":{"name":"not","nativeSrc":"7199:3:30","nodeType":"YulIdentifier","src":"7199:3:30"},"nativeSrc":"7199:7:30","nodeType":"YulFunctionCall","src":"7199:7:30"}],"functionName":{"name":"and","nativeSrc":"7176:3:30","nodeType":"YulIdentifier","src":"7176:3:30"},"nativeSrc":"7176:31:30","nodeType":"YulFunctionCall","src":"7176:31:30"},{"kind":"number","nativeSrc":"7209:2:30","nodeType":"YulLiteral","src":"7209:2:30","type":"","value":"63"}],"functionName":{"name":"add","nativeSrc":"7172:3:30","nodeType":"YulIdentifier","src":"7172:3:30"},"nativeSrc":"7172:40:30","nodeType":"YulFunctionCall","src":"7172:40:30"},{"arguments":[{"kind":"number","nativeSrc":"7218:2:30","nodeType":"YulLiteral","src":"7218:2:30","type":"","value":"31"}],"functionName":{"name":"not","nativeSrc":"7214:3:30","nodeType":"YulIdentifier","src":"7214:3:30"},"nativeSrc":"7214:7:30","nodeType":"YulFunctionCall","src":"7214:7:30"}],"functionName":{"name":"and","nativeSrc":"7168:3:30","nodeType":"YulIdentifier","src":"7168:3:30"},"nativeSrc":"7168:54:30","nodeType":"YulFunctionCall","src":"7168:54:30"}],"functionName":{"name":"add","nativeSrc":"7156:3:30","nodeType":"YulIdentifier","src":"7156:3:30"},"nativeSrc":"7156:67:30","nodeType":"YulFunctionCall","src":"7156:67:30"},"variables":[{"name":"newFreePtr","nativeSrc":"7142:10:30","nodeType":"YulTypedName","src":"7142:10:30","type":""}]},{"body":{"nativeSrc":"7298:22:30","nodeType":"YulBlock","src":"7298:22:30","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nativeSrc":"7300:16:30","nodeType":"YulIdentifier","src":"7300:16:30"},"nativeSrc":"7300:18:30","nodeType":"YulFunctionCall","src":"7300:18:30"},"nativeSrc":"7300:18:30","nodeType":"YulExpressionStatement","src":"7300:18:30"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nativeSrc":"7241:10:30","nodeType":"YulIdentifier","src":"7241:10:30"},{"kind":"number","nativeSrc":"7253:18:30","nodeType":"YulLiteral","src":"7253:18:30","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"7238:2:30","nodeType":"YulIdentifier","src":"7238:2:30"},"nativeSrc":"7238:34:30","nodeType":"YulFunctionCall","src":"7238:34:30"},{"arguments":[{"name":"newFreePtr","nativeSrc":"7277:10:30","nodeType":"YulIdentifier","src":"7277:10:30"},{"name":"memPtr","nativeSrc":"7289:6:30","nodeType":"YulIdentifier","src":"7289:6:30"}],"functionName":{"name":"lt","nativeSrc":"7274:2:30","nodeType":"YulIdentifier","src":"7274:2:30"},"nativeSrc":"7274:22:30","nodeType":"YulFunctionCall","src":"7274:22:30"}],"functionName":{"name":"or","nativeSrc":"7235:2:30","nodeType":"YulIdentifier","src":"7235:2:30"},"nativeSrc":"7235:62:30","nodeType":"YulFunctionCall","src":"7235:62:30"},"nativeSrc":"7232:88:30","nodeType":"YulIf","src":"7232:88:30"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"7336:2:30","nodeType":"YulLiteral","src":"7336:2:30","type":"","value":"64"},{"name":"newFreePtr","nativeSrc":"7340:10:30","nodeType":"YulIdentifier","src":"7340:10:30"}],"functionName":{"name":"mstore","nativeSrc":"7329:6:30","nodeType":"YulIdentifier","src":"7329:6:30"},"nativeSrc":"7329:22:30","nodeType":"YulFunctionCall","src":"7329:22:30"},"nativeSrc":"7329:22:30","nodeType":"YulExpressionStatement","src":"7329:22:30"},{"expression":{"arguments":[{"name":"memPtr","nativeSrc":"7367:6:30","nodeType":"YulIdentifier","src":"7367:6:30"},{"name":"length","nativeSrc":"7375:6:30","nodeType":"YulIdentifier","src":"7375:6:30"}],"functionName":{"name":"mstore","nativeSrc":"7360:6:30","nodeType":"YulIdentifier","src":"7360:6:30"},"nativeSrc":"7360:22:30","nodeType":"YulFunctionCall","src":"7360:22:30"},"nativeSrc":"7360:22:30","nodeType":"YulExpressionStatement","src":"7360:22:30"},{"body":{"nativeSrc":"7432:16:30","nodeType":"YulBlock","src":"7432:16:30","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"7441:1:30","nodeType":"YulLiteral","src":"7441:1:30","type":"","value":"0"},{"kind":"number","nativeSrc":"7444:1:30","nodeType":"YulLiteral","src":"7444:1:30","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"7434:6:30","nodeType":"YulIdentifier","src":"7434:6:30"},"nativeSrc":"7434:12:30","nodeType":"YulFunctionCall","src":"7434:12:30"},"nativeSrc":"7434:12:30","nodeType":"YulExpressionStatement","src":"7434:12:30"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_1","nativeSrc":"7405:2:30","nodeType":"YulIdentifier","src":"7405:2:30"},{"name":"length","nativeSrc":"7409:6:30","nodeType":"YulIdentifier","src":"7409:6:30"}],"functionName":{"name":"add","nativeSrc":"7401:3:30","nodeType":"YulIdentifier","src":"7401:3:30"},"nativeSrc":"7401:15:30","nodeType":"YulFunctionCall","src":"7401:15:30"},{"kind":"number","nativeSrc":"7418:2:30","nodeType":"YulLiteral","src":"7418:2:30","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"7397:3:30","nodeType":"YulIdentifier","src":"7397:3:30"},"nativeSrc":"7397:24:30","nodeType":"YulFunctionCall","src":"7397:24:30"},{"name":"dataEnd","nativeSrc":"7423:7:30","nodeType":"YulIdentifier","src":"7423:7:30"}],"functionName":{"name":"gt","nativeSrc":"7394:2:30","nodeType":"YulIdentifier","src":"7394:2:30"},"nativeSrc":"7394:37:30","nodeType":"YulFunctionCall","src":"7394:37:30"},"nativeSrc":"7391:57:30","nodeType":"YulIf","src":"7391:57:30"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"7474:6:30","nodeType":"YulIdentifier","src":"7474:6:30"},{"kind":"number","nativeSrc":"7482:2:30","nodeType":"YulLiteral","src":"7482:2:30","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"7470:3:30","nodeType":"YulIdentifier","src":"7470:3:30"},"nativeSrc":"7470:15:30","nodeType":"YulFunctionCall","src":"7470:15:30"},{"arguments":[{"name":"_1","nativeSrc":"7491:2:30","nodeType":"YulIdentifier","src":"7491:2:30"},{"kind":"number","nativeSrc":"7495:2:30","nodeType":"YulLiteral","src":"7495:2:30","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"7487:3:30","nodeType":"YulIdentifier","src":"7487:3:30"},"nativeSrc":"7487:11:30","nodeType":"YulFunctionCall","src":"7487:11:30"},{"name":"length","nativeSrc":"7500:6:30","nodeType":"YulIdentifier","src":"7500:6:30"}],"functionName":{"name":"calldatacopy","nativeSrc":"7457:12:30","nodeType":"YulIdentifier","src":"7457:12:30"},"nativeSrc":"7457:50:30","nodeType":"YulFunctionCall","src":"7457:50:30"},"nativeSrc":"7457:50:30","nodeType":"YulExpressionStatement","src":"7457:50:30"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"memPtr","nativeSrc":"7531:6:30","nodeType":"YulIdentifier","src":"7531:6:30"},{"name":"length","nativeSrc":"7539:6:30","nodeType":"YulIdentifier","src":"7539:6:30"}],"functionName":{"name":"add","nativeSrc":"7527:3:30","nodeType":"YulIdentifier","src":"7527:3:30"},"nativeSrc":"7527:19:30","nodeType":"YulFunctionCall","src":"7527:19:30"},{"kind":"number","nativeSrc":"7548:2:30","nodeType":"YulLiteral","src":"7548:2:30","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"7523:3:30","nodeType":"YulIdentifier","src":"7523:3:30"},"nativeSrc":"7523:28:30","nodeType":"YulFunctionCall","src":"7523:28:30"},{"kind":"number","nativeSrc":"7553:1:30","nodeType":"YulLiteral","src":"7553:1:30","type":"","value":"0"}],"functionName":{"name":"mstore","nativeSrc":"7516:6:30","nodeType":"YulIdentifier","src":"7516:6:30"},"nativeSrc":"7516:39:30","nodeType":"YulFunctionCall","src":"7516:39:30"},"nativeSrc":"7516:39:30","nodeType":"YulExpressionStatement","src":"7516:39:30"},{"nativeSrc":"7564:16:30","nodeType":"YulAssignment","src":"7564:16:30","value":{"name":"memPtr","nativeSrc":"7574:6:30","nodeType":"YulIdentifier","src":"7574:6:30"},"variableNames":[{"name":"value3","nativeSrc":"7564:6:30","nodeType":"YulIdentifier","src":"7564:6:30"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256t_bytes_memory_ptr","nativeSrc":"6379:1207:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"6451:9:30","nodeType":"YulTypedName","src":"6451:9:30","type":""},{"name":"dataEnd","nativeSrc":"6462:7:30","nodeType":"YulTypedName","src":"6462:7:30","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"6474:6:30","nodeType":"YulTypedName","src":"6474:6:30","type":""},{"name":"value1","nativeSrc":"6482:6:30","nodeType":"YulTypedName","src":"6482:6:30","type":""},{"name":"value2","nativeSrc":"6490:6:30","nodeType":"YulTypedName","src":"6490:6:30","type":""},{"name":"value3","nativeSrc":"6498:6:30","nodeType":"YulTypedName","src":"6498:6:30","type":""}],"src":"6379:1207:30"},{"body":{"nativeSrc":"7718:166:30","nodeType":"YulBlock","src":"7718:166:30","statements":[{"nativeSrc":"7728:26:30","nodeType":"YulAssignment","src":"7728:26:30","value":{"arguments":[{"name":"headStart","nativeSrc":"7740:9:30","nodeType":"YulIdentifier","src":"7740:9:30"},{"kind":"number","nativeSrc":"7751:2:30","nodeType":"YulLiteral","src":"7751:2:30","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"7736:3:30","nodeType":"YulIdentifier","src":"7736:3:30"},"nativeSrc":"7736:18:30","nodeType":"YulFunctionCall","src":"7736:18:30"},"variableNames":[{"name":"tail","nativeSrc":"7728:4:30","nodeType":"YulIdentifier","src":"7728:4:30"}]},{"expression":{"arguments":[{"name":"headStart","nativeSrc":"7770:9:30","nodeType":"YulIdentifier","src":"7770:9:30"},{"arguments":[{"name":"value0","nativeSrc":"7785:6:30","nodeType":"YulIdentifier","src":"7785:6:30"},{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"7801:3:30","nodeType":"YulLiteral","src":"7801:3:30","type":"","value":"160"},{"kind":"number","nativeSrc":"7806:1:30","nodeType":"YulLiteral","src":"7806:1:30","type":"","value":"1"}],"functionName":{"name":"shl","nativeSrc":"7797:3:30","nodeType":"YulIdentifier","src":"7797:3:30"},"nativeSrc":"7797:11:30","nodeType":"YulFunctionCall","src":"7797:11:30"},{"kind":"number","nativeSrc":"7810:1:30","nodeType":"YulLiteral","src":"7810:1:30","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"7793:3:30","nodeType":"YulIdentifier","src":"7793:3:30"},"nativeSrc":"7793:19:30","nodeType":"YulFunctionCall","src":"7793:19:30"}],"functionName":{"name":"and","nativeSrc":"7781:3:30","nodeType":"YulIdentifier","src":"7781:3:30"},"nativeSrc":"7781:32:30","nodeType":"YulFunctionCall","src":"7781:32:30"}],"functionName":{"name":"mstore","nativeSrc":"7763:6:30","nodeType":"YulIdentifier","src":"7763:6:30"},"nativeSrc":"7763:51:30","nodeType":"YulFunctionCall","src":"7763:51:30"},"nativeSrc":"7763:51:30","nodeType":"YulExpressionStatement","src":"7763:51:30"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"7834:9:30","nodeType":"YulIdentifier","src":"7834:9:30"},{"kind":"number","nativeSrc":"7845:2:30","nodeType":"YulLiteral","src":"7845:2:30","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"7830:3:30","nodeType":"YulIdentifier","src":"7830:3:30"},"nativeSrc":"7830:18:30","nodeType":"YulFunctionCall","src":"7830:18:30"},{"arguments":[{"name":"value1","nativeSrc":"7854:6:30","nodeType":"YulIdentifier","src":"7854:6:30"},{"kind":"number","nativeSrc":"7862:14:30","nodeType":"YulLiteral","src":"7862:14:30","type":"","value":"0xffffffffffff"}],"functionName":{"name":"and","nativeSrc":"7850:3:30","nodeType":"YulIdentifier","src":"7850:3:30"},"nativeSrc":"7850:27:30","nodeType":"YulFunctionCall","src":"7850:27:30"}],"functionName":{"name":"mstore","nativeSrc":"7823:6:30","nodeType":"YulIdentifier","src":"7823:6:30"},"nativeSrc":"7823:55:30","nodeType":"YulFunctionCall","src":"7823:55:30"},"nativeSrc":"7823:55:30","nodeType":"YulExpressionStatement","src":"7823:55:30"}]},"name":"abi_encode_tuple_t_address_t_uint48__to_t_address_t_uint48__fromStack_reversed","nativeSrc":"7591:293:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"7679:9:30","nodeType":"YulTypedName","src":"7679:9:30","type":""},{"name":"value1","nativeSrc":"7690:6:30","nodeType":"YulTypedName","src":"7690:6:30","type":""},{"name":"value0","nativeSrc":"7698:6:30","nodeType":"YulTypedName","src":"7698:6:30","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"7709:4:30","nodeType":"YulTypedName","src":"7709:4:30","type":""}],"src":"7591:293:30"},{"body":{"nativeSrc":"7976:173:30","nodeType":"YulBlock","src":"7976:173:30","statements":[{"body":{"nativeSrc":"8022:16:30","nodeType":"YulBlock","src":"8022:16:30","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"8031:1:30","nodeType":"YulLiteral","src":"8031:1:30","type":"","value":"0"},{"kind":"number","nativeSrc":"8034:1:30","nodeType":"YulLiteral","src":"8034:1:30","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"8024:6:30","nodeType":"YulIdentifier","src":"8024:6:30"},"nativeSrc":"8024:12:30","nodeType":"YulFunctionCall","src":"8024:12:30"},"nativeSrc":"8024:12:30","nodeType":"YulExpressionStatement","src":"8024:12:30"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"7997:7:30","nodeType":"YulIdentifier","src":"7997:7:30"},{"name":"headStart","nativeSrc":"8006:9:30","nodeType":"YulIdentifier","src":"8006:9:30"}],"functionName":{"name":"sub","nativeSrc":"7993:3:30","nodeType":"YulIdentifier","src":"7993:3:30"},"nativeSrc":"7993:23:30","nodeType":"YulFunctionCall","src":"7993:23:30"},{"kind":"number","nativeSrc":"8018:2:30","nodeType":"YulLiteral","src":"8018:2:30","type":"","value":"64"}],"functionName":{"name":"slt","nativeSrc":"7989:3:30","nodeType":"YulIdentifier","src":"7989:3:30"},"nativeSrc":"7989:32:30","nodeType":"YulFunctionCall","src":"7989:32:30"},"nativeSrc":"7986:52:30","nodeType":"YulIf","src":"7986:52:30"},{"nativeSrc":"8047:39:30","nodeType":"YulAssignment","src":"8047:39:30","value":{"arguments":[{"name":"headStart","nativeSrc":"8076:9:30","nodeType":"YulIdentifier","src":"8076:9:30"}],"functionName":{"name":"abi_decode_address","nativeSrc":"8057:18:30","nodeType":"YulIdentifier","src":"8057:18:30"},"nativeSrc":"8057:29:30","nodeType":"YulFunctionCall","src":"8057:29:30"},"variableNames":[{"name":"value0","nativeSrc":"8047:6:30","nodeType":"YulIdentifier","src":"8047:6:30"}]},{"nativeSrc":"8095:48:30","nodeType":"YulAssignment","src":"8095:48:30","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"8128:9:30","nodeType":"YulIdentifier","src":"8128:9:30"},{"kind":"number","nativeSrc":"8139:2:30","nodeType":"YulLiteral","src":"8139:2:30","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"8124:3:30","nodeType":"YulIdentifier","src":"8124:3:30"},"nativeSrc":"8124:18:30","nodeType":"YulFunctionCall","src":"8124:18:30"}],"functionName":{"name":"abi_decode_address","nativeSrc":"8105:18:30","nodeType":"YulIdentifier","src":"8105:18:30"},"nativeSrc":"8105:38:30","nodeType":"YulFunctionCall","src":"8105:38:30"},"variableNames":[{"name":"value1","nativeSrc":"8095:6:30","nodeType":"YulIdentifier","src":"8095:6:30"}]}]},"name":"abi_decode_tuple_t_addresst_address","nativeSrc":"7889:260:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"7934:9:30","nodeType":"YulTypedName","src":"7934:9:30","type":""},{"name":"dataEnd","nativeSrc":"7945:7:30","nodeType":"YulTypedName","src":"7945:7:30","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"7957:6:30","nodeType":"YulTypedName","src":"7957:6:30","type":""},{"name":"value1","nativeSrc":"7965:6:30","nodeType":"YulTypedName","src":"7965:6:30","type":""}],"src":"7889:260:30"},{"body":{"nativeSrc":"8253:109:30","nodeType":"YulBlock","src":"8253:109:30","statements":[{"nativeSrc":"8263:26:30","nodeType":"YulAssignment","src":"8263:26:30","value":{"arguments":[{"name":"headStart","nativeSrc":"8275:9:30","nodeType":"YulIdentifier","src":"8275:9:30"},{"kind":"number","nativeSrc":"8286:2:30","nodeType":"YulLiteral","src":"8286:2:30","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"8271:3:30","nodeType":"YulIdentifier","src":"8271:3:30"},"nativeSrc":"8271:18:30","nodeType":"YulFunctionCall","src":"8271:18:30"},"variableNames":[{"name":"tail","nativeSrc":"8263:4:30","nodeType":"YulIdentifier","src":"8263:4:30"}]},{"expression":{"arguments":[{"name":"headStart","nativeSrc":"8305:9:30","nodeType":"YulIdentifier","src":"8305:9:30"},{"arguments":[{"name":"value0","nativeSrc":"8320:6:30","nodeType":"YulIdentifier","src":"8320:6:30"},{"kind":"number","nativeSrc":"8328:26:30","nodeType":"YulLiteral","src":"8328:26:30","type":"","value":"0xffffffffffffffffffffffff"}],"functionName":{"name":"and","nativeSrc":"8316:3:30","nodeType":"YulIdentifier","src":"8316:3:30"},"nativeSrc":"8316:39:30","nodeType":"YulFunctionCall","src":"8316:39:30"}],"functionName":{"name":"mstore","nativeSrc":"8298:6:30","nodeType":"YulIdentifier","src":"8298:6:30"},"nativeSrc":"8298:58:30","nodeType":"YulFunctionCall","src":"8298:58:30"},"nativeSrc":"8298:58:30","nodeType":"YulExpressionStatement","src":"8298:58:30"}]},"name":"abi_encode_tuple_t_uint96__to_t_uint96__fromStack_reversed","nativeSrc":"8154:208:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"8222:9:30","nodeType":"YulTypedName","src":"8222:9:30","type":""},{"name":"value0","nativeSrc":"8233:6:30","nodeType":"YulTypedName","src":"8233:6:30","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"8244:4:30","nodeType":"YulTypedName","src":"8244:4:30","type":""}],"src":"8154:208:30"},{"body":{"nativeSrc":"8422:325:30","nodeType":"YulBlock","src":"8422:325:30","statements":[{"nativeSrc":"8432:22:30","nodeType":"YulAssignment","src":"8432:22:30","value":{"arguments":[{"kind":"number","nativeSrc":"8446:1:30","nodeType":"YulLiteral","src":"8446:1:30","type":"","value":"1"},{"name":"data","nativeSrc":"8449:4:30","nodeType":"YulIdentifier","src":"8449:4:30"}],"functionName":{"name":"shr","nativeSrc":"8442:3:30","nodeType":"YulIdentifier","src":"8442:3:30"},"nativeSrc":"8442:12:30","nodeType":"YulFunctionCall","src":"8442:12:30"},"variableNames":[{"name":"length","nativeSrc":"8432:6:30","nodeType":"YulIdentifier","src":"8432:6:30"}]},{"nativeSrc":"8463:38:30","nodeType":"YulVariableDeclaration","src":"8463:38:30","value":{"arguments":[{"name":"data","nativeSrc":"8493:4:30","nodeType":"YulIdentifier","src":"8493:4:30"},{"kind":"number","nativeSrc":"8499:1:30","nodeType":"YulLiteral","src":"8499:1:30","type":"","value":"1"}],"functionName":{"name":"and","nativeSrc":"8489:3:30","nodeType":"YulIdentifier","src":"8489:3:30"},"nativeSrc":"8489:12:30","nodeType":"YulFunctionCall","src":"8489:12:30"},"variables":[{"name":"outOfPlaceEncoding","nativeSrc":"8467:18:30","nodeType":"YulTypedName","src":"8467:18:30","type":""}]},{"body":{"nativeSrc":"8540:31:30","nodeType":"YulBlock","src":"8540:31:30","statements":[{"nativeSrc":"8542:27:30","nodeType":"YulAssignment","src":"8542:27:30","value":{"arguments":[{"name":"length","nativeSrc":"8556:6:30","nodeType":"YulIdentifier","src":"8556:6:30"},{"kind":"number","nativeSrc":"8564:4:30","nodeType":"YulLiteral","src":"8564:4:30","type":"","value":"0x7f"}],"functionName":{"name":"and","nativeSrc":"8552:3:30","nodeType":"YulIdentifier","src":"8552:3:30"},"nativeSrc":"8552:17:30","nodeType":"YulFunctionCall","src":"8552:17:30"},"variableNames":[{"name":"length","nativeSrc":"8542:6:30","nodeType":"YulIdentifier","src":"8542:6:30"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nativeSrc":"8520:18:30","nodeType":"YulIdentifier","src":"8520:18:30"}],"functionName":{"name":"iszero","nativeSrc":"8513:6:30","nodeType":"YulIdentifier","src":"8513:6:30"},"nativeSrc":"8513:26:30","nodeType":"YulFunctionCall","src":"8513:26:30"},"nativeSrc":"8510:61:30","nodeType":"YulIf","src":"8510:61:30"},{"body":{"nativeSrc":"8630:111:30","nodeType":"YulBlock","src":"8630:111:30","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"8651:1:30","nodeType":"YulLiteral","src":"8651:1:30","type":"","value":"0"},{"arguments":[{"kind":"number","nativeSrc":"8658:3:30","nodeType":"YulLiteral","src":"8658:3:30","type":"","value":"224"},{"kind":"number","nativeSrc":"8663:10:30","nodeType":"YulLiteral","src":"8663:10:30","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nativeSrc":"8654:3:30","nodeType":"YulIdentifier","src":"8654:3:30"},"nativeSrc":"8654:20:30","nodeType":"YulFunctionCall","src":"8654:20:30"}],"functionName":{"name":"mstore","nativeSrc":"8644:6:30","nodeType":"YulIdentifier","src":"8644:6:30"},"nativeSrc":"8644:31:30","nodeType":"YulFunctionCall","src":"8644:31:30"},"nativeSrc":"8644:31:30","nodeType":"YulExpressionStatement","src":"8644:31:30"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"8695:1:30","nodeType":"YulLiteral","src":"8695:1:30","type":"","value":"4"},{"kind":"number","nativeSrc":"8698:4:30","nodeType":"YulLiteral","src":"8698:4:30","type":"","value":"0x22"}],"functionName":{"name":"mstore","nativeSrc":"8688:6:30","nodeType":"YulIdentifier","src":"8688:6:30"},"nativeSrc":"8688:15:30","nodeType":"YulFunctionCall","src":"8688:15:30"},"nativeSrc":"8688:15:30","nodeType":"YulExpressionStatement","src":"8688:15:30"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"8723:1:30","nodeType":"YulLiteral","src":"8723:1:30","type":"","value":"0"},{"kind":"number","nativeSrc":"8726:4:30","nodeType":"YulLiteral","src":"8726:4:30","type":"","value":"0x24"}],"functionName":{"name":"revert","nativeSrc":"8716:6:30","nodeType":"YulIdentifier","src":"8716:6:30"},"nativeSrc":"8716:15:30","nodeType":"YulFunctionCall","src":"8716:15:30"},"nativeSrc":"8716:15:30","nodeType":"YulExpressionStatement","src":"8716:15:30"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nativeSrc":"8586:18:30","nodeType":"YulIdentifier","src":"8586:18:30"},{"arguments":[{"name":"length","nativeSrc":"8609:6:30","nodeType":"YulIdentifier","src":"8609:6:30"},{"kind":"number","nativeSrc":"8617:2:30","nodeType":"YulLiteral","src":"8617:2:30","type":"","value":"32"}],"functionName":{"name":"lt","nativeSrc":"8606:2:30","nodeType":"YulIdentifier","src":"8606:2:30"},"nativeSrc":"8606:14:30","nodeType":"YulFunctionCall","src":"8606:14:30"}],"functionName":{"name":"eq","nativeSrc":"8583:2:30","nodeType":"YulIdentifier","src":"8583:2:30"},"nativeSrc":"8583:38:30","nodeType":"YulFunctionCall","src":"8583:38:30"},"nativeSrc":"8580:161:30","nodeType":"YulIf","src":"8580:161:30"}]},"name":"extract_byte_array_length","nativeSrc":"8367:380:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nativeSrc":"8402:4:30","nodeType":"YulTypedName","src":"8402:4:30","type":""}],"returnVariables":[{"name":"length","nativeSrc":"8411:6:30","nodeType":"YulTypedName","src":"8411:6:30","type":""}],"src":"8367:380:30"},{"body":{"nativeSrc":"8909:214:30","nodeType":"YulBlock","src":"8909:214:30","statements":[{"nativeSrc":"8919:26:30","nodeType":"YulAssignment","src":"8919:26:30","value":{"arguments":[{"name":"headStart","nativeSrc":"8931:9:30","nodeType":"YulIdentifier","src":"8931:9:30"},{"kind":"number","nativeSrc":"8942:2:30","nodeType":"YulLiteral","src":"8942:2:30","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"8927:3:30","nodeType":"YulIdentifier","src":"8927:3:30"},"nativeSrc":"8927:18:30","nodeType":"YulFunctionCall","src":"8927:18:30"},"variableNames":[{"name":"tail","nativeSrc":"8919:4:30","nodeType":"YulIdentifier","src":"8919:4:30"}]},{"expression":{"arguments":[{"name":"headStart","nativeSrc":"8961:9:30","nodeType":"YulIdentifier","src":"8961:9:30"},{"arguments":[{"name":"value0","nativeSrc":"8976:6:30","nodeType":"YulIdentifier","src":"8976:6:30"},{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"8992:3:30","nodeType":"YulLiteral","src":"8992:3:30","type":"","value":"160"},{"kind":"number","nativeSrc":"8997:1:30","nodeType":"YulLiteral","src":"8997:1:30","type":"","value":"1"}],"functionName":{"name":"shl","nativeSrc":"8988:3:30","nodeType":"YulIdentifier","src":"8988:3:30"},"nativeSrc":"8988:11:30","nodeType":"YulFunctionCall","src":"8988:11:30"},{"kind":"number","nativeSrc":"9001:1:30","nodeType":"YulLiteral","src":"9001:1:30","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"8984:3:30","nodeType":"YulIdentifier","src":"8984:3:30"},"nativeSrc":"8984:19:30","nodeType":"YulFunctionCall","src":"8984:19:30"}],"functionName":{"name":"and","nativeSrc":"8972:3:30","nodeType":"YulIdentifier","src":"8972:3:30"},"nativeSrc":"8972:32:30","nodeType":"YulFunctionCall","src":"8972:32:30"}],"functionName":{"name":"mstore","nativeSrc":"8954:6:30","nodeType":"YulIdentifier","src":"8954:6:30"},"nativeSrc":"8954:51:30","nodeType":"YulFunctionCall","src":"8954:51:30"},"nativeSrc":"8954:51:30","nodeType":"YulExpressionStatement","src":"8954:51:30"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"9025:9:30","nodeType":"YulIdentifier","src":"9025:9:30"},{"kind":"number","nativeSrc":"9036:2:30","nodeType":"YulLiteral","src":"9036:2:30","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"9021:3:30","nodeType":"YulIdentifier","src":"9021:3:30"},"nativeSrc":"9021:18:30","nodeType":"YulFunctionCall","src":"9021:18:30"},{"name":"value1","nativeSrc":"9041:6:30","nodeType":"YulIdentifier","src":"9041:6:30"}],"functionName":{"name":"mstore","nativeSrc":"9014:6:30","nodeType":"YulIdentifier","src":"9014:6:30"},"nativeSrc":"9014:34:30","nodeType":"YulFunctionCall","src":"9014:34:30"},"nativeSrc":"9014:34:30","nodeType":"YulExpressionStatement","src":"9014:34:30"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"9068:9:30","nodeType":"YulIdentifier","src":"9068:9:30"},{"kind":"number","nativeSrc":"9079:2:30","nodeType":"YulLiteral","src":"9079:2:30","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"9064:3:30","nodeType":"YulIdentifier","src":"9064:3:30"},"nativeSrc":"9064:18:30","nodeType":"YulFunctionCall","src":"9064:18:30"},{"arguments":[{"name":"value2","nativeSrc":"9088:6:30","nodeType":"YulIdentifier","src":"9088:6:30"},{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"9104:3:30","nodeType":"YulLiteral","src":"9104:3:30","type":"","value":"160"},{"kind":"number","nativeSrc":"9109:1:30","nodeType":"YulLiteral","src":"9109:1:30","type":"","value":"1"}],"functionName":{"name":"shl","nativeSrc":"9100:3:30","nodeType":"YulIdentifier","src":"9100:3:30"},"nativeSrc":"9100:11:30","nodeType":"YulFunctionCall","src":"9100:11:30"},{"kind":"number","nativeSrc":"9113:1:30","nodeType":"YulLiteral","src":"9113:1:30","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"9096:3:30","nodeType":"YulIdentifier","src":"9096:3:30"},"nativeSrc":"9096:19:30","nodeType":"YulFunctionCall","src":"9096:19:30"}],"functionName":{"name":"and","nativeSrc":"9084:3:30","nodeType":"YulIdentifier","src":"9084:3:30"},"nativeSrc":"9084:32:30","nodeType":"YulFunctionCall","src":"9084:32:30"}],"functionName":{"name":"mstore","nativeSrc":"9057:6:30","nodeType":"YulIdentifier","src":"9057:6:30"},"nativeSrc":"9057:60:30","nodeType":"YulFunctionCall","src":"9057:60:30"},"nativeSrc":"9057:60:30","nodeType":"YulExpressionStatement","src":"9057:60:30"}]},"name":"abi_encode_tuple_t_address_t_uint256_t_address__to_t_address_t_uint256_t_address__fromStack_reversed","nativeSrc":"8752:371:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"8862:9:30","nodeType":"YulTypedName","src":"8862:9:30","type":""},{"name":"value2","nativeSrc":"8873:6:30","nodeType":"YulTypedName","src":"8873:6:30","type":""},{"name":"value1","nativeSrc":"8881:6:30","nodeType":"YulTypedName","src":"8881:6:30","type":""},{"name":"value0","nativeSrc":"8889:6:30","nodeType":"YulTypedName","src":"8889:6:30","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"8900:4:30","nodeType":"YulTypedName","src":"8900:4:30","type":""}],"src":"8752:371:30"},{"body":{"nativeSrc":"9160:95:30","nodeType":"YulBlock","src":"9160:95:30","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"9177:1:30","nodeType":"YulLiteral","src":"9177:1:30","type":"","value":"0"},{"arguments":[{"kind":"number","nativeSrc":"9184:3:30","nodeType":"YulLiteral","src":"9184:3:30","type":"","value":"224"},{"kind":"number","nativeSrc":"9189:10:30","nodeType":"YulLiteral","src":"9189:10:30","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nativeSrc":"9180:3:30","nodeType":"YulIdentifier","src":"9180:3:30"},"nativeSrc":"9180:20:30","nodeType":"YulFunctionCall","src":"9180:20:30"}],"functionName":{"name":"mstore","nativeSrc":"9170:6:30","nodeType":"YulIdentifier","src":"9170:6:30"},"nativeSrc":"9170:31:30","nodeType":"YulFunctionCall","src":"9170:31:30"},"nativeSrc":"9170:31:30","nodeType":"YulExpressionStatement","src":"9170:31:30"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"9217:1:30","nodeType":"YulLiteral","src":"9217:1:30","type":"","value":"4"},{"kind":"number","nativeSrc":"9220:4:30","nodeType":"YulLiteral","src":"9220:4:30","type":"","value":"0x11"}],"functionName":{"name":"mstore","nativeSrc":"9210:6:30","nodeType":"YulIdentifier","src":"9210:6:30"},"nativeSrc":"9210:15:30","nodeType":"YulFunctionCall","src":"9210:15:30"},"nativeSrc":"9210:15:30","nodeType":"YulExpressionStatement","src":"9210:15:30"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"9241:1:30","nodeType":"YulLiteral","src":"9241:1:30","type":"","value":"0"},{"kind":"number","nativeSrc":"9244:4:30","nodeType":"YulLiteral","src":"9244:4:30","type":"","value":"0x24"}],"functionName":{"name":"revert","nativeSrc":"9234:6:30","nodeType":"YulIdentifier","src":"9234:6:30"},"nativeSrc":"9234:15:30","nodeType":"YulFunctionCall","src":"9234:15:30"},"nativeSrc":"9234:15:30","nodeType":"YulExpressionStatement","src":"9234:15:30"}]},"name":"panic_error_0x11","nativeSrc":"9128:127:30","nodeType":"YulFunctionDefinition","src":"9128:127:30"},{"body":{"nativeSrc":"9312:116:30","nodeType":"YulBlock","src":"9312:116:30","statements":[{"nativeSrc":"9322:20:30","nodeType":"YulAssignment","src":"9322:20:30","value":{"arguments":[{"name":"x","nativeSrc":"9337:1:30","nodeType":"YulIdentifier","src":"9337:1:30"},{"name":"y","nativeSrc":"9340:1:30","nodeType":"YulIdentifier","src":"9340:1:30"}],"functionName":{"name":"mul","nativeSrc":"9333:3:30","nodeType":"YulIdentifier","src":"9333:3:30"},"nativeSrc":"9333:9:30","nodeType":"YulFunctionCall","src":"9333:9:30"},"variableNames":[{"name":"product","nativeSrc":"9322:7:30","nodeType":"YulIdentifier","src":"9322:7:30"}]},{"body":{"nativeSrc":"9400:22:30","nodeType":"YulBlock","src":"9400:22:30","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nativeSrc":"9402:16:30","nodeType":"YulIdentifier","src":"9402:16:30"},"nativeSrc":"9402:18:30","nodeType":"YulFunctionCall","src":"9402:18:30"},"nativeSrc":"9402:18:30","nodeType":"YulExpressionStatement","src":"9402:18:30"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"x","nativeSrc":"9371:1:30","nodeType":"YulIdentifier","src":"9371:1:30"}],"functionName":{"name":"iszero","nativeSrc":"9364:6:30","nodeType":"YulIdentifier","src":"9364:6:30"},"nativeSrc":"9364:9:30","nodeType":"YulFunctionCall","src":"9364:9:30"},{"arguments":[{"name":"y","nativeSrc":"9378:1:30","nodeType":"YulIdentifier","src":"9378:1:30"},{"arguments":[{"name":"product","nativeSrc":"9385:7:30","nodeType":"YulIdentifier","src":"9385:7:30"},{"name":"x","nativeSrc":"9394:1:30","nodeType":"YulIdentifier","src":"9394:1:30"}],"functionName":{"name":"div","nativeSrc":"9381:3:30","nodeType":"YulIdentifier","src":"9381:3:30"},"nativeSrc":"9381:15:30","nodeType":"YulFunctionCall","src":"9381:15:30"}],"functionName":{"name":"eq","nativeSrc":"9375:2:30","nodeType":"YulIdentifier","src":"9375:2:30"},"nativeSrc":"9375:22:30","nodeType":"YulFunctionCall","src":"9375:22:30"}],"functionName":{"name":"or","nativeSrc":"9361:2:30","nodeType":"YulIdentifier","src":"9361:2:30"},"nativeSrc":"9361:37:30","nodeType":"YulFunctionCall","src":"9361:37:30"}],"functionName":{"name":"iszero","nativeSrc":"9354:6:30","nodeType":"YulIdentifier","src":"9354:6:30"},"nativeSrc":"9354:45:30","nodeType":"YulFunctionCall","src":"9354:45:30"},"nativeSrc":"9351:71:30","nodeType":"YulIf","src":"9351:71:30"}]},"name":"checked_mul_t_uint256","nativeSrc":"9260:168:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nativeSrc":"9291:1:30","nodeType":"YulTypedName","src":"9291:1:30","type":""},{"name":"y","nativeSrc":"9294:1:30","nodeType":"YulTypedName","src":"9294:1:30","type":""}],"returnVariables":[{"name":"product","nativeSrc":"9300:7:30","nodeType":"YulTypedName","src":"9300:7:30","type":""}],"src":"9260:168:30"},{"body":{"nativeSrc":"9465:95:30","nodeType":"YulBlock","src":"9465:95:30","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"9482:1:30","nodeType":"YulLiteral","src":"9482:1:30","type":"","value":"0"},{"arguments":[{"kind":"number","nativeSrc":"9489:3:30","nodeType":"YulLiteral","src":"9489:3:30","type":"","value":"224"},{"kind":"number","nativeSrc":"9494:10:30","nodeType":"YulLiteral","src":"9494:10:30","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nativeSrc":"9485:3:30","nodeType":"YulIdentifier","src":"9485:3:30"},"nativeSrc":"9485:20:30","nodeType":"YulFunctionCall","src":"9485:20:30"}],"functionName":{"name":"mstore","nativeSrc":"9475:6:30","nodeType":"YulIdentifier","src":"9475:6:30"},"nativeSrc":"9475:31:30","nodeType":"YulFunctionCall","src":"9475:31:30"},"nativeSrc":"9475:31:30","nodeType":"YulExpressionStatement","src":"9475:31:30"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"9522:1:30","nodeType":"YulLiteral","src":"9522:1:30","type":"","value":"4"},{"kind":"number","nativeSrc":"9525:4:30","nodeType":"YulLiteral","src":"9525:4:30","type":"","value":"0x12"}],"functionName":{"name":"mstore","nativeSrc":"9515:6:30","nodeType":"YulIdentifier","src":"9515:6:30"},"nativeSrc":"9515:15:30","nodeType":"YulFunctionCall","src":"9515:15:30"},"nativeSrc":"9515:15:30","nodeType":"YulExpressionStatement","src":"9515:15:30"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"9546:1:30","nodeType":"YulLiteral","src":"9546:1:30","type":"","value":"0"},{"kind":"number","nativeSrc":"9549:4:30","nodeType":"YulLiteral","src":"9549:4:30","type":"","value":"0x24"}],"functionName":{"name":"revert","nativeSrc":"9539:6:30","nodeType":"YulIdentifier","src":"9539:6:30"},"nativeSrc":"9539:15:30","nodeType":"YulFunctionCall","src":"9539:15:30"},"nativeSrc":"9539:15:30","nodeType":"YulExpressionStatement","src":"9539:15:30"}]},"name":"panic_error_0x12","nativeSrc":"9433:127:30","nodeType":"YulFunctionDefinition","src":"9433:127:30"},{"body":{"nativeSrc":"9611:171:30","nodeType":"YulBlock","src":"9611:171:30","statements":[{"body":{"nativeSrc":"9642:111:30","nodeType":"YulBlock","src":"9642:111:30","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"9663:1:30","nodeType":"YulLiteral","src":"9663:1:30","type":"","value":"0"},{"arguments":[{"kind":"number","nativeSrc":"9670:3:30","nodeType":"YulLiteral","src":"9670:3:30","type":"","value":"224"},{"kind":"number","nativeSrc":"9675:10:30","nodeType":"YulLiteral","src":"9675:10:30","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nativeSrc":"9666:3:30","nodeType":"YulIdentifier","src":"9666:3:30"},"nativeSrc":"9666:20:30","nodeType":"YulFunctionCall","src":"9666:20:30"}],"functionName":{"name":"mstore","nativeSrc":"9656:6:30","nodeType":"YulIdentifier","src":"9656:6:30"},"nativeSrc":"9656:31:30","nodeType":"YulFunctionCall","src":"9656:31:30"},"nativeSrc":"9656:31:30","nodeType":"YulExpressionStatement","src":"9656:31:30"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"9707:1:30","nodeType":"YulLiteral","src":"9707:1:30","type":"","value":"4"},{"kind":"number","nativeSrc":"9710:4:30","nodeType":"YulLiteral","src":"9710:4:30","type":"","value":"0x12"}],"functionName":{"name":"mstore","nativeSrc":"9700:6:30","nodeType":"YulIdentifier","src":"9700:6:30"},"nativeSrc":"9700:15:30","nodeType":"YulFunctionCall","src":"9700:15:30"},"nativeSrc":"9700:15:30","nodeType":"YulExpressionStatement","src":"9700:15:30"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"9735:1:30","nodeType":"YulLiteral","src":"9735:1:30","type":"","value":"0"},{"kind":"number","nativeSrc":"9738:4:30","nodeType":"YulLiteral","src":"9738:4:30","type":"","value":"0x24"}],"functionName":{"name":"revert","nativeSrc":"9728:6:30","nodeType":"YulIdentifier","src":"9728:6:30"},"nativeSrc":"9728:15:30","nodeType":"YulFunctionCall","src":"9728:15:30"},"nativeSrc":"9728:15:30","nodeType":"YulExpressionStatement","src":"9728:15:30"}]},"condition":{"arguments":[{"name":"y","nativeSrc":"9631:1:30","nodeType":"YulIdentifier","src":"9631:1:30"}],"functionName":{"name":"iszero","nativeSrc":"9624:6:30","nodeType":"YulIdentifier","src":"9624:6:30"},"nativeSrc":"9624:9:30","nodeType":"YulFunctionCall","src":"9624:9:30"},"nativeSrc":"9621:132:30","nodeType":"YulIf","src":"9621:132:30"},{"nativeSrc":"9762:14:30","nodeType":"YulAssignment","src":"9762:14:30","value":{"arguments":[{"name":"x","nativeSrc":"9771:1:30","nodeType":"YulIdentifier","src":"9771:1:30"},{"name":"y","nativeSrc":"9774:1:30","nodeType":"YulIdentifier","src":"9774:1:30"}],"functionName":{"name":"div","nativeSrc":"9767:3:30","nodeType":"YulIdentifier","src":"9767:3:30"},"nativeSrc":"9767:9:30","nodeType":"YulFunctionCall","src":"9767:9:30"},"variableNames":[{"name":"r","nativeSrc":"9762:1:30","nodeType":"YulIdentifier","src":"9762:1:30"}]}]},"name":"checked_div_t_uint256","nativeSrc":"9565:217:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nativeSrc":"9596:1:30","nodeType":"YulTypedName","src":"9596:1:30","type":""},{"name":"y","nativeSrc":"9599:1:30","nodeType":"YulTypedName","src":"9599:1:30","type":""}],"returnVariables":[{"name":"r","nativeSrc":"9605:1:30","nodeType":"YulTypedName","src":"9605:1:30","type":""}],"src":"9565:217:30"},{"body":{"nativeSrc":"9843:65:30","nodeType":"YulBlock","src":"9843:65:30","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"9860:1:30","nodeType":"YulLiteral","src":"9860:1:30","type":"","value":"0"},{"name":"ptr","nativeSrc":"9863:3:30","nodeType":"YulIdentifier","src":"9863:3:30"}],"functionName":{"name":"mstore","nativeSrc":"9853:6:30","nodeType":"YulIdentifier","src":"9853:6:30"},"nativeSrc":"9853:14:30","nodeType":"YulFunctionCall","src":"9853:14:30"},"nativeSrc":"9853:14:30","nodeType":"YulExpressionStatement","src":"9853:14:30"},{"nativeSrc":"9876:26:30","nodeType":"YulAssignment","src":"9876:26:30","value":{"arguments":[{"kind":"number","nativeSrc":"9894:1:30","nodeType":"YulLiteral","src":"9894:1:30","type":"","value":"0"},{"kind":"number","nativeSrc":"9897:4:30","nodeType":"YulLiteral","src":"9897:4:30","type":"","value":"0x20"}],"functionName":{"name":"keccak256","nativeSrc":"9884:9:30","nodeType":"YulIdentifier","src":"9884:9:30"},"nativeSrc":"9884:18:30","nodeType":"YulFunctionCall","src":"9884:18:30"},"variableNames":[{"name":"data","nativeSrc":"9876:4:30","nodeType":"YulIdentifier","src":"9876:4:30"}]}]},"name":"array_dataslot_string_storage","nativeSrc":"9787:121:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"ptr","nativeSrc":"9826:3:30","nodeType":"YulTypedName","src":"9826:3:30","type":""}],"returnVariables":[{"name":"data","nativeSrc":"9834:4:30","nodeType":"YulTypedName","src":"9834:4:30","type":""}],"src":"9787:121:30"},{"body":{"nativeSrc":"9994:437:30","nodeType":"YulBlock","src":"9994:437:30","statements":[{"body":{"nativeSrc":"10027:398:30","nodeType":"YulBlock","src":"10027:398:30","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"10048:1:30","nodeType":"YulLiteral","src":"10048:1:30","type":"","value":"0"},{"name":"array","nativeSrc":"10051:5:30","nodeType":"YulIdentifier","src":"10051:5:30"}],"functionName":{"name":"mstore","nativeSrc":"10041:6:30","nodeType":"YulIdentifier","src":"10041:6:30"},"nativeSrc":"10041:16:30","nodeType":"YulFunctionCall","src":"10041:16:30"},"nativeSrc":"10041:16:30","nodeType":"YulExpressionStatement","src":"10041:16:30"},{"nativeSrc":"10070:30:30","nodeType":"YulVariableDeclaration","src":"10070:30:30","value":{"arguments":[{"kind":"number","nativeSrc":"10092:1:30","nodeType":"YulLiteral","src":"10092:1:30","type":"","value":"0"},{"kind":"number","nativeSrc":"10095:4:30","nodeType":"YulLiteral","src":"10095:4:30","type":"","value":"0x20"}],"functionName":{"name":"keccak256","nativeSrc":"10082:9:30","nodeType":"YulIdentifier","src":"10082:9:30"},"nativeSrc":"10082:18:30","nodeType":"YulFunctionCall","src":"10082:18:30"},"variables":[{"name":"data","nativeSrc":"10074:4:30","nodeType":"YulTypedName","src":"10074:4:30","type":""}]},{"nativeSrc":"10113:57:30","nodeType":"YulVariableDeclaration","src":"10113:57:30","value":{"arguments":[{"name":"data","nativeSrc":"10136:4:30","nodeType":"YulIdentifier","src":"10136:4:30"},{"arguments":[{"kind":"number","nativeSrc":"10146:1:30","nodeType":"YulLiteral","src":"10146:1:30","type":"","value":"5"},{"arguments":[{"name":"startIndex","nativeSrc":"10153:10:30","nodeType":"YulIdentifier","src":"10153:10:30"},{"kind":"number","nativeSrc":"10165:2:30","nodeType":"YulLiteral","src":"10165:2:30","type":"","value":"31"}],"functionName":{"name":"add","nativeSrc":"10149:3:30","nodeType":"YulIdentifier","src":"10149:3:30"},"nativeSrc":"10149:19:30","nodeType":"YulFunctionCall","src":"10149:19:30"}],"functionName":{"name":"shr","nativeSrc":"10142:3:30","nodeType":"YulIdentifier","src":"10142:3:30"},"nativeSrc":"10142:27:30","nodeType":"YulFunctionCall","src":"10142:27:30"}],"functionName":{"name":"add","nativeSrc":"10132:3:30","nodeType":"YulIdentifier","src":"10132:3:30"},"nativeSrc":"10132:38:30","nodeType":"YulFunctionCall","src":"10132:38:30"},"variables":[{"name":"deleteStart","nativeSrc":"10117:11:30","nodeType":"YulTypedName","src":"10117:11:30","type":""}]},{"body":{"nativeSrc":"10207:23:30","nodeType":"YulBlock","src":"10207:23:30","statements":[{"nativeSrc":"10209:19:30","nodeType":"YulAssignment","src":"10209:19:30","value":{"name":"data","nativeSrc":"10224:4:30","nodeType":"YulIdentifier","src":"10224:4:30"},"variableNames":[{"name":"deleteStart","nativeSrc":"10209:11:30","nodeType":"YulIdentifier","src":"10209:11:30"}]}]},"condition":{"arguments":[{"name":"startIndex","nativeSrc":"10189:10:30","nodeType":"YulIdentifier","src":"10189:10:30"},{"kind":"number","nativeSrc":"10201:4:30","nodeType":"YulLiteral","src":"10201:4:30","type":"","value":"0x20"}],"functionName":{"name":"lt","nativeSrc":"10186:2:30","nodeType":"YulIdentifier","src":"10186:2:30"},"nativeSrc":"10186:20:30","nodeType":"YulFunctionCall","src":"10186:20:30"},"nativeSrc":"10183:47:30","nodeType":"YulIf","src":"10183:47:30"},{"nativeSrc":"10243:41:30","nodeType":"YulVariableDeclaration","src":"10243:41:30","value":{"arguments":[{"name":"data","nativeSrc":"10257:4:30","nodeType":"YulIdentifier","src":"10257:4:30"},{"arguments":[{"kind":"number","nativeSrc":"10267:1:30","nodeType":"YulLiteral","src":"10267:1:30","type":"","value":"5"},{"arguments":[{"name":"len","nativeSrc":"10274:3:30","nodeType":"YulIdentifier","src":"10274:3:30"},{"kind":"number","nativeSrc":"10279:2:30","nodeType":"YulLiteral","src":"10279:2:30","type":"","value":"31"}],"functionName":{"name":"add","nativeSrc":"10270:3:30","nodeType":"YulIdentifier","src":"10270:3:30"},"nativeSrc":"10270:12:30","nodeType":"YulFunctionCall","src":"10270:12:30"}],"functionName":{"name":"shr","nativeSrc":"10263:3:30","nodeType":"YulIdentifier","src":"10263:3:30"},"nativeSrc":"10263:20:30","nodeType":"YulFunctionCall","src":"10263:20:30"}],"functionName":{"name":"add","nativeSrc":"10253:3:30","nodeType":"YulIdentifier","src":"10253:3:30"},"nativeSrc":"10253:31:30","nodeType":"YulFunctionCall","src":"10253:31:30"},"variables":[{"name":"_1","nativeSrc":"10247:2:30","nodeType":"YulTypedName","src":"10247:2:30","type":""}]},{"nativeSrc":"10297:24:30","nodeType":"YulVariableDeclaration","src":"10297:24:30","value":{"name":"deleteStart","nativeSrc":"10310:11:30","nodeType":"YulIdentifier","src":"10310:11:30"},"variables":[{"name":"start","nativeSrc":"10301:5:30","nodeType":"YulTypedName","src":"10301:5:30","type":""}]},{"body":{"nativeSrc":"10395:20:30","nodeType":"YulBlock","src":"10395:20:30","statements":[{"expression":{"arguments":[{"name":"start","nativeSrc":"10404:5:30","nodeType":"YulIdentifier","src":"10404:5:30"},{"kind":"number","nativeSrc":"10411:1:30","nodeType":"YulLiteral","src":"10411:1:30","type":"","value":"0"}],"functionName":{"name":"sstore","nativeSrc":"10397:6:30","nodeType":"YulIdentifier","src":"10397:6:30"},"nativeSrc":"10397:16:30","nodeType":"YulFunctionCall","src":"10397:16:30"},"nativeSrc":"10397:16:30","nodeType":"YulExpressionStatement","src":"10397:16:30"}]},"condition":{"arguments":[{"name":"start","nativeSrc":"10345:5:30","nodeType":"YulIdentifier","src":"10345:5:30"},{"name":"_1","nativeSrc":"10352:2:30","nodeType":"YulIdentifier","src":"10352:2:30"}],"functionName":{"name":"lt","nativeSrc":"10342:2:30","nodeType":"YulIdentifier","src":"10342:2:30"},"nativeSrc":"10342:13:30","nodeType":"YulFunctionCall","src":"10342:13:30"},"nativeSrc":"10334:81:30","nodeType":"YulForLoop","post":{"nativeSrc":"10356:26:30","nodeType":"YulBlock","src":"10356:26:30","statements":[{"nativeSrc":"10358:22:30","nodeType":"YulAssignment","src":"10358:22:30","value":{"arguments":[{"name":"start","nativeSrc":"10371:5:30","nodeType":"YulIdentifier","src":"10371:5:30"},{"kind":"number","nativeSrc":"10378:1:30","nodeType":"YulLiteral","src":"10378:1:30","type":"","value":"1"}],"functionName":{"name":"add","nativeSrc":"10367:3:30","nodeType":"YulIdentifier","src":"10367:3:30"},"nativeSrc":"10367:13:30","nodeType":"YulFunctionCall","src":"10367:13:30"},"variableNames":[{"name":"start","nativeSrc":"10358:5:30","nodeType":"YulIdentifier","src":"10358:5:30"}]}]},"pre":{"nativeSrc":"10338:3:30","nodeType":"YulBlock","src":"10338:3:30","statements":[]},"src":"10334:81:30"}]},"condition":{"arguments":[{"name":"len","nativeSrc":"10010:3:30","nodeType":"YulIdentifier","src":"10010:3:30"},{"kind":"number","nativeSrc":"10015:2:30","nodeType":"YulLiteral","src":"10015:2:30","type":"","value":"31"}],"functionName":{"name":"gt","nativeSrc":"10007:2:30","nodeType":"YulIdentifier","src":"10007:2:30"},"nativeSrc":"10007:11:30","nodeType":"YulFunctionCall","src":"10007:11:30"},"nativeSrc":"10004:421:30","nodeType":"YulIf","src":"10004:421:30"}]},"name":"clean_up_bytearray_end_slots_string_storage","nativeSrc":"9913:518:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"array","nativeSrc":"9966:5:30","nodeType":"YulTypedName","src":"9966:5:30","type":""},{"name":"len","nativeSrc":"9973:3:30","nodeType":"YulTypedName","src":"9973:3:30","type":""},{"name":"startIndex","nativeSrc":"9978:10:30","nodeType":"YulTypedName","src":"9978:10:30","type":""}],"src":"9913:518:30"},{"body":{"nativeSrc":"10521:81:30","nodeType":"YulBlock","src":"10521:81:30","statements":[{"nativeSrc":"10531:65:30","nodeType":"YulAssignment","src":"10531:65:30","value":{"arguments":[{"arguments":[{"name":"data","nativeSrc":"10546:4:30","nodeType":"YulIdentifier","src":"10546:4:30"},{"arguments":[{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"10564:1:30","nodeType":"YulLiteral","src":"10564:1:30","type":"","value":"3"},{"name":"len","nativeSrc":"10567:3:30","nodeType":"YulIdentifier","src":"10567:3:30"}],"functionName":{"name":"shl","nativeSrc":"10560:3:30","nodeType":"YulIdentifier","src":"10560:3:30"},"nativeSrc":"10560:11:30","nodeType":"YulFunctionCall","src":"10560:11:30"},{"arguments":[{"kind":"number","nativeSrc":"10577:1:30","nodeType":"YulLiteral","src":"10577:1:30","type":"","value":"0"}],"functionName":{"name":"not","nativeSrc":"10573:3:30","nodeType":"YulIdentifier","src":"10573:3:30"},"nativeSrc":"10573:6:30","nodeType":"YulFunctionCall","src":"10573:6:30"}],"functionName":{"name":"shr","nativeSrc":"10556:3:30","nodeType":"YulIdentifier","src":"10556:3:30"},"nativeSrc":"10556:24:30","nodeType":"YulFunctionCall","src":"10556:24:30"}],"functionName":{"name":"not","nativeSrc":"10552:3:30","nodeType":"YulIdentifier","src":"10552:3:30"},"nativeSrc":"10552:29:30","nodeType":"YulFunctionCall","src":"10552:29:30"}],"functionName":{"name":"and","nativeSrc":"10542:3:30","nodeType":"YulIdentifier","src":"10542:3:30"},"nativeSrc":"10542:40:30","nodeType":"YulFunctionCall","src":"10542:40:30"},{"arguments":[{"kind":"number","nativeSrc":"10588:1:30","nodeType":"YulLiteral","src":"10588:1:30","type":"","value":"1"},{"name":"len","nativeSrc":"10591:3:30","nodeType":"YulIdentifier","src":"10591:3:30"}],"functionName":{"name":"shl","nativeSrc":"10584:3:30","nodeType":"YulIdentifier","src":"10584:3:30"},"nativeSrc":"10584:11:30","nodeType":"YulFunctionCall","src":"10584:11:30"}],"functionName":{"name":"or","nativeSrc":"10539:2:30","nodeType":"YulIdentifier","src":"10539:2:30"},"nativeSrc":"10539:57:30","nodeType":"YulFunctionCall","src":"10539:57:30"},"variableNames":[{"name":"used","nativeSrc":"10531:4:30","nodeType":"YulIdentifier","src":"10531:4:30"}]}]},"name":"extract_used_part_and_set_length_of_short_byte_array","nativeSrc":"10436:166:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nativeSrc":"10498:4:30","nodeType":"YulTypedName","src":"10498:4:30","type":""},{"name":"len","nativeSrc":"10504:3:30","nodeType":"YulTypedName","src":"10504:3:30","type":""}],"returnVariables":[{"name":"used","nativeSrc":"10512:4:30","nodeType":"YulTypedName","src":"10512:4:30","type":""}],"src":"10436:166:30"},{"body":{"nativeSrc":"10710:1095:30","nodeType":"YulBlock","src":"10710:1095:30","statements":[{"body":{"nativeSrc":"10751:22:30","nodeType":"YulBlock","src":"10751:22:30","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nativeSrc":"10753:16:30","nodeType":"YulIdentifier","src":"10753:16:30"},"nativeSrc":"10753:18:30","nodeType":"YulFunctionCall","src":"10753:18:30"},"nativeSrc":"10753:18:30","nodeType":"YulExpressionStatement","src":"10753:18:30"}]},"condition":{"arguments":[{"name":"len","nativeSrc":"10726:3:30","nodeType":"YulIdentifier","src":"10726:3:30"},{"kind":"number","nativeSrc":"10731:18:30","nodeType":"YulLiteral","src":"10731:18:30","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"10723:2:30","nodeType":"YulIdentifier","src":"10723:2:30"},"nativeSrc":"10723:27:30","nodeType":"YulFunctionCall","src":"10723:27:30"},"nativeSrc":"10720:53:30","nodeType":"YulIf","src":"10720:53:30"},{"expression":{"arguments":[{"name":"slot","nativeSrc":"10826:4:30","nodeType":"YulIdentifier","src":"10826:4:30"},{"arguments":[{"arguments":[{"name":"slot","nativeSrc":"10864:4:30","nodeType":"YulIdentifier","src":"10864:4:30"}],"functionName":{"name":"sload","nativeSrc":"10858:5:30","nodeType":"YulIdentifier","src":"10858:5:30"},"nativeSrc":"10858:11:30","nodeType":"YulFunctionCall","src":"10858:11:30"}],"functionName":{"name":"extract_byte_array_length","nativeSrc":"10832:25:30","nodeType":"YulIdentifier","src":"10832:25:30"},"nativeSrc":"10832:38:30","nodeType":"YulFunctionCall","src":"10832:38:30"},{"name":"len","nativeSrc":"10872:3:30","nodeType":"YulIdentifier","src":"10872:3:30"}],"functionName":{"name":"clean_up_bytearray_end_slots_string_storage","nativeSrc":"10782:43:30","nodeType":"YulIdentifier","src":"10782:43:30"},"nativeSrc":"10782:94:30","nodeType":"YulFunctionCall","src":"10782:94:30"},"nativeSrc":"10782:94:30","nodeType":"YulExpressionStatement","src":"10782:94:30"},{"nativeSrc":"10885:18:30","nodeType":"YulVariableDeclaration","src":"10885:18:30","value":{"kind":"number","nativeSrc":"10902:1:30","nodeType":"YulLiteral","src":"10902:1:30","type":"","value":"0"},"variables":[{"name":"srcOffset","nativeSrc":"10889:9:30","nodeType":"YulTypedName","src":"10889:9:30","type":""}]},{"cases":[{"body":{"nativeSrc":"10946:601:30","nodeType":"YulBlock","src":"10946:601:30","statements":[{"nativeSrc":"10960:32:30","nodeType":"YulVariableDeclaration","src":"10960:32:30","value":{"arguments":[{"name":"len","nativeSrc":"10979:3:30","nodeType":"YulIdentifier","src":"10979:3:30"},{"arguments":[{"kind":"number","nativeSrc":"10988:2:30","nodeType":"YulLiteral","src":"10988:2:30","type":"","value":"31"}],"functionName":{"name":"not","nativeSrc":"10984:3:30","nodeType":"YulIdentifier","src":"10984:3:30"},"nativeSrc":"10984:7:30","nodeType":"YulFunctionCall","src":"10984:7:30"}],"functionName":{"name":"and","nativeSrc":"10975:3:30","nodeType":"YulIdentifier","src":"10975:3:30"},"nativeSrc":"10975:17:30","nodeType":"YulFunctionCall","src":"10975:17:30"},"variables":[{"name":"loopEnd","nativeSrc":"10964:7:30","nodeType":"YulTypedName","src":"10964:7:30","type":""}]},{"nativeSrc":"11005:49:30","nodeType":"YulVariableDeclaration","src":"11005:49:30","value":{"arguments":[{"name":"slot","nativeSrc":"11049:4:30","nodeType":"YulIdentifier","src":"11049:4:30"}],"functionName":{"name":"array_dataslot_string_storage","nativeSrc":"11019:29:30","nodeType":"YulIdentifier","src":"11019:29:30"},"nativeSrc":"11019:35:30","nodeType":"YulFunctionCall","src":"11019:35:30"},"variables":[{"name":"dstPtr","nativeSrc":"11009:6:30","nodeType":"YulTypedName","src":"11009:6:30","type":""}]},{"nativeSrc":"11067:10:30","nodeType":"YulVariableDeclaration","src":"11067:10:30","value":{"kind":"number","nativeSrc":"11076:1:30","nodeType":"YulLiteral","src":"11076:1:30","type":"","value":"0"},"variables":[{"name":"i","nativeSrc":"11071:1:30","nodeType":"YulTypedName","src":"11071:1:30","type":""}]},{"body":{"nativeSrc":"11147:172:30","nodeType":"YulBlock","src":"11147:172:30","statements":[{"expression":{"arguments":[{"name":"dstPtr","nativeSrc":"11172:6:30","nodeType":"YulIdentifier","src":"11172:6:30"},{"arguments":[{"arguments":[{"name":"src","nativeSrc":"11197:3:30","nodeType":"YulIdentifier","src":"11197:3:30"},{"name":"srcOffset","nativeSrc":"11202:9:30","nodeType":"YulIdentifier","src":"11202:9:30"}],"functionName":{"name":"add","nativeSrc":"11193:3:30","nodeType":"YulIdentifier","src":"11193:3:30"},"nativeSrc":"11193:19:30","nodeType":"YulFunctionCall","src":"11193:19:30"}],"functionName":{"name":"calldataload","nativeSrc":"11180:12:30","nodeType":"YulIdentifier","src":"11180:12:30"},"nativeSrc":"11180:33:30","nodeType":"YulFunctionCall","src":"11180:33:30"}],"functionName":{"name":"sstore","nativeSrc":"11165:6:30","nodeType":"YulIdentifier","src":"11165:6:30"},"nativeSrc":"11165:49:30","nodeType":"YulFunctionCall","src":"11165:49:30"},"nativeSrc":"11165:49:30","nodeType":"YulExpressionStatement","src":"11165:49:30"},{"nativeSrc":"11231:24:30","nodeType":"YulAssignment","src":"11231:24:30","value":{"arguments":[{"name":"dstPtr","nativeSrc":"11245:6:30","nodeType":"YulIdentifier","src":"11245:6:30"},{"kind":"number","nativeSrc":"11253:1:30","nodeType":"YulLiteral","src":"11253:1:30","type":"","value":"1"}],"functionName":{"name":"add","nativeSrc":"11241:3:30","nodeType":"YulIdentifier","src":"11241:3:30"},"nativeSrc":"11241:14:30","nodeType":"YulFunctionCall","src":"11241:14:30"},"variableNames":[{"name":"dstPtr","nativeSrc":"11231:6:30","nodeType":"YulIdentifier","src":"11231:6:30"}]},{"nativeSrc":"11272:33:30","nodeType":"YulAssignment","src":"11272:33:30","value":{"arguments":[{"name":"srcOffset","nativeSrc":"11289:9:30","nodeType":"YulIdentifier","src":"11289:9:30"},{"kind":"number","nativeSrc":"11300:4:30","nodeType":"YulLiteral","src":"11300:4:30","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"11285:3:30","nodeType":"YulIdentifier","src":"11285:3:30"},"nativeSrc":"11285:20:30","nodeType":"YulFunctionCall","src":"11285:20:30"},"variableNames":[{"name":"srcOffset","nativeSrc":"11272:9:30","nodeType":"YulIdentifier","src":"11272:9:30"}]}]},"condition":{"arguments":[{"name":"i","nativeSrc":"11101:1:30","nodeType":"YulIdentifier","src":"11101:1:30"},{"name":"loopEnd","nativeSrc":"11104:7:30","nodeType":"YulIdentifier","src":"11104:7:30"}],"functionName":{"name":"lt","nativeSrc":"11098:2:30","nodeType":"YulIdentifier","src":"11098:2:30"},"nativeSrc":"11098:14:30","nodeType":"YulFunctionCall","src":"11098:14:30"},"nativeSrc":"11090:229:30","nodeType":"YulForLoop","post":{"nativeSrc":"11113:21:30","nodeType":"YulBlock","src":"11113:21:30","statements":[{"nativeSrc":"11115:17:30","nodeType":"YulAssignment","src":"11115:17:30","value":{"arguments":[{"name":"i","nativeSrc":"11124:1:30","nodeType":"YulIdentifier","src":"11124:1:30"},{"kind":"number","nativeSrc":"11127:4:30","nodeType":"YulLiteral","src":"11127:4:30","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"11120:3:30","nodeType":"YulIdentifier","src":"11120:3:30"},"nativeSrc":"11120:12:30","nodeType":"YulFunctionCall","src":"11120:12:30"},"variableNames":[{"name":"i","nativeSrc":"11115:1:30","nodeType":"YulIdentifier","src":"11115:1:30"}]}]},"pre":{"nativeSrc":"11094:3:30","nodeType":"YulBlock","src":"11094:3:30","statements":[]},"src":"11090:229:30"},{"body":{"nativeSrc":"11364:127:30","nodeType":"YulBlock","src":"11364:127:30","statements":[{"expression":{"arguments":[{"name":"dstPtr","nativeSrc":"11389:6:30","nodeType":"YulIdentifier","src":"11389:6:30"},{"arguments":[{"arguments":[{"arguments":[{"name":"src","nativeSrc":"11418:3:30","nodeType":"YulIdentifier","src":"11418:3:30"},{"name":"srcOffset","nativeSrc":"11423:9:30","nodeType":"YulIdentifier","src":"11423:9:30"}],"functionName":{"name":"add","nativeSrc":"11414:3:30","nodeType":"YulIdentifier","src":"11414:3:30"},"nativeSrc":"11414:19:30","nodeType":"YulFunctionCall","src":"11414:19:30"}],"functionName":{"name":"calldataload","nativeSrc":"11401:12:30","nodeType":"YulIdentifier","src":"11401:12:30"},"nativeSrc":"11401:33:30","nodeType":"YulFunctionCall","src":"11401:33:30"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"11452:1:30","nodeType":"YulLiteral","src":"11452:1:30","type":"","value":"3"},{"name":"len","nativeSrc":"11455:3:30","nodeType":"YulIdentifier","src":"11455:3:30"}],"functionName":{"name":"shl","nativeSrc":"11448:3:30","nodeType":"YulIdentifier","src":"11448:3:30"},"nativeSrc":"11448:11:30","nodeType":"YulFunctionCall","src":"11448:11:30"},{"kind":"number","nativeSrc":"11461:3:30","nodeType":"YulLiteral","src":"11461:3:30","type":"","value":"248"}],"functionName":{"name":"and","nativeSrc":"11444:3:30","nodeType":"YulIdentifier","src":"11444:3:30"},"nativeSrc":"11444:21:30","nodeType":"YulFunctionCall","src":"11444:21:30"},{"arguments":[{"kind":"number","nativeSrc":"11471:1:30","nodeType":"YulLiteral","src":"11471:1:30","type":"","value":"0"}],"functionName":{"name":"not","nativeSrc":"11467:3:30","nodeType":"YulIdentifier","src":"11467:3:30"},"nativeSrc":"11467:6:30","nodeType":"YulFunctionCall","src":"11467:6:30"}],"functionName":{"name":"shr","nativeSrc":"11440:3:30","nodeType":"YulIdentifier","src":"11440:3:30"},"nativeSrc":"11440:34:30","nodeType":"YulFunctionCall","src":"11440:34:30"}],"functionName":{"name":"not","nativeSrc":"11436:3:30","nodeType":"YulIdentifier","src":"11436:3:30"},"nativeSrc":"11436:39:30","nodeType":"YulFunctionCall","src":"11436:39:30"}],"functionName":{"name":"and","nativeSrc":"11397:3:30","nodeType":"YulIdentifier","src":"11397:3:30"},"nativeSrc":"11397:79:30","nodeType":"YulFunctionCall","src":"11397:79:30"}],"functionName":{"name":"sstore","nativeSrc":"11382:6:30","nodeType":"YulIdentifier","src":"11382:6:30"},"nativeSrc":"11382:95:30","nodeType":"YulFunctionCall","src":"11382:95:30"},"nativeSrc":"11382:95:30","nodeType":"YulExpressionStatement","src":"11382:95:30"}]},"condition":{"arguments":[{"name":"loopEnd","nativeSrc":"11338:7:30","nodeType":"YulIdentifier","src":"11338:7:30"},{"name":"len","nativeSrc":"11347:3:30","nodeType":"YulIdentifier","src":"11347:3:30"}],"functionName":{"name":"lt","nativeSrc":"11335:2:30","nodeType":"YulIdentifier","src":"11335:2:30"},"nativeSrc":"11335:16:30","nodeType":"YulFunctionCall","src":"11335:16:30"},"nativeSrc":"11332:159:30","nodeType":"YulIf","src":"11332:159:30"},{"expression":{"arguments":[{"name":"slot","nativeSrc":"11511:4:30","nodeType":"YulIdentifier","src":"11511:4:30"},{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"11525:1:30","nodeType":"YulLiteral","src":"11525:1:30","type":"","value":"1"},{"name":"len","nativeSrc":"11528:3:30","nodeType":"YulIdentifier","src":"11528:3:30"}],"functionName":{"name":"shl","nativeSrc":"11521:3:30","nodeType":"YulIdentifier","src":"11521:3:30"},"nativeSrc":"11521:11:30","nodeType":"YulFunctionCall","src":"11521:11:30"},{"kind":"number","nativeSrc":"11534:1:30","nodeType":"YulLiteral","src":"11534:1:30","type":"","value":"1"}],"functionName":{"name":"add","nativeSrc":"11517:3:30","nodeType":"YulIdentifier","src":"11517:3:30"},"nativeSrc":"11517:19:30","nodeType":"YulFunctionCall","src":"11517:19:30"}],"functionName":{"name":"sstore","nativeSrc":"11504:6:30","nodeType":"YulIdentifier","src":"11504:6:30"},"nativeSrc":"11504:33:30","nodeType":"YulFunctionCall","src":"11504:33:30"},"nativeSrc":"11504:33:30","nodeType":"YulExpressionStatement","src":"11504:33:30"}]},"nativeSrc":"10939:608:30","nodeType":"YulCase","src":"10939:608:30","value":{"kind":"number","nativeSrc":"10944:1:30","nodeType":"YulLiteral","src":"10944:1:30","type":"","value":"1"}},{"body":{"nativeSrc":"11564:235:30","nodeType":"YulBlock","src":"11564:235:30","statements":[{"nativeSrc":"11578:14:30","nodeType":"YulVariableDeclaration","src":"11578:14:30","value":{"kind":"number","nativeSrc":"11591:1:30","nodeType":"YulLiteral","src":"11591:1:30","type":"","value":"0"},"variables":[{"name":"value","nativeSrc":"11582:5:30","nodeType":"YulTypedName","src":"11582:5:30","type":""}]},{"body":{"nativeSrc":"11624:74:30","nodeType":"YulBlock","src":"11624:74:30","statements":[{"nativeSrc":"11642:42:30","nodeType":"YulAssignment","src":"11642:42:30","value":{"arguments":[{"arguments":[{"name":"src","nativeSrc":"11668:3:30","nodeType":"YulIdentifier","src":"11668:3:30"},{"name":"srcOffset","nativeSrc":"11673:9:30","nodeType":"YulIdentifier","src":"11673:9:30"}],"functionName":{"name":"add","nativeSrc":"11664:3:30","nodeType":"YulIdentifier","src":"11664:3:30"},"nativeSrc":"11664:19:30","nodeType":"YulFunctionCall","src":"11664:19:30"}],"functionName":{"name":"calldataload","nativeSrc":"11651:12:30","nodeType":"YulIdentifier","src":"11651:12:30"},"nativeSrc":"11651:33:30","nodeType":"YulFunctionCall","src":"11651:33:30"},"variableNames":[{"name":"value","nativeSrc":"11642:5:30","nodeType":"YulIdentifier","src":"11642:5:30"}]}]},"condition":{"name":"len","nativeSrc":"11608:3:30","nodeType":"YulIdentifier","src":"11608:3:30"},"nativeSrc":"11605:93:30","nodeType":"YulIf","src":"11605:93:30"},{"expression":{"arguments":[{"name":"slot","nativeSrc":"11718:4:30","nodeType":"YulIdentifier","src":"11718:4:30"},{"arguments":[{"name":"value","nativeSrc":"11777:5:30","nodeType":"YulIdentifier","src":"11777:5:30"},{"name":"len","nativeSrc":"11784:3:30","nodeType":"YulIdentifier","src":"11784:3:30"}],"functionName":{"name":"extract_used_part_and_set_length_of_short_byte_array","nativeSrc":"11724:52:30","nodeType":"YulIdentifier","src":"11724:52:30"},"nativeSrc":"11724:64:30","nodeType":"YulFunctionCall","src":"11724:64:30"}],"functionName":{"name":"sstore","nativeSrc":"11711:6:30","nodeType":"YulIdentifier","src":"11711:6:30"},"nativeSrc":"11711:78:30","nodeType":"YulFunctionCall","src":"11711:78:30"},"nativeSrc":"11711:78:30","nodeType":"YulExpressionStatement","src":"11711:78:30"}]},"nativeSrc":"11556:243:30","nodeType":"YulCase","src":"11556:243:30","value":"default"}],"expression":{"arguments":[{"name":"len","nativeSrc":"10922:3:30","nodeType":"YulIdentifier","src":"10922:3:30"},{"kind":"number","nativeSrc":"10927:2:30","nodeType":"YulLiteral","src":"10927:2:30","type":"","value":"31"}],"functionName":{"name":"gt","nativeSrc":"10919:2:30","nodeType":"YulIdentifier","src":"10919:2:30"},"nativeSrc":"10919:11:30","nodeType":"YulFunctionCall","src":"10919:11:30"},"nativeSrc":"10912:887:30","nodeType":"YulSwitch","src":"10912:887:30"}]},"name":"copy_byte_array_to_storage_from_t_string_calldata_ptr_to_t_string_storage","nativeSrc":"10607:1198:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"slot","nativeSrc":"10690:4:30","nodeType":"YulTypedName","src":"10690:4:30","type":""},{"name":"src","nativeSrc":"10696:3:30","nodeType":"YulTypedName","src":"10696:3:30","type":""},{"name":"len","nativeSrc":"10701:3:30","nodeType":"YulTypedName","src":"10701:3:30","type":""}],"src":"10607:1198:30"},{"body":{"nativeSrc":"11989:376:30","nodeType":"YulBlock","src":"11989:376:30","statements":[{"expression":{"arguments":[{"name":"headStart","nativeSrc":"12006:9:30","nodeType":"YulIdentifier","src":"12006:9:30"},{"kind":"number","nativeSrc":"12017:2:30","nodeType":"YulLiteral","src":"12017:2:30","type":"","value":"64"}],"functionName":{"name":"mstore","nativeSrc":"11999:6:30","nodeType":"YulIdentifier","src":"11999:6:30"},"nativeSrc":"11999:21:30","nodeType":"YulFunctionCall","src":"11999:21:30"},"nativeSrc":"11999:21:30","nodeType":"YulExpressionStatement","src":"11999:21:30"},{"nativeSrc":"12029:70:30","nodeType":"YulVariableDeclaration","src":"12029:70:30","value":{"arguments":[{"name":"value0","nativeSrc":"12072:6:30","nodeType":"YulIdentifier","src":"12072:6:30"},{"arguments":[{"name":"headStart","nativeSrc":"12084:9:30","nodeType":"YulIdentifier","src":"12084:9:30"},{"kind":"number","nativeSrc":"12095:2:30","nodeType":"YulLiteral","src":"12095:2:30","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"12080:3:30","nodeType":"YulIdentifier","src":"12080:3:30"},"nativeSrc":"12080:18:30","nodeType":"YulFunctionCall","src":"12080:18:30"}],"functionName":{"name":"abi_encode_string_memory_ptr","nativeSrc":"12043:28:30","nodeType":"YulIdentifier","src":"12043:28:30"},"nativeSrc":"12043:56:30","nodeType":"YulFunctionCall","src":"12043:56:30"},"variables":[{"name":"tail_1","nativeSrc":"12033:6:30","nodeType":"YulTypedName","src":"12033:6:30","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"12119:9:30","nodeType":"YulIdentifier","src":"12119:9:30"},{"kind":"number","nativeSrc":"12130:2:30","nodeType":"YulLiteral","src":"12130:2:30","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"12115:3:30","nodeType":"YulIdentifier","src":"12115:3:30"},"nativeSrc":"12115:18:30","nodeType":"YulFunctionCall","src":"12115:18:30"},{"arguments":[{"name":"tail_1","nativeSrc":"12139:6:30","nodeType":"YulIdentifier","src":"12139:6:30"},{"name":"headStart","nativeSrc":"12147:9:30","nodeType":"YulIdentifier","src":"12147:9:30"}],"functionName":{"name":"sub","nativeSrc":"12135:3:30","nodeType":"YulIdentifier","src":"12135:3:30"},"nativeSrc":"12135:22:30","nodeType":"YulFunctionCall","src":"12135:22:30"}],"functionName":{"name":"mstore","nativeSrc":"12108:6:30","nodeType":"YulIdentifier","src":"12108:6:30"},"nativeSrc":"12108:50:30","nodeType":"YulFunctionCall","src":"12108:50:30"},"nativeSrc":"12108:50:30","nodeType":"YulExpressionStatement","src":"12108:50:30"},{"expression":{"arguments":[{"name":"tail_1","nativeSrc":"12174:6:30","nodeType":"YulIdentifier","src":"12174:6:30"},{"name":"value2","nativeSrc":"12182:6:30","nodeType":"YulIdentifier","src":"12182:6:30"}],"functionName":{"name":"mstore","nativeSrc":"12167:6:30","nodeType":"YulIdentifier","src":"12167:6:30"},"nativeSrc":"12167:22:30","nodeType":"YulFunctionCall","src":"12167:22:30"},"nativeSrc":"12167:22:30","nodeType":"YulExpressionStatement","src":"12167:22:30"},{"expression":{"arguments":[{"arguments":[{"name":"tail_1","nativeSrc":"12215:6:30","nodeType":"YulIdentifier","src":"12215:6:30"},{"kind":"number","nativeSrc":"12223:2:30","nodeType":"YulLiteral","src":"12223:2:30","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"12211:3:30","nodeType":"YulIdentifier","src":"12211:3:30"},"nativeSrc":"12211:15:30","nodeType":"YulFunctionCall","src":"12211:15:30"},{"name":"value1","nativeSrc":"12228:6:30","nodeType":"YulIdentifier","src":"12228:6:30"},{"name":"value2","nativeSrc":"12236:6:30","nodeType":"YulIdentifier","src":"12236:6:30"}],"functionName":{"name":"calldatacopy","nativeSrc":"12198:12:30","nodeType":"YulIdentifier","src":"12198:12:30"},"nativeSrc":"12198:45:30","nodeType":"YulFunctionCall","src":"12198:45:30"},"nativeSrc":"12198:45:30","nodeType":"YulExpressionStatement","src":"12198:45:30"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"tail_1","nativeSrc":"12267:6:30","nodeType":"YulIdentifier","src":"12267:6:30"},{"name":"value2","nativeSrc":"12275:6:30","nodeType":"YulIdentifier","src":"12275:6:30"}],"functionName":{"name":"add","nativeSrc":"12263:3:30","nodeType":"YulIdentifier","src":"12263:3:30"},"nativeSrc":"12263:19:30","nodeType":"YulFunctionCall","src":"12263:19:30"},{"kind":"number","nativeSrc":"12284:2:30","nodeType":"YulLiteral","src":"12284:2:30","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"12259:3:30","nodeType":"YulIdentifier","src":"12259:3:30"},"nativeSrc":"12259:28:30","nodeType":"YulFunctionCall","src":"12259:28:30"},{"kind":"number","nativeSrc":"12289:1:30","nodeType":"YulLiteral","src":"12289:1:30","type":"","value":"0"}],"functionName":{"name":"mstore","nativeSrc":"12252:6:30","nodeType":"YulIdentifier","src":"12252:6:30"},"nativeSrc":"12252:39:30","nodeType":"YulFunctionCall","src":"12252:39:30"},"nativeSrc":"12252:39:30","nodeType":"YulExpressionStatement","src":"12252:39:30"},{"nativeSrc":"12300:59:30","nodeType":"YulAssignment","src":"12300:59:30","value":{"arguments":[{"arguments":[{"name":"tail_1","nativeSrc":"12316:6:30","nodeType":"YulIdentifier","src":"12316:6:30"},{"arguments":[{"arguments":[{"name":"value2","nativeSrc":"12332:6:30","nodeType":"YulIdentifier","src":"12332:6:30"},{"kind":"number","nativeSrc":"12340:2:30","nodeType":"YulLiteral","src":"12340:2:30","type":"","value":"31"}],"functionName":{"name":"add","nativeSrc":"12328:3:30","nodeType":"YulIdentifier","src":"12328:3:30"},"nativeSrc":"12328:15:30","nodeType":"YulFunctionCall","src":"12328:15:30"},{"arguments":[{"kind":"number","nativeSrc":"12349:2:30","nodeType":"YulLiteral","src":"12349:2:30","type":"","value":"31"}],"functionName":{"name":"not","nativeSrc":"12345:3:30","nodeType":"YulIdentifier","src":"12345:3:30"},"nativeSrc":"12345:7:30","nodeType":"YulFunctionCall","src":"12345:7:30"}],"functionName":{"name":"and","nativeSrc":"12324:3:30","nodeType":"YulIdentifier","src":"12324:3:30"},"nativeSrc":"12324:29:30","nodeType":"YulFunctionCall","src":"12324:29:30"}],"functionName":{"name":"add","nativeSrc":"12312:3:30","nodeType":"YulIdentifier","src":"12312:3:30"},"nativeSrc":"12312:42:30","nodeType":"YulFunctionCall","src":"12312:42:30"},{"kind":"number","nativeSrc":"12356:2:30","nodeType":"YulLiteral","src":"12356:2:30","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"12308:3:30","nodeType":"YulIdentifier","src":"12308:3:30"},"nativeSrc":"12308:51:30","nodeType":"YulFunctionCall","src":"12308:51:30"},"variableNames":[{"name":"tail","nativeSrc":"12300:4:30","nodeType":"YulIdentifier","src":"12300:4:30"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr_t_string_calldata_ptr__to_t_string_memory_ptr_t_string_memory_ptr__fromStack_reversed","nativeSrc":"11810:555:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"11942:9:30","nodeType":"YulTypedName","src":"11942:9:30","type":""},{"name":"value2","nativeSrc":"11953:6:30","nodeType":"YulTypedName","src":"11953:6:30","type":""},{"name":"value1","nativeSrc":"11961:6:30","nodeType":"YulTypedName","src":"11961:6:30","type":""},{"name":"value0","nativeSrc":"11969:6:30","nodeType":"YulTypedName","src":"11969:6:30","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"11980:4:30","nodeType":"YulTypedName","src":"11980:4:30","type":""}],"src":"11810:555:30"},{"body":{"nativeSrc":"12420:162:30","nodeType":"YulBlock","src":"12420:162:30","statements":[{"nativeSrc":"12430:26:30","nodeType":"YulVariableDeclaration","src":"12430:26:30","value":{"arguments":[{"name":"value","nativeSrc":"12450:5:30","nodeType":"YulIdentifier","src":"12450:5:30"}],"functionName":{"name":"mload","nativeSrc":"12444:5:30","nodeType":"YulIdentifier","src":"12444:5:30"},"nativeSrc":"12444:12:30","nodeType":"YulFunctionCall","src":"12444:12:30"},"variables":[{"name":"length","nativeSrc":"12434:6:30","nodeType":"YulTypedName","src":"12434:6:30","type":""}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"12471:3:30","nodeType":"YulIdentifier","src":"12471:3:30"},{"arguments":[{"name":"value","nativeSrc":"12480:5:30","nodeType":"YulIdentifier","src":"12480:5:30"},{"kind":"number","nativeSrc":"12487:4:30","nodeType":"YulLiteral","src":"12487:4:30","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"12476:3:30","nodeType":"YulIdentifier","src":"12476:3:30"},"nativeSrc":"12476:16:30","nodeType":"YulFunctionCall","src":"12476:16:30"},{"name":"length","nativeSrc":"12494:6:30","nodeType":"YulIdentifier","src":"12494:6:30"}],"functionName":{"name":"mcopy","nativeSrc":"12465:5:30","nodeType":"YulIdentifier","src":"12465:5:30"},"nativeSrc":"12465:36:30","nodeType":"YulFunctionCall","src":"12465:36:30"},"nativeSrc":"12465:36:30","nodeType":"YulExpressionStatement","src":"12465:36:30"},{"nativeSrc":"12510:26:30","nodeType":"YulVariableDeclaration","src":"12510:26:30","value":{"arguments":[{"name":"pos","nativeSrc":"12524:3:30","nodeType":"YulIdentifier","src":"12524:3:30"},{"name":"length","nativeSrc":"12529:6:30","nodeType":"YulIdentifier","src":"12529:6:30"}],"functionName":{"name":"add","nativeSrc":"12520:3:30","nodeType":"YulIdentifier","src":"12520:3:30"},"nativeSrc":"12520:16:30","nodeType":"YulFunctionCall","src":"12520:16:30"},"variables":[{"name":"_1","nativeSrc":"12514:2:30","nodeType":"YulTypedName","src":"12514:2:30","type":""}]},{"expression":{"arguments":[{"name":"_1","nativeSrc":"12552:2:30","nodeType":"YulIdentifier","src":"12552:2:30"},{"kind":"number","nativeSrc":"12556:1:30","nodeType":"YulLiteral","src":"12556:1:30","type":"","value":"0"}],"functionName":{"name":"mstore","nativeSrc":"12545:6:30","nodeType":"YulIdentifier","src":"12545:6:30"},"nativeSrc":"12545:13:30","nodeType":"YulFunctionCall","src":"12545:13:30"},"nativeSrc":"12545:13:30","nodeType":"YulExpressionStatement","src":"12545:13:30"},{"nativeSrc":"12567:9:30","nodeType":"YulAssignment","src":"12567:9:30","value":{"name":"_1","nativeSrc":"12574:2:30","nodeType":"YulIdentifier","src":"12574:2:30"},"variableNames":[{"name":"end","nativeSrc":"12567:3:30","nodeType":"YulIdentifier","src":"12567:3:30"}]}]},"name":"abi_encode_string","nativeSrc":"12370:212:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"12397:5:30","nodeType":"YulTypedName","src":"12397:5:30","type":""},{"name":"pos","nativeSrc":"12404:3:30","nodeType":"YulTypedName","src":"12404:3:30","type":""}],"returnVariables":[{"name":"end","nativeSrc":"12412:3:30","nodeType":"YulTypedName","src":"12412:3:30","type":""}],"src":"12370:212:30"},{"body":{"nativeSrc":"12774:80:30","nodeType":"YulBlock","src":"12774:80:30","statements":[{"nativeSrc":"12784:64:30","nodeType":"YulAssignment","src":"12784:64:30","value":{"arguments":[{"name":"value1","nativeSrc":"12809:6:30","nodeType":"YulIdentifier","src":"12809:6:30"},{"arguments":[{"name":"value0","nativeSrc":"12835:6:30","nodeType":"YulIdentifier","src":"12835:6:30"},{"name":"pos","nativeSrc":"12843:3:30","nodeType":"YulIdentifier","src":"12843:3:30"}],"functionName":{"name":"abi_encode_string","nativeSrc":"12817:17:30","nodeType":"YulIdentifier","src":"12817:17:30"},"nativeSrc":"12817:30:30","nodeType":"YulFunctionCall","src":"12817:30:30"}],"functionName":{"name":"abi_encode_string","nativeSrc":"12791:17:30","nodeType":"YulIdentifier","src":"12791:17:30"},"nativeSrc":"12791:57:30","nodeType":"YulFunctionCall","src":"12791:57:30"},"variableNames":[{"name":"end","nativeSrc":"12784:3:30","nodeType":"YulIdentifier","src":"12784:3:30"}]}]},"name":"abi_encode_tuple_packed_t_string_memory_ptr_t_string_memory_ptr__to_t_string_memory_ptr_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed","nativeSrc":"12587:267:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"12742:3:30","nodeType":"YulTypedName","src":"12742:3:30","type":""},{"name":"value1","nativeSrc":"12747:6:30","nodeType":"YulTypedName","src":"12747:6:30","type":""},{"name":"value0","nativeSrc":"12755:6:30","nodeType":"YulTypedName","src":"12755:6:30","type":""}],"returnVariables":[{"name":"end","nativeSrc":"12766:3:30","nodeType":"YulTypedName","src":"12766:3:30","type":""}],"src":"12587:267:30"},{"body":{"nativeSrc":"12987:152:30","nodeType":"YulBlock","src":"12987:152:30","statements":[{"nativeSrc":"12997:26:30","nodeType":"YulAssignment","src":"12997:26:30","value":{"arguments":[{"name":"headStart","nativeSrc":"13009:9:30","nodeType":"YulIdentifier","src":"13009:9:30"},{"kind":"number","nativeSrc":"13020:2:30","nodeType":"YulLiteral","src":"13020:2:30","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"13005:3:30","nodeType":"YulIdentifier","src":"13005:3:30"},"nativeSrc":"13005:18:30","nodeType":"YulFunctionCall","src":"13005:18:30"},"variableNames":[{"name":"tail","nativeSrc":"12997:4:30","nodeType":"YulIdentifier","src":"12997:4:30"}]},{"expression":{"arguments":[{"name":"headStart","nativeSrc":"13039:9:30","nodeType":"YulIdentifier","src":"13039:9:30"},{"arguments":[{"name":"value0","nativeSrc":"13054:6:30","nodeType":"YulIdentifier","src":"13054:6:30"},{"kind":"number","nativeSrc":"13062:26:30","nodeType":"YulLiteral","src":"13062:26:30","type":"","value":"0xffffffffffffffffffffffff"}],"functionName":{"name":"and","nativeSrc":"13050:3:30","nodeType":"YulIdentifier","src":"13050:3:30"},"nativeSrc":"13050:39:30","nodeType":"YulFunctionCall","src":"13050:39:30"}],"functionName":{"name":"mstore","nativeSrc":"13032:6:30","nodeType":"YulIdentifier","src":"13032:6:30"},"nativeSrc":"13032:58:30","nodeType":"YulFunctionCall","src":"13032:58:30"},"nativeSrc":"13032:58:30","nodeType":"YulExpressionStatement","src":"13032:58:30"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"13110:9:30","nodeType":"YulIdentifier","src":"13110:9:30"},{"kind":"number","nativeSrc":"13121:2:30","nodeType":"YulLiteral","src":"13121:2:30","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"13106:3:30","nodeType":"YulIdentifier","src":"13106:3:30"},"nativeSrc":"13106:18:30","nodeType":"YulFunctionCall","src":"13106:18:30"},{"name":"value1","nativeSrc":"13126:6:30","nodeType":"YulIdentifier","src":"13126:6:30"}],"functionName":{"name":"mstore","nativeSrc":"13099:6:30","nodeType":"YulIdentifier","src":"13099:6:30"},"nativeSrc":"13099:34:30","nodeType":"YulFunctionCall","src":"13099:34:30"},"nativeSrc":"13099:34:30","nodeType":"YulExpressionStatement","src":"13099:34:30"}]},"name":"abi_encode_tuple_t_uint96_t_uint256__to_t_uint256_t_uint256__fromStack_reversed","nativeSrc":"12859:280:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"12948:9:30","nodeType":"YulTypedName","src":"12948:9:30","type":""},{"name":"value1","nativeSrc":"12959:6:30","nodeType":"YulTypedName","src":"12959:6:30","type":""},{"name":"value0","nativeSrc":"12967:6:30","nodeType":"YulTypedName","src":"12967:6:30","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"12978:4:30","nodeType":"YulTypedName","src":"12978:4:30","type":""}],"src":"12859:280:30"},{"body":{"nativeSrc":"13191:132:30","nodeType":"YulBlock","src":"13191:132:30","statements":[{"nativeSrc":"13201:58:30","nodeType":"YulAssignment","src":"13201:58:30","value":{"arguments":[{"arguments":[{"name":"x","nativeSrc":"13216:1:30","nodeType":"YulIdentifier","src":"13216:1:30"},{"kind":"number","nativeSrc":"13219:14:30","nodeType":"YulLiteral","src":"13219:14:30","type":"","value":"0xffffffffffff"}],"functionName":{"name":"and","nativeSrc":"13212:3:30","nodeType":"YulIdentifier","src":"13212:3:30"},"nativeSrc":"13212:22:30","nodeType":"YulFunctionCall","src":"13212:22:30"},{"arguments":[{"name":"y","nativeSrc":"13240:1:30","nodeType":"YulIdentifier","src":"13240:1:30"},{"kind":"number","nativeSrc":"13243:14:30","nodeType":"YulLiteral","src":"13243:14:30","type":"","value":"0xffffffffffff"}],"functionName":{"name":"and","nativeSrc":"13236:3:30","nodeType":"YulIdentifier","src":"13236:3:30"},"nativeSrc":"13236:22:30","nodeType":"YulFunctionCall","src":"13236:22:30"}],"functionName":{"name":"add","nativeSrc":"13208:3:30","nodeType":"YulIdentifier","src":"13208:3:30"},"nativeSrc":"13208:51:30","nodeType":"YulFunctionCall","src":"13208:51:30"},"variableNames":[{"name":"sum","nativeSrc":"13201:3:30","nodeType":"YulIdentifier","src":"13201:3:30"}]},{"body":{"nativeSrc":"13295:22:30","nodeType":"YulBlock","src":"13295:22:30","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nativeSrc":"13297:16:30","nodeType":"YulIdentifier","src":"13297:16:30"},"nativeSrc":"13297:18:30","nodeType":"YulFunctionCall","src":"13297:18:30"},"nativeSrc":"13297:18:30","nodeType":"YulExpressionStatement","src":"13297:18:30"}]},"condition":{"arguments":[{"name":"sum","nativeSrc":"13274:3:30","nodeType":"YulIdentifier","src":"13274:3:30"},{"kind":"number","nativeSrc":"13279:14:30","nodeType":"YulLiteral","src":"13279:14:30","type":"","value":"0xffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"13271:2:30","nodeType":"YulIdentifier","src":"13271:2:30"},"nativeSrc":"13271:23:30","nodeType":"YulFunctionCall","src":"13271:23:30"},"nativeSrc":"13268:49:30","nodeType":"YulIf","src":"13268:49:30"}]},"name":"checked_add_t_uint48","nativeSrc":"13144:179:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nativeSrc":"13174:1:30","nodeType":"YulTypedName","src":"13174:1:30","type":""},{"name":"y","nativeSrc":"13177:1:30","nodeType":"YulTypedName","src":"13177:1:30","type":""}],"returnVariables":[{"name":"sum","nativeSrc":"13183:3:30","nodeType":"YulTypedName","src":"13183:3:30","type":""}],"src":"13144:179:30"},{"body":{"nativeSrc":"13531:293:30","nodeType":"YulBlock","src":"13531:293:30","statements":[{"expression":{"arguments":[{"name":"headStart","nativeSrc":"13548:9:30","nodeType":"YulIdentifier","src":"13548:9:30"},{"arguments":[{"name":"value0","nativeSrc":"13563:6:30","nodeType":"YulIdentifier","src":"13563:6:30"},{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"13579:3:30","nodeType":"YulLiteral","src":"13579:3:30","type":"","value":"160"},{"kind":"number","nativeSrc":"13584:1:30","nodeType":"YulLiteral","src":"13584:1:30","type":"","value":"1"}],"functionName":{"name":"shl","nativeSrc":"13575:3:30","nodeType":"YulIdentifier","src":"13575:3:30"},"nativeSrc":"13575:11:30","nodeType":"YulFunctionCall","src":"13575:11:30"},{"kind":"number","nativeSrc":"13588:1:30","nodeType":"YulLiteral","src":"13588:1:30","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"13571:3:30","nodeType":"YulIdentifier","src":"13571:3:30"},"nativeSrc":"13571:19:30","nodeType":"YulFunctionCall","src":"13571:19:30"}],"functionName":{"name":"and","nativeSrc":"13559:3:30","nodeType":"YulIdentifier","src":"13559:3:30"},"nativeSrc":"13559:32:30","nodeType":"YulFunctionCall","src":"13559:32:30"}],"functionName":{"name":"mstore","nativeSrc":"13541:6:30","nodeType":"YulIdentifier","src":"13541:6:30"},"nativeSrc":"13541:51:30","nodeType":"YulFunctionCall","src":"13541:51:30"},"nativeSrc":"13541:51:30","nodeType":"YulExpressionStatement","src":"13541:51:30"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"13612:9:30","nodeType":"YulIdentifier","src":"13612:9:30"},{"kind":"number","nativeSrc":"13623:2:30","nodeType":"YulLiteral","src":"13623:2:30","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"13608:3:30","nodeType":"YulIdentifier","src":"13608:3:30"},"nativeSrc":"13608:18:30","nodeType":"YulFunctionCall","src":"13608:18:30"},{"arguments":[{"name":"value1","nativeSrc":"13632:6:30","nodeType":"YulIdentifier","src":"13632:6:30"},{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"13648:3:30","nodeType":"YulLiteral","src":"13648:3:30","type":"","value":"160"},{"kind":"number","nativeSrc":"13653:1:30","nodeType":"YulLiteral","src":"13653:1:30","type":"","value":"1"}],"functionName":{"name":"shl","nativeSrc":"13644:3:30","nodeType":"YulIdentifier","src":"13644:3:30"},"nativeSrc":"13644:11:30","nodeType":"YulFunctionCall","src":"13644:11:30"},{"kind":"number","nativeSrc":"13657:1:30","nodeType":"YulLiteral","src":"13657:1:30","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"13640:3:30","nodeType":"YulIdentifier","src":"13640:3:30"},"nativeSrc":"13640:19:30","nodeType":"YulFunctionCall","src":"13640:19:30"}],"functionName":{"name":"and","nativeSrc":"13628:3:30","nodeType":"YulIdentifier","src":"13628:3:30"},"nativeSrc":"13628:32:30","nodeType":"YulFunctionCall","src":"13628:32:30"}],"functionName":{"name":"mstore","nativeSrc":"13601:6:30","nodeType":"YulIdentifier","src":"13601:6:30"},"nativeSrc":"13601:60:30","nodeType":"YulFunctionCall","src":"13601:60:30"},"nativeSrc":"13601:60:30","nodeType":"YulExpressionStatement","src":"13601:60:30"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"13681:9:30","nodeType":"YulIdentifier","src":"13681:9:30"},{"kind":"number","nativeSrc":"13692:2:30","nodeType":"YulLiteral","src":"13692:2:30","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"13677:3:30","nodeType":"YulIdentifier","src":"13677:3:30"},"nativeSrc":"13677:18:30","nodeType":"YulFunctionCall","src":"13677:18:30"},{"name":"value2","nativeSrc":"13697:6:30","nodeType":"YulIdentifier","src":"13697:6:30"}],"functionName":{"name":"mstore","nativeSrc":"13670:6:30","nodeType":"YulIdentifier","src":"13670:6:30"},"nativeSrc":"13670:34:30","nodeType":"YulFunctionCall","src":"13670:34:30"},"nativeSrc":"13670:34:30","nodeType":"YulExpressionStatement","src":"13670:34:30"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"13724:9:30","nodeType":"YulIdentifier","src":"13724:9:30"},{"kind":"number","nativeSrc":"13735:2:30","nodeType":"YulLiteral","src":"13735:2:30","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"13720:3:30","nodeType":"YulIdentifier","src":"13720:3:30"},"nativeSrc":"13720:18:30","nodeType":"YulFunctionCall","src":"13720:18:30"},{"kind":"number","nativeSrc":"13740:3:30","nodeType":"YulLiteral","src":"13740:3:30","type":"","value":"128"}],"functionName":{"name":"mstore","nativeSrc":"13713:6:30","nodeType":"YulIdentifier","src":"13713:6:30"},"nativeSrc":"13713:31:30","nodeType":"YulFunctionCall","src":"13713:31:30"},"nativeSrc":"13713:31:30","nodeType":"YulExpressionStatement","src":"13713:31:30"},{"nativeSrc":"13753:65:30","nodeType":"YulAssignment","src":"13753:65:30","value":{"arguments":[{"name":"value3","nativeSrc":"13790:6:30","nodeType":"YulIdentifier","src":"13790:6:30"},{"arguments":[{"name":"headStart","nativeSrc":"13802:9:30","nodeType":"YulIdentifier","src":"13802:9:30"},{"kind":"number","nativeSrc":"13813:3:30","nodeType":"YulLiteral","src":"13813:3:30","type":"","value":"128"}],"functionName":{"name":"add","nativeSrc":"13798:3:30","nodeType":"YulIdentifier","src":"13798:3:30"},"nativeSrc":"13798:19:30","nodeType":"YulFunctionCall","src":"13798:19:30"}],"functionName":{"name":"abi_encode_string_memory_ptr","nativeSrc":"13761:28:30","nodeType":"YulIdentifier","src":"13761:28:30"},"nativeSrc":"13761:57:30","nodeType":"YulFunctionCall","src":"13761:57:30"},"variableNames":[{"name":"tail","nativeSrc":"13753:4:30","nodeType":"YulIdentifier","src":"13753:4:30"}]}]},"name":"abi_encode_tuple_t_address_t_address_t_uint256_t_bytes_memory_ptr__to_t_address_t_address_t_uint256_t_bytes_memory_ptr__fromStack_reversed","nativeSrc":"13328:496:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"13476:9:30","nodeType":"YulTypedName","src":"13476:9:30","type":""},{"name":"value3","nativeSrc":"13487:6:30","nodeType":"YulTypedName","src":"13487:6:30","type":""},{"name":"value2","nativeSrc":"13495:6:30","nodeType":"YulTypedName","src":"13495:6:30","type":""},{"name":"value1","nativeSrc":"13503:6:30","nodeType":"YulTypedName","src":"13503:6:30","type":""},{"name":"value0","nativeSrc":"13511:6:30","nodeType":"YulTypedName","src":"13511:6:30","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"13522:4:30","nodeType":"YulTypedName","src":"13522:4:30","type":""}],"src":"13328:496:30"},{"body":{"nativeSrc":"13909:169:30","nodeType":"YulBlock","src":"13909:169:30","statements":[{"body":{"nativeSrc":"13955:16:30","nodeType":"YulBlock","src":"13955:16:30","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"13964:1:30","nodeType":"YulLiteral","src":"13964:1:30","type":"","value":"0"},{"kind":"number","nativeSrc":"13967:1:30","nodeType":"YulLiteral","src":"13967:1:30","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"13957:6:30","nodeType":"YulIdentifier","src":"13957:6:30"},"nativeSrc":"13957:12:30","nodeType":"YulFunctionCall","src":"13957:12:30"},"nativeSrc":"13957:12:30","nodeType":"YulExpressionStatement","src":"13957:12:30"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"13930:7:30","nodeType":"YulIdentifier","src":"13930:7:30"},{"name":"headStart","nativeSrc":"13939:9:30","nodeType":"YulIdentifier","src":"13939:9:30"}],"functionName":{"name":"sub","nativeSrc":"13926:3:30","nodeType":"YulIdentifier","src":"13926:3:30"},"nativeSrc":"13926:23:30","nodeType":"YulFunctionCall","src":"13926:23:30"},{"kind":"number","nativeSrc":"13951:2:30","nodeType":"YulLiteral","src":"13951:2:30","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"13922:3:30","nodeType":"YulIdentifier","src":"13922:3:30"},"nativeSrc":"13922:32:30","nodeType":"YulFunctionCall","src":"13922:32:30"},"nativeSrc":"13919:52:30","nodeType":"YulIf","src":"13919:52:30"},{"nativeSrc":"13980:29:30","nodeType":"YulVariableDeclaration","src":"13980:29:30","value":{"arguments":[{"name":"headStart","nativeSrc":"13999:9:30","nodeType":"YulIdentifier","src":"13999:9:30"}],"functionName":{"name":"mload","nativeSrc":"13993:5:30","nodeType":"YulIdentifier","src":"13993:5:30"},"nativeSrc":"13993:16:30","nodeType":"YulFunctionCall","src":"13993:16:30"},"variables":[{"name":"value","nativeSrc":"13984:5:30","nodeType":"YulTypedName","src":"13984:5:30","type":""}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"14042:5:30","nodeType":"YulIdentifier","src":"14042:5:30"}],"functionName":{"name":"validator_revert_bytes4","nativeSrc":"14018:23:30","nodeType":"YulIdentifier","src":"14018:23:30"},"nativeSrc":"14018:30:30","nodeType":"YulFunctionCall","src":"14018:30:30"},"nativeSrc":"14018:30:30","nodeType":"YulExpressionStatement","src":"14018:30:30"},{"nativeSrc":"14057:15:30","nodeType":"YulAssignment","src":"14057:15:30","value":{"name":"value","nativeSrc":"14067:5:30","nodeType":"YulIdentifier","src":"14067:5:30"},"variableNames":[{"name":"value0","nativeSrc":"14057:6:30","nodeType":"YulIdentifier","src":"14057:6:30"}]}]},"name":"abi_decode_tuple_t_bytes4_fromMemory","nativeSrc":"13829:249:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"13875:9:30","nodeType":"YulTypedName","src":"13875:9:30","type":""},{"name":"dataEnd","nativeSrc":"13886:7:30","nodeType":"YulTypedName","src":"13886:7:30","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"13898:6:30","nodeType":"YulTypedName","src":"13898:6:30","type":""}],"src":"13829:249:30"},{"body":{"nativeSrc":"14212:145:30","nodeType":"YulBlock","src":"14212:145:30","statements":[{"nativeSrc":"14222:26:30","nodeType":"YulAssignment","src":"14222:26:30","value":{"arguments":[{"name":"headStart","nativeSrc":"14234:9:30","nodeType":"YulIdentifier","src":"14234:9:30"},{"kind":"number","nativeSrc":"14245:2:30","nodeType":"YulLiteral","src":"14245:2:30","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"14230:3:30","nodeType":"YulIdentifier","src":"14230:3:30"},"nativeSrc":"14230:18:30","nodeType":"YulFunctionCall","src":"14230:18:30"},"variableNames":[{"name":"tail","nativeSrc":"14222:4:30","nodeType":"YulIdentifier","src":"14222:4:30"}]},{"expression":{"arguments":[{"name":"headStart","nativeSrc":"14264:9:30","nodeType":"YulIdentifier","src":"14264:9:30"},{"arguments":[{"name":"value0","nativeSrc":"14279:6:30","nodeType":"YulIdentifier","src":"14279:6:30"},{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"14295:3:30","nodeType":"YulLiteral","src":"14295:3:30","type":"","value":"160"},{"kind":"number","nativeSrc":"14300:1:30","nodeType":"YulLiteral","src":"14300:1:30","type":"","value":"1"}],"functionName":{"name":"shl","nativeSrc":"14291:3:30","nodeType":"YulIdentifier","src":"14291:3:30"},"nativeSrc":"14291:11:30","nodeType":"YulFunctionCall","src":"14291:11:30"},{"kind":"number","nativeSrc":"14304:1:30","nodeType":"YulLiteral","src":"14304:1:30","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"14287:3:30","nodeType":"YulIdentifier","src":"14287:3:30"},"nativeSrc":"14287:19:30","nodeType":"YulFunctionCall","src":"14287:19:30"}],"functionName":{"name":"and","nativeSrc":"14275:3:30","nodeType":"YulIdentifier","src":"14275:3:30"},"nativeSrc":"14275:32:30","nodeType":"YulFunctionCall","src":"14275:32:30"}],"functionName":{"name":"mstore","nativeSrc":"14257:6:30","nodeType":"YulIdentifier","src":"14257:6:30"},"nativeSrc":"14257:51:30","nodeType":"YulFunctionCall","src":"14257:51:30"},"nativeSrc":"14257:51:30","nodeType":"YulExpressionStatement","src":"14257:51:30"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"14328:9:30","nodeType":"YulIdentifier","src":"14328:9:30"},{"kind":"number","nativeSrc":"14339:2:30","nodeType":"YulLiteral","src":"14339:2:30","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"14324:3:30","nodeType":"YulIdentifier","src":"14324:3:30"},"nativeSrc":"14324:18:30","nodeType":"YulFunctionCall","src":"14324:18:30"},{"name":"value1","nativeSrc":"14344:6:30","nodeType":"YulIdentifier","src":"14344:6:30"}],"functionName":{"name":"mstore","nativeSrc":"14317:6:30","nodeType":"YulIdentifier","src":"14317:6:30"},"nativeSrc":"14317:34:30","nodeType":"YulFunctionCall","src":"14317:34:30"},"nativeSrc":"14317:34:30","nodeType":"YulExpressionStatement","src":"14317:34:30"}]},"name":"abi_encode_tuple_t_address_t_bytes32__to_t_address_t_bytes32__fromStack_reversed","nativeSrc":"14083:274:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"14173:9:30","nodeType":"YulTypedName","src":"14173:9:30","type":""},{"name":"value1","nativeSrc":"14184:6:30","nodeType":"YulTypedName","src":"14184:6:30","type":""},{"name":"value0","nativeSrc":"14192:6:30","nodeType":"YulTypedName","src":"14192:6:30","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"14203:4:30","nodeType":"YulTypedName","src":"14203:4:30","type":""}],"src":"14083:274:30"},{"body":{"nativeSrc":"14498:130:30","nodeType":"YulBlock","src":"14498:130:30","statements":[{"nativeSrc":"14508:26:30","nodeType":"YulAssignment","src":"14508:26:30","value":{"arguments":[{"name":"headStart","nativeSrc":"14520:9:30","nodeType":"YulIdentifier","src":"14520:9:30"},{"kind":"number","nativeSrc":"14531:2:30","nodeType":"YulLiteral","src":"14531:2:30","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"14516:3:30","nodeType":"YulIdentifier","src":"14516:3:30"},"nativeSrc":"14516:18:30","nodeType":"YulFunctionCall","src":"14516:18:30"},"variableNames":[{"name":"tail","nativeSrc":"14508:4:30","nodeType":"YulIdentifier","src":"14508:4:30"}]},{"expression":{"arguments":[{"name":"headStart","nativeSrc":"14550:9:30","nodeType":"YulIdentifier","src":"14550:9:30"},{"arguments":[{"name":"value0","nativeSrc":"14565:6:30","nodeType":"YulIdentifier","src":"14565:6:30"},{"kind":"number","nativeSrc":"14573:4:30","nodeType":"YulLiteral","src":"14573:4:30","type":"","value":"0xff"}],"functionName":{"name":"and","nativeSrc":"14561:3:30","nodeType":"YulIdentifier","src":"14561:3:30"},"nativeSrc":"14561:17:30","nodeType":"YulFunctionCall","src":"14561:17:30"}],"functionName":{"name":"mstore","nativeSrc":"14543:6:30","nodeType":"YulIdentifier","src":"14543:6:30"},"nativeSrc":"14543:36:30","nodeType":"YulFunctionCall","src":"14543:36:30"},"nativeSrc":"14543:36:30","nodeType":"YulExpressionStatement","src":"14543:36:30"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"14599:9:30","nodeType":"YulIdentifier","src":"14599:9:30"},{"kind":"number","nativeSrc":"14610:2:30","nodeType":"YulLiteral","src":"14610:2:30","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"14595:3:30","nodeType":"YulIdentifier","src":"14595:3:30"},"nativeSrc":"14595:18:30","nodeType":"YulFunctionCall","src":"14595:18:30"},{"name":"value1","nativeSrc":"14615:6:30","nodeType":"YulIdentifier","src":"14615:6:30"}],"functionName":{"name":"mstore","nativeSrc":"14588:6:30","nodeType":"YulIdentifier","src":"14588:6:30"},"nativeSrc":"14588:34:30","nodeType":"YulFunctionCall","src":"14588:34:30"},"nativeSrc":"14588:34:30","nodeType":"YulExpressionStatement","src":"14588:34:30"}]},"name":"abi_encode_tuple_t_rational_48_by_1_t_uint256__to_t_uint8_t_uint256__fromStack_reversed","nativeSrc":"14362:266:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"14459:9:30","nodeType":"YulTypedName","src":"14459:9:30","type":""},{"name":"value1","nativeSrc":"14470:6:30","nodeType":"YulTypedName","src":"14470:6:30","type":""},{"name":"value0","nativeSrc":"14478:6:30","nodeType":"YulTypedName","src":"14478:6:30","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"14489:4:30","nodeType":"YulTypedName","src":"14489:4:30","type":""}],"src":"14362:266:30"},{"body":{"nativeSrc":"14681:134:30","nodeType":"YulBlock","src":"14681:134:30","statements":[{"nativeSrc":"14691:59:30","nodeType":"YulAssignment","src":"14691:59:30","value":{"arguments":[{"arguments":[{"name":"x","nativeSrc":"14707:1:30","nodeType":"YulIdentifier","src":"14707:1:30"},{"kind":"number","nativeSrc":"14710:14:30","nodeType":"YulLiteral","src":"14710:14:30","type":"","value":"0xffffffffffff"}],"functionName":{"name":"and","nativeSrc":"14703:3:30","nodeType":"YulIdentifier","src":"14703:3:30"},"nativeSrc":"14703:22:30","nodeType":"YulFunctionCall","src":"14703:22:30"},{"arguments":[{"name":"y","nativeSrc":"14731:1:30","nodeType":"YulIdentifier","src":"14731:1:30"},{"kind":"number","nativeSrc":"14734:14:30","nodeType":"YulLiteral","src":"14734:14:30","type":"","value":"0xffffffffffff"}],"functionName":{"name":"and","nativeSrc":"14727:3:30","nodeType":"YulIdentifier","src":"14727:3:30"},"nativeSrc":"14727:22:30","nodeType":"YulFunctionCall","src":"14727:22:30"}],"functionName":{"name":"sub","nativeSrc":"14699:3:30","nodeType":"YulIdentifier","src":"14699:3:30"},"nativeSrc":"14699:51:30","nodeType":"YulFunctionCall","src":"14699:51:30"},"variableNames":[{"name":"diff","nativeSrc":"14691:4:30","nodeType":"YulIdentifier","src":"14691:4:30"}]},{"body":{"nativeSrc":"14787:22:30","nodeType":"YulBlock","src":"14787:22:30","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nativeSrc":"14789:16:30","nodeType":"YulIdentifier","src":"14789:16:30"},"nativeSrc":"14789:18:30","nodeType":"YulFunctionCall","src":"14789:18:30"},"nativeSrc":"14789:18:30","nodeType":"YulExpressionStatement","src":"14789:18:30"}]},"condition":{"arguments":[{"name":"diff","nativeSrc":"14765:4:30","nodeType":"YulIdentifier","src":"14765:4:30"},{"kind":"number","nativeSrc":"14771:14:30","nodeType":"YulLiteral","src":"14771:14:30","type":"","value":"0xffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"14762:2:30","nodeType":"YulIdentifier","src":"14762:2:30"},"nativeSrc":"14762:24:30","nodeType":"YulFunctionCall","src":"14762:24:30"},"nativeSrc":"14759:50:30","nodeType":"YulIf","src":"14759:50:30"}]},"name":"checked_sub_t_uint48","nativeSrc":"14633:182:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nativeSrc":"14663:1:30","nodeType":"YulTypedName","src":"14663:1:30","type":""},{"name":"y","nativeSrc":"14666:1:30","nodeType":"YulTypedName","src":"14666:1:30","type":""}],"returnVariables":[{"name":"diff","nativeSrc":"14672:4:30","nodeType":"YulTypedName","src":"14672:4:30","type":""}],"src":"14633:182:30"}]},"contents":"{\n { }\n function validator_revert_bytes4(value)\n {\n if iszero(eq(value, and(value, shl(224, 0xffffffff)))) { revert(0, 0) }\n }\n function abi_decode_tuple_t_bytes4(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_bytes4(value)\n value0 := value\n }\n function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, iszero(iszero(value0)))\n }\n function abi_encode_tuple_t_uint48__to_t_uint48__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xffffffffffff))\n }\n function abi_decode_address(offset) -> value\n {\n value := calldataload(offset)\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n }\n function abi_decode_tuple_t_addresst_uint96(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n value0 := abi_decode_address(headStart)\n let value := calldataload(add(headStart, 32))\n if iszero(eq(value, and(value, 0xffffffffffffffffffffffff))) { revert(0, 0) }\n value1 := value\n }\n function abi_encode_string_memory_ptr(value, pos) -> end\n {\n let length := mload(value)\n mstore(pos, length)\n mcopy(add(pos, 0x20), add(value, 0x20), length)\n mstore(add(add(pos, length), 0x20), 0)\n end := add(add(pos, and(add(length, 31), not(31))), 0x20)\n }\n function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n mstore(headStart, 32)\n tail := abi_encode_string_memory_ptr(value0, add(headStart, 32))\n }\n function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := 0\n value := calldataload(headStart)\n value0 := value\n }\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n }\n function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n value0 := abi_decode_address(headStart)\n let value := 0\n value := calldataload(add(headStart, 32))\n value1 := value\n }\n function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n {\n if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n value0 := abi_decode_address(headStart)\n value1 := abi_decode_address(add(headStart, 32))\n let value := 0\n value := calldataload(add(headStart, 64))\n value2 := value\n }\n function abi_decode_tuple_t_bytes32(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := 0\n value := calldataload(headStart)\n value0 := value\n }\n function abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, value0)\n }\n function abi_decode_tuple_t_uint256t_uint256(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n let value := 0\n value := calldataload(headStart)\n value0 := value\n let value_1 := 0\n value_1 := calldataload(add(headStart, 32))\n value1 := value_1\n }\n function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n mstore(add(headStart, 32), value1)\n }\n function abi_decode_tuple_t_bytes32t_address(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n let value := 0\n value := calldataload(headStart)\n value0 := value\n value1 := abi_decode_address(add(headStart, 32))\n }\n function abi_decode_tuple_t_string_calldata_ptr(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let offset := calldataload(headStart)\n if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n let _1 := add(headStart, offset)\n if iszero(slt(add(_1, 0x1f), dataEnd)) { revert(0, 0) }\n let length := calldataload(_1)\n if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n if gt(add(add(_1, length), 32), dataEnd) { revert(0, 0) }\n value0 := add(_1, 32)\n value1 := length\n }\n function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n value0 := abi_decode_address(headStart)\n }\n function abi_decode_tuple_t_uint48(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := calldataload(headStart)\n if iszero(eq(value, and(value, 0xffffffffffff))) { revert(0, 0) }\n value0 := value\n }\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, value0)\n }\n function abi_encode_tuple_t_uint48_t_uint48__to_t_uint48_t_uint48__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n mstore(headStart, and(value0, 0xffffffffffff))\n mstore(add(headStart, 32), and(value1, 0xffffffffffff))\n }\n function abi_decode_tuple_t_addresst_bool(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n value0 := abi_decode_address(headStart)\n let value := calldataload(add(headStart, 32))\n if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n value1 := value\n }\n function panic_error_0x41()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n function abi_decode_tuple_t_addresst_addresst_uint256t_bytes_memory_ptr(headStart, dataEnd) -> value0, value1, value2, value3\n {\n if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n value0 := abi_decode_address(headStart)\n value1 := abi_decode_address(add(headStart, 32))\n let value := 0\n value := calldataload(add(headStart, 64))\n value2 := value\n let offset := calldataload(add(headStart, 96))\n if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n let _1 := add(headStart, offset)\n if iszero(slt(add(_1, 0x1f), dataEnd)) { revert(0, 0) }\n let length := calldataload(_1)\n if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n let memPtr := mload(64)\n let newFreePtr := add(memPtr, and(add(and(add(length, 0x1f), not(31)), 63), not(31)))\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n mstore(memPtr, length)\n if gt(add(add(_1, length), 32), dataEnd) { revert(0, 0) }\n calldatacopy(add(memPtr, 32), add(_1, 32), length)\n mstore(add(add(memPtr, length), 32), 0)\n value3 := memPtr\n }\n function abi_encode_tuple_t_address_t_uint48__to_t_address_t_uint48__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n mstore(add(headStart, 32), and(value1, 0xffffffffffff))\n }\n function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n value0 := abi_decode_address(headStart)\n value1 := abi_decode_address(add(headStart, 32))\n }\n function abi_encode_tuple_t_uint96__to_t_uint96__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xffffffffffffffffffffffff))\n }\n function extract_byte_array_length(data) -> length\n {\n length := shr(1, data)\n let outOfPlaceEncoding := and(data, 1)\n if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n if eq(outOfPlaceEncoding, lt(length, 32))\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x22)\n revert(0, 0x24)\n }\n }\n function abi_encode_tuple_t_address_t_uint256_t_address__to_t_address_t_uint256_t_address__fromStack_reversed(headStart, value2, value1, value0) -> tail\n {\n tail := add(headStart, 96)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n mstore(add(headStart, 32), value1)\n mstore(add(headStart, 64), and(value2, sub(shl(160, 1), 1)))\n }\n function panic_error_0x11()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n function checked_mul_t_uint256(x, y) -> product\n {\n product := mul(x, y)\n if iszero(or(iszero(x), eq(y, div(product, x)))) { panic_error_0x11() }\n }\n function panic_error_0x12()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x12)\n revert(0, 0x24)\n }\n function checked_div_t_uint256(x, y) -> r\n {\n if iszero(y)\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x12)\n revert(0, 0x24)\n }\n r := div(x, y)\n }\n function array_dataslot_string_storage(ptr) -> data\n {\n mstore(0, ptr)\n data := keccak256(0, 0x20)\n }\n function clean_up_bytearray_end_slots_string_storage(array, len, startIndex)\n {\n if gt(len, 31)\n {\n mstore(0, array)\n let data := keccak256(0, 0x20)\n let deleteStart := add(data, shr(5, add(startIndex, 31)))\n if lt(startIndex, 0x20) { deleteStart := data }\n let _1 := add(data, shr(5, add(len, 31)))\n let start := deleteStart\n for { } lt(start, _1) { start := add(start, 1) }\n { sstore(start, 0) }\n }\n }\n function extract_used_part_and_set_length_of_short_byte_array(data, len) -> used\n {\n used := or(and(data, not(shr(shl(3, len), not(0)))), shl(1, len))\n }\n function copy_byte_array_to_storage_from_t_string_calldata_ptr_to_t_string_storage(slot, src, len)\n {\n if gt(len, 0xffffffffffffffff) { panic_error_0x41() }\n clean_up_bytearray_end_slots_string_storage(slot, extract_byte_array_length(sload(slot)), len)\n let srcOffset := 0\n switch gt(len, 31)\n case 1 {\n let loopEnd := and(len, not(31))\n let dstPtr := array_dataslot_string_storage(slot)\n let i := 0\n for { } lt(i, loopEnd) { i := add(i, 0x20) }\n {\n sstore(dstPtr, calldataload(add(src, srcOffset)))\n dstPtr := add(dstPtr, 1)\n srcOffset := add(srcOffset, 0x20)\n }\n if lt(loopEnd, len)\n {\n sstore(dstPtr, and(calldataload(add(src, srcOffset)), not(shr(and(shl(3, len), 248), not(0)))))\n }\n sstore(slot, add(shl(1, len), 1))\n }\n default {\n let value := 0\n if len\n {\n value := calldataload(add(src, srcOffset))\n }\n sstore(slot, extract_used_part_and_set_length_of_short_byte_array(value, len))\n }\n }\n function abi_encode_tuple_t_string_memory_ptr_t_string_calldata_ptr__to_t_string_memory_ptr_t_string_memory_ptr__fromStack_reversed(headStart, value2, value1, value0) -> tail\n {\n mstore(headStart, 64)\n let tail_1 := abi_encode_string_memory_ptr(value0, add(headStart, 64))\n mstore(add(headStart, 32), sub(tail_1, headStart))\n mstore(tail_1, value2)\n calldatacopy(add(tail_1, 32), value1, value2)\n mstore(add(add(tail_1, value2), 32), 0)\n tail := add(add(tail_1, and(add(value2, 31), not(31))), 32)\n }\n function abi_encode_string(value, pos) -> end\n {\n let length := mload(value)\n mcopy(pos, add(value, 0x20), length)\n let _1 := add(pos, length)\n mstore(_1, 0)\n end := _1\n }\n function abi_encode_tuple_packed_t_string_memory_ptr_t_string_memory_ptr__to_t_string_memory_ptr_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value1, value0) -> end\n {\n end := abi_encode_string(value1, abi_encode_string(value0, pos))\n }\n function abi_encode_tuple_t_uint96_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n mstore(headStart, and(value0, 0xffffffffffffffffffffffff))\n mstore(add(headStart, 32), value1)\n }\n function checked_add_t_uint48(x, y) -> sum\n {\n sum := add(and(x, 0xffffffffffff), and(y, 0xffffffffffff))\n if gt(sum, 0xffffffffffff) { panic_error_0x11() }\n }\n function abi_encode_tuple_t_address_t_address_t_uint256_t_bytes_memory_ptr__to_t_address_t_address_t_uint256_t_bytes_memory_ptr__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n {\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n mstore(add(headStart, 32), and(value1, sub(shl(160, 1), 1)))\n mstore(add(headStart, 64), value2)\n mstore(add(headStart, 96), 128)\n tail := abi_encode_string_memory_ptr(value3, add(headStart, 128))\n }\n function abi_decode_tuple_t_bytes4_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := mload(headStart)\n validator_revert_bytes4(value)\n value0 := value\n }\n function abi_encode_tuple_t_address_t_bytes32__to_t_address_t_bytes32__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n mstore(add(headStart, 32), value1)\n }\n function abi_encode_tuple_t_rational_48_by_1_t_uint256__to_t_uint8_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n mstore(headStart, and(value0, 0xff))\n mstore(add(headStart, 32), value1)\n }\n function checked_sub_t_uint48(x, y) -> diff\n {\n diff := sub(and(x, 0xffffffffffff), and(y, 0xffffffffffff))\n if gt(diff, 0xffffffffffff) { panic_error_0x11() }\n }\n}","id":30,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561000f575f80fd5b506004361061024a575f3560e01c806370a0823111610140578063a22cb465116100bf578063cf6eefb711610084578063cf6eefb714610503578063d539139314610531578063d547741f14610558578063d602b9fd1461056b578063e8a3d48514610573578063e985e9c51461057b575f80fd5b8063a22cb465146104ba578063b88d4fde146104cd578063c87b56dd146104e0578063cc8463c8146104f3578063cefc1429146104fb575f80fd5b8063938e3d7b11610105578063938e3d7b1461045e57806395d89b4114610471578063a144819414610479578063a1eda53c1461048c578063a217fddf146104b3575f80fd5b806370a08231146104175780638456cb591461042a57806384ef8ffc146104325780638da5cb5b1461044357806391d148541461044b575f80fd5b80632f2ff15d116101cc5780635c975abb116101915780635c975abb146103cb578063634e93da146103d65780636352211e146103e9578063649a5ec7146103fc5780636c0360eb1461040f575f80fd5b80632f2ff15d1461037757806336568abe1461038a5780633f4ba83a1461039d57806342842e0e146103a557806355f804b3146103b8575f80fd5b8063095ea7b311610212578063095ea7b3146102e75780630aa6220b146102fa57806323b872dd14610302578063248a9ca3146103155780632a55205a14610345575f80fd5b806301ffc9a71461024e578063022d63fb1461027657806302fa7c471461029257806306fdde03146102a7578063081812fc146102bc575b5f80fd5b61026161025c366004611ce7565b61058e565b60405190151581526020015b60405180910390f35b620697805b60405165ffffffffffff909116815260200161026d565b6102a56102a0366004611d1d565b61059e565b005b6102af610625565b60405161026d9190611d8b565b6102cf6102ca366004611d9d565b6106b4565b6040516001600160a01b03909116815260200161026d565b6102a56102f5366004611db4565b6106db565b6102a56106ea565b6102a5610310366004611ddc565b6106ff565b610337610323366004611d9d565b5f9081526008602052604090206001015490565b60405190815260200161026d565b610358610353366004611e16565b61078d565b604080516001600160a01b03909316835260208301919091520161026d565b6102a5610385366004611e36565b610810565b6102a5610398366004611e36565b610838565b6102a56108de565b6102a56103b3366004611ddc565b6108f0565b6102a56103c6366004611e60565b61090f565b600b5460ff16610261565b6102a56103e4366004611ece565b6109f8565b6102cf6103f7366004611d9d565b610a0b565b6102a561040a366004611ee7565b610a15565b6102af610a28565b610337610425366004611ece565b610a37565b6102a5610a7c565b600a546001600160a01b03166102cf565b6102cf610a8e565b610261610459366004611e36565b610aa6565b6102a561046c366004611e60565b610ad0565b6102af610bab565b6102a5610487366004611db4565b610bba565b610494610bf6565b6040805165ffffffffffff93841681529290911660208301520161026d565b6103375f81565b6102a56104c8366004611f0c565b610c48565b6102a56104db366004611f4e565b610c53565b6102af6104ee366004611d9d565b610c6b565b61027b610cd0565b6102a5610d2e565b61050b610d6d565b604080516001600160a01b03909316835265ffffffffffff90911660208301520161026d565b6103377f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b6102a5610566366004611e36565b610d8e565b6102a5610db6565b6102af610dc8565b61026161058936600461202b565b610dd7565b5f61059882610e04565b92915050565b5f6105a881610e28565b6001600160a01b0383166105cf5760405163d92e233d60e01b815260040160405180910390fd5b6105d98383610e32565b6040516001600160601b03831681526001600160a01b038416907fe12d7d5bdb8218a22277dca8f854dd4573a1cea3d3e4808dc567df9eb1c14bf49060200160405180910390a2505050565b60605f805461063390612053565b80601f016020809104026020016040519081016040528092919081815260200182805461065f90612053565b80156106aa5780601f10610681576101008083540402835291602001916106aa565b820191905f5260205f20905b81548152906001019060200180831161068d57829003601f168201915b5050505050905090565b5f6106be82610ed4565b505f828152600460205260409020546001600160a01b0316610598565b6106e6828233610f0c565b5050565b5f6106f481610e28565b6106fc610f19565b50565b6001600160a01b03821661072d57604051633250574960e11b81525f60048201526024015b60405180910390fd5b5f610739838333610f25565b9050836001600160a01b0316816001600160a01b031614610787576040516364283d7b60e01b81526001600160a01b0380861660048301526024820184905282166044820152606401610724565b50505050565b5f82815260076020526040812080548291906001600160a01b03811690600160a01b90046001600160601b0316816107e05750506006546001600160a01b03811690600160a01b90046001600160601b03165b5f6127106107f76001600160601b0384168961209f565b61080191906120b6565b92989297509195505050505050565b8161082e57604051631fe1e13d60e11b815260040160405180910390fd5b6106e68282611017565b811580156108535750600a546001600160a01b038281169116145b156108d4575f80610862610d6d565b90925090506001600160a01b038216151580610884575065ffffffffffff8116155b8061089757504265ffffffffffff821610155b156108bf576040516319ca5ebb60e01b815265ffffffffffff82166004820152602401610724565b50506009805465ffffffffffff60a01b191690555b6106e6828261103b565b5f6108e881610e28565b6106fc61106e565b61090a83838360405180602001604052805f815250610c53565b505050565b5f61091981610e28565b5f600c805461092790612053565b80601f016020809104026020016040519081016040528092919081815260200182805461095390612053565b801561099e5780601f106109755761010080835404028352916020019161099e565b820191905f5260205f20905b81548152906001019060200180831161098157829003601f168201915b505050505090508383600c91826109b6929190612119565b507f309b29ded109b9e28fb9885757b3e0096eb75c51d23aa4635d68bcd569f6adc18185856040516109ea939291906121d3565b60405180910390a150505050565b5f610a0281610e28565b6106e6826110c0565b5f61059882610ed4565b5f610a1f81610e28565b6106e682611132565b6060600c805461063390612053565b5f6001600160a01b038216610a61576040516322718ad960e21b81525f6004820152602401610724565b506001600160a01b03165f9081526003602052604090205490565b5f610a8681610e28565b6106fc6111a1565b5f610aa1600a546001600160a01b031690565b905090565b5f9182526008602090815260408084206001600160a01b0393909316845291905290205460ff1690565b5f610ada81610e28565b5f600d8054610ae890612053565b80601f0160208091040260200160405190810160405280929190818152602001828054610b1490612053565b8015610b5f5780601f10610b3657610100808354040283529160200191610b5f565b820191905f5260205f20905b815481529060010190602001808311610b4257829003601f168201915b505050505090508383600d9182610b77929190612119565b507fc9c7c3fe08b88b4df9d4d47ef47d2c43d55c025a0ba88ca442580ed9e7348a168185856040516109ea939291906121d3565b60606001805461063390612053565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6610be481610e28565b610bec6111de565b61090a8383611202565b600a545f90600160d01b900465ffffffffffff168015158015610c2157504265ffffffffffff821610155b610c2c575f80610c40565b600a54600160a01b900465ffffffffffff16815b915091509091565b6106e633838361121b565b610c5e8484846106ff565b61078733858585856112e2565b6060610c7682610ed4565b505f610c80610a28565b90505f815111610c9e5760405180602001604052805f815250610cc9565b80610ca88461140a565b604051602001610cb992919061222e565b6040516020818303038152906040525b9392505050565b600a545f90600160d01b900465ffffffffffff168015158015610cfa57504265ffffffffffff8216105b610d1557600954600160d01b900465ffffffffffff16610d28565b600a54600160a01b900465ffffffffffff165b91505090565b5f610d37610d6d565b509050336001600160a01b03821614610d6557604051636116401160e11b8152336004820152602401610724565b6106fc61149a565b6009546001600160a01b03811691600160a01b90910465ffffffffffff1690565b81610dac57604051631fe1e13d60e11b815260040160405180910390fd5b6106e68282611530565b5f610dc081610e28565b6106fc611554565b6060600d805461063390612053565b6001600160a01b039182165f90815260056020908152604080832093909416825291909152205460ff1690565b5f6001600160e01b031982166318a4c3c360e11b148061059857506105988261155e565b6106fc8133611582565b6127106001600160601b038216811015610e7157604051636f483d0960e01b81526001600160601b038316600482015260248101829052604401610724565b6001600160a01b038316610e9a57604051635b6cc80560e11b81525f6004820152602401610724565b50604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600655565b5f818152600260205260408120546001600160a01b03168061059857604051637e27328960e01b815260048101849052602401610724565b61090a83838360016115bb565b610f235f806116bf565b565b5f828152600260205260408120546001600160a01b0390811690831615610f5157610f5181848661177e565b6001600160a01b03811615610f8b57610f6c5f855f806115bb565b6001600160a01b0381165f90815260036020526040902080545f190190555b6001600160a01b03851615610fb9576001600160a01b0385165f908152600360205260409020805460010190555b5f8481526002602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b5f8281526008602052604090206001015461103181610e28565b61078783836117e2565b6001600160a01b03811633146110645760405163334bd91960e11b815260040160405180910390fd5b61090a8282611848565b611076611884565b600b805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b5f6110c9610cd0565b6110d2426118a7565b6110dc9190612242565b90506110e882826118dd565b60405165ffffffffffff821681526001600160a01b038316907f3377dc44241e779dd06afab5b788a35ca5f3b778836e2990bdb26a2a4b2e5ed69060200160405180910390a25050565b5f61113c8261195a565b611145426118a7565b61114f9190612242565b905061115b82826116bf565b6040805165ffffffffffff8085168252831660208201527ff1038c18cf84a56e432fdbfaf746924b7ea511dfe03a6506a0ceba4888788d9b910160405180910390a15050565b6111a96111de565b600b805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586110a33390565b600b5460ff1615610f235760405163d93c066560e01b815260040160405180910390fd5b6106e6828260405180602001604052805f8152506119a1565b6001600160a01b0383166112445760405163a9fbf51f60e01b81525f6004820152602401610724565b6001600160a01b03821661127657604051630b61174360e31b81526001600160a01b0383166004820152602401610724565b6001600160a01b038381165f81815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383163b1561140357604051630a85bd0160e11b81526001600160a01b0384169063150b7a0290611324908890889087908790600401612260565b6020604051808303815f875af192505050801561135e575060408051601f3d908101601f1916820190925261135b9181019061229c565b60015b6113c5573d80801561138b576040519150601f19603f3d011682016040523d82523d5f602084013e611390565b606091505b5080515f036113bd57604051633250574960e11b81526001600160a01b0385166004820152602401610724565b805160208201fd5b6001600160e01b03198116630a85bd0160e11b1461140157604051633250574960e11b81526001600160a01b0385166004820152602401610724565b505b5050505050565b60605f611416836119b8565b60010190505f8167ffffffffffffffff81111561143557611435611f3a565b6040519080825280601f01601f19166020018201604052801561145f576020820181803683370190505b5090508181016020015b5f19016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461146957509392505050565b5f806114a4610d6d565b915091506114b98165ffffffffffff16151590565b15806114cd57504265ffffffffffff821610155b156114f5576040516319ca5ebb60e01b815265ffffffffffff82166004820152602401610724565b6115105f61150b600a546001600160a01b031690565b611848565b5061151b5f836117e2565b5050600980546001600160d01b031916905550565b5f8281526008602052604090206001015461154a81610e28565b6107878383611848565b610f235f806118dd565b5f6001600160e01b03198216637965db0b60e01b1480610598575061059882611a8f565b61158c8282610aa6565b6106e65760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610724565b80806115cf57506001600160a01b03821615155b15611690575f6115de84610ed4565b90506001600160a01b0383161580159061160a5750826001600160a01b0316816001600160a01b031614155b801561161d575061161b8184610dd7565b155b156116465760405163a9fbf51f60e01b81526001600160a01b0384166004820152602401610724565b811561168e5783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b50505f90815260046020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b600a54600160d01b900465ffffffffffff168015611741574265ffffffffffff8216101561171857600a54600980546001600160d01b0316600160a01b90920465ffffffffffff16600160d01b02919091179055611741565b6040517f2b1fa2edafe6f7b9e97c1a9e0c3660e645beb2dcaa2d45bdbf9beaf5472e1ec5905f90a15b50600a80546001600160a01b0316600160a01b65ffffffffffff948516026001600160d01b031617600160d01b9290931691909102919091179055565b611789838383611ab3565b61090a576001600160a01b0383166117b757604051637e27328960e01b815260048101829052602401610724565b60405163177e802f60e01b81526001600160a01b038316600482015260248101829052604401610724565b5f8261183e575f6117fb600a546001600160a01b031690565b6001600160a01b03161461182257604051631fe1e13d60e11b815260040160405180910390fd5b600a80546001600160a01b0319166001600160a01b0384161790555b610cc98383611b17565b5f821580156118645750600a546001600160a01b038381169116145b1561187a57600a80546001600160a01b03191690555b610cc98383611ba8565b600b5460ff16610f2357604051638dfc202b60e01b815260040160405180910390fd5b5f65ffffffffffff8211156118d9576040516306dfcc6560e41b81526030600482015260248101839052604401610724565b5090565b5f6118e6610d6d565b6009805465ffffffffffff8616600160a01b026001600160d01b03199091166001600160a01b03881617179055915061192890508165ffffffffffff16151590565b1561090a576040517f8886ebfc4259abdbc16601dd8fb5678e54878f47b3c34836cfc51154a9605109905f90a1505050565b5f80611964610cd0565b90508065ffffffffffff168365ffffffffffff161161198c5761198783826122b7565b610cc9565b610cc965ffffffffffff841662069780611c13565b6119ab8383611c22565b61090a335f8585856112e2565b5f8072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106119f65772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310611a22576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310611a4057662386f26fc10000830492506010015b6305f5e1008310611a58576305f5e100830492506008015b6127108310611a6c57612710830492506004015b60648310611a7e576064830492506002015b600a83106105985760010192915050565b5f6001600160e01b0319821663152a902d60e11b1480610598575061059882611c83565b5f6001600160a01b03831615801590611b0f5750826001600160a01b0316846001600160a01b03161480611aec5750611aec8484610dd7565b80611b0f57505f828152600460205260409020546001600160a01b038481169116145b949350505050565b5f611b228383610aa6565b611ba1575f8381526008602090815260408083206001600160a01b03861684529091529020805460ff19166001179055611b593390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610598565b505f610598565b5f611bb38383610aa6565b15611ba1575f8381526008602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610598565b5f828218828410028218610cc9565b6001600160a01b038216611c4b57604051633250574960e11b81525f6004820152602401610724565b5f611c5783835f610f25565b90506001600160a01b0381161561090a576040516339e3563760e11b81525f6004820152602401610724565b5f6001600160e01b031982166380ac58cd60e01b1480611cb357506001600160e01b03198216635b5e139f60e01b145b8061059857506301ffc9a760e01b6001600160e01b0319831614610598565b6001600160e01b0319811681146106fc575f80fd5b5f60208284031215611cf7575f80fd5b8135610cc981611cd2565b80356001600160a01b0381168114611d18575f80fd5b919050565b5f8060408385031215611d2e575f80fd5b611d3783611d02565b915060208301356001600160601b0381168114611d52575f80fd5b809150509250929050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610cc96020830184611d5d565b5f60208284031215611dad575f80fd5b5035919050565b5f8060408385031215611dc5575f80fd5b611dce83611d02565b946020939093013593505050565b5f805f60608486031215611dee575f80fd5b611df784611d02565b9250611e0560208501611d02565b929592945050506040919091013590565b5f8060408385031215611e27575f80fd5b50508035926020909101359150565b5f8060408385031215611e47575f80fd5b82359150611e5760208401611d02565b90509250929050565b5f8060208385031215611e71575f80fd5b823567ffffffffffffffff811115611e87575f80fd5b8301601f81018513611e97575f80fd5b803567ffffffffffffffff811115611ead575f80fd5b856020828401011115611ebe575f80fd5b6020919091019590945092505050565b5f60208284031215611ede575f80fd5b610cc982611d02565b5f60208284031215611ef7575f80fd5b813565ffffffffffff81168114610cc9575f80fd5b5f8060408385031215611f1d575f80fd5b611f2683611d02565b915060208301358015158114611d52575f80fd5b634e487b7160e01b5f52604160045260245ffd5b5f805f8060808587031215611f61575f80fd5b611f6a85611d02565b9350611f7860208601611d02565b925060408501359150606085013567ffffffffffffffff811115611f9a575f80fd5b8501601f81018713611faa575f80fd5b803567ffffffffffffffff811115611fc457611fc4611f3a565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715611ff357611ff3611f3a565b60405281815282820160200189101561200a575f80fd5b816020840160208301375f6020838301015280935050505092959194509250565b5f806040838503121561203c575f80fd5b61204583611d02565b9150611e5760208401611d02565b600181811c9082168061206757607f821691505b60208210810361208557634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176105985761059861208b565b5f826120d057634e487b7160e01b5f52601260045260245ffd5b500490565b601f82111561090a57805f5260205f20601f840160051c810160208510156120fa5750805b601f840160051c820191505b81811015611403575f8155600101612106565b67ffffffffffffffff83111561213157612131611f3a565b6121458361213f8354612053565b836120d5565b5f601f841160018114612176575f851561215f5750838201355b5f19600387901b1c1916600186901b178355611403565b5f83815260208120601f198716915b828110156121a55786850135825560209485019460019092019101612185565b50868210156121c1575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b604081525f6121e56040830186611d5d565b8281036020840152838152838560208301375f602085830101526020601f19601f860116820101915050949350505050565b5f81518060208401855e5f93019283525090919050565b5f611b0f61223c8386612217565b84612217565b65ffffffffffff81811683821601908111156105985761059861208b565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f9061229290830184611d5d565b9695505050505050565b5f602082840312156122ac575f80fd5b8151610cc981611cd2565b65ffffffffffff82811682821603908111156105985761059861208b56fea26469706673582212206c61f9cbc8861ecf23317af095dbbbb42c5ff32ed8e4a71b91c7a2a6aa06803564736f6c634300081a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0xF JUMPI PUSH0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x24A JUMPI PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x70A08231 GT PUSH2 0x140 JUMPI DUP1 PUSH4 0xA22CB465 GT PUSH2 0xBF JUMPI DUP1 PUSH4 0xCF6EEFB7 GT PUSH2 0x84 JUMPI DUP1 PUSH4 0xCF6EEFB7 EQ PUSH2 0x503 JUMPI DUP1 PUSH4 0xD5391393 EQ PUSH2 0x531 JUMPI DUP1 PUSH4 0xD547741F EQ PUSH2 0x558 JUMPI DUP1 PUSH4 0xD602B9FD EQ PUSH2 0x56B JUMPI DUP1 PUSH4 0xE8A3D485 EQ PUSH2 0x573 JUMPI DUP1 PUSH4 0xE985E9C5 EQ PUSH2 0x57B JUMPI PUSH0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA22CB465 EQ PUSH2 0x4BA JUMPI DUP1 PUSH4 0xB88D4FDE EQ PUSH2 0x4CD JUMPI DUP1 PUSH4 0xC87B56DD EQ PUSH2 0x4E0 JUMPI DUP1 PUSH4 0xCC8463C8 EQ PUSH2 0x4F3 JUMPI DUP1 PUSH4 0xCEFC1429 EQ PUSH2 0x4FB JUMPI PUSH0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x938E3D7B GT PUSH2 0x105 JUMPI DUP1 PUSH4 0x938E3D7B EQ PUSH2 0x45E JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x471 JUMPI DUP1 PUSH4 0xA1448194 EQ PUSH2 0x479 JUMPI DUP1 PUSH4 0xA1EDA53C EQ PUSH2 0x48C JUMPI DUP1 PUSH4 0xA217FDDF EQ PUSH2 0x4B3 JUMPI PUSH0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x70A08231 EQ PUSH2 0x417 JUMPI DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x42A JUMPI DUP1 PUSH4 0x84EF8FFC EQ PUSH2 0x432 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x443 JUMPI DUP1 PUSH4 0x91D14854 EQ PUSH2 0x44B JUMPI PUSH0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x2F2FF15D GT PUSH2 0x1CC JUMPI DUP1 PUSH4 0x5C975ABB GT PUSH2 0x191 JUMPI DUP1 PUSH4 0x5C975ABB EQ PUSH2 0x3CB JUMPI DUP1 PUSH4 0x634E93DA EQ PUSH2 0x3D6 JUMPI DUP1 PUSH4 0x6352211E EQ PUSH2 0x3E9 JUMPI DUP1 PUSH4 0x649A5EC7 EQ PUSH2 0x3FC JUMPI DUP1 PUSH4 0x6C0360EB EQ PUSH2 0x40F JUMPI PUSH0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x2F2FF15D EQ PUSH2 0x377 JUMPI DUP1 PUSH4 0x36568ABE EQ PUSH2 0x38A JUMPI DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0x39D JUMPI DUP1 PUSH4 0x42842E0E EQ PUSH2 0x3A5 JUMPI DUP1 PUSH4 0x55F804B3 EQ PUSH2 0x3B8 JUMPI PUSH0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x95EA7B3 GT PUSH2 0x212 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x2E7 JUMPI DUP1 PUSH4 0xAA6220B EQ PUSH2 0x2FA JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x302 JUMPI DUP1 PUSH4 0x248A9CA3 EQ PUSH2 0x315 JUMPI DUP1 PUSH4 0x2A55205A EQ PUSH2 0x345 JUMPI PUSH0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1FFC9A7 EQ PUSH2 0x24E JUMPI DUP1 PUSH4 0x22D63FB EQ PUSH2 0x276 JUMPI DUP1 PUSH4 0x2FA7C47 EQ PUSH2 0x292 JUMPI DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x2A7 JUMPI DUP1 PUSH4 0x81812FC EQ PUSH2 0x2BC JUMPI JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH2 0x261 PUSH2 0x25C CALLDATASIZE PUSH1 0x4 PUSH2 0x1CE7 JUMP JUMPDEST PUSH2 0x58E JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH3 0x69780 JUMPDEST PUSH1 0x40 MLOAD PUSH6 0xFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x26D JUMP JUMPDEST PUSH2 0x2A5 PUSH2 0x2A0 CALLDATASIZE PUSH1 0x4 PUSH2 0x1D1D JUMP JUMPDEST PUSH2 0x59E JUMP JUMPDEST STOP JUMPDEST PUSH2 0x2AF PUSH2 0x625 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x26D SWAP2 SWAP1 PUSH2 0x1D8B JUMP JUMPDEST PUSH2 0x2CF PUSH2 0x2CA CALLDATASIZE PUSH1 0x4 PUSH2 0x1D9D JUMP JUMPDEST PUSH2 0x6B4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x26D JUMP JUMPDEST PUSH2 0x2A5 PUSH2 0x2F5 CALLDATASIZE PUSH1 0x4 PUSH2 0x1DB4 JUMP JUMPDEST PUSH2 0x6DB JUMP JUMPDEST PUSH2 0x2A5 PUSH2 0x6EA JUMP JUMPDEST PUSH2 0x2A5 PUSH2 0x310 CALLDATASIZE PUSH1 0x4 PUSH2 0x1DDC JUMP JUMPDEST PUSH2 0x6FF JUMP JUMPDEST PUSH2 0x337 PUSH2 0x323 CALLDATASIZE PUSH1 0x4 PUSH2 0x1D9D JUMP JUMPDEST PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x26D JUMP JUMPDEST PUSH2 0x358 PUSH2 0x353 CALLDATASIZE PUSH1 0x4 PUSH2 0x1E16 JUMP JUMPDEST PUSH2 0x78D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP4 AND DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x26D JUMP JUMPDEST PUSH2 0x2A5 PUSH2 0x385 CALLDATASIZE PUSH1 0x4 PUSH2 0x1E36 JUMP JUMPDEST PUSH2 0x810 JUMP JUMPDEST PUSH2 0x2A5 PUSH2 0x398 CALLDATASIZE PUSH1 0x4 PUSH2 0x1E36 JUMP JUMPDEST PUSH2 0x838 JUMP JUMPDEST PUSH2 0x2A5 PUSH2 0x8DE JUMP JUMPDEST PUSH2 0x2A5 PUSH2 0x3B3 CALLDATASIZE PUSH1 0x4 PUSH2 0x1DDC JUMP JUMPDEST PUSH2 0x8F0 JUMP JUMPDEST PUSH2 0x2A5 PUSH2 0x3C6 CALLDATASIZE PUSH1 0x4 PUSH2 0x1E60 JUMP JUMPDEST PUSH2 0x90F JUMP JUMPDEST PUSH1 0xB SLOAD PUSH1 0xFF AND PUSH2 0x261 JUMP JUMPDEST PUSH2 0x2A5 PUSH2 0x3E4 CALLDATASIZE PUSH1 0x4 PUSH2 0x1ECE JUMP JUMPDEST PUSH2 0x9F8 JUMP JUMPDEST PUSH2 0x2CF PUSH2 0x3F7 CALLDATASIZE PUSH1 0x4 PUSH2 0x1D9D JUMP JUMPDEST PUSH2 0xA0B JUMP JUMPDEST PUSH2 0x2A5 PUSH2 0x40A CALLDATASIZE PUSH1 0x4 PUSH2 0x1EE7 JUMP JUMPDEST PUSH2 0xA15 JUMP JUMPDEST PUSH2 0x2AF PUSH2 0xA28 JUMP JUMPDEST PUSH2 0x337 PUSH2 0x425 CALLDATASIZE PUSH1 0x4 PUSH2 0x1ECE JUMP JUMPDEST PUSH2 0xA37 JUMP JUMPDEST PUSH2 0x2A5 PUSH2 0xA7C JUMP JUMPDEST PUSH1 0xA SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2CF JUMP JUMPDEST PUSH2 0x2CF PUSH2 0xA8E JUMP JUMPDEST PUSH2 0x261 PUSH2 0x459 CALLDATASIZE PUSH1 0x4 PUSH2 0x1E36 JUMP JUMPDEST PUSH2 0xAA6 JUMP JUMPDEST PUSH2 0x2A5 PUSH2 0x46C CALLDATASIZE PUSH1 0x4 PUSH2 0x1E60 JUMP JUMPDEST PUSH2 0xAD0 JUMP JUMPDEST PUSH2 0x2AF PUSH2 0xBAB JUMP JUMPDEST PUSH2 0x2A5 PUSH2 0x487 CALLDATASIZE PUSH1 0x4 PUSH2 0x1DB4 JUMP JUMPDEST PUSH2 0xBBA JUMP JUMPDEST PUSH2 0x494 PUSH2 0xBF6 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH6 0xFFFFFFFFFFFF SWAP4 DUP5 AND DUP2 MSTORE SWAP3 SWAP1 SWAP2 AND PUSH1 0x20 DUP4 ADD MSTORE ADD PUSH2 0x26D JUMP JUMPDEST PUSH2 0x337 PUSH0 DUP2 JUMP JUMPDEST PUSH2 0x2A5 PUSH2 0x4C8 CALLDATASIZE PUSH1 0x4 PUSH2 0x1F0C JUMP JUMPDEST PUSH2 0xC48 JUMP JUMPDEST PUSH2 0x2A5 PUSH2 0x4DB CALLDATASIZE PUSH1 0x4 PUSH2 0x1F4E JUMP JUMPDEST PUSH2 0xC53 JUMP JUMPDEST PUSH2 0x2AF PUSH2 0x4EE CALLDATASIZE PUSH1 0x4 PUSH2 0x1D9D JUMP JUMPDEST PUSH2 0xC6B JUMP JUMPDEST PUSH2 0x27B PUSH2 0xCD0 JUMP JUMPDEST PUSH2 0x2A5 PUSH2 0xD2E JUMP JUMPDEST PUSH2 0x50B PUSH2 0xD6D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP4 AND DUP4 MSTORE PUSH6 0xFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x20 DUP4 ADD MSTORE ADD PUSH2 0x26D JUMP JUMPDEST PUSH2 0x337 PUSH32 0x9F2DF0FED2C77648DE5860A4CC508CD0818C85B8B8A1AB4CEEEF8D981C8956A6 DUP2 JUMP JUMPDEST PUSH2 0x2A5 PUSH2 0x566 CALLDATASIZE PUSH1 0x4 PUSH2 0x1E36 JUMP JUMPDEST PUSH2 0xD8E JUMP JUMPDEST PUSH2 0x2A5 PUSH2 0xDB6 JUMP JUMPDEST PUSH2 0x2AF PUSH2 0xDC8 JUMP JUMPDEST PUSH2 0x261 PUSH2 0x589 CALLDATASIZE PUSH1 0x4 PUSH2 0x202B JUMP JUMPDEST PUSH2 0xDD7 JUMP JUMPDEST PUSH0 PUSH2 0x598 DUP3 PUSH2 0xE04 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 PUSH2 0x5A8 DUP2 PUSH2 0xE28 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x5CF JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x5D9 DUP4 DUP4 PUSH2 0xE32 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP4 AND DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 PUSH32 0xE12D7D5BDB8218A22277DCA8F854DD4573A1CEA3D3E4808DC567DF9EB1C14BF4 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH0 DUP1 SLOAD PUSH2 0x633 SWAP1 PUSH2 0x2053 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x65F SWAP1 PUSH2 0x2053 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x6AA JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x681 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x6AA JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x68D JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH0 PUSH2 0x6BE DUP3 PUSH2 0xED4 JUMP JUMPDEST POP PUSH0 DUP3 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x598 JUMP JUMPDEST PUSH2 0x6E6 DUP3 DUP3 CALLER PUSH2 0xF0C JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH0 PUSH2 0x6F4 DUP2 PUSH2 0xE28 JUMP JUMPDEST PUSH2 0x6FC PUSH2 0xF19 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x72D JUMPI PUSH1 0x40 MLOAD PUSH4 0x32505749 PUSH1 0xE1 SHL DUP2 MSTORE PUSH0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH0 PUSH2 0x739 DUP4 DUP4 CALLER PUSH2 0xF25 JUMP JUMPDEST SWAP1 POP DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x787 JUMPI PUSH1 0x40 MLOAD PUSH4 0x64283D7B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP5 SWAP1 MSTORE DUP3 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x724 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH0 DUP3 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP3 SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND SWAP1 PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND DUP2 PUSH2 0x7E0 JUMPI POP POP PUSH1 0x6 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND SWAP1 PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND JUMPDEST PUSH0 PUSH2 0x2710 PUSH2 0x7F7 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP5 AND DUP10 PUSH2 0x209F JUMP JUMPDEST PUSH2 0x801 SWAP2 SWAP1 PUSH2 0x20B6 JUMP JUMPDEST SWAP3 SWAP9 SWAP3 SWAP8 POP SWAP2 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST DUP2 PUSH2 0x82E JUMPI PUSH1 0x40 MLOAD PUSH4 0x1FE1E13D PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x6E6 DUP3 DUP3 PUSH2 0x1017 JUMP JUMPDEST DUP2 ISZERO DUP1 ISZERO PUSH2 0x853 JUMPI POP PUSH1 0xA SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP2 AND EQ JUMPDEST ISZERO PUSH2 0x8D4 JUMPI PUSH0 DUP1 PUSH2 0x862 PUSH2 0xD6D JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ISZERO ISZERO DUP1 PUSH2 0x884 JUMPI POP PUSH6 0xFFFFFFFFFFFF DUP2 AND ISZERO JUMPDEST DUP1 PUSH2 0x897 JUMPI POP TIMESTAMP PUSH6 0xFFFFFFFFFFFF DUP3 AND LT ISZERO JUMPDEST ISZERO PUSH2 0x8BF JUMPI PUSH1 0x40 MLOAD PUSH4 0x19CA5EBB PUSH1 0xE0 SHL DUP2 MSTORE PUSH6 0xFFFFFFFFFFFF DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x724 JUMP JUMPDEST POP POP PUSH1 0x9 DUP1 SLOAD PUSH6 0xFFFFFFFFFFFF PUSH1 0xA0 SHL NOT AND SWAP1 SSTORE JUMPDEST PUSH2 0x6E6 DUP3 DUP3 PUSH2 0x103B JUMP JUMPDEST PUSH0 PUSH2 0x8E8 DUP2 PUSH2 0xE28 JUMP JUMPDEST PUSH2 0x6FC PUSH2 0x106E JUMP JUMPDEST PUSH2 0x90A DUP4 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH0 DUP2 MSTORE POP PUSH2 0xC53 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH0 PUSH2 0x919 DUP2 PUSH2 0xE28 JUMP JUMPDEST PUSH0 PUSH1 0xC DUP1 SLOAD PUSH2 0x927 SWAP1 PUSH2 0x2053 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x953 SWAP1 PUSH2 0x2053 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x99E JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x975 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x99E JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x981 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP DUP4 DUP4 PUSH1 0xC SWAP2 DUP3 PUSH2 0x9B6 SWAP3 SWAP2 SWAP1 PUSH2 0x2119 JUMP JUMPDEST POP PUSH32 0x309B29DED109B9E28FB9885757B3E0096EB75C51D23AA4635D68BCD569F6ADC1 DUP2 DUP6 DUP6 PUSH1 0x40 MLOAD PUSH2 0x9EA SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x21D3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP POP JUMP JUMPDEST PUSH0 PUSH2 0xA02 DUP2 PUSH2 0xE28 JUMP JUMPDEST PUSH2 0x6E6 DUP3 PUSH2 0x10C0 JUMP JUMPDEST PUSH0 PUSH2 0x598 DUP3 PUSH2 0xED4 JUMP JUMPDEST PUSH0 PUSH2 0xA1F DUP2 PUSH2 0xE28 JUMP JUMPDEST PUSH2 0x6E6 DUP3 PUSH2 0x1132 JUMP JUMPDEST PUSH1 0x60 PUSH1 0xC DUP1 SLOAD PUSH2 0x633 SWAP1 PUSH2 0x2053 JUMP JUMPDEST PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xA61 JUMPI PUSH1 0x40 MLOAD PUSH4 0x22718AD9 PUSH1 0xE2 SHL DUP2 MSTORE PUSH0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x724 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH0 PUSH2 0xA86 DUP2 PUSH2 0xE28 JUMP JUMPDEST PUSH2 0x6FC PUSH2 0x11A1 JUMP JUMPDEST PUSH0 PUSH2 0xAA1 PUSH1 0xA SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH0 SWAP2 DUP3 MSTORE PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 SWAP1 SWAP4 AND DUP5 MSTORE SWAP2 SWAP1 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH0 PUSH2 0xADA DUP2 PUSH2 0xE28 JUMP JUMPDEST PUSH0 PUSH1 0xD DUP1 SLOAD PUSH2 0xAE8 SWAP1 PUSH2 0x2053 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0xB14 SWAP1 PUSH2 0x2053 JUMP JUMPDEST DUP1 ISZERO PUSH2 0xB5F JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xB36 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xB5F JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xB42 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP DUP4 DUP4 PUSH1 0xD SWAP2 DUP3 PUSH2 0xB77 SWAP3 SWAP2 SWAP1 PUSH2 0x2119 JUMP JUMPDEST POP PUSH32 0xC9C7C3FE08B88B4DF9D4D47EF47D2C43D55C025A0BA88CA442580ED9E7348A16 DUP2 DUP6 DUP6 PUSH1 0x40 MLOAD PUSH2 0x9EA SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x21D3 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x1 DUP1 SLOAD PUSH2 0x633 SWAP1 PUSH2 0x2053 JUMP JUMPDEST PUSH32 0x9F2DF0FED2C77648DE5860A4CC508CD0818C85B8B8A1AB4CEEEF8D981C8956A6 PUSH2 0xBE4 DUP2 PUSH2 0xE28 JUMP JUMPDEST PUSH2 0xBEC PUSH2 0x11DE JUMP JUMPDEST PUSH2 0x90A DUP4 DUP4 PUSH2 0x1202 JUMP JUMPDEST PUSH1 0xA SLOAD PUSH0 SWAP1 PUSH1 0x1 PUSH1 0xD0 SHL SWAP1 DIV PUSH6 0xFFFFFFFFFFFF AND DUP1 ISZERO ISZERO DUP1 ISZERO PUSH2 0xC21 JUMPI POP TIMESTAMP PUSH6 0xFFFFFFFFFFFF DUP3 AND LT ISZERO JUMPDEST PUSH2 0xC2C JUMPI PUSH0 DUP1 PUSH2 0xC40 JUMP JUMPDEST PUSH1 0xA SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH6 0xFFFFFFFFFFFF AND DUP2 JUMPDEST SWAP2 POP SWAP2 POP SWAP1 SWAP2 JUMP JUMPDEST PUSH2 0x6E6 CALLER DUP4 DUP4 PUSH2 0x121B JUMP JUMPDEST PUSH2 0xC5E DUP5 DUP5 DUP5 PUSH2 0x6FF JUMP JUMPDEST PUSH2 0x787 CALLER DUP6 DUP6 DUP6 DUP6 PUSH2 0x12E2 JUMP JUMPDEST PUSH1 0x60 PUSH2 0xC76 DUP3 PUSH2 0xED4 JUMP JUMPDEST POP PUSH0 PUSH2 0xC80 PUSH2 0xA28 JUMP JUMPDEST SWAP1 POP PUSH0 DUP2 MLOAD GT PUSH2 0xC9E JUMPI PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH0 DUP2 MSTORE POP PUSH2 0xCC9 JUMP JUMPDEST DUP1 PUSH2 0xCA8 DUP5 PUSH2 0x140A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0xCB9 SWAP3 SWAP2 SWAP1 PUSH2 0x222E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0xA SLOAD PUSH0 SWAP1 PUSH1 0x1 PUSH1 0xD0 SHL SWAP1 DIV PUSH6 0xFFFFFFFFFFFF AND DUP1 ISZERO ISZERO DUP1 ISZERO PUSH2 0xCFA JUMPI POP TIMESTAMP PUSH6 0xFFFFFFFFFFFF DUP3 AND LT JUMPDEST PUSH2 0xD15 JUMPI PUSH1 0x9 SLOAD PUSH1 0x1 PUSH1 0xD0 SHL SWAP1 DIV PUSH6 0xFFFFFFFFFFFF AND PUSH2 0xD28 JUMP JUMPDEST PUSH1 0xA SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH6 0xFFFFFFFFFFFF AND JUMPDEST SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH0 PUSH2 0xD37 PUSH2 0xD6D JUMP JUMPDEST POP SWAP1 POP CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND EQ PUSH2 0xD65 JUMPI PUSH1 0x40 MLOAD PUSH4 0x61164011 PUSH1 0xE1 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x724 JUMP JUMPDEST PUSH2 0x6FC PUSH2 0x149A JUMP JUMPDEST PUSH1 0x9 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND SWAP2 PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 SWAP2 DIV PUSH6 0xFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST DUP2 PUSH2 0xDAC JUMPI PUSH1 0x40 MLOAD PUSH4 0x1FE1E13D PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x6E6 DUP3 DUP3 PUSH2 0x1530 JUMP JUMPDEST PUSH0 PUSH2 0xDC0 DUP2 PUSH2 0xE28 JUMP JUMPDEST PUSH2 0x6FC PUSH2 0x1554 JUMP JUMPDEST PUSH1 0x60 PUSH1 0xD DUP1 SLOAD PUSH2 0x633 SWAP1 PUSH2 0x2053 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP3 AND PUSH4 0x18A4C3C3 PUSH1 0xE1 SHL EQ DUP1 PUSH2 0x598 JUMPI POP PUSH2 0x598 DUP3 PUSH2 0x155E JUMP JUMPDEST PUSH2 0x6FC DUP2 CALLER PUSH2 0x1582 JUMP JUMPDEST PUSH2 0x2710 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP3 AND DUP2 LT ISZERO PUSH2 0xE71 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6F483D09 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x44 ADD PUSH2 0x724 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0xE9A JUMPI PUSH1 0x40 MLOAD PUSH4 0x5B6CC805 PUSH1 0xE1 SHL DUP2 MSTORE PUSH0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x724 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP1 DUP4 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB SWAP1 SWAP2 AND PUSH1 0x20 SWAP1 SWAP3 ADD DUP3 SWAP1 MSTORE PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 SWAP2 MUL OR PUSH1 0x6 SSTORE JUMP JUMPDEST PUSH0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP1 PUSH2 0x598 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7E273289 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0x24 ADD PUSH2 0x724 JUMP JUMPDEST PUSH2 0x90A DUP4 DUP4 DUP4 PUSH1 0x1 PUSH2 0x15BB JUMP JUMPDEST PUSH2 0xF23 PUSH0 DUP1 PUSH2 0x16BF JUMP JUMPDEST JUMP JUMPDEST PUSH0 DUP3 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP1 DUP4 AND ISZERO PUSH2 0xF51 JUMPI PUSH2 0xF51 DUP2 DUP5 DUP7 PUSH2 0x177E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO PUSH2 0xF8B JUMPI PUSH2 0xF6C PUSH0 DUP6 PUSH0 DUP1 PUSH2 0x15BB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH0 NOT ADD SWAP1 SSTORE JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND ISZERO PUSH2 0xFB9 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 ADD SWAP1 SSTORE JUMPDEST PUSH0 DUP5 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 DUP2 AND SWAP2 DUP3 OR SWAP1 SWAP3 SSTORE SWAP2 MLOAD DUP8 SWAP4 SWAP2 DUP6 AND SWAP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 LOG4 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH0 DUP3 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD PUSH2 0x1031 DUP2 PUSH2 0xE28 JUMP JUMPDEST PUSH2 0x787 DUP4 DUP4 PUSH2 0x17E2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND CALLER EQ PUSH2 0x1064 JUMPI PUSH1 0x40 MLOAD PUSH4 0x334BD919 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x90A DUP3 DUP3 PUSH2 0x1848 JUMP JUMPDEST PUSH2 0x1076 PUSH2 0x1884 JUMP JUMPDEST PUSH1 0xB DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH32 0x5DB9EE0A495BF2E6FF9C91A7834C1BA4FDD244A5E8AA4E537BD38AEAE4B073AA CALLER JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH0 PUSH2 0x10C9 PUSH2 0xCD0 JUMP JUMPDEST PUSH2 0x10D2 TIMESTAMP PUSH2 0x18A7 JUMP JUMPDEST PUSH2 0x10DC SWAP2 SWAP1 PUSH2 0x2242 JUMP JUMPDEST SWAP1 POP PUSH2 0x10E8 DUP3 DUP3 PUSH2 0x18DD JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH6 0xFFFFFFFFFFFF DUP3 AND DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH32 0x3377DC44241E779DD06AFAB5B788A35CA5F3B778836E2990BDB26A2A4B2E5ED6 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH0 PUSH2 0x113C DUP3 PUSH2 0x195A JUMP JUMPDEST PUSH2 0x1145 TIMESTAMP PUSH2 0x18A7 JUMP JUMPDEST PUSH2 0x114F SWAP2 SWAP1 PUSH2 0x2242 JUMP JUMPDEST SWAP1 POP PUSH2 0x115B DUP3 DUP3 PUSH2 0x16BF JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH6 0xFFFFFFFFFFFF DUP1 DUP6 AND DUP3 MSTORE DUP4 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0xF1038C18CF84A56E432FDBFAF746924B7EA511DFE03A6506A0CEBA4888788D9B SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP JUMP JUMPDEST PUSH2 0x11A9 PUSH2 0x11DE JUMP JUMPDEST PUSH1 0xB DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH32 0x62E78CEA01BEE320CD4E420270B5EA74000D11B0C9F74754EBDBFC544B05A258 PUSH2 0x10A3 CALLER SWAP1 JUMP JUMPDEST PUSH1 0xB SLOAD PUSH1 0xFF AND ISZERO PUSH2 0xF23 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD93C0665 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x6E6 DUP3 DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH0 DUP2 MSTORE POP PUSH2 0x19A1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x1244 JUMPI PUSH1 0x40 MLOAD PUSH4 0xA9FBF51F PUSH1 0xE0 SHL DUP2 MSTORE PUSH0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x724 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x1276 JUMPI PUSH1 0x40 MLOAD PUSH4 0xB611743 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x724 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND DUP7 ISZERO ISZERO SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE SWAP2 MLOAD SWAP2 DUP3 MSTORE PUSH32 0x17307EAB39AB6107E8899845AD3D59BD9653F200F220920489CA2B5937696C31 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND EXTCODESIZE ISZERO PUSH2 0x1403 JUMPI PUSH1 0x40 MLOAD PUSH4 0xA85BD01 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 PUSH4 0x150B7A02 SWAP1 PUSH2 0x1324 SWAP1 DUP9 SWAP1 DUP9 SWAP1 DUP8 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x2260 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH0 DUP8 GAS CALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x135E JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x135B SWAP2 DUP2 ADD SWAP1 PUSH2 0x229C JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x13C5 JUMPI RETURNDATASIZE DUP1 DUP1 ISZERO PUSH2 0x138B JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x1390 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP DUP1 MLOAD PUSH0 SUB PUSH2 0x13BD JUMPI PUSH1 0x40 MLOAD PUSH4 0x32505749 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x724 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 DUP3 ADD REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP2 AND PUSH4 0xA85BD01 PUSH1 0xE1 SHL EQ PUSH2 0x1401 JUMPI PUSH1 0x40 MLOAD PUSH4 0x32505749 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x724 JUMP JUMPDEST POP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH0 PUSH2 0x1416 DUP4 PUSH2 0x19B8 JUMP JUMPDEST PUSH1 0x1 ADD SWAP1 POP PUSH0 DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1435 JUMPI PUSH2 0x1435 PUSH2 0x1F3A JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x145F JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP DUP2 DUP2 ADD PUSH1 0x20 ADD JUMPDEST PUSH0 NOT ADD PUSH16 0x181899199A1A9B1B9C1CB0B131B232B3 PUSH1 0x81 SHL PUSH1 0xA DUP7 MOD BYTE DUP2 MSTORE8 PUSH1 0xA DUP6 DIV SWAP5 POP DUP5 PUSH2 0x1469 JUMPI POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x14A4 PUSH2 0xD6D JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x14B9 DUP2 PUSH6 0xFFFFFFFFFFFF AND ISZERO ISZERO SWAP1 JUMP JUMPDEST ISZERO DUP1 PUSH2 0x14CD JUMPI POP TIMESTAMP PUSH6 0xFFFFFFFFFFFF DUP3 AND LT ISZERO JUMPDEST ISZERO PUSH2 0x14F5 JUMPI PUSH1 0x40 MLOAD PUSH4 0x19CA5EBB PUSH1 0xE0 SHL DUP2 MSTORE PUSH6 0xFFFFFFFFFFFF DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x724 JUMP JUMPDEST PUSH2 0x1510 PUSH0 PUSH2 0x150B PUSH1 0xA SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x1848 JUMP JUMPDEST POP PUSH2 0x151B PUSH0 DUP4 PUSH2 0x17E2 JUMP JUMPDEST POP POP PUSH1 0x9 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xD0 SHL SUB NOT AND SWAP1 SSTORE POP JUMP JUMPDEST PUSH0 DUP3 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD PUSH2 0x154A DUP2 PUSH2 0xE28 JUMP JUMPDEST PUSH2 0x787 DUP4 DUP4 PUSH2 0x1848 JUMP JUMPDEST PUSH2 0xF23 PUSH0 DUP1 PUSH2 0x18DD JUMP JUMPDEST PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP3 AND PUSH4 0x7965DB0B PUSH1 0xE0 SHL EQ DUP1 PUSH2 0x598 JUMPI POP PUSH2 0x598 DUP3 PUSH2 0x1A8F JUMP JUMPDEST PUSH2 0x158C DUP3 DUP3 PUSH2 0xAA6 JUMP JUMPDEST PUSH2 0x6E6 JUMPI PUSH1 0x40 MLOAD PUSH4 0xE2517D3F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x44 ADD PUSH2 0x724 JUMP JUMPDEST DUP1 DUP1 PUSH2 0x15CF JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x1690 JUMPI PUSH0 PUSH2 0x15DE DUP5 PUSH2 0xED4 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND ISZERO DUP1 ISZERO SWAP1 PUSH2 0x160A JUMPI POP DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x161D JUMPI POP PUSH2 0x161B DUP2 DUP5 PUSH2 0xDD7 JUMP JUMPDEST ISZERO JUMPDEST ISZERO PUSH2 0x1646 JUMPI PUSH1 0x40 MLOAD PUSH4 0xA9FBF51F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x724 JUMP JUMPDEST DUP2 ISZERO PUSH2 0x168E JUMPI DUP4 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 JUMPDEST POP JUMPDEST POP POP PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0xA SLOAD PUSH1 0x1 PUSH1 0xD0 SHL SWAP1 DIV PUSH6 0xFFFFFFFFFFFF AND DUP1 ISZERO PUSH2 0x1741 JUMPI TIMESTAMP PUSH6 0xFFFFFFFFFFFF DUP3 AND LT ISZERO PUSH2 0x1718 JUMPI PUSH1 0xA SLOAD PUSH1 0x9 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xD0 SHL SUB AND PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 SWAP3 DIV PUSH6 0xFFFFFFFFFFFF AND PUSH1 0x1 PUSH1 0xD0 SHL MUL SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x1741 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x2B1FA2EDAFE6F7B9E97C1A9E0C3660E645BEB2DCAA2D45BDBF9BEAF5472E1EC5 SWAP1 PUSH0 SWAP1 LOG1 JUMPDEST POP PUSH1 0xA DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0xA0 SHL PUSH6 0xFFFFFFFFFFFF SWAP5 DUP6 AND MUL PUSH1 0x1 PUSH1 0x1 PUSH1 0xD0 SHL SUB AND OR PUSH1 0x1 PUSH1 0xD0 SHL SWAP3 SWAP1 SWAP4 AND SWAP2 SWAP1 SWAP2 MUL SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x1789 DUP4 DUP4 DUP4 PUSH2 0x1AB3 JUMP JUMPDEST PUSH2 0x90A JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x17B7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7E273289 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x24 ADD PUSH2 0x724 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x177E802F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x44 ADD PUSH2 0x724 JUMP JUMPDEST PUSH0 DUP3 PUSH2 0x183E JUMPI PUSH0 PUSH2 0x17FB PUSH1 0xA SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x1822 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1FE1E13D PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0xA DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND OR SWAP1 SSTORE JUMPDEST PUSH2 0xCC9 DUP4 DUP4 PUSH2 0x1B17 JUMP JUMPDEST PUSH0 DUP3 ISZERO DUP1 ISZERO PUSH2 0x1864 JUMPI POP PUSH1 0xA SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 AND EQ JUMPDEST ISZERO PUSH2 0x187A JUMPI PUSH1 0xA DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE JUMPDEST PUSH2 0xCC9 DUP4 DUP4 PUSH2 0x1BA8 JUMP JUMPDEST PUSH1 0xB SLOAD PUSH1 0xFF AND PUSH2 0xF23 JUMPI PUSH1 0x40 MLOAD PUSH4 0x8DFC202B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH0 PUSH6 0xFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x18D9 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6DFCC65 PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x30 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x44 ADD PUSH2 0x724 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH0 PUSH2 0x18E6 PUSH2 0xD6D JUMP JUMPDEST PUSH1 0x9 DUP1 SLOAD PUSH6 0xFFFFFFFFFFFF DUP7 AND PUSH1 0x1 PUSH1 0xA0 SHL MUL PUSH1 0x1 PUSH1 0x1 PUSH1 0xD0 SHL SUB NOT SWAP1 SWAP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND OR OR SWAP1 SSTORE SWAP2 POP PUSH2 0x1928 SWAP1 POP DUP2 PUSH6 0xFFFFFFFFFFFF AND ISZERO ISZERO SWAP1 JUMP JUMPDEST ISZERO PUSH2 0x90A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8886EBFC4259ABDBC16601DD8FB5678E54878F47B3C34836CFC51154A9605109 SWAP1 PUSH0 SWAP1 LOG1 POP POP POP JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x1964 PUSH2 0xCD0 JUMP JUMPDEST SWAP1 POP DUP1 PUSH6 0xFFFFFFFFFFFF AND DUP4 PUSH6 0xFFFFFFFFFFFF AND GT PUSH2 0x198C JUMPI PUSH2 0x1987 DUP4 DUP3 PUSH2 0x22B7 JUMP JUMPDEST PUSH2 0xCC9 JUMP JUMPDEST PUSH2 0xCC9 PUSH6 0xFFFFFFFFFFFF DUP5 AND PUSH3 0x69780 PUSH2 0x1C13 JUMP JUMPDEST PUSH2 0x19AB DUP4 DUP4 PUSH2 0x1C22 JUMP JUMPDEST PUSH2 0x90A CALLER PUSH0 DUP6 DUP6 DUP6 PUSH2 0x12E2 JUMP JUMPDEST PUSH0 DUP1 PUSH19 0x184F03E93FF9F4DAA797ED6E38ED64BF6A1F01 PUSH1 0x40 SHL DUP4 LT PUSH2 0x19F6 JUMPI PUSH19 0x184F03E93FF9F4DAA797ED6E38ED64BF6A1F01 PUSH1 0x40 SHL DUP4 DIV SWAP3 POP PUSH1 0x40 ADD JUMPDEST PUSH14 0x4EE2D6D415B85ACEF8100000000 DUP4 LT PUSH2 0x1A22 JUMPI PUSH14 0x4EE2D6D415B85ACEF8100000000 DUP4 DIV SWAP3 POP PUSH1 0x20 ADD JUMPDEST PUSH7 0x2386F26FC10000 DUP4 LT PUSH2 0x1A40 JUMPI PUSH7 0x2386F26FC10000 DUP4 DIV SWAP3 POP PUSH1 0x10 ADD JUMPDEST PUSH4 0x5F5E100 DUP4 LT PUSH2 0x1A58 JUMPI PUSH4 0x5F5E100 DUP4 DIV SWAP3 POP PUSH1 0x8 ADD JUMPDEST PUSH2 0x2710 DUP4 LT PUSH2 0x1A6C JUMPI PUSH2 0x2710 DUP4 DIV SWAP3 POP PUSH1 0x4 ADD JUMPDEST PUSH1 0x64 DUP4 LT PUSH2 0x1A7E JUMPI PUSH1 0x64 DUP4 DIV SWAP3 POP PUSH1 0x2 ADD JUMPDEST PUSH1 0xA DUP4 LT PUSH2 0x598 JUMPI PUSH1 0x1 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP3 AND PUSH4 0x152A902D PUSH1 0xE1 SHL EQ DUP1 PUSH2 0x598 JUMPI POP PUSH2 0x598 DUP3 PUSH2 0x1C83 JUMP JUMPDEST PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND ISZERO DUP1 ISZERO SWAP1 PUSH2 0x1B0F JUMPI POP DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ DUP1 PUSH2 0x1AEC JUMPI POP PUSH2 0x1AEC DUP5 DUP5 PUSH2 0xDD7 JUMP JUMPDEST DUP1 PUSH2 0x1B0F JUMPI POP PUSH0 DUP3 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND SWAP2 AND EQ JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH0 PUSH2 0x1B22 DUP4 DUP4 PUSH2 0xAA6 JUMP JUMPDEST PUSH2 0x1BA1 JUMPI PUSH0 DUP4 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH2 0x1B59 CALLER SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH32 0x2F8788117E7EFF1D82E926EC794901D17C78024A50270940304540A733656F0D PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP PUSH1 0x1 PUSH2 0x598 JUMP JUMPDEST POP PUSH0 PUSH2 0x598 JUMP JUMPDEST PUSH0 PUSH2 0x1BB3 DUP4 DUP4 PUSH2 0xAA6 JUMP JUMPDEST ISZERO PUSH2 0x1BA1 JUMPI PUSH0 DUP4 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND DUP1 DUP6 MSTORE SWAP3 MSTORE DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD CALLER SWAP3 DUP7 SWAP2 PUSH32 0xF6391F5C32D9C69D2A47EA670B442974B53935D1EDC7FD64EB21E047A839171B SWAP2 SWAP1 LOG4 POP PUSH1 0x1 PUSH2 0x598 JUMP JUMPDEST PUSH0 DUP3 DUP3 XOR DUP3 DUP5 LT MUL DUP3 XOR PUSH2 0xCC9 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x1C4B JUMPI PUSH1 0x40 MLOAD PUSH4 0x32505749 PUSH1 0xE1 SHL DUP2 MSTORE PUSH0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x724 JUMP JUMPDEST PUSH0 PUSH2 0x1C57 DUP4 DUP4 PUSH0 PUSH2 0xF25 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO PUSH2 0x90A JUMPI PUSH1 0x40 MLOAD PUSH4 0x39E35637 PUSH1 0xE1 SHL DUP2 MSTORE PUSH0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x724 JUMP JUMPDEST PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP3 AND PUSH4 0x80AC58CD PUSH1 0xE0 SHL EQ DUP1 PUSH2 0x1CB3 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP3 AND PUSH4 0x5B5E139F PUSH1 0xE0 SHL EQ JUMPDEST DUP1 PUSH2 0x598 JUMPI POP PUSH4 0x1FFC9A7 PUSH1 0xE0 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP4 AND EQ PUSH2 0x598 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP2 AND DUP2 EQ PUSH2 0x6FC JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1CF7 JUMPI PUSH0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0xCC9 DUP2 PUSH2 0x1CD2 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x1D18 JUMPI PUSH0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1D2E JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH2 0x1D37 DUP4 PUSH2 0x1D02 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x1D52 JUMPI PUSH0 DUP1 REVERT JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH0 DUP2 MLOAD DUP1 DUP5 MSTORE DUP1 PUSH1 0x20 DUP5 ADD PUSH1 0x20 DUP7 ADD MCOPY PUSH0 PUSH1 0x20 DUP3 DUP7 ADD ADD MSTORE PUSH1 0x20 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP6 ADD ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH0 PUSH2 0xCC9 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x1D5D JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1DAD JUMPI PUSH0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1DC5 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH2 0x1DCE DUP4 PUSH2 0x1D02 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH0 DUP1 PUSH0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1DEE JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH2 0x1DF7 DUP5 PUSH2 0x1D02 JUMP JUMPDEST SWAP3 POP PUSH2 0x1E05 PUSH1 0x20 DUP6 ADD PUSH2 0x1D02 JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1E27 JUMPI PUSH0 DUP1 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1E47 JUMPI PUSH0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD SWAP2 POP PUSH2 0x1E57 PUSH1 0x20 DUP5 ADD PUSH2 0x1D02 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH0 DUP1 PUSH1 0x20 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1E71 JUMPI PUSH0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1E87 JUMPI PUSH0 DUP1 REVERT JUMPDEST DUP4 ADD PUSH1 0x1F DUP2 ADD DUP6 SGT PUSH2 0x1E97 JUMPI PUSH0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1EAD JUMPI PUSH0 DUP1 REVERT JUMPDEST DUP6 PUSH1 0x20 DUP3 DUP5 ADD ADD GT ISZERO PUSH2 0x1EBE JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH1 0x20 SWAP2 SWAP1 SWAP2 ADD SWAP6 SWAP1 SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1EDE JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH2 0xCC9 DUP3 PUSH2 0x1D02 JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1EF7 JUMPI PUSH0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH6 0xFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0xCC9 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1F1D JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH2 0x1F26 DUP4 PUSH2 0x1D02 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x1D52 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 PUSH0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x1F61 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH2 0x1F6A DUP6 PUSH2 0x1D02 JUMP JUMPDEST SWAP4 POP PUSH2 0x1F78 PUSH1 0x20 DUP7 ADD PUSH2 0x1D02 JUMP JUMPDEST SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD SWAP2 POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1F9A JUMPI PUSH0 DUP1 REVERT JUMPDEST DUP6 ADD PUSH1 0x1F DUP2 ADD DUP8 SGT PUSH2 0x1FAA JUMPI PUSH0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1FC4 JUMPI PUSH2 0x1FC4 PUSH2 0x1F3A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x1FF3 JUMPI PUSH2 0x1FF3 PUSH2 0x1F3A JUMP JUMPDEST PUSH1 0x40 MSTORE DUP2 DUP2 MSTORE DUP3 DUP3 ADD PUSH1 0x20 ADD DUP10 LT ISZERO PUSH2 0x200A JUMPI PUSH0 DUP1 REVERT JUMPDEST DUP2 PUSH1 0x20 DUP5 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH0 PUSH1 0x20 DUP4 DUP4 ADD ADD MSTORE DUP1 SWAP4 POP POP POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x203C JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH2 0x2045 DUP4 PUSH2 0x1D02 JUMP JUMPDEST SWAP2 POP PUSH2 0x1E57 PUSH1 0x20 DUP5 ADD PUSH2 0x1D02 JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x2067 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 SUB PUSH2 0x2085 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP1 DUP3 MUL DUP2 ISZERO DUP3 DUP3 DIV DUP5 EQ OR PUSH2 0x598 JUMPI PUSH2 0x598 PUSH2 0x208B JUMP JUMPDEST PUSH0 DUP3 PUSH2 0x20D0 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH1 0x1F DUP3 GT ISZERO PUSH2 0x90A JUMPI DUP1 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 PUSH1 0x1F DUP5 ADD PUSH1 0x5 SHR DUP2 ADD PUSH1 0x20 DUP6 LT ISZERO PUSH2 0x20FA JUMPI POP DUP1 JUMPDEST PUSH1 0x1F DUP5 ADD PUSH1 0x5 SHR DUP3 ADD SWAP2 POP JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1403 JUMPI PUSH0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x2106 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT ISZERO PUSH2 0x2131 JUMPI PUSH2 0x2131 PUSH2 0x1F3A JUMP JUMPDEST PUSH2 0x2145 DUP4 PUSH2 0x213F DUP4 SLOAD PUSH2 0x2053 JUMP JUMPDEST DUP4 PUSH2 0x20D5 JUMP JUMPDEST PUSH0 PUSH1 0x1F DUP5 GT PUSH1 0x1 DUP2 EQ PUSH2 0x2176 JUMPI PUSH0 DUP6 ISZERO PUSH2 0x215F JUMPI POP DUP4 DUP3 ADD CALLDATALOAD JUMPDEST PUSH0 NOT PUSH1 0x3 DUP8 SWAP1 SHL SHR NOT AND PUSH1 0x1 DUP7 SWAP1 SHL OR DUP4 SSTORE PUSH2 0x1403 JUMP JUMPDEST PUSH0 DUP4 DUP2 MSTORE PUSH1 0x20 DUP2 KECCAK256 PUSH1 0x1F NOT DUP8 AND SWAP2 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x21A5 JUMPI DUP7 DUP6 ADD CALLDATALOAD DUP3 SSTORE PUSH1 0x20 SWAP5 DUP6 ADD SWAP5 PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 ADD PUSH2 0x2185 JUMP JUMPDEST POP DUP7 DUP3 LT ISZERO PUSH2 0x21C1 JUMPI PUSH0 NOT PUSH1 0xF8 DUP9 PUSH1 0x3 SHL AND SHR NOT DUP5 DUP8 ADD CALLDATALOAD AND DUP2 SSTORE JUMPDEST POP POP PUSH1 0x1 DUP6 PUSH1 0x1 SHL ADD DUP4 SSTORE POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 MSTORE PUSH0 PUSH2 0x21E5 PUSH1 0x40 DUP4 ADD DUP7 PUSH2 0x1D5D JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x20 DUP5 ADD MSTORE DUP4 DUP2 MSTORE DUP4 DUP6 PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH0 PUSH1 0x20 DUP6 DUP4 ADD ADD MSTORE PUSH1 0x20 PUSH1 0x1F NOT PUSH1 0x1F DUP7 ADD AND DUP3 ADD ADD SWAP2 POP POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH0 DUP2 MLOAD DUP1 PUSH1 0x20 DUP5 ADD DUP6 MCOPY PUSH0 SWAP4 ADD SWAP3 DUP4 MSTORE POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 PUSH2 0x1B0F PUSH2 0x223C DUP4 DUP7 PUSH2 0x2217 JUMP JUMPDEST DUP5 PUSH2 0x2217 JUMP JUMPDEST PUSH6 0xFFFFFFFFFFFF DUP2 DUP2 AND DUP4 DUP3 AND ADD SWAP1 DUP2 GT ISZERO PUSH2 0x598 JUMPI PUSH2 0x598 PUSH2 0x208B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND DUP3 MSTORE DUP5 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x80 PUSH1 0x60 DUP3 ADD DUP2 SWAP1 MSTORE PUSH0 SWAP1 PUSH2 0x2292 SWAP1 DUP4 ADD DUP5 PUSH2 0x1D5D JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x22AC JUMPI PUSH0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0xCC9 DUP2 PUSH2 0x1CD2 JUMP JUMPDEST PUSH6 0xFFFFFFFFFFFF DUP3 DUP2 AND DUP3 DUP3 AND SUB SWAP1 DUP2 GT ISZERO PUSH2 0x598 JUMPI PUSH2 0x598 PUSH2 0x208B JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH13 0x61F9CBC8861ECF23317AF095DB 0xBB 0xB4 0x2C PUSH0 RETURN 0x2E 0xD8 0xE4 0xA7 SHL SWAP2 0xC7 LOG2 0xA6 0xAA MOD DUP1 CALLDATALOAD PUSH5 0x736F6C6343 STOP ADDMOD BYTE STOP CALLER ","sourceMap":"678:6691:27:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7139:228;;;;;;:::i;:::-;;:::i;:::-;;;565:14:30;;558:22;540:41;;528:2;513:18;7139:228:27;;;;;;;;7766:108:4;7861:6;7766:108;;;766:14:30;754:27;;;736:46;;724:2;709:18;7766:108:4;592:196:30;5456:284:27;;;;;;:::i;:::-;;:::i;:::-;;2263:89:9;;;:::i;:::-;;;;;;;:::i;3299:154::-;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;2278:32:30;;;2260:51;;2248:2;2233:18;3299:154:9;2114:203:30;3152:113:9;;;;;;:::i;:::-;;:::i;10852:126:4:-;;;:::i;3852:578:9:-;;;;;;:::i;:::-;;:::i;3776:120:0:-;;;;;;:::i;:::-;3841:7;3867:12;;;:6;:12;;;;;:22;;;;3776:120;;;;3383:25:30;;;3371:2;3356:18;3776:120:0;3237:177:30;2330:657:14;;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;3962:32:30;;;3944:51;;4026:2;4011:18;;4004:34;;;;3917:18;2330:657:14;3770:274:30;3300:265:4;;;;;;:::i;:::-;;:::i;4617:566::-;;;;;;:::i;:::-;;:::i;5925:84:27:-;;;:::i;4464:132:9:-;;;;;;:::i;:::-;;:::i;4552:228:27:-;;;;;;:::i;:::-;;:::i;1726:84:18:-;1796:7;;;;1726:84;;8053:150:4;;;;;;:::i;:::-;;:::i;2103:118:9:-;;;;;;:::i;:::-;;:::i;10236:145:4:-;;;;;;:::i;:::-;;:::i;6460:94:27:-;;;:::i;1861:208:9:-;;;;;;:::i;:::-;;:::i;5805:80:27:-;;;:::i;6767:106:4:-;6846:20;;-1:-1:-1;;;;;6846:20:4;6767:106;;3044:93;;;:::i;2820:136:0:-;;;;;;:::i;:::-;;:::i;4942:286:27:-;;;;;;:::i;:::-;;:::i;2394:93:9:-;;;:::i;4100:131:27:-;;;;;;:::i;:::-;;:::i;7447:261:4:-;;;:::i;:::-;;;;5804:14:30;5792:27;;;5774:46;;5856:27;;;;5851:2;5836:18;;5829:55;5747:18;7447:261:4;5604:286:30;2187:49:0;;2232:4;2187:49;;3487:144:9;;;;;;:::i;:::-;;:::i;4630:233::-;;;;;;:::i;:::-;;:::i;2529:255::-;;;;;;:::i;:::-;;:::i;7160:229:4:-;;;:::i;9101:344::-;;;:::i;6931:171::-;;;:::i;:::-;;;;-1:-1:-1;;;;;7781:32:30;;;7763:51;;7862:14;7850:27;;;7845:2;7830:18;;7823:55;7736:18;6931:171:4;7591:293:30;1016:62:27;;1054:24;1016:62;;3665:267:4;;;;;;:::i;:::-;;:::i;8676:128::-;;;:::i;6273:105:27:-;;;:::i;3665:153:9:-;;;;;;:::i;:::-;;:::i;7139:228:27:-;7297:4;7324:36;7348:11;7324:23;:36::i;:::-;7317:43;7139:228;-1:-1:-1;;7139:228:27:o;5456:284::-;2232:4:0;2464:16;2232:4;2464:10;:16::i;:::-;-1:-1:-1;;;;;5573:22:27;::::1;5569:48;;5604:13;;-1:-1:-1::0;;;5604:13:27::1;;;;;;;;;;;5569:48;5627:44;5646:8;5656:14;5627:18;:44::i;:::-;5686:47;::::0;-1:-1:-1;;;;;8316:39:30;;8298:58;;-1:-1:-1;;;;;5686:47:27;::::1;::::0;::::1;::::0;8286:2:30;8271:18;5686:47:27::1;;;;;;;5456:284:::0;;;:::o;2263:89:9:-;2308:13;2340:5;2333:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2263:89;:::o;3299:154::-;3366:7;3385:22;3399:7;3385:13;:22::i;:::-;-1:-1:-1;5679:7:9;5705:24;;;:15;:24;;;;;;-1:-1:-1;;;;;5705:24:9;3425:21;5609:127;3152:113;3223:35;3232:2;3236:7;735:10:16;3223:8:9;:35::i;:::-;3152:113;;:::o;10852:126:4:-;2232:4:0;2464:16;2232:4;2464:10;:16::i;:::-;10943:28:4::1;:26;:28::i;:::-;10852:126:::0;:::o;3852:578:9:-;-1:-1:-1;;;;;3946:16:9;;3942:87;;3985:33;;-1:-1:-1;;;3985:33:9;;4015:1;3985:33;;;2260:51:30;2233:18;;3985:33:9;;;;;;;;3942:87;4247:21;4271:34;4279:2;4283:7;735:10:16;4271:7:9;:34::i;:::-;4247:58;;4336:4;-1:-1:-1;;;;;4319:21:9;:13;-1:-1:-1;;;;;4319:21:9;;4315:109;;4363:50;;-1:-1:-1;;;4363:50:9;;-1:-1:-1;;;;;8972:32:30;;;4363:50:9;;;8954:51:30;9021:18;;;9014:34;;;9084:32;;9064:18;;;9057:60;8927:18;;4363:50:9;8752:371:30;4315:109:9;3932:498;3852:578;;;:::o;2330:657:14:-;2438:16;2517:26;;;:17;:26;;;;;2579:21;;2438:16;;2517:26;-1:-1:-1;;;;;2579:21:14;;;-1:-1:-1;;;2635:28:14;;-1:-1:-1;;;;;2635:28:14;2579:21;2674:173;;-1:-1:-1;;2741:19:14;:28;-1:-1:-1;;;;;2741:28:14;;;-1:-1:-1;;;2801:35:14;;-1:-1:-1;;;;;2801:35:14;2674:173;2857:21;3345:5;2882:27;-1:-1:-1;;;;;2882:27:14;;:9;:27;:::i;:::-;2881:49;;;;:::i;:::-;2949:15;;;;-1:-1:-1;2330:657:14;;-1:-1:-1;;;;;;2330:657:14:o;3300:265:4:-;3419:4;3415:104;;3468:40;;-1:-1:-1;;;3468:40:4;;;;;;;;;;;3415:104;3528:30;3544:4;3550:7;3528:15;:30::i;4617:566::-;4739:26;;:55;;;;-1:-1:-1;6846:20:4;;-1:-1:-1;;;;;4769:25:4;;;6846:20;;4769:25;4739:55;4735:399;;;4811:23;4836:15;4855:21;:19;:21::i;:::-;4810:66;;-1:-1:-1;4810:66:4;-1:-1:-1;;;;;;4894:29:4;;;;;:58;;-1:-1:-1;14485:13:4;;;;4894:58;:91;;;-1:-1:-1;14712:15:4;14701:26;;;;4956:29;4894:91;4890:185;;;5012:48;;-1:-1:-1;;;5012:48:4;;766:14:30;754:27;;5012:48:4;;;736:46:30;709:18;;5012:48:4;592:196:30;4890:185:4;-1:-1:-1;;5095:28:4;5088:35;;-1:-1:-1;;;;5088:35:4;;;4735:399;5143:33;5162:4;5168:7;5143:18;:33::i;5925:84:27:-;2232:4:0;2464:16;2232:4;2464:10;:16::i;:::-;5992:10:27::1;:8;:10::i;4464:132:9:-:0;4550:39;4567:4;4573:2;4577:7;4550:39;;;;;;;;;;;;:16;:39::i;:::-;4464:132;;;:::o;4552:228:27:-;2232:4:0;2464:16;2232:4;2464:10;:16::i;:::-;4646:25:27::1;4674:13;4646:41;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4713:8;;4697:13;:24;;;;;;;:::i;:::-;;4736:37;4751:11;4764:8;;4736:37;;;;;;;;:::i;:::-;;;;;;;;4636:144;4552:228:::0;;;:::o;8053:150:4:-;2232:4:0;2464:16;2232:4;2464:10;:16::i;:::-;8160:36:4::1;8187:8;8160:26;:36::i;2103:118:9:-:0;2166:7;2192:22;2206:7;2192:13;:22::i;10236:145:4:-;2232:4:0;2464:16;2232:4;2464:10;:16::i;:::-;10340:34:4::1;10365:8;10340:24;:34::i;6460:94:27:-:0;6502:13;6534;6527:20;;;;;:::i;1861:208:9:-;1924:7;-1:-1:-1;;;;;1947:19:9;;1943:87;;1989:30;;-1:-1:-1;;;1989:30:9;;2016:1;1989:30;;;2260:51:30;2233:18;;1989:30:9;2114:203:30;1943:87:9;-1:-1:-1;;;;;;2046:16:9;;;;;:9;:16;;;;;;;1861:208::o;5805:80:27:-;2232:4:0;2464:16;2232:4;2464:10;:16::i;:::-;5870:8:27::1;:6;:8::i;3044:93:4:-:0;3090:7;3116:14;6846:20;;-1:-1:-1;;;;;6846:20:4;;6767:106;3116:14;3109:21;;3044:93;:::o;2820:136:0:-;2897:4;2920:12;;;:6;:12;;;;;;;;-1:-1:-1;;;;;2920:29:0;;;;;;;;;;;;;;;2820:136::o;4942:286:27:-;2232:4:0;2464:16;2232:4;2464:10;:16::i;:::-;5052:25:27::1;5080:20;5052:48;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5133:20;;5110;:43;;;;;;;:::i;:::-;;5168:53;5187:11;5200:20;;5168:53;;;;;;;;:::i;2394:93:9:-:0;2441:13;2473:7;2466:14;;;;;:::i;4100:131:27:-;1054:24;2464:16:0;2475:4;2464:10;:16::i;:::-;1350:19:18::1;:17;:19::i;:::-;4202:22:27::2;4212:2;4216:7;4202:9;:22::i;7447:261:4:-:0;7567:21;;7512:15;;-1:-1:-1;;;7567:21:4;;;;14485:13;;;7606:57;;;;-1:-1:-1;14712:15:4;14701:26;;;;7634:29;7606:57;7605:96;;7696:1;7699;7605:96;;;7668:13;;-1:-1:-1;;;7668:13:4;;;;7683:8;7605:96;7598:103;;;;7447:261;;:::o;3487:144:9:-;3572:52;735:10:16;3605:8:9;3615;3572:18;:52::i;4630:233::-;4743:31;4756:4;4762:2;4766:7;4743:12;:31::i;:::-;4784:72;735:10:16;4832:4:9;4838:2;4842:7;4851:4;4784:33;:72::i;2529:255::-;2593:13;2618:22;2632:7;2618:13;:22::i;:::-;;2651:21;2675:10;:8;:10::i;:::-;2651:34;;2726:1;2708:7;2702:21;:25;:75;;;;;;;;;;;;;;;;;2744:7;2753:18;:7;:16;:18::i;:::-;2730:42;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2702:75;2695:82;2529:255;-1:-1:-1;;;2529:255:9:o;7160:229:4:-;7254:21;;7218:6;;-1:-1:-1;;;7254:21:4;;;;14485:13;;;7293:56;;;;-1:-1:-1;14712:15:4;14701:26;;;;7321:28;7292:90;;7369:13;;-1:-1:-1;;;7369:13:4;;;;7292:90;;;7353:13;;-1:-1:-1;;;7353:13:4;;;;7292:90;7285:97;;;7160:229;:::o;9101:344::-;9165:23;9194:21;:19;:21::i;:::-;-1:-1:-1;9164:51:4;-1:-1:-1;735:10:16;-1:-1:-1;;;;;9229:31:4;;;9225:175;;9343:46;;-1:-1:-1;;;9343:46:4;;735:10:16;9343:46:4;;;2260:51:30;2233:18;;9343:46:4;2114:203:30;9225:175:4;9409:29;:27;:29::i;6931:171::-;7044:20;;-1:-1:-1;;;;;7044:20:4;;;-1:-1:-1;;;7066:28:4;;;;;;6931:171::o;3665:267::-;3785:4;3781:104;;3834:40;;-1:-1:-1;;;3834:40:4;;;;;;;;;;;3781:104;3894:31;3911:4;3917:7;3894:16;:31::i;8676:128::-;2232:4:0;2464:16;2232:4;2464:10;:16::i;:::-;8768:29:4::1;:27;:29::i;6273:105:27:-:0;6319:13;6351:20;6344:27;;;;;:::i;3665:153:9:-;-1:-1:-1;;;;;3776:25:9;;;3753:4;3776:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;3665:153::o;2790:219:4:-;2875:4;-1:-1:-1;;;;;;2898:64:4;;-1:-1:-1;;;2898:64:4;;:104;;;2966:36;2990:11;2966:23;:36::i;3165:103:0:-;3231:30;3242:4;735:10:16;3231::0;:30::i;3618:507:14:-;3345:5;-1:-1:-1;;;;;3765:26:14;;;-1:-1:-1;3761:173:14;;;3868:55;;-1:-1:-1;;;3868:55:14;;-1:-1:-1;;;;;13050:39:30;;3868:55:14;;;13032:58:30;13106:18;;;13099:34;;;13005:18;;3868:55:14;12859:280:30;3761:173:14;-1:-1:-1;;;;;3947:22:14;;3943:108;;3992:48;;-1:-1:-1;;;3992:48:14;;4037:1;3992:48;;;2260:51:30;2233:18;;3992:48:14;2114:203:30;3943:108:14;-1:-1:-1;4083:35:14;;;;;;;;;-1:-1:-1;;;;;4083:35:14;;;;;;-1:-1:-1;;;;;4083:35:14;;;;;;;;;;-1:-1:-1;;;4061:57:14;;;;:19;:57;3618:507::o;15957:241:9:-;16020:7;5470:16;;;:7;:16;;;;;;-1:-1:-1;;;;;5470:16:9;;16082:88;;16128:31;;-1:-1:-1;;;16128:31:9;;;;;3383:25:30;;;3356:18;;16128:31:9;3237:177:30;14138:120:9;14218:33;14227:2;14231:7;14240:4;14246;14218:8;:33::i;11105:94:4:-;11170:22;11187:1;11190;11170:16;:22::i;:::-;11105:94::o;8507:795:9:-;8593:7;5470:16;;;:7;:16;;;;;;-1:-1:-1;;;;;5470:16:9;;;;8704:18;;;8700:86;;8738:37;8755:4;8761;8767:7;8738:16;:37::i;:::-;-1:-1:-1;;;;;8830:18:9;;;8826:256;;8946:48;8963:1;8967:7;8984:1;8988:5;8946:8;:48::i;:::-;-1:-1:-1;;;;;9037:15:9;;;;;;:9;:15;;;;;:20;;-1:-1:-1;;9037:20:9;;;8826:256;-1:-1:-1;;;;;9096:16:9;;;9092:107;;-1:-1:-1;;;;;9156:13:9;;;;;;:9;:13;;;;;:18;;9173:1;9156:18;;;9092:107;9209:16;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;9209:21:9;-1:-1:-1;;;;;9209:21:9;;;;;;;;;9246:27;;9209:16;;9246:27;;;;;;;9291:4;8507:795;-1:-1:-1;;;;8507:795:9:o;4192:136:0:-;3841:7;3867:12;;;:6;:12;;;;;:22;;;2464:16;2475:4;2464:10;:16::i;:::-;4296:25:::1;4307:4;4313:7;4296:10;:25::i;5294:245::-:0;-1:-1:-1;;;;;5387:34:0;;735:10:16;5387:34:0;5383:102;;5444:30;;-1:-1:-1;;;5444:30:0;;;;;;;;;;;5383:102;5495:37;5507:4;5513:18;5495:11;:37::i;2586:117:18:-;1597:16;:14;:16::i;:::-;2644:7:::1;:15:::0;;-1:-1:-1;;2644:15:18::1;::::0;;2674:22:::1;735:10:16::0;2683:12:18::1;2674:22;::::0;-1:-1:-1;;;;;2278:32:30;;;2260:51;;2248:2;2233:18;2674:22:18::1;;;;;;;2586:117::o:0;8330:288:4:-;8411:18;8469:19;:17;:19::i;:::-;8432:34;8450:15;8432:17;:34::i;:::-;:56;;;;:::i;:::-;8411:77;;8498:46;8522:8;8532:11;8498:23;:46::i;:::-;8559:52;;766:14:30;754:27;;736:46;;-1:-1:-1;;;;;8559:52:4;;;;;724:2:30;709:18;8559:52:4;;;;;;;8401:217;8330:288;:::o;10506:::-;10584:18;10642:26;10659:8;10642:16;:26::i;:::-;10605:34;10623:15;10605:17;:34::i;:::-;:63;;;;:::i;:::-;10584:84;;10678:39;10695:8;10705:11;10678:16;:39::i;:::-;10732:55;;;5804:14:30;5792:27;;;5774:46;;5856:27;;5851:2;5836:18;;5829:55;10732::4;;5747:18:30;10732:55:4;;;;;;;10574:220;10506:288;:::o;2339:115:18:-;1350:19;:17;:19::i;:::-;2398:7:::1;:14:::0;;-1:-1:-1;;2398:14:18::1;2408:4;2398:14;::::0;;2427:20:::1;2434:12;735:10:16::0;;656:96;1878:128:18;1796:7;;;;1939:61;;;1974:15;;-1:-1:-1;;;1974:15:18;;;;;;;;;;;10302:100:9;10369:26;10379:2;10383:7;10369:26;;;;;;;;;;;;:9;:26::i;15311:411::-;-1:-1:-1;;;;;15418:19:9;;15414:90;;15460:33;;-1:-1:-1;;;15460:33:9;;15490:1;15460:33;;;2260:51:30;2233:18;;15460:33:9;2114:203:30;15414:90:9;-1:-1:-1;;;;;15517:22:9;;15513:91;;15562:31;;-1:-1:-1;;;15562:31:9;;-1:-1:-1;;;;;2278:32:30;;15562:31:9;;;2260:51:30;2233:18;;15562:31:9;2114:203:30;15513:91:9;-1:-1:-1;;;;;15613:25:9;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;15613:46:9;;;;;;;;;;15674:41;;540::30;;;15674::9;;513:18:30;15674:41:9;;;;;;;15311:411;;;:::o;994:926:13:-;-1:-1:-1;;;;;1174:14:13;;;:18;1170:744;;1212:67;;-1:-1:-1;;;1212:67:13;;-1:-1:-1;;;;;1212:36:13;;;;;:67;;1249:8;;1259:4;;1265:7;;1274:4;;1212:67;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1212:67:13;;;;;;;;-1:-1:-1;;1212:67:13;;;;;;;;;;;;:::i;:::-;;;1208:696;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1569:6;:13;1586:1;1569:18;1565:325;;1673:39;;-1:-1:-1;;;1673:39:13;;-1:-1:-1;;;;;2278:32:30;;1673:39:13;;;2260:51:30;2233:18;;1673:39:13;2114:203:30;1565:325:13;1842:6;1836:13;1829:4;1821:6;1817:17;1810:40;1208:696;-1:-1:-1;;;;;;1326:51:13;;-1:-1:-1;;;1326:51:13;1322:182;;1446:39;;-1:-1:-1;;;1446:39:13;;-1:-1:-1;;;;;2278:32:30;;1446:39:13;;;2260:51:30;2233:18;;1446:39:13;2114:203:30;1322:182:13;1280:238;1208:696;994:926;;;;;:::o;1251:634:21:-;1307:13;1356:14;1373:17;1384:5;1373:10;:17::i;:::-;1393:1;1373:21;1356:38;;1408:20;1442:6;1431:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1431:18:21;-1:-1:-1;1408:41:21;-1:-1:-1;1538:30:21;;;1554:4;1538:30;1595:247;-1:-1:-1;;1626:5:21;-1:-1:-1;;;1725:2:21;1714:14;;1709:32;1626:5;1696:46;1786:2;1777:11;;;-1:-1:-1;1806:21:21;1595:247;1806:21;-1:-1:-1;1862:6:21;1251:634;-1:-1:-1;;;1251:634:21:o;9573:474:4:-;9640:16;9658:15;9677:21;:19;:21::i;:::-;9639:59;;;;9713:24;9728:8;14485:13;;;;;14399:106;9713:24;9712:25;:58;;;-1:-1:-1;14712:15:4;14701:26;;;;9741:29;9712:58;9708:144;;;9793:48;;-1:-1:-1;;;9793:48:4;;766:14:30;754:27;;9793:48:4;;;736:46:30;709:18;;9793:48:4;592:196:30;9708:144:4;9861:47;2232:4:0;9893:14:4;6846:20;;-1:-1:-1;;;;;6846:20:4;;6767:106;9893:14;9861:11;:47::i;:::-;-1:-1:-1;9918:40:4;2232:4:0;9949:8:4;9918:10;:40::i;:::-;-1:-1:-1;;9975:20:4;9968:27;;-1:-1:-1;;;;;;10005:35:4;;;-1:-1:-1;9573:474:4:o;4608:138:0:-;3841:7;3867:12;;;:6;:12;;;;;:22;;;2464:16;2475:4;2464:10;:16::i;:::-;4713:26:::1;4725:4;4731:7;4713:11;:26::i;8932:111:4:-:0;8998:38;9030:1;9034;8998:23;:38::i;2531:202:0:-;2616:4;-1:-1:-1;;;;;;2639:47:0;;-1:-1:-1;;;2639:47:0;;:87;;;2690:36;2714:11;2690:23;:36::i;3398:197::-;3486:22;3494:4;3500:7;3486;:22::i;:::-;3481:108;;3531:47;;-1:-1:-1;;;3531:47:0;;-1:-1:-1;;;;;3962:32:30;;3531:47:0;;;3944:51:30;4011:18;;;4004:34;;;3917:18;;3531:47:0;3770:274:30;14440:662:9;14600:9;:31;;;-1:-1:-1;;;;;;14613:18:9;;;;14600:31;14596:460;;;14647:13;14663:22;14677:7;14663:13;:22::i;:::-;14647:38;-1:-1:-1;;;;;;14813:18:9;;;;;;:35;;;14844:4;-1:-1:-1;;;;;14835:13:9;:5;-1:-1:-1;;;;;14835:13:9;;;14813:35;:69;;;;;14853:29;14870:5;14877:4;14853:16;:29::i;:::-;14852:30;14813:69;14809:142;;;14909:27;;-1:-1:-1;;;14909:27:9;;-1:-1:-1;;;;;2278:32:30;;14909:27:9;;;2260:51:30;2233:18;;14909:27:9;2114:203:30;14809:142:9;14969:9;14965:81;;;15023:7;15019:2;-1:-1:-1;;;;;15003:28:9;15012:5;-1:-1:-1;;;;;15003:28:9;;;;;;;;;;;14965:81;14633:423;14596:460;-1:-1:-1;;15066:24:9;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;15066:29:9;-1:-1:-1;;;;;15066:29:9;;;;;;;;;;14440:662::o;13670:585:4:-;13772:21;;-1:-1:-1;;;13772:21:4;;;;14485:13;;13804:365;;14712:15;14701:26;;;;13851:308;;;13969:13;;13953;:29;;-1:-1:-1;;;;;13953:29:4;-1:-1:-1;;;13969:13:4;;;;;-1:-1:-1;;;13953:29:4;;;;;;;13851:308;;;14111:33;;;;;;;13851:308;-1:-1:-1;14179:13:4;:24;;-1:-1:-1;;;;;14213:35:4;-1:-1:-1;;;14179:24:4;;;;;-1:-1:-1;;;;;14213:35:4;;-1:-1:-1;;;14213:35:4;;;;;;;;;;;;;;13670:585::o;6751:368:9:-;6863:38;6877:5;6884:7;6893;6863:13;:38::i;:::-;6858:255;;-1:-1:-1;;;;;6921:19:9;;6917:186;;6967:31;;-1:-1:-1;;;6967:31:9;;;;;3383:25:30;;;3356:18;;6967:31:9;3237:177:30;6917:186:9;7044:44;;-1:-1:-1;;;7044:44:9;;-1:-1:-1;;;;;3962:32:30;;7044:44:9;;;3944:51:30;4011:18;;;4004:34;;;3917:18;;7044:44:9;3770:274:30;5611:370:4;5697:4;5717;5713:214;;5789:1;5763:14;6846:20;;-1:-1:-1;;;;;6846:20:4;;6767:106;5763:14;-1:-1:-1;;;;;5763:28:4;;5759:114;;5818:40;;-1:-1:-1;;;5818:40:4;;;;;;;;;;;5759:114;5886:20;:30;;-1:-1:-1;;;;;;5886:30:4;-1:-1:-1;;;;;5886:30:4;;;;;5713:214;5943:31;5960:4;5966:7;5943:16;:31::i;6021:271::-;6108:4;6128:26;;:55;;;;-1:-1:-1;6846:20:4;;-1:-1:-1;;;;;6158:25:4;;;6846:20;;6158:25;6128:55;6124:113;;;6206:20;6199:27;;-1:-1:-1;;;;;;6199:27:4;;;6124:113;6253:32;6271:4;6277:7;6253:17;:32::i;2078:126:18:-;1796:7;;;;2136:62;;2172:15;;-1:-1:-1;;;2172:15:18;;;;;;;;;;;14293:213:25;14349:6;14379:16;14371:24;;14367:103;;;14418:41;;-1:-1:-1;;;14418:41:25;;14449:2;14418:41;;;14543:36:30;14595:18;;;14588:34;;;14516:18;;14418:41:25;14362:266:30;14367:103:25;-1:-1:-1;14493:5:25;14293:213::o;12989:525:4:-;13081:18;13103:21;:19;:21::i;:::-;13135:20;:31;;13176:42;;;-1:-1:-1;;;13176:42:4;-1:-1:-1;;;;;;13176:42:4;;;-1:-1:-1;;;;;13135:31:4;;13176:42;;;;13078:46;-1:-1:-1;13330:27:4;;-1:-1:-1;13078:46:4;14485:13;;;;;14399:106;13330:27;13326:182;;;13467:30;;;;;;;13068:446;12989:525;;:::o;11546:1249::-;11620:6;11638:19;11660;:17;:19::i;:::-;11638:41;;12609:12;12598:23;;:8;:23;;;:190;;12765:23;12780:8;12765:12;:23;:::i;:::-;12598:190;;;12647:51;;;;7861:6;12647:8;:51::i;10623:207:9:-;10717:18;10723:2;10727:7;10717:5;:18::i;:::-;10745:78;735:10:16;10801:1:9;10805:2;10809:7;10818:4;10745:33;:78::i;29471:916:24:-;29524:7;;-1:-1:-1;;;29599:17:24;;29595:103;;-1:-1:-1;;;29636:17:24;;;-1:-1:-1;29681:2:24;29671:12;29595:103;29724:8;29715:5;:17;29711:103;;29761:8;29752:17;;;-1:-1:-1;29797:2:24;29787:12;29711:103;29840:8;29831:5;:17;29827:103;;29877:8;29868:17;;;-1:-1:-1;29913:2:24;29903:12;29827:103;29956:7;29947:5;:16;29943:100;;29992:7;29983:16;;;-1:-1:-1;30027:1:24;30017:11;29943:100;30069:7;30060:5;:16;30056:100;;30105:7;30096:16;;;-1:-1:-1;30140:1:24;30130:11;30056:100;30182:7;30173:5;:16;30169:100;;30218:7;30209:16;;;-1:-1:-1;30253:1:24;30243:11;30169:100;30295:7;30286:5;:16;30282:66;;30332:1;30322:11;30374:6;29471:916;-1:-1:-1;;29471:916:24:o;2082:213:14:-;2184:4;-1:-1:-1;;;;;;2207:41:14;;-1:-1:-1;;;2207:41:14;;:81;;;2252:36;2276:11;2252:23;:36::i;6047:272:9:-;6150:4;-1:-1:-1;;;;;6185:21:9;;;;;;:127;;;6232:7;-1:-1:-1;;;;;6223:16:9;:5;-1:-1:-1;;;;;6223:16:9;;:52;;;;6243:32;6260:5;6267:7;6243:16;:32::i;:::-;6223:88;;;-1:-1:-1;5679:7:9;5705:24;;;:15;:24;;;;;;-1:-1:-1;;;;;6279:32:9;;;5705:24;;6279:32;6223:88;6166:146;6047:272;-1:-1:-1;;;;6047:272:9:o;6145:316:0:-;6222:4;6243:22;6251:4;6257:7;6243;:22::i;:::-;6238:217;;6281:12;;;;:6;:12;;;;;;;;-1:-1:-1;;;;;6281:29:0;;;;;;;;;:36;;-1:-1:-1;;6281:36:0;6313:4;6281:36;;;6363:12;735:10:16;;656:96;6363:12:0;-1:-1:-1;;;;;6336:40:0;6354:7;-1:-1:-1;;;;;6336:40:0;6348:4;6336:40;;;;;;;;;;-1:-1:-1;6397:4:0;6390:11;;6238:217;-1:-1:-1;6439:5:0;6432:12;;6698:317;6776:4;6796:22;6804:4;6810:7;6796;:22::i;:::-;6792:217;;;6866:5;6834:12;;;:6;:12;;;;;;;;-1:-1:-1;;;;;6834:29:0;;;;;;;;;;:37;;-1:-1:-1;;6834:37:0;;;6890:40;735:10:16;;6834:12:0;;6890:40;;6866:5;6890:40;-1:-1:-1;6951:4:0;6944:11;;5633:111:24;5691:7;5328:5;;;5725;;;5327:36;5322:42;;5717:20;5087:294;9624:327:9;-1:-1:-1;;;;;9691:16:9;;9687:87;;9730:33;;-1:-1:-1;;;9730:33:9;;9760:1;9730:33;;;2260:51:30;2233:18;;9730:33:9;2114:203:30;9687:87:9;9783:21;9807:32;9815:2;9819:7;9836:1;9807:7;:32::i;:::-;9783:56;-1:-1:-1;;;;;;9853:27:9;;;9849:96;;9903:31;;-1:-1:-1;;;9903:31:9;;9931:1;9903:31;;;2260:51:30;2233:18;;9903:31:9;2114:203:30;1527:300:9;1629:4;-1:-1:-1;;;;;;1664:40:9;;-1:-1:-1;;;1664:40:9;;:104;;-1:-1:-1;;;;;;;1720:48:9;;-1:-1:-1;;;1720:48:9;1664:104;:156;;;-1:-1:-1;;;;;;;;;;829:40:22;;;1784:36:9;730:146:22;14:131:30;-1:-1:-1;;;;;;88:32:30;;78:43;;68:71;;135:1;132;125:12;150:245;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;793:173::-;861:20;;-1:-1:-1;;;;;910:31:30;;900:42;;890:70;;956:1;953;946:12;890:70;793:173;;;:::o;971:366::-;1038:6;1046;1099:2;1087:9;1078:7;1074:23;1070:32;1067:52;;;1115:1;1112;1105:12;1067:52;1138:29;1157:9;1138:29;:::i;:::-;1128:39;;1217:2;1206:9;1202:18;1189:32;-1:-1:-1;;;;;1254:5:30;1250:38;1243:5;1240:49;1230:77;;1303:1;1300;1293:12;1230:77;1326:5;1316:15;;;971:366;;;;;:::o;1342:300::-;1395:3;1433:5;1427:12;1460:6;1455:3;1448:19;1516:6;1509:4;1502:5;1498:16;1491:4;1486:3;1482:14;1476:47;1568:1;1561:4;1552:6;1547:3;1543:16;1539:27;1532:38;1631:4;1624:2;1620:7;1615:2;1607:6;1603:15;1599:29;1594:3;1590:39;1586:50;1579:57;;;1342:300;;;;:::o;1647:231::-;1796:2;1785:9;1778:21;1759:4;1816:56;1868:2;1857:9;1853:18;1845:6;1816:56;:::i;1883:226::-;1942:6;1995:2;1983:9;1974:7;1970:23;1966:32;1963:52;;;2011:1;2008;2001:12;1963:52;-1:-1:-1;2056:23:30;;1883:226;-1:-1:-1;1883:226:30:o;2322:300::-;2390:6;2398;2451:2;2439:9;2430:7;2426:23;2422:32;2419:52;;;2467:1;2464;2457:12;2419:52;2490:29;2509:9;2490:29;:::i;:::-;2480:39;2588:2;2573:18;;;;2560:32;;-1:-1:-1;;;2322:300:30:o;2627:374::-;2704:6;2712;2720;2773:2;2761:9;2752:7;2748:23;2744:32;2741:52;;;2789:1;2786;2779:12;2741:52;2812:29;2831:9;2812:29;:::i;:::-;2802:39;;2860:38;2894:2;2883:9;2879:18;2860:38;:::i;:::-;2627:374;;2850:48;;-1:-1:-1;;;2967:2:30;2952:18;;;;2939:32;;2627:374::o;3419:346::-;3487:6;3495;3548:2;3536:9;3527:7;3523:23;3519:32;3516:52;;;3564:1;3561;3554:12;3516:52;-1:-1:-1;;3609:23:30;;;3729:2;3714:18;;;3701:32;;-1:-1:-1;3419:346:30:o;4049:300::-;4117:6;4125;4178:2;4166:9;4157:7;4153:23;4149:32;4146:52;;;4194:1;4191;4184:12;4146:52;4239:23;;;-1:-1:-1;4305:38:30;4339:2;4324:18;;4305:38;:::i;:::-;4295:48;;4049:300;;;;;:::o;4354:587::-;4425:6;4433;4486:2;4474:9;4465:7;4461:23;4457:32;4454:52;;;4502:1;4499;4492:12;4454:52;4542:9;4529:23;4575:18;4567:6;4564:30;4561:50;;;4607:1;4604;4597:12;4561:50;4630:22;;4683:4;4675:13;;4671:27;-1:-1:-1;4661:55:30;;4712:1;4709;4702:12;4661:55;4752:2;4739:16;4778:18;4770:6;4767:30;4764:50;;;4810:1;4807;4800:12;4764:50;4855:7;4850:2;4841:6;4837:2;4833:15;4829:24;4826:37;4823:57;;;4876:1;4873;4866:12;4823:57;4907:2;4899:11;;;;;4929:6;;-1:-1:-1;4354:587:30;-1:-1:-1;;;4354:587:30:o;4946:186::-;5005:6;5058:2;5046:9;5037:7;5033:23;5029:32;5026:52;;;5074:1;5071;5064:12;5026:52;5097:29;5116:9;5097:29;:::i;5137:280::-;5195:6;5248:2;5236:9;5227:7;5223:23;5219:32;5216:52;;;5264:1;5261;5254:12;5216:52;5303:9;5290:23;5353:14;5346:5;5342:26;5335:5;5332:37;5322:65;;5383:1;5380;5373:12;5895:347;5960:6;5968;6021:2;6009:9;6000:7;5996:23;5992:32;5989:52;;;6037:1;6034;6027:12;5989:52;6060:29;6079:9;6060:29;:::i;:::-;6050:39;;6139:2;6128:9;6124:18;6111:32;6186:5;6179:13;6172:21;6165:5;6162:32;6152:60;;6208:1;6205;6198:12;6247:127;6308:10;6303:3;6299:20;6296:1;6289:31;6339:4;6336:1;6329:15;6363:4;6360:1;6353:15;6379:1207;6474:6;6482;6490;6498;6551:3;6539:9;6530:7;6526:23;6522:33;6519:53;;;6568:1;6565;6558:12;6519:53;6591:29;6610:9;6591:29;:::i;:::-;6581:39;;6639:38;6673:2;6662:9;6658:18;6639:38;:::i;:::-;6629:48;-1:-1:-1;6746:2:30;6731:18;;6718:32;;-1:-1:-1;6825:2:30;6810:18;;6797:32;6852:18;6841:30;;6838:50;;;6884:1;6881;6874:12;6838:50;6907:22;;6960:4;6952:13;;6948:27;-1:-1:-1;6938:55:30;;6989:1;6986;6979:12;6938:55;7029:2;7016:16;7055:18;7047:6;7044:30;7041:56;;;7077:18;;:::i;:::-;7126:2;7120:9;7218:2;7180:17;;-1:-1:-1;;7176:31:30;;;7209:2;7172:40;7168:54;7156:67;;7253:18;7238:34;;7274:22;;;7235:62;7232:88;;;7300:18;;:::i;:::-;7336:2;7329:22;7360;;;7401:15;;;7418:2;7397:24;7394:37;-1:-1:-1;7391:57:30;;;7444:1;7441;7434:12;7391:57;7500:6;7495:2;7491;7487:11;7482:2;7474:6;7470:15;7457:50;7553:1;7548:2;7539:6;7531;7527:19;7523:28;7516:39;7574:6;7564:16;;;;;6379:1207;;;;;;;:::o;7889:260::-;7957:6;7965;8018:2;8006:9;7997:7;7993:23;7989:32;7986:52;;;8034:1;8031;8024:12;7986:52;8057:29;8076:9;8057:29;:::i;:::-;8047:39;;8105:38;8139:2;8128:9;8124:18;8105:38;:::i;8367:380::-;8446:1;8442:12;;;;8489;;;8510:61;;8564:4;8556:6;8552:17;8542:27;;8510:61;8617:2;8609:6;8606:14;8586:18;8583:38;8580:161;;8663:10;8658:3;8654:20;8651:1;8644:31;8698:4;8695:1;8688:15;8726:4;8723:1;8716:15;8580:161;;8367:380;;;:::o;9128:127::-;9189:10;9184:3;9180:20;9177:1;9170:31;9220:4;9217:1;9210:15;9244:4;9241:1;9234:15;9260:168;9333:9;;;9364;;9381:15;;;9375:22;;9361:37;9351:71;;9402:18;;:::i;9565:217::-;9605:1;9631;9621:132;;9675:10;9670:3;9666:20;9663:1;9656:31;9710:4;9707:1;9700:15;9738:4;9735:1;9728:15;9621:132;-1:-1:-1;9767:9:30;;9565:217::o;9913:518::-;10015:2;10010:3;10007:11;10004:421;;;10051:5;10048:1;10041:16;10095:4;10092:1;10082:18;10165:2;10153:10;10149:19;10146:1;10142:27;10136:4;10132:38;10201:4;10189:10;10186:20;10183:47;;;-1:-1:-1;10224:4:30;10183:47;10279:2;10274:3;10270:12;10267:1;10263:20;10257:4;10253:31;10243:41;;10334:81;10352:2;10345:5;10342:13;10334:81;;;10411:1;10397:16;;10378:1;10367:13;10334:81;;10607:1198;10731:18;10726:3;10723:27;10720:53;;;10753:18;;:::i;:::-;10782:94;10872:3;10832:38;10864:4;10858:11;10832:38;:::i;:::-;10826:4;10782:94;:::i;:::-;10902:1;10927:2;10922:3;10919:11;10944:1;10939:608;;;;11591:1;11608:3;11605:93;;;-1:-1:-1;11664:19:30;;;11651:33;11605:93;-1:-1:-1;;10564:1:30;10560:11;;;10556:24;10552:29;10542:40;10588:1;10584:11;;;10539:57;11711:78;;10912:887;;10939:608;9860:1;9853:14;;;9897:4;9884:18;;-1:-1:-1;;10975:17:30;;;11090:229;11104:7;11101:1;11098:14;11090:229;;;11193:19;;;11180:33;11165:49;;11300:4;11285:20;;;;11253:1;11241:14;;;;11120:12;11090:229;;;11094:3;11347;11338:7;11335:16;11332:159;;;11471:1;11467:6;11461:3;11455;11452:1;11448:11;11444:21;11440:34;11436:39;11423:9;11418:3;11414:19;11401:33;11397:79;11389:6;11382:95;11332:159;;;11534:1;11528:3;11525:1;11521:11;11517:19;11511:4;11504:33;10912:887;;10607:1198;;;:::o;11810:555::-;12017:2;12006:9;11999:21;11980:4;12043:56;12095:2;12084:9;12080:18;12072:6;12043:56;:::i;:::-;12147:9;12139:6;12135:22;12130:2;12119:9;12115:18;12108:50;12182:6;12174;12167:22;12236:6;12228;12223:2;12215:6;12211:15;12198:45;12289:1;12284:2;12275:6;12267;12263:19;12259:28;12252:39;12356:2;12349;12345:7;12340:2;12332:6;12328:15;12324:29;12316:6;12312:42;12308:51;12300:59;;;11810:555;;;;;;:::o;12370:212::-;12412:3;12450:5;12444:12;12494:6;12487:4;12480:5;12476:16;12471:3;12465:36;12556:1;12520:16;;12545:13;;;-1:-1:-1;12520:16:30;;12370:212;-1:-1:-1;12370:212:30:o;12587:267::-;12766:3;12791:57;12817:30;12843:3;12835:6;12817:30;:::i;:::-;12809:6;12791:57;:::i;13144:179::-;13243:14;13212:22;;;13236;;;13208:51;;13271:23;;13268:49;;;13297:18;;:::i;13328:496::-;-1:-1:-1;;;;;13559:32:30;;;13541:51;;13628:32;;13623:2;13608:18;;13601:60;13692:2;13677:18;;13670:34;;;13740:3;13735:2;13720:18;;13713:31;;;-1:-1:-1;;13761:57:30;;13798:19;;13790:6;13761:57;:::i;:::-;13753:65;13328:496;-1:-1:-1;;;;;;13328:496:30:o;13829:249::-;13898:6;13951:2;13939:9;13930:7;13926:23;13922:32;13919:52;;;13967:1;13964;13957:12;13919:52;13999:9;13993:16;14018:30;14042:5;14018:30;:::i;14633:182::-;14734:14;14727:22;;;14703;;;14699:51;;14762:24;;14759:50;;;14789:18;;:::i"},"methodIdentifiers":{"DEFAULT_ADMIN_ROLE()":"a217fddf","MINTER_ROLE()":"d5391393","acceptDefaultAdminTransfer()":"cefc1429","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","baseURI()":"6c0360eb","beginDefaultAdminTransfer(address)":"634e93da","cancelDefaultAdminTransfer()":"d602b9fd","changeDefaultAdminDelay(uint48)":"649a5ec7","contractURI()":"e8a3d485","defaultAdmin()":"84ef8ffc","defaultAdminDelay()":"cc8463c8","defaultAdminDelayIncreaseWait()":"022d63fb","getApproved(uint256)":"081812fc","getRoleAdmin(bytes32)":"248a9ca3","grantRole(bytes32,address)":"2f2ff15d","hasRole(bytes32,address)":"91d14854","isApprovedForAll(address,address)":"e985e9c5","name()":"06fdde03","owner()":"8da5cb5b","ownerOf(uint256)":"6352211e","pause()":"8456cb59","paused()":"5c975abb","pendingDefaultAdmin()":"cf6eefb7","pendingDefaultAdminDelay()":"a1eda53c","renounceRole(bytes32,address)":"36568abe","revokeRole(bytes32,address)":"d547741f","rollbackDefaultAdminDelay()":"0aa6220b","royaltyInfo(uint256,uint256)":"2a55205a","safeMint(address,uint256)":"a1448194","safeTransferFrom(address,address,uint256)":"42842e0e","safeTransferFrom(address,address,uint256,bytes)":"b88d4fde","setApprovalForAll(address,bool)":"a22cb465","setBaseURI(string)":"55f804b3","setContractURI(string)":"938e3d7b","setRoyaltyInfo(address,uint96)":"02fa7c47","supportsInterface(bytes4)":"01ffc9a7","symbol()":"95d89b41","tokenURI(uint256)":"c87b56dd","transferFrom(address,address,uint256)":"23b872dd","unpause()":"3f4ba83a"}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name_\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol_\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI_\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractMetadataURI_\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"royaltyReceiver_\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"royaltyFeeBasisPoints_\",\"type\":\"uint96\"},{\"internalType\":\"address\",\"name\":\"initialAdmin_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialMinter_\",\"type\":\"address\"},{\"internalType\":\"uint48\",\"name\":\"defaultAdminDelay_\",\"type\":\"uint48\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AccessControlBadConfirmation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint48\",\"name\":\"schedule\",\"type\":\"uint48\"}],\"name\":\"AccessControlEnforcedDefaultAdminDelay\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AccessControlEnforcedDefaultAdminRules\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"defaultAdmin\",\"type\":\"address\"}],\"name\":\"AccessControlInvalidDefaultAdmin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"neededRole\",\"type\":\"bytes32\"}],\"name\":\"AccessControlUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"numerator\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"denominator\",\"type\":\"uint256\"}],\"name\":\"ERC2981InvalidDefaultRoyalty\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC2981InvalidDefaultRoyaltyReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"numerator\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"denominator\",\"type\":\"uint256\"}],\"name\":\"ERC2981InvalidTokenRoyalty\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC2981InvalidTokenRoyaltyReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC721IncorrectOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC721InsufficientApproval\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC721InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"ERC721InvalidOperator\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC721InvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC721InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC721InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC721NonexistentToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EnforcedPause\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExpectedPause\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"bits\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintDowncast\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"previousURI\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"newURI\",\"type\":\"string\"}],\"name\":\"BaseURIUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"previousURI\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"newURI\",\"type\":\"string\"}],\"name\":\"ContractURIUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"DefaultAdminDelayChangeCanceled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint48\",\"name\":\"newDelay\",\"type\":\"uint48\"},{\"indexed\":false,\"internalType\":\"uint48\",\"name\":\"effectSchedule\",\"type\":\"uint48\"}],\"name\":\"DefaultAdminDelayChangeScheduled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"DefaultAdminTransferCanceled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint48\",\"name\":\"acceptSchedule\",\"type\":\"uint48\"}],\"name\":\"DefaultAdminTransferScheduled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"feeBasisPoints\",\"type\":\"uint96\"}],\"name\":\"DefaultRoyaltyUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MINTER_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptDefaultAdminTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"beginDefaultAdminTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"cancelDefaultAdminTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint48\",\"name\":\"newDelay\",\"type\":\"uint48\"}],\"name\":\"changeDefaultAdminDelay\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"contractURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"defaultAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"defaultAdminDelay\",\"outputs\":[{\"internalType\":\"uint48\",\"name\":\"\",\"type\":\"uint48\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"defaultAdminDelayIncreaseWait\",\"outputs\":[{\"internalType\":\"uint48\",\"name\":\"\",\"type\":\"uint48\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingDefaultAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"},{\"internalType\":\"uint48\",\"name\":\"schedule\",\"type\":\"uint48\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingDefaultAdminDelay\",\"outputs\":[{\"internalType\":\"uint48\",\"name\":\"newDelay\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"schedule\",\"type\":\"uint48\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollbackDefaultAdminDelay\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"salePrice\",\"type\":\"uint256\"}],\"name\":\"royaltyInfo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"safeMint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"baseURI_\",\"type\":\"string\"}],\"name\":\"setBaseURI\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"contractMetadataURI_\",\"type\":\"string\"}],\"name\":\"setContractURI\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"feeBasisPoints\",\"type\":\"uint96\"}],\"name\":\"setRoyaltyInfo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Does not include staking logic \\u2014 staking is handled by TricksforBoosterStaking.\",\"errors\":{\"AccessControlBadConfirmation()\":[{\"details\":\"The caller of a function is not the expected one. NOTE: Don't confuse with {AccessControlUnauthorizedAccount}.\"}],\"AccessControlEnforcedDefaultAdminDelay(uint48)\":[{\"details\":\"The delay for transferring the default admin delay is enforced and the operation must wait until `schedule`. NOTE: `schedule` can be 0 indicating there's no transfer scheduled.\"}],\"AccessControlEnforcedDefaultAdminRules()\":[{\"details\":\"At least one of the following rules was violated: - The `DEFAULT_ADMIN_ROLE` must only be managed by itself. - The `DEFAULT_ADMIN_ROLE` must only be held by one account at the time. - Any `DEFAULT_ADMIN_ROLE` transfer must be in two delayed steps.\"}],\"AccessControlInvalidDefaultAdmin(address)\":[{\"details\":\"The new default admin is not a valid default admin.\"}],\"AccessControlUnauthorizedAccount(address,bytes32)\":[{\"details\":\"The `account` is missing a role.\"}],\"ERC2981InvalidDefaultRoyalty(uint256,uint256)\":[{\"details\":\"The default royalty set is invalid (eg. (numerator / denominator) >= 1).\"}],\"ERC2981InvalidDefaultRoyaltyReceiver(address)\":[{\"details\":\"The default royalty receiver is invalid.\"}],\"ERC2981InvalidTokenRoyalty(uint256,uint256,uint256)\":[{\"details\":\"The royalty set for a specific `tokenId` is invalid (eg. (numerator / denominator) >= 1).\"}],\"ERC2981InvalidTokenRoyaltyReceiver(uint256,address)\":[{\"details\":\"The royalty receiver for `tokenId` is invalid.\"}],\"ERC721IncorrectOwner(address,uint256,address)\":[{\"details\":\"Indicates an error related to the ownership over a particular token. Used in transfers.\",\"params\":{\"owner\":\"Address of the current owner of a token.\",\"sender\":\"Address whose tokens are being transferred.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC721InsufficientApproval(address,uint256)\":[{\"details\":\"Indicates a failure with the `operator`\\u2019s approval. Used in transfers.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC721InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC721InvalidOperator(address)\":[{\"details\":\"Indicates a failure with the `operator` to be approved. Used in approvals.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC721InvalidOwner(address)\":[{\"details\":\"Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-721. Used in balance queries.\",\"params\":{\"owner\":\"Address of the current owner of a token.\"}}],\"ERC721InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC721InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC721NonexistentToken(uint256)\":[{\"details\":\"Indicates a `tokenId` whose `owner` is the zero address.\",\"params\":{\"tokenId\":\"Identifier number of a token.\"}}],\"EnforcedPause()\":[{\"details\":\"The operation failed because the contract is paused.\"}],\"ExpectedPause()\":[{\"details\":\"The operation failed because the contract is not paused.\"}],\"SafeCastOverflowedUintDowncast(uint8,uint256)\":[{\"details\":\"Value doesn't fit in a uint of `bits` size.\"}]},\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when `owner` enables `approved` to manage the `tokenId` token.\"},\"ApprovalForAll(address,address,bool)\":{\"details\":\"Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\"},\"DefaultAdminDelayChangeCanceled()\":{\"details\":\"Emitted when a {pendingDefaultAdminDelay} is reset if its schedule didn't pass.\"},\"DefaultAdminDelayChangeScheduled(uint48,uint48)\":{\"details\":\"Emitted when a {defaultAdminDelay} change is started, setting `newDelay` as the next delay to be applied between default admin transfer after `effectSchedule` has passed.\"},\"DefaultAdminTransferCanceled()\":{\"details\":\"Emitted when a {pendingDefaultAdmin} is reset if it was never accepted, regardless of its schedule.\"},\"DefaultAdminTransferScheduled(address,uint48)\":{\"details\":\"Emitted when a {defaultAdmin} transfer is started, setting `newAdmin` as the next address to become the {defaultAdmin} by calling {acceptDefaultAdminTransfer} only after `acceptSchedule` passes.\"},\"Paused(address)\":{\"details\":\"Emitted when the pause is triggered by `account`.\"},\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted to signal this.\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call. This account bears the admin role (for the granted role). Expected in cases where the role was granted using the internal {AccessControl-_grantRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `tokenId` token is transferred from `from` to `to`.\"},\"Unpaused(address)\":{\"details\":\"Emitted when the pause is lifted by `account`.\"}},\"kind\":\"dev\",\"methods\":{\"acceptDefaultAdminTransfer()\":{\"details\":\"Completes a {defaultAdmin} transfer previously started with {beginDefaultAdminTransfer}. After calling the function: - `DEFAULT_ADMIN_ROLE` should be granted to the caller. - `DEFAULT_ADMIN_ROLE` should be revoked from the previous holder. - {pendingDefaultAdmin} should be reset to zero values. Requirements: - Only can be called by the {pendingDefaultAdmin}'s `newAdmin`. - The {pendingDefaultAdmin}'s `acceptSchedule` should've passed.\"},\"approve(address,uint256)\":{\"details\":\"Gives permission to `to` to transfer `tokenId` token to another account. The approval is cleared when the token is transferred. Only a single account can be approved at a time, so approving the zero address clears previous approvals. Requirements: - The caller must own the token or be an approved operator. - `tokenId` must exist. Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the number of tokens in ``owner``'s account.\"},\"beginDefaultAdminTransfer(address)\":{\"details\":\"Starts a {defaultAdmin} transfer by setting a {pendingDefaultAdmin} scheduled for acceptance after the current timestamp plus a {defaultAdminDelay}. Requirements: - Only can be called by the current {defaultAdmin}. Emits a {DefaultAdminTransferScheduled} event.\"},\"cancelDefaultAdminTransfer()\":{\"details\":\"Cancels a {defaultAdmin} transfer previously started with {beginDefaultAdminTransfer}. A {pendingDefaultAdmin} not yet accepted can also be cancelled with this function. Requirements: - Only can be called by the current {defaultAdmin}. May emit a {DefaultAdminTransferCanceled} event.\"},\"changeDefaultAdminDelay(uint48)\":{\"details\":\"Initiates a {defaultAdminDelay} update by setting a {pendingDefaultAdminDelay} scheduled for getting into effect after the current timestamp plus a {defaultAdminDelay}. This function guarantees that any call to {beginDefaultAdminTransfer} done between the timestamp this method is called and the {pendingDefaultAdminDelay} effect schedule will use the current {defaultAdminDelay} set before calling. The {pendingDefaultAdminDelay}'s effect schedule is defined in a way that waiting until the schedule and then calling {beginDefaultAdminTransfer} with the new delay will take at least the same as another {defaultAdmin} complete transfer (including acceptance). The schedule is designed for two scenarios: - When the delay is changed for a larger one the schedule is `block.timestamp + newDelay` capped by {defaultAdminDelayIncreaseWait}. - When the delay is changed for a shorter one, the schedule is `block.timestamp + (current delay - new delay)`. A {pendingDefaultAdminDelay} that never got into effect will be canceled in favor of a new scheduled change. Requirements: - Only can be called by the current {defaultAdmin}. Emits a {DefaultAdminDelayChangeScheduled} event and may emit a {DefaultAdminDelayChangeCanceled} event.\"},\"constructor\":{\"params\":{\"baseURI_\":\"Base URI for token metadata (appended with tokenId)\",\"contractMetadataURI_\":\"URI for OpenSea collection-level metadata\",\"defaultAdminDelay_\":\"Delay in seconds for default-admin transfers\",\"initialAdmin_\":\"Initial default administrator\",\"initialMinter_\":\"Initial account authorized to mint\",\"name_\":\"ERC-721 collection name\",\"royaltyFeeBasisPoints_\":\"Royalty fee in basis points (10 000 = 100%)\",\"royaltyReceiver_\":\"Address that receives royalty payments\",\"symbol_\":\"ERC-721 collection symbol\"}},\"defaultAdmin()\":{\"details\":\"Returns the address of the current `DEFAULT_ADMIN_ROLE` holder.\"},\"defaultAdminDelay()\":{\"details\":\"Returns the delay required to schedule the acceptance of a {defaultAdmin} transfer started. This delay will be added to the current timestamp when calling {beginDefaultAdminTransfer} to set the acceptance schedule. NOTE: If a delay change has been scheduled, it will take effect as soon as the schedule passes, making this function returns the new delay. See {changeDefaultAdminDelay}.\"},\"defaultAdminDelayIncreaseWait()\":{\"details\":\"Maximum time in seconds for an increase to {defaultAdminDelay} (that is scheduled using {changeDefaultAdminDelay}) to take effect. Default to 5 days. When the {defaultAdminDelay} is scheduled to be increased, it goes into effect after the new delay has passed with the purpose of giving enough time for reverting any accidental change (i.e. using milliseconds instead of seconds) that may lock the contract. However, to avoid excessive schedules, the wait is capped by this function and it can be overridden for a custom {defaultAdminDelay} increase scheduling. IMPORTANT: Make sure to add a reasonable amount of time while overriding this value, otherwise, there's a risk of setting a high new delay that goes into effect almost immediately without the possibility of human intervention in the case of an input error (eg. set milliseconds instead of seconds).\"},\"getApproved(uint256)\":{\"details\":\"Returns the account approved for `tokenId` token. Requirements: - `tokenId` must exist.\"},\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"grantRole(bytes32,address)\":{\"details\":\"See {AccessControl-grantRole}. Reverts for `DEFAULT_ADMIN_ROLE`.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"isApprovedForAll(address,address)\":{\"details\":\"Returns if the `operator` is allowed to manage all of the assets of `owner`. See {setApprovalForAll}\"},\"name()\":{\"details\":\"Returns the token collection name.\"},\"owner()\":{\"details\":\"Gets the address of the owner.\"},\"ownerOf(uint256)\":{\"details\":\"Returns the owner of the `tokenId` token. Requirements: - `tokenId` must exist.\"},\"paused()\":{\"details\":\"Returns true if the contract is paused, and false otherwise.\"},\"pendingDefaultAdmin()\":{\"details\":\"Returns a tuple of a `newAdmin` and an accept schedule. After the `schedule` passes, the `newAdmin` will be able to accept the {defaultAdmin} role by calling {acceptDefaultAdminTransfer}, completing the role transfer. A zero value only in `acceptSchedule` indicates no pending admin transfer. NOTE: A zero address `newAdmin` means that {defaultAdmin} is being renounced.\"},\"pendingDefaultAdminDelay()\":{\"details\":\"Returns a tuple of `newDelay` and an effect schedule. After the `schedule` passes, the `newDelay` will get into effect immediately for every new {defaultAdmin} transfer started with {beginDefaultAdminTransfer}. A zero value only in `effectSchedule` indicates no pending delay change. NOTE: A zero value only for `newDelay` means that the next {defaultAdminDelay} will be zero after the effect schedule.\"},\"renounceRole(bytes32,address)\":{\"details\":\"See {AccessControl-renounceRole}. For the `DEFAULT_ADMIN_ROLE`, it only allows renouncing in two steps by first calling {beginDefaultAdminTransfer} to the `address(0)`, so it's required that the {pendingDefaultAdmin} schedule has also passed when calling this function. After its execution, it will not be possible to call `onlyRole(DEFAULT_ADMIN_ROLE)` functions. NOTE: Renouncing `DEFAULT_ADMIN_ROLE` will leave the contract without a {defaultAdmin}, thereby disabling any functionality that is only available for it, and the possibility of reassigning a non-administrated role.\"},\"revokeRole(bytes32,address)\":{\"details\":\"See {AccessControl-revokeRole}. Reverts for `DEFAULT_ADMIN_ROLE`.\"},\"rollbackDefaultAdminDelay()\":{\"details\":\"Cancels a scheduled {defaultAdminDelay} change. Requirements: - Only can be called by the current {defaultAdmin}. May emit a {DefaultAdminDelayChangeCanceled} event.\"},\"royaltyInfo(uint256,uint256)\":{\"details\":\"Returns how much royalty is owed and to whom, based on a sale price that may be denominated in any unit of exchange. The royalty amount is denominated and should be paid in that same unit of exchange. NOTE: ERC-2981 allows setting the royalty to 100% of the price. In that case all the price would be sent to the royalty receiver and 0 tokens to the seller. Contracts dealing with royalty should consider empty transfers.\"},\"safeMint(address,uint256)\":{\"params\":{\"to\":\"Recipient address for the minted token.\",\"tokenId\":\"Token ID to mint. Must not already exist.\"}},\"safeTransferFrom(address,address,uint256)\":{\"details\":\"Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients are aware of the ERC-721 protocol to prevent tokens from being forever locked. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must exist and be owned by `from`. - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. Emits a {Transfer} event.\"},\"safeTransferFrom(address,address,uint256,bytes)\":{\"details\":\"Safely transfers `tokenId` token from `from` to `to`. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must exist and be owned by `from`. - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. Emits a {Transfer} event.\"},\"setApprovalForAll(address,bool)\":{\"details\":\"Approve or remove `operator` as an operator for the caller. Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. Requirements: - The `operator` cannot be the address zero. Emits an {ApprovalForAll} event.\"},\"setBaseURI(string)\":{\"params\":{\"baseURI_\":\"New base URI string.\"}},\"setContractURI(string)\":{\"params\":{\"contractMetadataURI_\":\"New collection metadata URI.\"}},\"setRoyaltyInfo(address,uint96)\":{\"params\":{\"feeBasisPoints\":\"Royalty fee in basis points (10 000 = 100%).\",\"receiver\":\"Address that receives royalty payments.\"}},\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"},\"symbol()\":{\"details\":\"Returns the token collection symbol.\"},\"tokenURI(uint256)\":{\"details\":\"Returns the Uniform Resource Identifier (URI) for `tokenId` token.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Transfers `tokenId` token from `from` to `to`. WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC-721 or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must understand this adds an external call which potentially creates a reentrancy vulnerability. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must be owned by `from`. - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. Emits a {Transfer} event.\"}},\"title\":\"TricksforBoosterNFT\",\"version\":1},\"userdoc\":{\"errors\":{\"ZeroAddress()\":[{\"notice\":\"Zero address supplied where a non-zero address is required.\"}]},\"kind\":\"user\",\"methods\":{\"MINTER_ROLE()\":{\"notice\":\"Role that authorizes an account to call safeMint.\"},\"baseURI()\":{\"notice\":\"Returns the base URI used to construct token metadata URLs.\"},\"contractURI()\":{\"notice\":\"Returns the collection-level metadata URI (OpenSea extension).\"},\"pause()\":{\"notice\":\"Pauses minting. Does not affect transfers.\"},\"safeMint(address,uint256)\":{\"notice\":\"Mints a token with the given ID to the specified address. The caller must hold MINTER_ROLE. Reverts when paused.\"},\"setBaseURI(string)\":{\"notice\":\"Updates the base URI used to construct per-token metadata URIs.\"},\"setContractURI(string)\":{\"notice\":\"Updates the collection-level metadata URI (OpenSea contractURI extension).\"},\"setRoyaltyInfo(address,uint96)\":{\"notice\":\"Updates the default royalty receiver and fee for all tokens.\"},\"unpause()\":{\"notice\":\"Unpauses minting.\"}},\"notice\":\"ERC-721 NFT collection for Tricksfor Booster items. OpenSea-compatible: supports tokenURI, contractURI, and ERC-2981 royalties. Minting is role-gated (MINTER_ROLE) and can be paused by the default admin.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/TricksforBoosterNFT.sol\":\"TricksforBoosterNFT\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/AccessControl.sol\":{\"keccak256\":\"0x4686ec784d75f95beaf2bf5b5f26e5f946d4c864aaee9c3c62bdc18381f5e017\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://26710ca191913f3c9df542079c4a6dcff02968e92d4f7357daefef9fbe72a19c\",\"dweb:/ipfs/QmanHbeWuBbVEqXySHa1zhm2rExjYpChDBubBaJNTCa2JB\"]},\"@openzeppelin/contracts/access/IAccessControl.sol\":{\"keccak256\":\"0xbff9f59c84e5337689161ce7641c0ef8e872d6a7536fbc1f5133f128887aba3c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b308f882e796f7b79c9502deacb0a62983035c6f6f4e962b319ba6a1f4a77d3d\",\"dweb:/ipfs/QmaWCW7ahEQqFjwhSUhV7Ae7WhfNvzSpE7DQ58hvEooqPL\"]},\"@openzeppelin/contracts/access/extensions/AccessControlDefaultAdminRules.sol\":{\"keccak256\":\"0x5e57537d20a1706f81517842eb09b48a564d5cfc15131537bef76d9c8c100938\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c08027cac4185cca5bd35924409cb91aaa43a3fd5629d80c65edbab7c4ee2671\",\"dweb:/ipfs/QmYEhwh5mQZ5NqCaqUm2qLJ1NLcRpwEz87MM7bzXrtCfvD\"]},\"@openzeppelin/contracts/access/extensions/IAccessControlDefaultAdminRules.sol\":{\"keccak256\":\"0x5d8c755a8bfec7cb44cff075c206d642478ebc10c780494bc540cf90f3f25771\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a18c2615920ab40a406d658dc7d9f0df0447eddf7c689b29720243a623fea72e\",\"dweb:/ipfs/QmXqCRrcx9A5MhBojvSEsiGhqKDnJjfVaJuF7by3YsKWwf\"]},\"@openzeppelin/contracts/interfaces/IERC2981.sol\":{\"keccak256\":\"0xafab0e6c71905303c47dd254168cb31efc91f0ae284cde609b0202f97f85469e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://824d05aec56eb82a2a3c28eece530dc0792d3a008b09d01444e57cf4aceb0445\",\"dweb:/ipfs/QmVvqmJ5UobuRU9Q4JMyXxBfzKs2cpjbWXMNpxX4binTX8\"]},\"@openzeppelin/contracts/interfaces/IERC5313.sol\":{\"keccak256\":\"0x21529ba6918f994ec44fb97cef2b717d730268e911a4e626f3e425a4394f7bae\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://10949be539eb61e5ea8996cc93f21be61949c16a1b717adc2b3f8f099c1e1feb\",\"dweb:/ipfs/QmagATozhFXBUVTLaiHWyqVPgew9N1x18V6hBF46AZPeLw\"]},\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x1b88b3fb3d85ba5496d7d5f396f83ee1fddcdd6762059ff65992655b67920998\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://89393bb3212da1c0889601b9706a07b39419ddc4d2faab9eaf6e7f9152cf6a1c\",\"dweb:/ipfs/QmcCfzzxv1Bkdz1c1yF4gQCeYb6Us5BJANnzTFqawfd1HL\"]},\"@openzeppelin/contracts/token/ERC721/ERC721.sol\":{\"keccak256\":\"0xf6bb0dc431a9c50e25756412ec14cfcd4dc61dd40b8dc0e1b58ec09fce6d5564\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eb87fef7e8ed754b8600cd5d42e4f23128059006368ffd19e4d50cc166471ee5\",\"dweb:/ipfs/Qmc1vy1cevKreGUsG7S79gyhNvDtPnNz9qG47eYVHmMKLs\"]},\"@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0xf78f05f3b8c9f75570e85300d7b4600d7f6f6a198449273f31d44c1641adb46f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e28b872613b45e0e801d4995aa4380be2531147bfe2d85c1d6275f1de514fba3\",\"dweb:/ipfs/QmeeFcfShHYaS3BdgVj78nxR28ZaVUwbvr66ud8bT6kzw9\"]},\"@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol\":{\"keccak256\":\"0x88cd5e3bee2e8c36b8d9058fbcaa81ad5704281b25634122234b55ea853d8055\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8dc7e7ab5b8ea36c15027ab04221b05d1c970f47a53e9fd47ead8ca665d49c7e\",\"dweb:/ipfs/Qmeeph7fsDyfRr8vb2L8KcDEmKPb224TAayMvgqgGAnqpL\"]},\"@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol\":{\"keccak256\":\"0xf46268c37522320bb2119a5a394bc5c739a95c0c574c8d08e8c643f4d06e5c76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://517e4b295f35b9947c72ad7379a6089439ece7bb6f4a2ea0a159da13046c039e\",\"dweb:/ipfs/QmZXzkSfLUbvujig3zVbpDHykpHhqLpvQtdiN3B5j4TA3u\"]},\"@openzeppelin/contracts/token/ERC721/utils/ERC721Utils.sol\":{\"keccak256\":\"0xc7efbc23214ad7dced8bf2249460f4bda114d57f6a0079f84040654280f455bd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1f5bd44efca8c8c0d74439e7b808d1f9c4af1df78f91fef8e8bbca8104645435\",\"dweb:/ipfs/Qmb42XSd8MKsEitp42sZkSFGqDRigk6QgGXtiJyJqUZJJ6\"]},\"@openzeppelin/contracts/token/common/ERC2981.sol\":{\"keccak256\":\"0xa33062c6e0675a74a27b06a4ae4c6ad4d3b7219e27d9c146a4ac57295096d393\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://777543d88013fdd0ee7f47ac619fb13a1993bb667675d8816fde024f73cfbf2d\",\"dweb:/ipfs/QmfDS9uL1XZ2oUe1PH8eRCRyu3Hf98cK8ksGf4Ww7kg5zv\"]},\"@openzeppelin/contracts/utils/Bytes.sol\":{\"keccak256\":\"0xf80e4b96b6849936ea0fabd76cf81b13d7276295fddb1e1c07afb3ddf650b0ac\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6430007255ac11c6e9c4331a418f3af52ff66fbbae959f645301d025b20aeb08\",\"dweb:/ipfs/QmQE5fjmBBRw9ndnzJuC2uskYss1gbaR7JdazoCf1FGoBj\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"@openzeppelin/contracts/utils/Pausable.sol\":{\"keccak256\":\"0xdb484371dfbb848cb6f5d70464e9ac9b2900e4164ead76bbce4fef0b44bcc68f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f9d6f6f6600a2bec622f699081b58350873b5e63ce05464d17d674a290bb8a7c\",\"dweb:/ipfs/QmQKVzSQY1PM3Bid4QhgVVZyx6B4Jx7XgaQzLKHj38vJz8\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x1fdc2de9585ab0f1c417f02a873a2b6343cd64bb7ffec6b00ffa11a4a158d9e8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1ab223a3d969c6cd7610049431dd42740960c477e45878f5d8b54411f7a32bdc\",\"dweb:/ipfs/QmWumhjvhpKcwx3vDPQninsNVTc3BGvqaihkQakFkQYpaS\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0x2d9dc2fe26180f74c11c13663647d38e259e45f95eb88f57b61d2160b0109d3e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://81233d1f98060113d9922180bb0f14f8335856fe9f339134b09335e9f678c377\",\"dweb:/ipfs/QmWh6R35SarhAn4z2wH8SU456jJSYL2FgucfTFgbHJJN4E\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617\",\"dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x59973a93b1f983f94e10529f46ca46544a9fec2b5f56fb1390bbe9e0dc79f857\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c55ef8f0b9719790c2ae6f81d80a59ffb89f2f0abe6bc065585bd79edce058c5\",\"dweb:/ipfs/QmNNmCbX9NjPXKqHJN8R1WC2rNeZSQrPZLd6FF6AKLyH5Y\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0xc8cae21c9ae4a46e5162ff9bf5b351d6fa6a6eba72d515f3bc1bdfeda7fdf083\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce830ebcf28e31643caba318996db3763c36d52cd0f23798ba83c135355d45e9\",\"dweb:/ipfs/QmdGPcvptHN7UBCbUYBbRX3hiRVRFLRwno8b4uga6uFNif\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03\",\"dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ\"]},\"contracts/TricksforBoosterNFT.sol\":{\"keccak256\":\"0xe7b1cd6fa5ee826a82886d54569dd7854bec75f87f106f22f3916c9b9fca2d00\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://50dacb0d084ddf99e5aaba291ea16c86cc625424997e0c0cf31fc203548ae3e4\",\"dweb:/ipfs/QmZdeLwbFpp4STJxq9hdhwSR3oKT4swV8mht4fkiUHLhT4\"]}},\"version\":1}","storageLayout":{"storage":[{"astId":1630,"contract":"contracts/TricksforBoosterNFT.sol:TricksforBoosterNFT","label":"_name","offset":0,"slot":"0","type":"t_string_storage"},{"astId":1632,"contract":"contracts/TricksforBoosterNFT.sol:TricksforBoosterNFT","label":"_symbol","offset":0,"slot":"1","type":"t_string_storage"},{"astId":1636,"contract":"contracts/TricksforBoosterNFT.sol:TricksforBoosterNFT","label":"_owners","offset":0,"slot":"2","type":"t_mapping(t_uint256,t_address)"},{"astId":1640,"contract":"contracts/TricksforBoosterNFT.sol:TricksforBoosterNFT","label":"_balances","offset":0,"slot":"3","type":"t_mapping(t_address,t_uint256)"},{"astId":1644,"contract":"contracts/TricksforBoosterNFT.sol:TricksforBoosterNFT","label":"_tokenApprovals","offset":0,"slot":"4","type":"t_mapping(t_uint256,t_address)"},{"astId":1650,"contract":"contracts/TricksforBoosterNFT.sol:TricksforBoosterNFT","label":"_operatorApprovals","offset":0,"slot":"5","type":"t_mapping(t_address,t_mapping(t_address,t_bool))"},{"astId":2829,"contract":"contracts/TricksforBoosterNFT.sol:TricksforBoosterNFT","label":"_defaultRoyaltyInfo","offset":0,"slot":"6","type":"t_struct(RoyaltyInfo)2826_storage"},{"astId":2834,"contract":"contracts/TricksforBoosterNFT.sol:TricksforBoosterNFT","label":"_tokenRoyaltyInfo","offset":0,"slot":"7","type":"t_mapping(t_uint256,t_struct(RoyaltyInfo)2826_storage)"},{"astId":26,"contract":"contracts/TricksforBoosterNFT.sol:TricksforBoosterNFT","label":"_roles","offset":0,"slot":"8","type":"t_mapping(t_bytes32,t_struct(RoleData)21_storage)"},{"astId":636,"contract":"contracts/TricksforBoosterNFT.sol:TricksforBoosterNFT","label":"_pendingDefaultAdmin","offset":0,"slot":"9","type":"t_address"},{"astId":638,"contract":"contracts/TricksforBoosterNFT.sol:TricksforBoosterNFT","label":"_pendingDefaultAdminSchedule","offset":20,"slot":"9","type":"t_uint48"},{"astId":640,"contract":"contracts/TricksforBoosterNFT.sol:TricksforBoosterNFT","label":"_currentDelay","offset":26,"slot":"9","type":"t_uint48"},{"astId":642,"contract":"contracts/TricksforBoosterNFT.sol:TricksforBoosterNFT","label":"_currentDefaultAdmin","offset":0,"slot":"10","type":"t_address"},{"astId":644,"contract":"contracts/TricksforBoosterNFT.sol:TricksforBoosterNFT","label":"_pendingDelay","offset":20,"slot":"10","type":"t_uint48"},{"astId":646,"contract":"contracts/TricksforBoosterNFT.sol:TricksforBoosterNFT","label":"_pendingDelaySchedule","offset":26,"slot":"10","type":"t_uint48"},{"astId":3968,"contract":"contracts/TricksforBoosterNFT.sol:TricksforBoosterNFT","label":"_paused","offset":0,"slot":"11","type":"t_bool"},{"astId":9460,"contract":"contracts/TricksforBoosterNFT.sol:TricksforBoosterNFT","label":"_baseTokenURI","offset":0,"slot":"12","type":"t_string_storage"},{"astId":9462,"contract":"contracts/TricksforBoosterNFT.sol:TricksforBoosterNFT","label":"_contractMetadataURI","offset":0,"slot":"13","type":"t_string_storage"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_mapping(t_address,t_bool)":{"encoding":"mapping","key":"t_address","label":"mapping(address => bool)","numberOfBytes":"32","value":"t_bool"},"t_mapping(t_address,t_mapping(t_address,t_bool))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => bool))","numberOfBytes":"32","value":"t_mapping(t_address,t_bool)"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_mapping(t_bytes32,t_struct(RoleData)21_storage)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => struct AccessControl.RoleData)","numberOfBytes":"32","value":"t_struct(RoleData)21_storage"},"t_mapping(t_uint256,t_address)":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => address)","numberOfBytes":"32","value":"t_address"},"t_mapping(t_uint256,t_struct(RoyaltyInfo)2826_storage)":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => struct ERC2981.RoyaltyInfo)","numberOfBytes":"32","value":"t_struct(RoyaltyInfo)2826_storage"},"t_string_storage":{"encoding":"bytes","label":"string","numberOfBytes":"32"},"t_struct(RoleData)21_storage":{"encoding":"inplace","label":"struct AccessControl.RoleData","members":[{"astId":18,"contract":"contracts/TricksforBoosterNFT.sol:TricksforBoosterNFT","label":"hasRole","offset":0,"slot":"0","type":"t_mapping(t_address,t_bool)"},{"astId":20,"contract":"contracts/TricksforBoosterNFT.sol:TricksforBoosterNFT","label":"adminRole","offset":0,"slot":"1","type":"t_bytes32"}],"numberOfBytes":"64"},"t_struct(RoyaltyInfo)2826_storage":{"encoding":"inplace","label":"struct ERC2981.RoyaltyInfo","members":[{"astId":2823,"contract":"contracts/TricksforBoosterNFT.sol:TricksforBoosterNFT","label":"receiver","offset":0,"slot":"0","type":"t_address"},{"astId":2825,"contract":"contracts/TricksforBoosterNFT.sol:TricksforBoosterNFT","label":"royaltyFraction","offset":20,"slot":"0","type":"t_uint96"}],"numberOfBytes":"32"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint48":{"encoding":"inplace","label":"uint48","numberOfBytes":"6"},"t_uint96":{"encoding":"inplace","label":"uint96","numberOfBytes":"12"}}},"userdoc":{"errors":{"ZeroAddress()":[{"notice":"Zero address supplied where a non-zero address is required."}]},"kind":"user","methods":{"MINTER_ROLE()":{"notice":"Role that authorizes an account to call safeMint."},"baseURI()":{"notice":"Returns the base URI used to construct token metadata URLs."},"contractURI()":{"notice":"Returns the collection-level metadata URI (OpenSea extension)."},"pause()":{"notice":"Pauses minting. Does not affect transfers."},"safeMint(address,uint256)":{"notice":"Mints a token with the given ID to the specified address. The caller must hold MINTER_ROLE. Reverts when paused."},"setBaseURI(string)":{"notice":"Updates the base URI used to construct per-token metadata URIs."},"setContractURI(string)":{"notice":"Updates the collection-level metadata URI (OpenSea contractURI extension)."},"setRoyaltyInfo(address,uint96)":{"notice":"Updates the default royalty receiver and fee for all tokens."},"unpause()":{"notice":"Unpauses minting."}},"notice":"ERC-721 NFT collection for Tricksfor Booster items. OpenSea-compatible: supports tokenURI, contractURI, and ERC-2981 royalties. Minting is role-gated (MINTER_ROLE) and can be paused by the default admin.","version":1}}},"contracts/TricksforBoosterStaking.sol":{"TricksforBoosterStaking":{"abi":[{"inputs":[{"internalType":"address","name":"nftContract_","type":"address"},{"internalType":"address","name":"initialOwner_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"EnforcedPause","type":"error"},{"inputs":[],"name":"ExpectedPause","type":"error"},{"inputs":[],"name":"InvalidEmergencyRecipient","type":"error"},{"inputs":[],"name":"NotOriginalStaker","type":"error"},{"inputs":[],"name":"NotTokenOwner","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"inputs":[],"name":"TokenAlreadyStaked","type":"error"},{"inputs":[],"name":"TokenIsTracked","type":"error"},{"inputs":[],"name":"TokenNotHeld","type":"error"},{"inputs":[],"name":"TokenNotStaked","type":"error"},{"inputs":[],"name":"UnsupportedNFTContract","type":"error"},{"inputs":[],"name":"ZeroAddress","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"originalStaker","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"withdrawnAt","type":"uint256"}],"name":"EmergencyWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"staker","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"stakedAt","type":"uint256"}],"name":"TokenStaked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"staker","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"unstakedAt","type":"uint256"}],"name":"TokenUnstaked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"rescuedAt","type":"uint256"}],"name":"UntrackedTokenRescued","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"}],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"getWalletStakedTokens","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"isStaked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftContract","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"}],"name":"rescueUntrackedToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"stakedAtOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"stakedOwnerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"details":"Pause gates new staking only. Unstaking is always available so players can always recover their assets. emergencyWithdraw is an explicit, named, and event-emitting admin path — it is not hidden.","errors":{"EnforcedPause()":[{"details":"The operation failed because the contract is paused."}],"ExpectedPause()":[{"details":"The operation failed because the contract is not paused."}],"OwnableInvalidOwner(address)":[{"details":"The owner is not a valid owner account. (eg. `address(0)`)"}],"OwnableUnauthorizedAccount(address)":[{"details":"The caller account is not authorized to perform an operation."}],"ReentrancyGuardReentrantCall()":[{"details":"Unauthorized reentrant call."}]},"events":{"EmergencyWithdrawn(address,uint256,address,uint256)":{"params":{"originalStaker":"The wallet that originally staked the token.","recipient":"The address that received the token.","tokenId":"The affected NFT token ID.","withdrawnAt":"Block timestamp at the moment of the withdrawal."}},"Paused(address)":{"details":"Emitted when the pause is triggered by `account`."},"TokenStaked(address,uint256,uint256)":{"params":{"stakedAt":"Block timestamp at the moment of staking.","staker":"The wallet address that owns and staked the token.","tokenId":"The staked NFT token ID."}},"TokenUnstaked(address,uint256,uint256)":{"params":{"staker":"The wallet address that originally staked (and receives back) the token.","tokenId":"The unstaked NFT token ID.","unstakedAt":"Block timestamp at the moment of unstaking."}},"Unpaused(address)":{"details":"Emitted when the pause is lifted by `account`."}},"kind":"dev","methods":{"acceptOwnership()":{"details":"The new owner accepts the ownership transfer."},"constructor":{"params":{"initialOwner_":"Initial contract owner. Mainnet deployments should use a multisig.","nftContract_":"Address of the TricksforBoosterNFT contract."}},"emergencyWithdraw(uint256,address)":{"params":{"recipient":"The address to send the token to.","tokenId":"The token ID to withdraw."}},"getWalletStakedTokens(address)":{"details":"Ordering is not guaranteed. Tokens are stored in an array with swap-and-pop removal: when a token is unstaked or emergency-withdrawn, the last element in the array takes its position. Do not rely on index stability across state-changing transactions.","params":{"wallet":"The address to query."}},"isStaked(uint256)":{"params":{"tokenId":"The token ID to query."}},"onERC721Received(address,address,uint256,bytes)":{"params":{"from":"The address that previously owned the token (recorded as staker).","tokenId":"The token ID being transferred."},"returns":{"_0":"The ERC-721 receiver magic value confirming acceptance."}},"owner()":{"details":"Returns the address of the current owner."},"paused()":{"details":"Returns true if the contract is paused, and false otherwise."},"pendingOwner()":{"details":"Returns the address of the pending owner."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."},"rescueUntrackedToken(uint256,address)":{"params":{"recipient":"The non-zero address that receives the recovered token.","tokenId":"The untracked token held by this contract."}},"stake(uint256)":{"params":{"tokenId":"The token ID to stake."}},"stakedAtOf(uint256)":{"params":{"tokenId":"The token ID to query."}},"stakedOwnerOf(uint256)":{"params":{"tokenId":"The token ID to query."}},"transferOwnership(address)":{"details":"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner. Setting `newOwner` to the zero address is allowed; this can be used to cancel an initiated ownership transfer."},"unstake(uint256)":{"params":{"tokenId":"The token ID to unstake."}}},"stateVariables":{"_stakedAt":{"details":"Maps tokenId → block.timestamp at which the token was staked."},"_stakedBy":{"details":"Maps tokenId → original staker address. Zero address means not staked."},"_walletTokenIds":{"details":"Maps staker address → list of currently staked token IDs."},"_walletTokenIndex":{"details":"Maps tokenId → index in _walletTokenIds[staker] for O(1) removal."}},"title":"TricksforBoosterStaking","version":1},"evm":{"bytecode":{"functionDebugData":{"@_4099":{"entryPoint":null,"id":4099,"parameterSlots":0,"returnSlots":0},"@_429":{"entryPoint":null,"id":429,"parameterSlots":1,"returnSlots":0},"@_9844":{"entryPoint":null,"id":9844,"parameterSlots":2,"returnSlots":0},"@_reentrancyGuardStorageSlot_4179":{"entryPoint":null,"id":4179,"parameterSlots":0,"returnSlots":1},"@_transferOwnership_525":{"entryPoint":243,"id":525,"parameterSlots":1,"returnSlots":0},"@_transferOwnership_587":{"entryPoint":215,"id":587,"parameterSlots":1,"returnSlots":0},"@getUint256Slot_4248":{"entryPoint":null,"id":4248,"parameterSlots":1,"returnSlots":1},"abi_decode_address_fromMemory":{"entryPoint":322,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_addresst_address_fromMemory":{"entryPoint":349,"id":null,"parameterSlots":2,"returnSlots":2},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1}},"generatedSources":[{"ast":{"nativeSrc":"0:699:30","nodeType":"YulBlock","src":"0:699:30","statements":[{"nativeSrc":"6:3:30","nodeType":"YulBlock","src":"6:3:30","statements":[]},{"body":{"nativeSrc":"74:117:30","nodeType":"YulBlock","src":"74:117:30","statements":[{"nativeSrc":"84:22:30","nodeType":"YulAssignment","src":"84:22:30","value":{"arguments":[{"name":"offset","nativeSrc":"99:6:30","nodeType":"YulIdentifier","src":"99:6:30"}],"functionName":{"name":"mload","nativeSrc":"93:5:30","nodeType":"YulIdentifier","src":"93:5:30"},"nativeSrc":"93:13:30","nodeType":"YulFunctionCall","src":"93:13:30"},"variableNames":[{"name":"value","nativeSrc":"84:5:30","nodeType":"YulIdentifier","src":"84:5:30"}]},{"body":{"nativeSrc":"169:16:30","nodeType":"YulBlock","src":"169:16:30","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"178:1:30","nodeType":"YulLiteral","src":"178:1:30","type":"","value":"0"},{"kind":"number","nativeSrc":"181:1:30","nodeType":"YulLiteral","src":"181:1:30","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"171:6:30","nodeType":"YulIdentifier","src":"171:6:30"},"nativeSrc":"171:12:30","nodeType":"YulFunctionCall","src":"171:12:30"},"nativeSrc":"171:12:30","nodeType":"YulExpressionStatement","src":"171:12:30"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"128:5:30","nodeType":"YulIdentifier","src":"128:5:30"},{"arguments":[{"name":"value","nativeSrc":"139:5:30","nodeType":"YulIdentifier","src":"139:5:30"},{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"154:3:30","nodeType":"YulLiteral","src":"154:3:30","type":"","value":"160"},{"kind":"number","nativeSrc":"159:1:30","nodeType":"YulLiteral","src":"159:1:30","type":"","value":"1"}],"functionName":{"name":"shl","nativeSrc":"150:3:30","nodeType":"YulIdentifier","src":"150:3:30"},"nativeSrc":"150:11:30","nodeType":"YulFunctionCall","src":"150:11:30"},{"kind":"number","nativeSrc":"163:1:30","nodeType":"YulLiteral","src":"163:1:30","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"146:3:30","nodeType":"YulIdentifier","src":"146:3:30"},"nativeSrc":"146:19:30","nodeType":"YulFunctionCall","src":"146:19:30"}],"functionName":{"name":"and","nativeSrc":"135:3:30","nodeType":"YulIdentifier","src":"135:3:30"},"nativeSrc":"135:31:30","nodeType":"YulFunctionCall","src":"135:31:30"}],"functionName":{"name":"eq","nativeSrc":"125:2:30","nodeType":"YulIdentifier","src":"125:2:30"},"nativeSrc":"125:42:30","nodeType":"YulFunctionCall","src":"125:42:30"}],"functionName":{"name":"iszero","nativeSrc":"118:6:30","nodeType":"YulIdentifier","src":"118:6:30"},"nativeSrc":"118:50:30","nodeType":"YulFunctionCall","src":"118:50:30"},"nativeSrc":"115:70:30","nodeType":"YulIf","src":"115:70:30"}]},"name":"abi_decode_address_fromMemory","nativeSrc":"14:177:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"53:6:30","nodeType":"YulTypedName","src":"53:6:30","type":""}],"returnVariables":[{"name":"value","nativeSrc":"64:5:30","nodeType":"YulTypedName","src":"64:5:30","type":""}],"src":"14:177:30"},{"body":{"nativeSrc":"294:195:30","nodeType":"YulBlock","src":"294:195:30","statements":[{"body":{"nativeSrc":"340:16:30","nodeType":"YulBlock","src":"340:16:30","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"349:1:30","nodeType":"YulLiteral","src":"349:1:30","type":"","value":"0"},{"kind":"number","nativeSrc":"352:1:30","nodeType":"YulLiteral","src":"352:1:30","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"342:6:30","nodeType":"YulIdentifier","src":"342:6:30"},"nativeSrc":"342:12:30","nodeType":"YulFunctionCall","src":"342:12:30"},"nativeSrc":"342:12:30","nodeType":"YulExpressionStatement","src":"342:12:30"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"315:7:30","nodeType":"YulIdentifier","src":"315:7:30"},{"name":"headStart","nativeSrc":"324:9:30","nodeType":"YulIdentifier","src":"324:9:30"}],"functionName":{"name":"sub","nativeSrc":"311:3:30","nodeType":"YulIdentifier","src":"311:3:30"},"nativeSrc":"311:23:30","nodeType":"YulFunctionCall","src":"311:23:30"},{"kind":"number","nativeSrc":"336:2:30","nodeType":"YulLiteral","src":"336:2:30","type":"","value":"64"}],"functionName":{"name":"slt","nativeSrc":"307:3:30","nodeType":"YulIdentifier","src":"307:3:30"},"nativeSrc":"307:32:30","nodeType":"YulFunctionCall","src":"307:32:30"},"nativeSrc":"304:52:30","nodeType":"YulIf","src":"304:52:30"},{"nativeSrc":"365:50:30","nodeType":"YulAssignment","src":"365:50:30","value":{"arguments":[{"name":"headStart","nativeSrc":"405:9:30","nodeType":"YulIdentifier","src":"405:9:30"}],"functionName":{"name":"abi_decode_address_fromMemory","nativeSrc":"375:29:30","nodeType":"YulIdentifier","src":"375:29:30"},"nativeSrc":"375:40:30","nodeType":"YulFunctionCall","src":"375:40:30"},"variableNames":[{"name":"value0","nativeSrc":"365:6:30","nodeType":"YulIdentifier","src":"365:6:30"}]},{"nativeSrc":"424:59:30","nodeType":"YulAssignment","src":"424:59:30","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"468:9:30","nodeType":"YulIdentifier","src":"468:9:30"},{"kind":"number","nativeSrc":"479:2:30","nodeType":"YulLiteral","src":"479:2:30","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"464:3:30","nodeType":"YulIdentifier","src":"464:3:30"},"nativeSrc":"464:18:30","nodeType":"YulFunctionCall","src":"464:18:30"}],"functionName":{"name":"abi_decode_address_fromMemory","nativeSrc":"434:29:30","nodeType":"YulIdentifier","src":"434:29:30"},"nativeSrc":"434:49:30","nodeType":"YulFunctionCall","src":"434:49:30"},"variableNames":[{"name":"value1","nativeSrc":"424:6:30","nodeType":"YulIdentifier","src":"424:6:30"}]}]},"name":"abi_decode_tuple_t_addresst_address_fromMemory","nativeSrc":"196:293:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"252:9:30","nodeType":"YulTypedName","src":"252:9:30","type":""},{"name":"dataEnd","nativeSrc":"263:7:30","nodeType":"YulTypedName","src":"263:7:30","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"275:6:30","nodeType":"YulTypedName","src":"275:6:30","type":""},{"name":"value1","nativeSrc":"283:6:30","nodeType":"YulTypedName","src":"283:6:30","type":""}],"src":"196:293:30"},{"body":{"nativeSrc":"595:102:30","nodeType":"YulBlock","src":"595:102:30","statements":[{"nativeSrc":"605:26:30","nodeType":"YulAssignment","src":"605:26:30","value":{"arguments":[{"name":"headStart","nativeSrc":"617:9:30","nodeType":"YulIdentifier","src":"617:9:30"},{"kind":"number","nativeSrc":"628:2:30","nodeType":"YulLiteral","src":"628:2:30","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"613:3:30","nodeType":"YulIdentifier","src":"613:3:30"},"nativeSrc":"613:18:30","nodeType":"YulFunctionCall","src":"613:18:30"},"variableNames":[{"name":"tail","nativeSrc":"605:4:30","nodeType":"YulIdentifier","src":"605:4:30"}]},{"expression":{"arguments":[{"name":"headStart","nativeSrc":"647:9:30","nodeType":"YulIdentifier","src":"647:9:30"},{"arguments":[{"name":"value0","nativeSrc":"662:6:30","nodeType":"YulIdentifier","src":"662:6:30"},{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"678:3:30","nodeType":"YulLiteral","src":"678:3:30","type":"","value":"160"},{"kind":"number","nativeSrc":"683:1:30","nodeType":"YulLiteral","src":"683:1:30","type":"","value":"1"}],"functionName":{"name":"shl","nativeSrc":"674:3:30","nodeType":"YulIdentifier","src":"674:3:30"},"nativeSrc":"674:11:30","nodeType":"YulFunctionCall","src":"674:11:30"},{"kind":"number","nativeSrc":"687:1:30","nodeType":"YulLiteral","src":"687:1:30","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"670:3:30","nodeType":"YulIdentifier","src":"670:3:30"},"nativeSrc":"670:19:30","nodeType":"YulFunctionCall","src":"670:19:30"}],"functionName":{"name":"and","nativeSrc":"658:3:30","nodeType":"YulIdentifier","src":"658:3:30"},"nativeSrc":"658:32:30","nodeType":"YulFunctionCall","src":"658:32:30"}],"functionName":{"name":"mstore","nativeSrc":"640:6:30","nodeType":"YulIdentifier","src":"640:6:30"},"nativeSrc":"640:51:30","nodeType":"YulFunctionCall","src":"640:51:30"},"nativeSrc":"640:51:30","nodeType":"YulExpressionStatement","src":"640:51:30"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nativeSrc":"494:203:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"564:9:30","nodeType":"YulTypedName","src":"564:9:30","type":""},{"name":"value0","nativeSrc":"575:6:30","nodeType":"YulTypedName","src":"575:6:30","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"586:4:30","nodeType":"YulTypedName","src":"586:4:30","type":""}],"src":"494:203:30"}]},"contents":"{\n { }\n function abi_decode_address_fromMemory(offset) -> value\n {\n value := mload(offset)\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n }\n function abi_decode_tuple_t_addresst_address_fromMemory(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n value0 := abi_decode_address_fromMemory(headStart)\n value1 := abi_decode_address_fromMemory(add(headStart, 32))\n }\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n }\n}","id":30,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"60a060405234801561000f575f80fd5b5060405161132638038061132683398101604081905261002e9161015d565b806001600160a01b03811661005c57604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b610065816100d7565b5060017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00556001600160a01b03821615806100a757506001600160a01b038116155b156100c55760405163d92e233d60e01b815260040160405180910390fd5b506001600160a01b031660805261018e565b600180546001600160a01b03191690556100f0816100f3565b50565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b0381168114610158575f80fd5b919050565b5f806040838503121561016e575f80fd5b61017783610142565b915061018560208401610142565b90509250929050565b60805161114f6101d75f395f818161029e0152818161037001528181610417015281816104f7015281816106f70152818161086e01528181610a050152610ad8015261114f5ff3fe608060405234801561000f575f80fd5b5060043610610111575f3560e01c8063715018a61161009e578063a694fc3a1161006e578063a694fc3a1461025c578063baa51f861461026f578063d56d229d14610299578063e30c3978146102c0578063f2fde38b146102d1575f80fd5b8063715018a61461023457806379ba50971461023c5780638456cb59146102445780638da5cb5b1461024c575f80fd5b80632b4bc300116100e45780632b4bc300146101c85780632e17de78146101e85780632f940c70146101fb5780633f4ba83a1461020e5780635c975abb14610216575f80fd5b80630fa6f64214610115578063150b7a021461012a5780631b3253b01461015b5780631dcac94d14610188575b5f80fd5b610128610123366004610f2b565b6102e4565b005b61013d610138366004610f59565b6104db565b6040516001600160e01b031990911681526020015b60405180910390f35b61017a610169366004610ff2565b5f9081526003602052604090205490565b604051908152602001610152565b6101b0610196366004610ff2565b5f908152600260205260409020546001600160a01b031690565b6040516001600160a01b039091168152602001610152565b6101db6101d6366004611009565b610607565b604051610152919061102b565b6101286101f6366004610ff2565b610670565b610128610209366004610f2b565b6107af565b610128610939565b600154600160a01b900460ff165b6040519015158152602001610152565b61012861094b565b61012861095c565b6101286109a2565b5f546001600160a01b03166101b0565b61012861026a366004610ff2565b6109b2565b61022461027d366004610ff2565b5f908152600260205260409020546001600160a01b0316151590565b6101b07f000000000000000000000000000000000000000000000000000000000000000081565b6001546001600160a01b03166101b0565b6101286102df366004611009565b610b7a565b6102ec610bea565b6102f4610c16565b6001600160a01b03811661031b5760405163d92e233d60e01b815260040160405180910390fd5b5f828152600260205260409020546001600160a01b031615610350576040516382d272e360e01b815260040160405180910390fd5b6040516331a9108f60e11b81526004810183905230906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa1580156103b5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103d9919061106d565b6001600160a01b03161461040057604051636bcd243760e11b815260040160405180910390fd5b6040516323b872dd60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906323b872dd9061045090309085908790600401611088565b5f604051808303815f87803b158015610467575f80fd5b505af1158015610479573d5f803e3d5ffd5b5050505081816001600160a01b03167fc27a1277308b3908a0fb998812a60b1da8911b8583f20bf8f98e5246db8c47ef426040516104b991815260200190565b60405180910390a36104d760015f805160206110fa83398151915255565b5050565b5f6104e4610c16565b6104ec610c31565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105355760405163de1db39560e01b815260040160405180910390fd5b6001600160a01b03851661055c5760405163d92e233d60e01b815260040160405180910390fd5b5f848152600260205260409020546001600160a01b031615610591576040516316e9ad8f60e01b815260040160405180910390fd5b61059b8585610c5c565b83856001600160a01b03167f6173e4d2d9dd52aae0ed37afed3adcf924a490639b759ca93d32dc43366c17d2426040516105d791815260200190565b60405180910390a350630a85bd0160e11b6105fe60015f805160206110fa83398151915255565b95945050505050565b6001600160a01b0381165f9081526004602090815260409182902080548351818402810184019094528084526060939283018282801561066457602002820191905f5260205f20905b815481526020019060010190808311610650575b50505050509050919050565b610678610c16565b5f818152600260205260409020546001600160a01b0316806106ad57604051630a49bbc360e21b815260040160405180910390fd5b6001600160a01b03811633146106d6576040516332dc95cb60e01b815260040160405180910390fd5b6106e08183610cc0565b6040516323b872dd60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906323b872dd9061073090309033908790600401611088565b5f604051808303815f87803b158015610747575f80fd5b505af1158015610759573d5f803e3d5ffd5b50506040514281528492503391507f563fc70fca9d440d883299c76a721644d5aca7c45df98aeb5292c4cb823579bf906020015b60405180910390a3506107ac60015f805160206110fa83398151915255565b50565b6107b7610bea565b6107bf610c16565b5f828152600260205260409020546001600160a01b0316806107f457604051630a49bbc360e21b815260040160405180910390fd5b6001600160a01b03821661081b5760405163d92e233d60e01b815260040160405180910390fd5b806001600160a01b0316826001600160a01b03161461084d5760405163c56a390560e01b815260040160405180910390fd5b6108578184610cc0565b6040516323b872dd60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906323b872dd906108a790309086908890600401611088565b5f604051808303815f87803b1580156108be575f80fd5b505af11580156108d0573d5f803e3d5ffd5b50505050816001600160a01b031683826001600160a01b03167ff4408f2b7cb3bb2b43ddb3715579eae68a12af5f2e6d938537db2be5e72f5f7d4260405161091a91815260200190565b60405180910390a4506104d760015f805160206110fa83398151915255565b610941610bea565b610949610cf0565b565b610953610bea565b6109495f610d45565b60015433906001600160a01b031681146109995760405163118cdaa760e01b81526001600160a01b03821660048201526024015b60405180910390fd5b6107ac81610d45565b6109aa610bea565b610949610d5e565b6109ba610c16565b6109c2610c31565b5f8181526002602052604090205433906001600160a01b0316156109f9576040516316e9ad8f60e01b815260040160405180910390fd5b806001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636352211e846040518263ffffffff1660e01b8152600401610a5191815260200190565b602060405180830381865afa158015610a6c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a90919061106d565b6001600160a01b031614610ab7576040516359dc379f60e01b815260040160405180910390fd5b610ac18183610c5c565b6040516323b872dd60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906323b872dd90610b1190849030908790600401611088565b5f604051808303815f87803b158015610b28575f80fd5b505af1158015610b3a573d5f803e3d5ffd5b5050505081816001600160a01b03167f6173e4d2d9dd52aae0ed37afed3adcf924a490639b759ca93d32dc43366c17d24260405161078d91815260200190565b610b82610bea565b600180546001600160a01b0383166001600160a01b03199091168117909155610bb25f546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b5f546001600160a01b031633146109495760405163118cdaa760e01b8152336004820152602401610990565b610c1e610da1565b60025f805160206110fa83398151915255565b600154600160a01b900460ff16156109495760405163d93c066560e01b815260040160405180910390fd5b5f81815260026020908152604080832080546001600160a01b039096166001600160a01b0319909616861790556003825280832042905593825260048082528483208054858552600584529584208690559082526001850181558252902090910155565b5f81815260026020908152604080832080546001600160a01b031916905560039091528120556104d78282610dd0565b610cf8610e9e565b6001805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600180546001600160a01b03191690556107ac81610ec8565b610d66610c31565b6001805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610d283390565b5f805160206110fa8339815191525460020361094957604051633ee5aeb560e01b815260040160405180910390fd5b6001600160a01b0382165f9081526004602090815260408083208484526005909252822054815491929091610e07906001906110ac565b9050808214610e60575f838281548110610e2357610e236110d1565b905f5260205f200154905080848481548110610e4157610e416110d1565b5f91825260208083209091019290925591825260059052604090208290555b82805480610e7057610e706110e5565b600190038181905f5260205f20015f9055905560055f8581526020019081526020015f205f90555050505050565b600154600160a01b900460ff1661094957604051638dfc202b60e01b815260040160405180910390fd5b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146107ac575f80fd5b5f8060408385031215610f3c575f80fd5b823591506020830135610f4e81610f17565b809150509250929050565b5f805f805f60808688031215610f6d575f80fd5b8535610f7881610f17565b94506020860135610f8881610f17565b935060408601359250606086013567ffffffffffffffff811115610faa575f80fd5b8601601f81018813610fba575f80fd5b803567ffffffffffffffff811115610fd0575f80fd5b886020828401011115610fe1575f80fd5b959894975092955050506020019190565b5f60208284031215611002575f80fd5b5035919050565b5f60208284031215611019575f80fd5b813561102481610f17565b9392505050565b602080825282518282018190525f918401906040840190835b81811015611062578351835260209384019390920191600101611044565b509095945050505050565b5f6020828403121561107d575f80fd5b815161102481610f17565b6001600160a01b039384168152919092166020820152604081019190915260600190565b818103818111156110cb57634e487b7160e01b5f52601160045260245ffd5b92915050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52603160045260245ffdfe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a2646970667358221220f8e5afe3df2897c05bd05e17e152d07acba805eed0e132300174b368b573437b64736f6c634300081a0033","opcodes":"PUSH1 0xA0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0xF JUMPI PUSH0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x1326 CODESIZE SUB DUP1 PUSH2 0x1326 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2E SWAP2 PUSH2 0x15D JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x5C JUMPI PUSH1 0x40 MLOAD PUSH4 0x1E4FBDF7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x65 DUP2 PUSH2 0xD7 JUMP JUMPDEST POP PUSH1 0x1 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ISZERO DUP1 PUSH2 0xA7 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO JUMPDEST ISZERO PUSH2 0xC5 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 MSTORE PUSH2 0x18E JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE PUSH2 0xF0 DUP2 PUSH2 0xF3 JUMP JUMPDEST POP JUMP JUMPDEST PUSH0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP3 DUP4 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x158 JUMPI PUSH0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x16E JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH2 0x177 DUP4 PUSH2 0x142 JUMP JUMPDEST SWAP2 POP PUSH2 0x185 PUSH1 0x20 DUP5 ADD PUSH2 0x142 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH2 0x114F PUSH2 0x1D7 PUSH0 CODECOPY PUSH0 DUP2 DUP2 PUSH2 0x29E ADD MSTORE DUP2 DUP2 PUSH2 0x370 ADD MSTORE DUP2 DUP2 PUSH2 0x417 ADD MSTORE DUP2 DUP2 PUSH2 0x4F7 ADD MSTORE DUP2 DUP2 PUSH2 0x6F7 ADD MSTORE DUP2 DUP2 PUSH2 0x86E ADD MSTORE DUP2 DUP2 PUSH2 0xA05 ADD MSTORE PUSH2 0xAD8 ADD MSTORE PUSH2 0x114F PUSH0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0xF JUMPI PUSH0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x111 JUMPI PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x715018A6 GT PUSH2 0x9E JUMPI DUP1 PUSH4 0xA694FC3A GT PUSH2 0x6E JUMPI DUP1 PUSH4 0xA694FC3A EQ PUSH2 0x25C JUMPI DUP1 PUSH4 0xBAA51F86 EQ PUSH2 0x26F JUMPI DUP1 PUSH4 0xD56D229D EQ PUSH2 0x299 JUMPI DUP1 PUSH4 0xE30C3978 EQ PUSH2 0x2C0 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x2D1 JUMPI PUSH0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x715018A6 EQ PUSH2 0x234 JUMPI DUP1 PUSH4 0x79BA5097 EQ PUSH2 0x23C JUMPI DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x244 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x24C JUMPI PUSH0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x2B4BC300 GT PUSH2 0xE4 JUMPI DUP1 PUSH4 0x2B4BC300 EQ PUSH2 0x1C8 JUMPI DUP1 PUSH4 0x2E17DE78 EQ PUSH2 0x1E8 JUMPI DUP1 PUSH4 0x2F940C70 EQ PUSH2 0x1FB JUMPI DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0x20E JUMPI DUP1 PUSH4 0x5C975ABB EQ PUSH2 0x216 JUMPI PUSH0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xFA6F642 EQ PUSH2 0x115 JUMPI DUP1 PUSH4 0x150B7A02 EQ PUSH2 0x12A JUMPI DUP1 PUSH4 0x1B3253B0 EQ PUSH2 0x15B JUMPI DUP1 PUSH4 0x1DCAC94D EQ PUSH2 0x188 JUMPI JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH2 0x128 PUSH2 0x123 CALLDATASIZE PUSH1 0x4 PUSH2 0xF2B JUMP JUMPDEST PUSH2 0x2E4 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x13D PUSH2 0x138 CALLDATASIZE PUSH1 0x4 PUSH2 0xF59 JUMP JUMPDEST PUSH2 0x4DB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x17A PUSH2 0x169 CALLDATASIZE PUSH1 0x4 PUSH2 0xFF2 JUMP JUMPDEST PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x152 JUMP JUMPDEST PUSH2 0x1B0 PUSH2 0x196 CALLDATASIZE PUSH1 0x4 PUSH2 0xFF2 JUMP JUMPDEST PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x152 JUMP JUMPDEST PUSH2 0x1DB PUSH2 0x1D6 CALLDATASIZE PUSH1 0x4 PUSH2 0x1009 JUMP JUMPDEST PUSH2 0x607 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x152 SWAP2 SWAP1 PUSH2 0x102B JUMP JUMPDEST PUSH2 0x128 PUSH2 0x1F6 CALLDATASIZE PUSH1 0x4 PUSH2 0xFF2 JUMP JUMPDEST PUSH2 0x670 JUMP JUMPDEST PUSH2 0x128 PUSH2 0x209 CALLDATASIZE PUSH1 0x4 PUSH2 0xF2B JUMP JUMPDEST PUSH2 0x7AF JUMP JUMPDEST PUSH2 0x128 PUSH2 0x939 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x152 JUMP JUMPDEST PUSH2 0x128 PUSH2 0x94B JUMP JUMPDEST PUSH2 0x128 PUSH2 0x95C JUMP JUMPDEST PUSH2 0x128 PUSH2 0x9A2 JUMP JUMPDEST PUSH0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1B0 JUMP JUMPDEST PUSH2 0x128 PUSH2 0x26A CALLDATASIZE PUSH1 0x4 PUSH2 0xFF2 JUMP JUMPDEST PUSH2 0x9B2 JUMP JUMPDEST PUSH2 0x224 PUSH2 0x27D CALLDATASIZE PUSH1 0x4 PUSH2 0xFF2 JUMP JUMPDEST PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH2 0x1B0 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1B0 JUMP JUMPDEST PUSH2 0x128 PUSH2 0x2DF CALLDATASIZE PUSH1 0x4 PUSH2 0x1009 JUMP JUMPDEST PUSH2 0xB7A JUMP JUMPDEST PUSH2 0x2EC PUSH2 0xBEA JUMP JUMPDEST PUSH2 0x2F4 PUSH2 0xC16 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x31B JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH0 DUP3 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x350 JUMPI PUSH1 0x40 MLOAD PUSH4 0x82D272E3 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x31A9108F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP4 SWAP1 MSTORE ADDRESS SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP1 PUSH4 0x6352211E SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3B5 JUMPI RETURNDATASIZE PUSH0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3D9 SWAP2 SWAP1 PUSH2 0x106D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x400 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6BCD2437 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x23B872DD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP1 PUSH4 0x23B872DD SWAP1 PUSH2 0x450 SWAP1 ADDRESS SWAP1 DUP6 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x1088 JUMP JUMPDEST PUSH0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x467 JUMPI PUSH0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x479 JUMPI RETURNDATASIZE PUSH0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH0 REVERT JUMPDEST POP POP POP POP DUP2 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xC27A1277308B3908A0FB998812A60B1DA8911B8583F20BF8F98E5246DB8C47EF TIMESTAMP PUSH1 0x40 MLOAD PUSH2 0x4B9 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH2 0x4D7 PUSH1 0x1 PUSH0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x10FA DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SSTORE JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH0 PUSH2 0x4E4 PUSH2 0xC16 JUMP JUMPDEST PUSH2 0x4EC PUSH2 0xC31 JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0x535 JUMPI PUSH1 0x40 MLOAD PUSH4 0xDE1DB395 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH2 0x55C JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH0 DUP5 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x591 JUMPI PUSH1 0x40 MLOAD PUSH4 0x16E9AD8F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x59B DUP6 DUP6 PUSH2 0xC5C JUMP JUMPDEST DUP4 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x6173E4D2D9DD52AAE0ED37AFED3ADCF924A490639B759CA93D32DC43366C17D2 TIMESTAMP PUSH1 0x40 MLOAD PUSH2 0x5D7 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP PUSH4 0xA85BD01 PUSH1 0xE1 SHL PUSH2 0x5FE PUSH1 0x1 PUSH0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x10FA DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SSTORE JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD DUP4 MLOAD DUP2 DUP5 MUL DUP2 ADD DUP5 ADD SWAP1 SWAP5 MSTORE DUP1 DUP5 MSTORE PUSH1 0x60 SWAP4 SWAP3 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x664 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x650 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x678 PUSH2 0xC16 JUMP JUMPDEST PUSH0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP1 PUSH2 0x6AD JUMPI PUSH1 0x40 MLOAD PUSH4 0xA49BBC3 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND CALLER EQ PUSH2 0x6D6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x32DC95CB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x6E0 DUP2 DUP4 PUSH2 0xCC0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x23B872DD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP1 PUSH4 0x23B872DD SWAP1 PUSH2 0x730 SWAP1 ADDRESS SWAP1 CALLER SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x1088 JUMP JUMPDEST PUSH0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x747 JUMPI PUSH0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x759 JUMPI RETURNDATASIZE PUSH0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD TIMESTAMP DUP2 MSTORE DUP5 SWAP3 POP CALLER SWAP2 POP PUSH32 0x563FC70FCA9D440D883299C76A721644D5ACA7C45DF98AEB5292C4CB823579BF SWAP1 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP PUSH2 0x7AC PUSH1 0x1 PUSH0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x10FA DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SSTORE JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x7B7 PUSH2 0xBEA JUMP JUMPDEST PUSH2 0x7BF PUSH2 0xC16 JUMP JUMPDEST PUSH0 DUP3 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP1 PUSH2 0x7F4 JUMPI PUSH1 0x40 MLOAD PUSH4 0xA49BBC3 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x81B JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x84D JUMPI PUSH1 0x40 MLOAD PUSH4 0xC56A3905 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x857 DUP2 DUP5 PUSH2 0xCC0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x23B872DD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP1 PUSH4 0x23B872DD SWAP1 PUSH2 0x8A7 SWAP1 ADDRESS SWAP1 DUP7 SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0x1088 JUMP JUMPDEST PUSH0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x8BE JUMPI PUSH0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x8D0 JUMPI RETURNDATASIZE PUSH0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH0 REVERT JUMPDEST POP POP POP POP DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xF4408F2B7CB3BB2B43DDB3715579EAE68A12AF5F2E6D938537DB2BE5E72F5F7D TIMESTAMP PUSH1 0x40 MLOAD PUSH2 0x91A SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP PUSH2 0x4D7 PUSH1 0x1 PUSH0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x10FA DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SSTORE JUMP JUMPDEST PUSH2 0x941 PUSH2 0xBEA JUMP JUMPDEST PUSH2 0x949 PUSH2 0xCF0 JUMP JUMPDEST JUMP JUMPDEST PUSH2 0x953 PUSH2 0xBEA JUMP JUMPDEST PUSH2 0x949 PUSH0 PUSH2 0xD45 JUMP JUMPDEST PUSH1 0x1 SLOAD CALLER SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 EQ PUSH2 0x999 JUMPI PUSH1 0x40 MLOAD PUSH4 0x118CDAA7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x7AC DUP2 PUSH2 0xD45 JUMP JUMPDEST PUSH2 0x9AA PUSH2 0xBEA JUMP JUMPDEST PUSH2 0x949 PUSH2 0xD5E JUMP JUMPDEST PUSH2 0x9BA PUSH2 0xC16 JUMP JUMPDEST PUSH2 0x9C2 PUSH2 0xC31 JUMP JUMPDEST PUSH0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD CALLER SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x9F9 JUMPI PUSH1 0x40 MLOAD PUSH4 0x16E9AD8F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x6352211E DUP5 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA51 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xA6C JUMPI RETURNDATASIZE PUSH0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xA90 SWAP2 SWAP1 PUSH2 0x106D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0xAB7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x59DC379F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xAC1 DUP2 DUP4 PUSH2 0xC5C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x23B872DD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP1 PUSH4 0x23B872DD SWAP1 PUSH2 0xB11 SWAP1 DUP5 SWAP1 ADDRESS SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x1088 JUMP JUMPDEST PUSH0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xB28 JUMPI PUSH0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xB3A JUMPI RETURNDATASIZE PUSH0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH0 REVERT JUMPDEST POP POP POP POP DUP2 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x6173E4D2D9DD52AAE0ED37AFED3ADCF924A490639B759CA93D32DC43366C17D2 TIMESTAMP PUSH1 0x40 MLOAD PUSH2 0x78D SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH2 0xB82 PUSH2 0xBEA JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 SWAP2 AND DUP2 OR SWAP1 SWAP2 SSTORE PUSH2 0xBB2 PUSH0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP JUMP JUMPDEST PUSH0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x949 JUMPI PUSH1 0x40 MLOAD PUSH4 0x118CDAA7 PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x990 JUMP JUMPDEST PUSH2 0xC1E PUSH2 0xDA1 JUMP JUMPDEST PUSH1 0x2 PUSH0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x10FA DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SSTORE JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x949 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD93C0665 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP7 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 SWAP7 AND DUP7 OR SWAP1 SSTORE PUSH1 0x3 DUP3 MSTORE DUP1 DUP4 KECCAK256 TIMESTAMP SWAP1 SSTORE SWAP4 DUP3 MSTORE PUSH1 0x4 DUP1 DUP3 MSTORE DUP5 DUP4 KECCAK256 DUP1 SLOAD DUP6 DUP6 MSTORE PUSH1 0x5 DUP5 MSTORE SWAP6 DUP5 KECCAK256 DUP7 SWAP1 SSTORE SWAP1 DUP3 MSTORE PUSH1 0x1 DUP6 ADD DUP2 SSTORE DUP3 MSTORE SWAP1 KECCAK256 SWAP1 SWAP2 ADD SSTORE JUMP JUMPDEST PUSH0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE PUSH1 0x3 SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SSTORE PUSH2 0x4D7 DUP3 DUP3 PUSH2 0xDD0 JUMP JUMPDEST PUSH2 0xCF8 PUSH2 0xE9E JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND SWAP1 SSTORE PUSH32 0x5DB9EE0A495BF2E6FF9C91A7834C1BA4FDD244A5E8AA4E537BD38AEAE4B073AA CALLER JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE PUSH2 0x7AC DUP2 PUSH2 0xEC8 JUMP JUMPDEST PUSH2 0xD66 PUSH2 0xC31 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND PUSH1 0x1 PUSH1 0xA0 SHL OR SWAP1 SSTORE PUSH32 0x62E78CEA01BEE320CD4E420270B5EA74000D11B0C9F74754EBDBFC544B05A258 PUSH2 0xD28 CALLER SWAP1 JUMP JUMPDEST PUSH0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x10FA DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SLOAD PUSH1 0x2 SUB PUSH2 0x949 JUMPI PUSH1 0x40 MLOAD PUSH4 0x3EE5AEB5 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP5 DUP5 MSTORE PUSH1 0x5 SWAP1 SWAP3 MSTORE DUP3 KECCAK256 SLOAD DUP2 SLOAD SWAP2 SWAP3 SWAP1 SWAP2 PUSH2 0xE07 SWAP1 PUSH1 0x1 SWAP1 PUSH2 0x10AC JUMP JUMPDEST SWAP1 POP DUP1 DUP3 EQ PUSH2 0xE60 JUMPI PUSH0 DUP4 DUP3 DUP2 SLOAD DUP2 LT PUSH2 0xE23 JUMPI PUSH2 0xE23 PUSH2 0x10D1 JUMP JUMPDEST SWAP1 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 ADD SLOAD SWAP1 POP DUP1 DUP5 DUP5 DUP2 SLOAD DUP2 LT PUSH2 0xE41 JUMPI PUSH2 0xE41 PUSH2 0x10D1 JUMP JUMPDEST PUSH0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SWAP3 SWAP1 SWAP3 SSTORE SWAP2 DUP3 MSTORE PUSH1 0x5 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP3 SWAP1 SSTORE JUMPDEST DUP3 DUP1 SLOAD DUP1 PUSH2 0xE70 JUMPI PUSH2 0xE70 PUSH2 0x10E5 JUMP JUMPDEST PUSH1 0x1 SWAP1 SUB DUP2 DUP2 SWAP1 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 ADD PUSH0 SWAP1 SSTORE SWAP1 SSTORE PUSH1 0x5 PUSH0 DUP6 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH0 KECCAK256 PUSH0 SWAP1 SSTORE POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH2 0x949 JUMPI PUSH1 0x40 MLOAD PUSH4 0x8DFC202B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP3 DUP4 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x7AC JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xF3C JUMPI PUSH0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0xF4E DUP2 PUSH2 0xF17 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH0 DUP1 PUSH0 DUP1 PUSH0 PUSH1 0x80 DUP7 DUP9 SUB SLT ISZERO PUSH2 0xF6D JUMPI PUSH0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0xF78 DUP2 PUSH2 0xF17 JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH2 0xF88 DUP2 PUSH2 0xF17 JUMP JUMPDEST SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD SWAP3 POP PUSH1 0x60 DUP7 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xFAA JUMPI PUSH0 DUP1 REVERT JUMPDEST DUP7 ADD PUSH1 0x1F DUP2 ADD DUP9 SGT PUSH2 0xFBA JUMPI PUSH0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xFD0 JUMPI PUSH0 DUP1 REVERT JUMPDEST DUP9 PUSH1 0x20 DUP3 DUP5 ADD ADD GT ISZERO PUSH2 0xFE1 JUMPI PUSH0 DUP1 REVERT JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP3 SWAP6 POP POP POP PUSH1 0x20 ADD SWAP2 SWAP1 JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1002 JUMPI PUSH0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1019 JUMPI PUSH0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1024 DUP2 PUSH2 0xF17 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH0 SWAP2 DUP5 ADD SWAP1 PUSH1 0x40 DUP5 ADD SWAP1 DUP4 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1062 JUMPI DUP4 MLOAD DUP4 MSTORE PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x1044 JUMP JUMPDEST POP SWAP1 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x107D JUMPI PUSH0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x1024 DUP2 PUSH2 0xF17 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND DUP2 MSTORE SWAP2 SWAP1 SWAP3 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x10CB JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID SWAP12 PUSH24 0x9B17422D0DF92223018B32B4D1FA46E071723D6817E2486D STOP EXTCODESIZE 0xEC 0xC5 PUSH0 STOP LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xF8 0xE5 0xAF 0xE3 0xDF 0x28 SWAP8 0xC0 JUMPDEST 0xD0 MCOPY OR 0xE1 MSTORE 0xD0 PUSH27 0xCBA805EED0E132300174B368B573437B64736F6C634300081A0033 ","sourceMap":"1462:12831:28:-:0;;;5705:225;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5770:13;-1:-1:-1;;;;;1273:26:2;;1269:95;;1322:31;;-1:-1:-1;;;1322:31:2;;1350:1;1322:31;;;640:51:30;613:18;;1322:31:2;;;;;;;1269:95;1373:32;1392:12;1373:18;:32::i;:::-;-1:-1:-1;2365:1:19;1505:66;2539;-1:-1:-1;;;;;5799:26:28;::::1;::::0;;:57:::1;;-1:-1:-1::0;;;;;;5829:27:28;::::1;::::0;5799:57:::1;5795:83;;;5865:13;;-1:-1:-1::0;;;5865:13:28::1;;;;;;;;;;;5795:83;-1:-1:-1::0;;;;;;5888:35:28::1;;::::0;1462:12831;;2011:153:3;2100:13;2093:20;;-1:-1:-1;;;;;;2093:20:3;;;2123:34;2148:8;2123:24;:34::i;:::-;2011:153;:::o;2912:187:2:-;2985:16;3004:6;;-1:-1:-1;;;;;3020:17:2;;;-1:-1:-1;;;;;;3020:17:2;;;;;;3052:40;;3004:6;;;;;;;3052:40;;2985:16;3052:40;2975:124;2912:187;:::o;14:177:30:-;93:13;;-1:-1:-1;;;;;135:31:30;;125:42;;115:70;;181:1;178;171:12;115:70;14:177;;;:::o;196:293::-;275:6;283;336:2;324:9;315:7;311:23;307:32;304:52;;;352:1;349;342:12;304:52;375:40;405:9;375:40;:::i;:::-;365:50;;434:49;479:2;468:9;464:18;434:49;:::i;:::-;424:59;;196:293;;;;;:::o;494:203::-;1462:12831:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_checkOwner_463":{"entryPoint":3050,"id":463,"parameterSlots":0,"returnSlots":0},"@_clearStake_10307":{"entryPoint":3264,"id":10307,"parameterSlots":2,"returnSlots":0},"@_msgSender_3889":{"entryPoint":null,"id":3889,"parameterSlots":0,"returnSlots":1},"@_nonReentrantAfter_4156":{"entryPoint":null,"id":4156,"parameterSlots":0,"returnSlots":0},"@_nonReentrantBeforeView_4129":{"entryPoint":3489,"id":4129,"parameterSlots":0,"returnSlots":0},"@_nonReentrantBefore_4144":{"entryPoint":3094,"id":4144,"parameterSlots":0,"returnSlots":0},"@_pause_4050":{"entryPoint":3422,"id":4050,"parameterSlots":0,"returnSlots":0},"@_recordStake_10283":{"entryPoint":3164,"id":10283,"parameterSlots":2,"returnSlots":0},"@_reentrancyGuardEntered_4171":{"entryPoint":null,"id":4171,"parameterSlots":0,"returnSlots":1},"@_reentrancyGuardStorageSlot_4179":{"entryPoint":null,"id":4179,"parameterSlots":0,"returnSlots":1},"@_removeFromWallet_10371":{"entryPoint":3536,"id":10371,"parameterSlots":2,"returnSlots":0},"@_requireNotPaused_4021":{"entryPoint":3121,"id":4021,"parameterSlots":0,"returnSlots":0},"@_requirePaused_4034":{"entryPoint":3742,"id":4034,"parameterSlots":0,"returnSlots":0},"@_transferOwnership_525":{"entryPoint":3784,"id":525,"parameterSlots":1,"returnSlots":0},"@_transferOwnership_587":{"entryPoint":3397,"id":587,"parameterSlots":1,"returnSlots":0},"@_unpause_4066":{"entryPoint":3312,"id":4066,"parameterSlots":0,"returnSlots":0},"@acceptOwnership_611":{"entryPoint":2396,"id":611,"parameterSlots":0,"returnSlots":0},"@emergencyWithdraw_10101":{"entryPoint":1967,"id":10101,"parameterSlots":2,"returnSlots":0},"@getUint256Slot_4248":{"entryPoint":null,"id":4248,"parameterSlots":1,"returnSlots":1},"@getWalletStakedTokens_10245":{"entryPoint":1543,"id":10245,"parameterSlots":1,"returnSlots":1},"@isStaked_10205":{"entryPoint":null,"id":10205,"parameterSlots":1,"returnSlots":1},"@nftContract_9788":{"entryPoint":null,"id":9788,"parameterSlots":0,"returnSlots":0},"@onERC721Received_9973":{"entryPoint":1243,"id":9973,"parameterSlots":5,"returnSlots":1},"@owner_446":{"entryPoint":null,"id":446,"parameterSlots":0,"returnSlots":1},"@pause_10177":{"entryPoint":2466,"id":10177,"parameterSlots":0,"returnSlots":0},"@paused_4009":{"entryPoint":null,"id":4009,"parameterSlots":0,"returnSlots":1},"@pendingOwner_550":{"entryPoint":null,"id":550,"parameterSlots":0,"returnSlots":1},"@renounceOwnership_477":{"entryPoint":2379,"id":477,"parameterSlots":0,"returnSlots":0},"@rescueUntrackedToken_10167":{"entryPoint":740,"id":10167,"parameterSlots":2,"returnSlots":0},"@stake_9905":{"entryPoint":2482,"id":9905,"parameterSlots":1,"returnSlots":0},"@stakedAtOf_10231":{"entryPoint":null,"id":10231,"parameterSlots":1,"returnSlots":1},"@stakedOwnerOf_10218":{"entryPoint":null,"id":10218,"parameterSlots":1,"returnSlots":1},"@transferOwnership_570":{"entryPoint":2938,"id":570,"parameterSlots":1,"returnSlots":0},"@unpause_10187":{"entryPoint":2361,"id":10187,"parameterSlots":0,"returnSlots":0},"@unstake_10031":{"entryPoint":1648,"id":10031,"parameterSlots":1,"returnSlots":0},"abi_decode_tuple_t_address":{"entryPoint":4105,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":4205,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_addresst_uint256t_bytes_calldata_ptr":{"entryPoint":3929,"id":null,"parameterSlots":2,"returnSlots":5},"abi_decode_tuple_t_uint256":{"entryPoint":4082,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256t_address":{"entryPoint":3883,"id":null,"parameterSlots":2,"returnSlots":2},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed":{"entryPoint":4232,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_array$_t_uint256_$dyn_memory_ptr__to_t_array$_t_uint256_$dyn_memory_ptr__fromStack_reversed":{"entryPoint":4139,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes4__to_t_bytes4__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IERC721_$2686__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":4268,"id":null,"parameterSlots":2,"returnSlots":1},"panic_error_0x31":{"entryPoint":4325,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x32":{"entryPoint":4305,"id":null,"parameterSlots":0,"returnSlots":0},"validator_revert_address":{"entryPoint":3863,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nativeSrc":"0:4745:30","nodeType":"YulBlock","src":"0:4745:30","statements":[{"nativeSrc":"6:3:30","nodeType":"YulBlock","src":"6:3:30","statements":[]},{"body":{"nativeSrc":"59:86:30","nodeType":"YulBlock","src":"59:86:30","statements":[{"body":{"nativeSrc":"123:16:30","nodeType":"YulBlock","src":"123:16:30","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"132:1:30","nodeType":"YulLiteral","src":"132:1:30","type":"","value":"0"},{"kind":"number","nativeSrc":"135:1:30","nodeType":"YulLiteral","src":"135:1:30","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"125:6:30","nodeType":"YulIdentifier","src":"125:6:30"},"nativeSrc":"125:12:30","nodeType":"YulFunctionCall","src":"125:12:30"},"nativeSrc":"125:12:30","nodeType":"YulExpressionStatement","src":"125:12:30"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"82:5:30","nodeType":"YulIdentifier","src":"82:5:30"},{"arguments":[{"name":"value","nativeSrc":"93:5:30","nodeType":"YulIdentifier","src":"93:5:30"},{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"108:3:30","nodeType":"YulLiteral","src":"108:3:30","type":"","value":"160"},{"kind":"number","nativeSrc":"113:1:30","nodeType":"YulLiteral","src":"113:1:30","type":"","value":"1"}],"functionName":{"name":"shl","nativeSrc":"104:3:30","nodeType":"YulIdentifier","src":"104:3:30"},"nativeSrc":"104:11:30","nodeType":"YulFunctionCall","src":"104:11:30"},{"kind":"number","nativeSrc":"117:1:30","nodeType":"YulLiteral","src":"117:1:30","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"100:3:30","nodeType":"YulIdentifier","src":"100:3:30"},"nativeSrc":"100:19:30","nodeType":"YulFunctionCall","src":"100:19:30"}],"functionName":{"name":"and","nativeSrc":"89:3:30","nodeType":"YulIdentifier","src":"89:3:30"},"nativeSrc":"89:31:30","nodeType":"YulFunctionCall","src":"89:31:30"}],"functionName":{"name":"eq","nativeSrc":"79:2:30","nodeType":"YulIdentifier","src":"79:2:30"},"nativeSrc":"79:42:30","nodeType":"YulFunctionCall","src":"79:42:30"}],"functionName":{"name":"iszero","nativeSrc":"72:6:30","nodeType":"YulIdentifier","src":"72:6:30"},"nativeSrc":"72:50:30","nodeType":"YulFunctionCall","src":"72:50:30"},"nativeSrc":"69:70:30","nodeType":"YulIf","src":"69:70:30"}]},"name":"validator_revert_address","nativeSrc":"14:131:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"48:5:30","nodeType":"YulTypedName","src":"48:5:30","type":""}],"src":"14:131:30"},{"body":{"nativeSrc":"237:280:30","nodeType":"YulBlock","src":"237:280:30","statements":[{"body":{"nativeSrc":"283:16:30","nodeType":"YulBlock","src":"283:16:30","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"292:1:30","nodeType":"YulLiteral","src":"292:1:30","type":"","value":"0"},{"kind":"number","nativeSrc":"295:1:30","nodeType":"YulLiteral","src":"295:1:30","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"285:6:30","nodeType":"YulIdentifier","src":"285:6:30"},"nativeSrc":"285:12:30","nodeType":"YulFunctionCall","src":"285:12:30"},"nativeSrc":"285:12:30","nodeType":"YulExpressionStatement","src":"285:12:30"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"258:7:30","nodeType":"YulIdentifier","src":"258:7:30"},{"name":"headStart","nativeSrc":"267:9:30","nodeType":"YulIdentifier","src":"267:9:30"}],"functionName":{"name":"sub","nativeSrc":"254:3:30","nodeType":"YulIdentifier","src":"254:3:30"},"nativeSrc":"254:23:30","nodeType":"YulFunctionCall","src":"254:23:30"},{"kind":"number","nativeSrc":"279:2:30","nodeType":"YulLiteral","src":"279:2:30","type":"","value":"64"}],"functionName":{"name":"slt","nativeSrc":"250:3:30","nodeType":"YulIdentifier","src":"250:3:30"},"nativeSrc":"250:32:30","nodeType":"YulFunctionCall","src":"250:32:30"},"nativeSrc":"247:52:30","nodeType":"YulIf","src":"247:52:30"},{"nativeSrc":"308:14:30","nodeType":"YulVariableDeclaration","src":"308:14:30","value":{"kind":"number","nativeSrc":"321:1:30","nodeType":"YulLiteral","src":"321:1:30","type":"","value":"0"},"variables":[{"name":"value","nativeSrc":"312:5:30","nodeType":"YulTypedName","src":"312:5:30","type":""}]},{"nativeSrc":"331:32:30","nodeType":"YulAssignment","src":"331:32:30","value":{"arguments":[{"name":"headStart","nativeSrc":"353:9:30","nodeType":"YulIdentifier","src":"353:9:30"}],"functionName":{"name":"calldataload","nativeSrc":"340:12:30","nodeType":"YulIdentifier","src":"340:12:30"},"nativeSrc":"340:23:30","nodeType":"YulFunctionCall","src":"340:23:30"},"variableNames":[{"name":"value","nativeSrc":"331:5:30","nodeType":"YulIdentifier","src":"331:5:30"}]},{"nativeSrc":"372:15:30","nodeType":"YulAssignment","src":"372:15:30","value":{"name":"value","nativeSrc":"382:5:30","nodeType":"YulIdentifier","src":"382:5:30"},"variableNames":[{"name":"value0","nativeSrc":"372:6:30","nodeType":"YulIdentifier","src":"372:6:30"}]},{"nativeSrc":"396:47:30","nodeType":"YulVariableDeclaration","src":"396:47:30","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"428:9:30","nodeType":"YulIdentifier","src":"428:9:30"},{"kind":"number","nativeSrc":"439:2:30","nodeType":"YulLiteral","src":"439:2:30","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"424:3:30","nodeType":"YulIdentifier","src":"424:3:30"},"nativeSrc":"424:18:30","nodeType":"YulFunctionCall","src":"424:18:30"}],"functionName":{"name":"calldataload","nativeSrc":"411:12:30","nodeType":"YulIdentifier","src":"411:12:30"},"nativeSrc":"411:32:30","nodeType":"YulFunctionCall","src":"411:32:30"},"variables":[{"name":"value_1","nativeSrc":"400:7:30","nodeType":"YulTypedName","src":"400:7:30","type":""}]},{"expression":{"arguments":[{"name":"value_1","nativeSrc":"477:7:30","nodeType":"YulIdentifier","src":"477:7:30"}],"functionName":{"name":"validator_revert_address","nativeSrc":"452:24:30","nodeType":"YulIdentifier","src":"452:24:30"},"nativeSrc":"452:33:30","nodeType":"YulFunctionCall","src":"452:33:30"},"nativeSrc":"452:33:30","nodeType":"YulExpressionStatement","src":"452:33:30"},{"nativeSrc":"494:17:30","nodeType":"YulAssignment","src":"494:17:30","value":{"name":"value_1","nativeSrc":"504:7:30","nodeType":"YulIdentifier","src":"504:7:30"},"variableNames":[{"name":"value1","nativeSrc":"494:6:30","nodeType":"YulIdentifier","src":"494:6:30"}]}]},"name":"abi_decode_tuple_t_uint256t_address","nativeSrc":"150:367:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"195:9:30","nodeType":"YulTypedName","src":"195:9:30","type":""},{"name":"dataEnd","nativeSrc":"206:7:30","nodeType":"YulTypedName","src":"206:7:30","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"218:6:30","nodeType":"YulTypedName","src":"218:6:30","type":""},{"name":"value1","nativeSrc":"226:6:30","nodeType":"YulTypedName","src":"226:6:30","type":""}],"src":"150:367:30"},{"body":{"nativeSrc":"662:843:30","nodeType":"YulBlock","src":"662:843:30","statements":[{"body":{"nativeSrc":"709:16:30","nodeType":"YulBlock","src":"709:16:30","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"718:1:30","nodeType":"YulLiteral","src":"718:1:30","type":"","value":"0"},{"kind":"number","nativeSrc":"721:1:30","nodeType":"YulLiteral","src":"721:1:30","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"711:6:30","nodeType":"YulIdentifier","src":"711:6:30"},"nativeSrc":"711:12:30","nodeType":"YulFunctionCall","src":"711:12:30"},"nativeSrc":"711:12:30","nodeType":"YulExpressionStatement","src":"711:12:30"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"683:7:30","nodeType":"YulIdentifier","src":"683:7:30"},{"name":"headStart","nativeSrc":"692:9:30","nodeType":"YulIdentifier","src":"692:9:30"}],"functionName":{"name":"sub","nativeSrc":"679:3:30","nodeType":"YulIdentifier","src":"679:3:30"},"nativeSrc":"679:23:30","nodeType":"YulFunctionCall","src":"679:23:30"},{"kind":"number","nativeSrc":"704:3:30","nodeType":"YulLiteral","src":"704:3:30","type":"","value":"128"}],"functionName":{"name":"slt","nativeSrc":"675:3:30","nodeType":"YulIdentifier","src":"675:3:30"},"nativeSrc":"675:33:30","nodeType":"YulFunctionCall","src":"675:33:30"},"nativeSrc":"672:53:30","nodeType":"YulIf","src":"672:53:30"},{"nativeSrc":"734:36:30","nodeType":"YulVariableDeclaration","src":"734:36:30","value":{"arguments":[{"name":"headStart","nativeSrc":"760:9:30","nodeType":"YulIdentifier","src":"760:9:30"}],"functionName":{"name":"calldataload","nativeSrc":"747:12:30","nodeType":"YulIdentifier","src":"747:12:30"},"nativeSrc":"747:23:30","nodeType":"YulFunctionCall","src":"747:23:30"},"variables":[{"name":"value","nativeSrc":"738:5:30","nodeType":"YulTypedName","src":"738:5:30","type":""}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"804:5:30","nodeType":"YulIdentifier","src":"804:5:30"}],"functionName":{"name":"validator_revert_address","nativeSrc":"779:24:30","nodeType":"YulIdentifier","src":"779:24:30"},"nativeSrc":"779:31:30","nodeType":"YulFunctionCall","src":"779:31:30"},"nativeSrc":"779:31:30","nodeType":"YulExpressionStatement","src":"779:31:30"},{"nativeSrc":"819:15:30","nodeType":"YulAssignment","src":"819:15:30","value":{"name":"value","nativeSrc":"829:5:30","nodeType":"YulIdentifier","src":"829:5:30"},"variableNames":[{"name":"value0","nativeSrc":"819:6:30","nodeType":"YulIdentifier","src":"819:6:30"}]},{"nativeSrc":"843:47:30","nodeType":"YulVariableDeclaration","src":"843:47:30","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"875:9:30","nodeType":"YulIdentifier","src":"875:9:30"},{"kind":"number","nativeSrc":"886:2:30","nodeType":"YulLiteral","src":"886:2:30","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"871:3:30","nodeType":"YulIdentifier","src":"871:3:30"},"nativeSrc":"871:18:30","nodeType":"YulFunctionCall","src":"871:18:30"}],"functionName":{"name":"calldataload","nativeSrc":"858:12:30","nodeType":"YulIdentifier","src":"858:12:30"},"nativeSrc":"858:32:30","nodeType":"YulFunctionCall","src":"858:32:30"},"variables":[{"name":"value_1","nativeSrc":"847:7:30","nodeType":"YulTypedName","src":"847:7:30","type":""}]},{"expression":{"arguments":[{"name":"value_1","nativeSrc":"924:7:30","nodeType":"YulIdentifier","src":"924:7:30"}],"functionName":{"name":"validator_revert_address","nativeSrc":"899:24:30","nodeType":"YulIdentifier","src":"899:24:30"},"nativeSrc":"899:33:30","nodeType":"YulFunctionCall","src":"899:33:30"},"nativeSrc":"899:33:30","nodeType":"YulExpressionStatement","src":"899:33:30"},{"nativeSrc":"941:17:30","nodeType":"YulAssignment","src":"941:17:30","value":{"name":"value_1","nativeSrc":"951:7:30","nodeType":"YulIdentifier","src":"951:7:30"},"variableNames":[{"name":"value1","nativeSrc":"941:6:30","nodeType":"YulIdentifier","src":"941:6:30"}]},{"nativeSrc":"967:16:30","nodeType":"YulVariableDeclaration","src":"967:16:30","value":{"kind":"number","nativeSrc":"982:1:30","nodeType":"YulLiteral","src":"982:1:30","type":"","value":"0"},"variables":[{"name":"value_2","nativeSrc":"971:7:30","nodeType":"YulTypedName","src":"971:7:30","type":""}]},{"nativeSrc":"992:43:30","nodeType":"YulAssignment","src":"992:43:30","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"1020:9:30","nodeType":"YulIdentifier","src":"1020:9:30"},{"kind":"number","nativeSrc":"1031:2:30","nodeType":"YulLiteral","src":"1031:2:30","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"1016:3:30","nodeType":"YulIdentifier","src":"1016:3:30"},"nativeSrc":"1016:18:30","nodeType":"YulFunctionCall","src":"1016:18:30"}],"functionName":{"name":"calldataload","nativeSrc":"1003:12:30","nodeType":"YulIdentifier","src":"1003:12:30"},"nativeSrc":"1003:32:30","nodeType":"YulFunctionCall","src":"1003:32:30"},"variableNames":[{"name":"value_2","nativeSrc":"992:7:30","nodeType":"YulIdentifier","src":"992:7:30"}]},{"nativeSrc":"1044:17:30","nodeType":"YulAssignment","src":"1044:17:30","value":{"name":"value_2","nativeSrc":"1054:7:30","nodeType":"YulIdentifier","src":"1054:7:30"},"variableNames":[{"name":"value2","nativeSrc":"1044:6:30","nodeType":"YulIdentifier","src":"1044:6:30"}]},{"nativeSrc":"1070:46:30","nodeType":"YulVariableDeclaration","src":"1070:46:30","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"1101:9:30","nodeType":"YulIdentifier","src":"1101:9:30"},{"kind":"number","nativeSrc":"1112:2:30","nodeType":"YulLiteral","src":"1112:2:30","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"1097:3:30","nodeType":"YulIdentifier","src":"1097:3:30"},"nativeSrc":"1097:18:30","nodeType":"YulFunctionCall","src":"1097:18:30"}],"functionName":{"name":"calldataload","nativeSrc":"1084:12:30","nodeType":"YulIdentifier","src":"1084:12:30"},"nativeSrc":"1084:32:30","nodeType":"YulFunctionCall","src":"1084:32:30"},"variables":[{"name":"offset","nativeSrc":"1074:6:30","nodeType":"YulTypedName","src":"1074:6:30","type":""}]},{"body":{"nativeSrc":"1159:16:30","nodeType":"YulBlock","src":"1159:16:30","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"1168:1:30","nodeType":"YulLiteral","src":"1168:1:30","type":"","value":"0"},{"kind":"number","nativeSrc":"1171:1:30","nodeType":"YulLiteral","src":"1171:1:30","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"1161:6:30","nodeType":"YulIdentifier","src":"1161:6:30"},"nativeSrc":"1161:12:30","nodeType":"YulFunctionCall","src":"1161:12:30"},"nativeSrc":"1161:12:30","nodeType":"YulExpressionStatement","src":"1161:12:30"}]},"condition":{"arguments":[{"name":"offset","nativeSrc":"1131:6:30","nodeType":"YulIdentifier","src":"1131:6:30"},{"kind":"number","nativeSrc":"1139:18:30","nodeType":"YulLiteral","src":"1139:18:30","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"1128:2:30","nodeType":"YulIdentifier","src":"1128:2:30"},"nativeSrc":"1128:30:30","nodeType":"YulFunctionCall","src":"1128:30:30"},"nativeSrc":"1125:50:30","nodeType":"YulIf","src":"1125:50:30"},{"nativeSrc":"1184:32:30","nodeType":"YulVariableDeclaration","src":"1184:32:30","value":{"arguments":[{"name":"headStart","nativeSrc":"1198:9:30","nodeType":"YulIdentifier","src":"1198:9:30"},{"name":"offset","nativeSrc":"1209:6:30","nodeType":"YulIdentifier","src":"1209:6:30"}],"functionName":{"name":"add","nativeSrc":"1194:3:30","nodeType":"YulIdentifier","src":"1194:3:30"},"nativeSrc":"1194:22:30","nodeType":"YulFunctionCall","src":"1194:22:30"},"variables":[{"name":"_1","nativeSrc":"1188:2:30","nodeType":"YulTypedName","src":"1188:2:30","type":""}]},{"body":{"nativeSrc":"1264:16:30","nodeType":"YulBlock","src":"1264:16:30","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"1273:1:30","nodeType":"YulLiteral","src":"1273:1:30","type":"","value":"0"},{"kind":"number","nativeSrc":"1276:1:30","nodeType":"YulLiteral","src":"1276:1:30","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"1266:6:30","nodeType":"YulIdentifier","src":"1266:6:30"},"nativeSrc":"1266:12:30","nodeType":"YulFunctionCall","src":"1266:12:30"},"nativeSrc":"1266:12:30","nodeType":"YulExpressionStatement","src":"1266:12:30"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_1","nativeSrc":"1243:2:30","nodeType":"YulIdentifier","src":"1243:2:30"},{"kind":"number","nativeSrc":"1247:4:30","nodeType":"YulLiteral","src":"1247:4:30","type":"","value":"0x1f"}],"functionName":{"name":"add","nativeSrc":"1239:3:30","nodeType":"YulIdentifier","src":"1239:3:30"},"nativeSrc":"1239:13:30","nodeType":"YulFunctionCall","src":"1239:13:30"},{"name":"dataEnd","nativeSrc":"1254:7:30","nodeType":"YulIdentifier","src":"1254:7:30"}],"functionName":{"name":"slt","nativeSrc":"1235:3:30","nodeType":"YulIdentifier","src":"1235:3:30"},"nativeSrc":"1235:27:30","nodeType":"YulFunctionCall","src":"1235:27:30"}],"functionName":{"name":"iszero","nativeSrc":"1228:6:30","nodeType":"YulIdentifier","src":"1228:6:30"},"nativeSrc":"1228:35:30","nodeType":"YulFunctionCall","src":"1228:35:30"},"nativeSrc":"1225:55:30","nodeType":"YulIf","src":"1225:55:30"},{"nativeSrc":"1289:30:30","nodeType":"YulVariableDeclaration","src":"1289:30:30","value":{"arguments":[{"name":"_1","nativeSrc":"1316:2:30","nodeType":"YulIdentifier","src":"1316:2:30"}],"functionName":{"name":"calldataload","nativeSrc":"1303:12:30","nodeType":"YulIdentifier","src":"1303:12:30"},"nativeSrc":"1303:16:30","nodeType":"YulFunctionCall","src":"1303:16:30"},"variables":[{"name":"length","nativeSrc":"1293:6:30","nodeType":"YulTypedName","src":"1293:6:30","type":""}]},{"body":{"nativeSrc":"1362:16:30","nodeType":"YulBlock","src":"1362:16:30","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"1371:1:30","nodeType":"YulLiteral","src":"1371:1:30","type":"","value":"0"},{"kind":"number","nativeSrc":"1374:1:30","nodeType":"YulLiteral","src":"1374:1:30","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"1364:6:30","nodeType":"YulIdentifier","src":"1364:6:30"},"nativeSrc":"1364:12:30","nodeType":"YulFunctionCall","src":"1364:12:30"},"nativeSrc":"1364:12:30","nodeType":"YulExpressionStatement","src":"1364:12:30"}]},"condition":{"arguments":[{"name":"length","nativeSrc":"1334:6:30","nodeType":"YulIdentifier","src":"1334:6:30"},{"kind":"number","nativeSrc":"1342:18:30","nodeType":"YulLiteral","src":"1342:18:30","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"1331:2:30","nodeType":"YulIdentifier","src":"1331:2:30"},"nativeSrc":"1331:30:30","nodeType":"YulFunctionCall","src":"1331:30:30"},"nativeSrc":"1328:50:30","nodeType":"YulIf","src":"1328:50:30"},{"body":{"nativeSrc":"1428:16:30","nodeType":"YulBlock","src":"1428:16:30","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"1437:1:30","nodeType":"YulLiteral","src":"1437:1:30","type":"","value":"0"},{"kind":"number","nativeSrc":"1440:1:30","nodeType":"YulLiteral","src":"1440:1:30","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"1430:6:30","nodeType":"YulIdentifier","src":"1430:6:30"},"nativeSrc":"1430:12:30","nodeType":"YulFunctionCall","src":"1430:12:30"},"nativeSrc":"1430:12:30","nodeType":"YulExpressionStatement","src":"1430:12:30"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_1","nativeSrc":"1401:2:30","nodeType":"YulIdentifier","src":"1401:2:30"},{"name":"length","nativeSrc":"1405:6:30","nodeType":"YulIdentifier","src":"1405:6:30"}],"functionName":{"name":"add","nativeSrc":"1397:3:30","nodeType":"YulIdentifier","src":"1397:3:30"},"nativeSrc":"1397:15:30","nodeType":"YulFunctionCall","src":"1397:15:30"},{"kind":"number","nativeSrc":"1414:2:30","nodeType":"YulLiteral","src":"1414:2:30","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"1393:3:30","nodeType":"YulIdentifier","src":"1393:3:30"},"nativeSrc":"1393:24:30","nodeType":"YulFunctionCall","src":"1393:24:30"},{"name":"dataEnd","nativeSrc":"1419:7:30","nodeType":"YulIdentifier","src":"1419:7:30"}],"functionName":{"name":"gt","nativeSrc":"1390:2:30","nodeType":"YulIdentifier","src":"1390:2:30"},"nativeSrc":"1390:37:30","nodeType":"YulFunctionCall","src":"1390:37:30"},"nativeSrc":"1387:57:30","nodeType":"YulIf","src":"1387:57:30"},{"nativeSrc":"1453:21:30","nodeType":"YulAssignment","src":"1453:21:30","value":{"arguments":[{"name":"_1","nativeSrc":"1467:2:30","nodeType":"YulIdentifier","src":"1467:2:30"},{"kind":"number","nativeSrc":"1471:2:30","nodeType":"YulLiteral","src":"1471:2:30","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"1463:3:30","nodeType":"YulIdentifier","src":"1463:3:30"},"nativeSrc":"1463:11:30","nodeType":"YulFunctionCall","src":"1463:11:30"},"variableNames":[{"name":"value3","nativeSrc":"1453:6:30","nodeType":"YulIdentifier","src":"1453:6:30"}]},{"nativeSrc":"1483:16:30","nodeType":"YulAssignment","src":"1483:16:30","value":{"name":"length","nativeSrc":"1493:6:30","nodeType":"YulIdentifier","src":"1493:6:30"},"variableNames":[{"name":"value4","nativeSrc":"1483:6:30","nodeType":"YulIdentifier","src":"1483:6:30"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256t_bytes_calldata_ptr","nativeSrc":"522:983:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"596:9:30","nodeType":"YulTypedName","src":"596:9:30","type":""},{"name":"dataEnd","nativeSrc":"607:7:30","nodeType":"YulTypedName","src":"607:7:30","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"619:6:30","nodeType":"YulTypedName","src":"619:6:30","type":""},{"name":"value1","nativeSrc":"627:6:30","nodeType":"YulTypedName","src":"627:6:30","type":""},{"name":"value2","nativeSrc":"635:6:30","nodeType":"YulTypedName","src":"635:6:30","type":""},{"name":"value3","nativeSrc":"643:6:30","nodeType":"YulTypedName","src":"643:6:30","type":""},{"name":"value4","nativeSrc":"651:6:30","nodeType":"YulTypedName","src":"651:6:30","type":""}],"src":"522:983:30"},{"body":{"nativeSrc":"1609:103:30","nodeType":"YulBlock","src":"1609:103:30","statements":[{"nativeSrc":"1619:26:30","nodeType":"YulAssignment","src":"1619:26:30","value":{"arguments":[{"name":"headStart","nativeSrc":"1631:9:30","nodeType":"YulIdentifier","src":"1631:9:30"},{"kind":"number","nativeSrc":"1642:2:30","nodeType":"YulLiteral","src":"1642:2:30","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"1627:3:30","nodeType":"YulIdentifier","src":"1627:3:30"},"nativeSrc":"1627:18:30","nodeType":"YulFunctionCall","src":"1627:18:30"},"variableNames":[{"name":"tail","nativeSrc":"1619:4:30","nodeType":"YulIdentifier","src":"1619:4:30"}]},{"expression":{"arguments":[{"name":"headStart","nativeSrc":"1661:9:30","nodeType":"YulIdentifier","src":"1661:9:30"},{"arguments":[{"name":"value0","nativeSrc":"1676:6:30","nodeType":"YulIdentifier","src":"1676:6:30"},{"arguments":[{"kind":"number","nativeSrc":"1688:3:30","nodeType":"YulLiteral","src":"1688:3:30","type":"","value":"224"},{"kind":"number","nativeSrc":"1693:10:30","nodeType":"YulLiteral","src":"1693:10:30","type":"","value":"0xffffffff"}],"functionName":{"name":"shl","nativeSrc":"1684:3:30","nodeType":"YulIdentifier","src":"1684:3:30"},"nativeSrc":"1684:20:30","nodeType":"YulFunctionCall","src":"1684:20:30"}],"functionName":{"name":"and","nativeSrc":"1672:3:30","nodeType":"YulIdentifier","src":"1672:3:30"},"nativeSrc":"1672:33:30","nodeType":"YulFunctionCall","src":"1672:33:30"}],"functionName":{"name":"mstore","nativeSrc":"1654:6:30","nodeType":"YulIdentifier","src":"1654:6:30"},"nativeSrc":"1654:52:30","nodeType":"YulFunctionCall","src":"1654:52:30"},"nativeSrc":"1654:52:30","nodeType":"YulExpressionStatement","src":"1654:52:30"}]},"name":"abi_encode_tuple_t_bytes4__to_t_bytes4__fromStack_reversed","nativeSrc":"1510:202:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"1578:9:30","nodeType":"YulTypedName","src":"1578:9:30","type":""},{"name":"value0","nativeSrc":"1589:6:30","nodeType":"YulTypedName","src":"1589:6:30","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"1600:4:30","nodeType":"YulTypedName","src":"1600:4:30","type":""}],"src":"1510:202:30"},{"body":{"nativeSrc":"1787:156:30","nodeType":"YulBlock","src":"1787:156:30","statements":[{"body":{"nativeSrc":"1833:16:30","nodeType":"YulBlock","src":"1833:16:30","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"1842:1:30","nodeType":"YulLiteral","src":"1842:1:30","type":"","value":"0"},{"kind":"number","nativeSrc":"1845:1:30","nodeType":"YulLiteral","src":"1845:1:30","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"1835:6:30","nodeType":"YulIdentifier","src":"1835:6:30"},"nativeSrc":"1835:12:30","nodeType":"YulFunctionCall","src":"1835:12:30"},"nativeSrc":"1835:12:30","nodeType":"YulExpressionStatement","src":"1835:12:30"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"1808:7:30","nodeType":"YulIdentifier","src":"1808:7:30"},{"name":"headStart","nativeSrc":"1817:9:30","nodeType":"YulIdentifier","src":"1817:9:30"}],"functionName":{"name":"sub","nativeSrc":"1804:3:30","nodeType":"YulIdentifier","src":"1804:3:30"},"nativeSrc":"1804:23:30","nodeType":"YulFunctionCall","src":"1804:23:30"},{"kind":"number","nativeSrc":"1829:2:30","nodeType":"YulLiteral","src":"1829:2:30","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"1800:3:30","nodeType":"YulIdentifier","src":"1800:3:30"},"nativeSrc":"1800:32:30","nodeType":"YulFunctionCall","src":"1800:32:30"},"nativeSrc":"1797:52:30","nodeType":"YulIf","src":"1797:52:30"},{"nativeSrc":"1858:14:30","nodeType":"YulVariableDeclaration","src":"1858:14:30","value":{"kind":"number","nativeSrc":"1871:1:30","nodeType":"YulLiteral","src":"1871:1:30","type":"","value":"0"},"variables":[{"name":"value","nativeSrc":"1862:5:30","nodeType":"YulTypedName","src":"1862:5:30","type":""}]},{"nativeSrc":"1881:32:30","nodeType":"YulAssignment","src":"1881:32:30","value":{"arguments":[{"name":"headStart","nativeSrc":"1903:9:30","nodeType":"YulIdentifier","src":"1903:9:30"}],"functionName":{"name":"calldataload","nativeSrc":"1890:12:30","nodeType":"YulIdentifier","src":"1890:12:30"},"nativeSrc":"1890:23:30","nodeType":"YulFunctionCall","src":"1890:23:30"},"variableNames":[{"name":"value","nativeSrc":"1881:5:30","nodeType":"YulIdentifier","src":"1881:5:30"}]},{"nativeSrc":"1922:15:30","nodeType":"YulAssignment","src":"1922:15:30","value":{"name":"value","nativeSrc":"1932:5:30","nodeType":"YulIdentifier","src":"1932:5:30"},"variableNames":[{"name":"value0","nativeSrc":"1922:6:30","nodeType":"YulIdentifier","src":"1922:6:30"}]}]},"name":"abi_decode_tuple_t_uint256","nativeSrc":"1717:226:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"1753:9:30","nodeType":"YulTypedName","src":"1753:9:30","type":""},{"name":"dataEnd","nativeSrc":"1764:7:30","nodeType":"YulTypedName","src":"1764:7:30","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"1776:6:30","nodeType":"YulTypedName","src":"1776:6:30","type":""}],"src":"1717:226:30"},{"body":{"nativeSrc":"2049:76:30","nodeType":"YulBlock","src":"2049:76:30","statements":[{"nativeSrc":"2059:26:30","nodeType":"YulAssignment","src":"2059:26:30","value":{"arguments":[{"name":"headStart","nativeSrc":"2071:9:30","nodeType":"YulIdentifier","src":"2071:9:30"},{"kind":"number","nativeSrc":"2082:2:30","nodeType":"YulLiteral","src":"2082:2:30","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"2067:3:30","nodeType":"YulIdentifier","src":"2067:3:30"},"nativeSrc":"2067:18:30","nodeType":"YulFunctionCall","src":"2067:18:30"},"variableNames":[{"name":"tail","nativeSrc":"2059:4:30","nodeType":"YulIdentifier","src":"2059:4:30"}]},{"expression":{"arguments":[{"name":"headStart","nativeSrc":"2101:9:30","nodeType":"YulIdentifier","src":"2101:9:30"},{"name":"value0","nativeSrc":"2112:6:30","nodeType":"YulIdentifier","src":"2112:6:30"}],"functionName":{"name":"mstore","nativeSrc":"2094:6:30","nodeType":"YulIdentifier","src":"2094:6:30"},"nativeSrc":"2094:25:30","nodeType":"YulFunctionCall","src":"2094:25:30"},"nativeSrc":"2094:25:30","nodeType":"YulExpressionStatement","src":"2094:25:30"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nativeSrc":"1948:177:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"2018:9:30","nodeType":"YulTypedName","src":"2018:9:30","type":""},{"name":"value0","nativeSrc":"2029:6:30","nodeType":"YulTypedName","src":"2029:6:30","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"2040:4:30","nodeType":"YulTypedName","src":"2040:4:30","type":""}],"src":"1948:177:30"},{"body":{"nativeSrc":"2231:102:30","nodeType":"YulBlock","src":"2231:102:30","statements":[{"nativeSrc":"2241:26:30","nodeType":"YulAssignment","src":"2241:26:30","value":{"arguments":[{"name":"headStart","nativeSrc":"2253:9:30","nodeType":"YulIdentifier","src":"2253:9:30"},{"kind":"number","nativeSrc":"2264:2:30","nodeType":"YulLiteral","src":"2264:2:30","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"2249:3:30","nodeType":"YulIdentifier","src":"2249:3:30"},"nativeSrc":"2249:18:30","nodeType":"YulFunctionCall","src":"2249:18:30"},"variableNames":[{"name":"tail","nativeSrc":"2241:4:30","nodeType":"YulIdentifier","src":"2241:4:30"}]},{"expression":{"arguments":[{"name":"headStart","nativeSrc":"2283:9:30","nodeType":"YulIdentifier","src":"2283:9:30"},{"arguments":[{"name":"value0","nativeSrc":"2298:6:30","nodeType":"YulIdentifier","src":"2298:6:30"},{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"2314:3:30","nodeType":"YulLiteral","src":"2314:3:30","type":"","value":"160"},{"kind":"number","nativeSrc":"2319:1:30","nodeType":"YulLiteral","src":"2319:1:30","type":"","value":"1"}],"functionName":{"name":"shl","nativeSrc":"2310:3:30","nodeType":"YulIdentifier","src":"2310:3:30"},"nativeSrc":"2310:11:30","nodeType":"YulFunctionCall","src":"2310:11:30"},{"kind":"number","nativeSrc":"2323:1:30","nodeType":"YulLiteral","src":"2323:1:30","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"2306:3:30","nodeType":"YulIdentifier","src":"2306:3:30"},"nativeSrc":"2306:19:30","nodeType":"YulFunctionCall","src":"2306:19:30"}],"functionName":{"name":"and","nativeSrc":"2294:3:30","nodeType":"YulIdentifier","src":"2294:3:30"},"nativeSrc":"2294:32:30","nodeType":"YulFunctionCall","src":"2294:32:30"}],"functionName":{"name":"mstore","nativeSrc":"2276:6:30","nodeType":"YulIdentifier","src":"2276:6:30"},"nativeSrc":"2276:51:30","nodeType":"YulFunctionCall","src":"2276:51:30"},"nativeSrc":"2276:51:30","nodeType":"YulExpressionStatement","src":"2276:51:30"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nativeSrc":"2130:203:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"2200:9:30","nodeType":"YulTypedName","src":"2200:9:30","type":""},{"name":"value0","nativeSrc":"2211:6:30","nodeType":"YulTypedName","src":"2211:6:30","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"2222:4:30","nodeType":"YulTypedName","src":"2222:4:30","type":""}],"src":"2130:203:30"},{"body":{"nativeSrc":"2408:177:30","nodeType":"YulBlock","src":"2408:177:30","statements":[{"body":{"nativeSrc":"2454:16:30","nodeType":"YulBlock","src":"2454:16:30","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"2463:1:30","nodeType":"YulLiteral","src":"2463:1:30","type":"","value":"0"},{"kind":"number","nativeSrc":"2466:1:30","nodeType":"YulLiteral","src":"2466:1:30","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"2456:6:30","nodeType":"YulIdentifier","src":"2456:6:30"},"nativeSrc":"2456:12:30","nodeType":"YulFunctionCall","src":"2456:12:30"},"nativeSrc":"2456:12:30","nodeType":"YulExpressionStatement","src":"2456:12:30"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"2429:7:30","nodeType":"YulIdentifier","src":"2429:7:30"},{"name":"headStart","nativeSrc":"2438:9:30","nodeType":"YulIdentifier","src":"2438:9:30"}],"functionName":{"name":"sub","nativeSrc":"2425:3:30","nodeType":"YulIdentifier","src":"2425:3:30"},"nativeSrc":"2425:23:30","nodeType":"YulFunctionCall","src":"2425:23:30"},{"kind":"number","nativeSrc":"2450:2:30","nodeType":"YulLiteral","src":"2450:2:30","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"2421:3:30","nodeType":"YulIdentifier","src":"2421:3:30"},"nativeSrc":"2421:32:30","nodeType":"YulFunctionCall","src":"2421:32:30"},"nativeSrc":"2418:52:30","nodeType":"YulIf","src":"2418:52:30"},{"nativeSrc":"2479:36:30","nodeType":"YulVariableDeclaration","src":"2479:36:30","value":{"arguments":[{"name":"headStart","nativeSrc":"2505:9:30","nodeType":"YulIdentifier","src":"2505:9:30"}],"functionName":{"name":"calldataload","nativeSrc":"2492:12:30","nodeType":"YulIdentifier","src":"2492:12:30"},"nativeSrc":"2492:23:30","nodeType":"YulFunctionCall","src":"2492:23:30"},"variables":[{"name":"value","nativeSrc":"2483:5:30","nodeType":"YulTypedName","src":"2483:5:30","type":""}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"2549:5:30","nodeType":"YulIdentifier","src":"2549:5:30"}],"functionName":{"name":"validator_revert_address","nativeSrc":"2524:24:30","nodeType":"YulIdentifier","src":"2524:24:30"},"nativeSrc":"2524:31:30","nodeType":"YulFunctionCall","src":"2524:31:30"},"nativeSrc":"2524:31:30","nodeType":"YulExpressionStatement","src":"2524:31:30"},{"nativeSrc":"2564:15:30","nodeType":"YulAssignment","src":"2564:15:30","value":{"name":"value","nativeSrc":"2574:5:30","nodeType":"YulIdentifier","src":"2574:5:30"},"variableNames":[{"name":"value0","nativeSrc":"2564:6:30","nodeType":"YulIdentifier","src":"2564:6:30"}]}]},"name":"abi_decode_tuple_t_address","nativeSrc":"2338:247:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"2374:9:30","nodeType":"YulTypedName","src":"2374:9:30","type":""},{"name":"dataEnd","nativeSrc":"2385:7:30","nodeType":"YulTypedName","src":"2385:7:30","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"2397:6:30","nodeType":"YulTypedName","src":"2397:6:30","type":""}],"src":"2338:247:30"},{"body":{"nativeSrc":"2741:460:30","nodeType":"YulBlock","src":"2741:460:30","statements":[{"nativeSrc":"2751:32:30","nodeType":"YulVariableDeclaration","src":"2751:32:30","value":{"arguments":[{"name":"headStart","nativeSrc":"2769:9:30","nodeType":"YulIdentifier","src":"2769:9:30"},{"kind":"number","nativeSrc":"2780:2:30","nodeType":"YulLiteral","src":"2780:2:30","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"2765:3:30","nodeType":"YulIdentifier","src":"2765:3:30"},"nativeSrc":"2765:18:30","nodeType":"YulFunctionCall","src":"2765:18:30"},"variables":[{"name":"tail_1","nativeSrc":"2755:6:30","nodeType":"YulTypedName","src":"2755:6:30","type":""}]},{"expression":{"arguments":[{"name":"headStart","nativeSrc":"2799:9:30","nodeType":"YulIdentifier","src":"2799:9:30"},{"kind":"number","nativeSrc":"2810:2:30","nodeType":"YulLiteral","src":"2810:2:30","type":"","value":"32"}],"functionName":{"name":"mstore","nativeSrc":"2792:6:30","nodeType":"YulIdentifier","src":"2792:6:30"},"nativeSrc":"2792:21:30","nodeType":"YulFunctionCall","src":"2792:21:30"},"nativeSrc":"2792:21:30","nodeType":"YulExpressionStatement","src":"2792:21:30"},{"nativeSrc":"2822:17:30","nodeType":"YulVariableDeclaration","src":"2822:17:30","value":{"name":"tail_1","nativeSrc":"2833:6:30","nodeType":"YulIdentifier","src":"2833:6:30"},"variables":[{"name":"pos","nativeSrc":"2826:3:30","nodeType":"YulTypedName","src":"2826:3:30","type":""}]},{"nativeSrc":"2848:27:30","nodeType":"YulVariableDeclaration","src":"2848:27:30","value":{"arguments":[{"name":"value0","nativeSrc":"2868:6:30","nodeType":"YulIdentifier","src":"2868:6:30"}],"functionName":{"name":"mload","nativeSrc":"2862:5:30","nodeType":"YulIdentifier","src":"2862:5:30"},"nativeSrc":"2862:13:30","nodeType":"YulFunctionCall","src":"2862:13:30"},"variables":[{"name":"length","nativeSrc":"2852:6:30","nodeType":"YulTypedName","src":"2852:6:30","type":""}]},{"expression":{"arguments":[{"name":"tail_1","nativeSrc":"2891:6:30","nodeType":"YulIdentifier","src":"2891:6:30"},{"name":"length","nativeSrc":"2899:6:30","nodeType":"YulIdentifier","src":"2899:6:30"}],"functionName":{"name":"mstore","nativeSrc":"2884:6:30","nodeType":"YulIdentifier","src":"2884:6:30"},"nativeSrc":"2884:22:30","nodeType":"YulFunctionCall","src":"2884:22:30"},"nativeSrc":"2884:22:30","nodeType":"YulExpressionStatement","src":"2884:22:30"},{"nativeSrc":"2915:25:30","nodeType":"YulAssignment","src":"2915:25:30","value":{"arguments":[{"name":"headStart","nativeSrc":"2926:9:30","nodeType":"YulIdentifier","src":"2926:9:30"},{"kind":"number","nativeSrc":"2937:2:30","nodeType":"YulLiteral","src":"2937:2:30","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"2922:3:30","nodeType":"YulIdentifier","src":"2922:3:30"},"nativeSrc":"2922:18:30","nodeType":"YulFunctionCall","src":"2922:18:30"},"variableNames":[{"name":"pos","nativeSrc":"2915:3:30","nodeType":"YulIdentifier","src":"2915:3:30"}]},{"nativeSrc":"2949:29:30","nodeType":"YulVariableDeclaration","src":"2949:29:30","value":{"arguments":[{"name":"value0","nativeSrc":"2967:6:30","nodeType":"YulIdentifier","src":"2967:6:30"},{"kind":"number","nativeSrc":"2975:2:30","nodeType":"YulLiteral","src":"2975:2:30","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"2963:3:30","nodeType":"YulIdentifier","src":"2963:3:30"},"nativeSrc":"2963:15:30","nodeType":"YulFunctionCall","src":"2963:15:30"},"variables":[{"name":"srcPtr","nativeSrc":"2953:6:30","nodeType":"YulTypedName","src":"2953:6:30","type":""}]},{"nativeSrc":"2987:10:30","nodeType":"YulVariableDeclaration","src":"2987:10:30","value":{"kind":"number","nativeSrc":"2996:1:30","nodeType":"YulLiteral","src":"2996:1:30","type":"","value":"0"},"variables":[{"name":"i","nativeSrc":"2991:1:30","nodeType":"YulTypedName","src":"2991:1:30","type":""}]},{"body":{"nativeSrc":"3055:120:30","nodeType":"YulBlock","src":"3055:120:30","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"3076:3:30","nodeType":"YulIdentifier","src":"3076:3:30"},{"arguments":[{"name":"srcPtr","nativeSrc":"3087:6:30","nodeType":"YulIdentifier","src":"3087:6:30"}],"functionName":{"name":"mload","nativeSrc":"3081:5:30","nodeType":"YulIdentifier","src":"3081:5:30"},"nativeSrc":"3081:13:30","nodeType":"YulFunctionCall","src":"3081:13:30"}],"functionName":{"name":"mstore","nativeSrc":"3069:6:30","nodeType":"YulIdentifier","src":"3069:6:30"},"nativeSrc":"3069:26:30","nodeType":"YulFunctionCall","src":"3069:26:30"},"nativeSrc":"3069:26:30","nodeType":"YulExpressionStatement","src":"3069:26:30"},{"nativeSrc":"3108:19:30","nodeType":"YulAssignment","src":"3108:19:30","value":{"arguments":[{"name":"pos","nativeSrc":"3119:3:30","nodeType":"YulIdentifier","src":"3119:3:30"},{"kind":"number","nativeSrc":"3124:2:30","nodeType":"YulLiteral","src":"3124:2:30","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"3115:3:30","nodeType":"YulIdentifier","src":"3115:3:30"},"nativeSrc":"3115:12:30","nodeType":"YulFunctionCall","src":"3115:12:30"},"variableNames":[{"name":"pos","nativeSrc":"3108:3:30","nodeType":"YulIdentifier","src":"3108:3:30"}]},{"nativeSrc":"3140:25:30","nodeType":"YulAssignment","src":"3140:25:30","value":{"arguments":[{"name":"srcPtr","nativeSrc":"3154:6:30","nodeType":"YulIdentifier","src":"3154:6:30"},{"kind":"number","nativeSrc":"3162:2:30","nodeType":"YulLiteral","src":"3162:2:30","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"3150:3:30","nodeType":"YulIdentifier","src":"3150:3:30"},"nativeSrc":"3150:15:30","nodeType":"YulFunctionCall","src":"3150:15:30"},"variableNames":[{"name":"srcPtr","nativeSrc":"3140:6:30","nodeType":"YulIdentifier","src":"3140:6:30"}]}]},"condition":{"arguments":[{"name":"i","nativeSrc":"3017:1:30","nodeType":"YulIdentifier","src":"3017:1:30"},{"name":"length","nativeSrc":"3020:6:30","nodeType":"YulIdentifier","src":"3020:6:30"}],"functionName":{"name":"lt","nativeSrc":"3014:2:30","nodeType":"YulIdentifier","src":"3014:2:30"},"nativeSrc":"3014:13:30","nodeType":"YulFunctionCall","src":"3014:13:30"},"nativeSrc":"3006:169:30","nodeType":"YulForLoop","post":{"nativeSrc":"3028:18:30","nodeType":"YulBlock","src":"3028:18:30","statements":[{"nativeSrc":"3030:14:30","nodeType":"YulAssignment","src":"3030:14:30","value":{"arguments":[{"name":"i","nativeSrc":"3039:1:30","nodeType":"YulIdentifier","src":"3039:1:30"},{"kind":"number","nativeSrc":"3042:1:30","nodeType":"YulLiteral","src":"3042:1:30","type":"","value":"1"}],"functionName":{"name":"add","nativeSrc":"3035:3:30","nodeType":"YulIdentifier","src":"3035:3:30"},"nativeSrc":"3035:9:30","nodeType":"YulFunctionCall","src":"3035:9:30"},"variableNames":[{"name":"i","nativeSrc":"3030:1:30","nodeType":"YulIdentifier","src":"3030:1:30"}]}]},"pre":{"nativeSrc":"3010:3:30","nodeType":"YulBlock","src":"3010:3:30","statements":[]},"src":"3006:169:30"},{"nativeSrc":"3184:11:30","nodeType":"YulAssignment","src":"3184:11:30","value":{"name":"pos","nativeSrc":"3192:3:30","nodeType":"YulIdentifier","src":"3192:3:30"},"variableNames":[{"name":"tail","nativeSrc":"3184:4:30","nodeType":"YulIdentifier","src":"3184:4:30"}]}]},"name":"abi_encode_tuple_t_array$_t_uint256_$dyn_memory_ptr__to_t_array$_t_uint256_$dyn_memory_ptr__fromStack_reversed","nativeSrc":"2590:611:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"2710:9:30","nodeType":"YulTypedName","src":"2710:9:30","type":""},{"name":"value0","nativeSrc":"2721:6:30","nodeType":"YulTypedName","src":"2721:6:30","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"2732:4:30","nodeType":"YulTypedName","src":"2732:4:30","type":""}],"src":"2590:611:30"},{"body":{"nativeSrc":"3301:92:30","nodeType":"YulBlock","src":"3301:92:30","statements":[{"nativeSrc":"3311:26:30","nodeType":"YulAssignment","src":"3311:26:30","value":{"arguments":[{"name":"headStart","nativeSrc":"3323:9:30","nodeType":"YulIdentifier","src":"3323:9:30"},{"kind":"number","nativeSrc":"3334:2:30","nodeType":"YulLiteral","src":"3334:2:30","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"3319:3:30","nodeType":"YulIdentifier","src":"3319:3:30"},"nativeSrc":"3319:18:30","nodeType":"YulFunctionCall","src":"3319:18:30"},"variableNames":[{"name":"tail","nativeSrc":"3311:4:30","nodeType":"YulIdentifier","src":"3311:4:30"}]},{"expression":{"arguments":[{"name":"headStart","nativeSrc":"3353:9:30","nodeType":"YulIdentifier","src":"3353:9:30"},{"arguments":[{"arguments":[{"name":"value0","nativeSrc":"3378:6:30","nodeType":"YulIdentifier","src":"3378:6:30"}],"functionName":{"name":"iszero","nativeSrc":"3371:6:30","nodeType":"YulIdentifier","src":"3371:6:30"},"nativeSrc":"3371:14:30","nodeType":"YulFunctionCall","src":"3371:14:30"}],"functionName":{"name":"iszero","nativeSrc":"3364:6:30","nodeType":"YulIdentifier","src":"3364:6:30"},"nativeSrc":"3364:22:30","nodeType":"YulFunctionCall","src":"3364:22:30"}],"functionName":{"name":"mstore","nativeSrc":"3346:6:30","nodeType":"YulIdentifier","src":"3346:6:30"},"nativeSrc":"3346:41:30","nodeType":"YulFunctionCall","src":"3346:41:30"},"nativeSrc":"3346:41:30","nodeType":"YulExpressionStatement","src":"3346:41:30"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nativeSrc":"3206:187:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"3270:9:30","nodeType":"YulTypedName","src":"3270:9:30","type":""},{"name":"value0","nativeSrc":"3281:6:30","nodeType":"YulTypedName","src":"3281:6:30","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"3292:4:30","nodeType":"YulTypedName","src":"3292:4:30","type":""}],"src":"3206:187:30"},{"body":{"nativeSrc":"3515:102:30","nodeType":"YulBlock","src":"3515:102:30","statements":[{"nativeSrc":"3525:26:30","nodeType":"YulAssignment","src":"3525:26:30","value":{"arguments":[{"name":"headStart","nativeSrc":"3537:9:30","nodeType":"YulIdentifier","src":"3537:9:30"},{"kind":"number","nativeSrc":"3548:2:30","nodeType":"YulLiteral","src":"3548:2:30","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"3533:3:30","nodeType":"YulIdentifier","src":"3533:3:30"},"nativeSrc":"3533:18:30","nodeType":"YulFunctionCall","src":"3533:18:30"},"variableNames":[{"name":"tail","nativeSrc":"3525:4:30","nodeType":"YulIdentifier","src":"3525:4:30"}]},{"expression":{"arguments":[{"name":"headStart","nativeSrc":"3567:9:30","nodeType":"YulIdentifier","src":"3567:9:30"},{"arguments":[{"name":"value0","nativeSrc":"3582:6:30","nodeType":"YulIdentifier","src":"3582:6:30"},{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"3598:3:30","nodeType":"YulLiteral","src":"3598:3:30","type":"","value":"160"},{"kind":"number","nativeSrc":"3603:1:30","nodeType":"YulLiteral","src":"3603:1:30","type":"","value":"1"}],"functionName":{"name":"shl","nativeSrc":"3594:3:30","nodeType":"YulIdentifier","src":"3594:3:30"},"nativeSrc":"3594:11:30","nodeType":"YulFunctionCall","src":"3594:11:30"},{"kind":"number","nativeSrc":"3607:1:30","nodeType":"YulLiteral","src":"3607:1:30","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"3590:3:30","nodeType":"YulIdentifier","src":"3590:3:30"},"nativeSrc":"3590:19:30","nodeType":"YulFunctionCall","src":"3590:19:30"}],"functionName":{"name":"and","nativeSrc":"3578:3:30","nodeType":"YulIdentifier","src":"3578:3:30"},"nativeSrc":"3578:32:30","nodeType":"YulFunctionCall","src":"3578:32:30"}],"functionName":{"name":"mstore","nativeSrc":"3560:6:30","nodeType":"YulIdentifier","src":"3560:6:30"},"nativeSrc":"3560:51:30","nodeType":"YulFunctionCall","src":"3560:51:30"},"nativeSrc":"3560:51:30","nodeType":"YulExpressionStatement","src":"3560:51:30"}]},"name":"abi_encode_tuple_t_contract$_IERC721_$2686__to_t_address__fromStack_reversed","nativeSrc":"3398:219:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"3484:9:30","nodeType":"YulTypedName","src":"3484:9:30","type":""},{"name":"value0","nativeSrc":"3495:6:30","nodeType":"YulTypedName","src":"3495:6:30","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"3506:4:30","nodeType":"YulTypedName","src":"3506:4:30","type":""}],"src":"3398:219:30"},{"body":{"nativeSrc":"3703:170:30","nodeType":"YulBlock","src":"3703:170:30","statements":[{"body":{"nativeSrc":"3749:16:30","nodeType":"YulBlock","src":"3749:16:30","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"3758:1:30","nodeType":"YulLiteral","src":"3758:1:30","type":"","value":"0"},{"kind":"number","nativeSrc":"3761:1:30","nodeType":"YulLiteral","src":"3761:1:30","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"3751:6:30","nodeType":"YulIdentifier","src":"3751:6:30"},"nativeSrc":"3751:12:30","nodeType":"YulFunctionCall","src":"3751:12:30"},"nativeSrc":"3751:12:30","nodeType":"YulExpressionStatement","src":"3751:12:30"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"3724:7:30","nodeType":"YulIdentifier","src":"3724:7:30"},{"name":"headStart","nativeSrc":"3733:9:30","nodeType":"YulIdentifier","src":"3733:9:30"}],"functionName":{"name":"sub","nativeSrc":"3720:3:30","nodeType":"YulIdentifier","src":"3720:3:30"},"nativeSrc":"3720:23:30","nodeType":"YulFunctionCall","src":"3720:23:30"},{"kind":"number","nativeSrc":"3745:2:30","nodeType":"YulLiteral","src":"3745:2:30","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"3716:3:30","nodeType":"YulIdentifier","src":"3716:3:30"},"nativeSrc":"3716:32:30","nodeType":"YulFunctionCall","src":"3716:32:30"},"nativeSrc":"3713:52:30","nodeType":"YulIf","src":"3713:52:30"},{"nativeSrc":"3774:29:30","nodeType":"YulVariableDeclaration","src":"3774:29:30","value":{"arguments":[{"name":"headStart","nativeSrc":"3793:9:30","nodeType":"YulIdentifier","src":"3793:9:30"}],"functionName":{"name":"mload","nativeSrc":"3787:5:30","nodeType":"YulIdentifier","src":"3787:5:30"},"nativeSrc":"3787:16:30","nodeType":"YulFunctionCall","src":"3787:16:30"},"variables":[{"name":"value","nativeSrc":"3778:5:30","nodeType":"YulTypedName","src":"3778:5:30","type":""}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"3837:5:30","nodeType":"YulIdentifier","src":"3837:5:30"}],"functionName":{"name":"validator_revert_address","nativeSrc":"3812:24:30","nodeType":"YulIdentifier","src":"3812:24:30"},"nativeSrc":"3812:31:30","nodeType":"YulFunctionCall","src":"3812:31:30"},"nativeSrc":"3812:31:30","nodeType":"YulExpressionStatement","src":"3812:31:30"},{"nativeSrc":"3852:15:30","nodeType":"YulAssignment","src":"3852:15:30","value":{"name":"value","nativeSrc":"3862:5:30","nodeType":"YulIdentifier","src":"3862:5:30"},"variableNames":[{"name":"value0","nativeSrc":"3852:6:30","nodeType":"YulIdentifier","src":"3852:6:30"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nativeSrc":"3622:251:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"3669:9:30","nodeType":"YulTypedName","src":"3669:9:30","type":""},{"name":"dataEnd","nativeSrc":"3680:7:30","nodeType":"YulTypedName","src":"3680:7:30","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"3692:6:30","nodeType":"YulTypedName","src":"3692:6:30","type":""}],"src":"3622:251:30"},{"body":{"nativeSrc":"4035:214:30","nodeType":"YulBlock","src":"4035:214:30","statements":[{"nativeSrc":"4045:26:30","nodeType":"YulAssignment","src":"4045:26:30","value":{"arguments":[{"name":"headStart","nativeSrc":"4057:9:30","nodeType":"YulIdentifier","src":"4057:9:30"},{"kind":"number","nativeSrc":"4068:2:30","nodeType":"YulLiteral","src":"4068:2:30","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"4053:3:30","nodeType":"YulIdentifier","src":"4053:3:30"},"nativeSrc":"4053:18:30","nodeType":"YulFunctionCall","src":"4053:18:30"},"variableNames":[{"name":"tail","nativeSrc":"4045:4:30","nodeType":"YulIdentifier","src":"4045:4:30"}]},{"expression":{"arguments":[{"name":"headStart","nativeSrc":"4087:9:30","nodeType":"YulIdentifier","src":"4087:9:30"},{"arguments":[{"name":"value0","nativeSrc":"4102:6:30","nodeType":"YulIdentifier","src":"4102:6:30"},{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"4118:3:30","nodeType":"YulLiteral","src":"4118:3:30","type":"","value":"160"},{"kind":"number","nativeSrc":"4123:1:30","nodeType":"YulLiteral","src":"4123:1:30","type":"","value":"1"}],"functionName":{"name":"shl","nativeSrc":"4114:3:30","nodeType":"YulIdentifier","src":"4114:3:30"},"nativeSrc":"4114:11:30","nodeType":"YulFunctionCall","src":"4114:11:30"},{"kind":"number","nativeSrc":"4127:1:30","nodeType":"YulLiteral","src":"4127:1:30","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"4110:3:30","nodeType":"YulIdentifier","src":"4110:3:30"},"nativeSrc":"4110:19:30","nodeType":"YulFunctionCall","src":"4110:19:30"}],"functionName":{"name":"and","nativeSrc":"4098:3:30","nodeType":"YulIdentifier","src":"4098:3:30"},"nativeSrc":"4098:32:30","nodeType":"YulFunctionCall","src":"4098:32:30"}],"functionName":{"name":"mstore","nativeSrc":"4080:6:30","nodeType":"YulIdentifier","src":"4080:6:30"},"nativeSrc":"4080:51:30","nodeType":"YulFunctionCall","src":"4080:51:30"},"nativeSrc":"4080:51:30","nodeType":"YulExpressionStatement","src":"4080:51:30"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"4151:9:30","nodeType":"YulIdentifier","src":"4151:9:30"},{"kind":"number","nativeSrc":"4162:2:30","nodeType":"YulLiteral","src":"4162:2:30","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"4147:3:30","nodeType":"YulIdentifier","src":"4147:3:30"},"nativeSrc":"4147:18:30","nodeType":"YulFunctionCall","src":"4147:18:30"},{"arguments":[{"name":"value1","nativeSrc":"4171:6:30","nodeType":"YulIdentifier","src":"4171:6:30"},{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"4187:3:30","nodeType":"YulLiteral","src":"4187:3:30","type":"","value":"160"},{"kind":"number","nativeSrc":"4192:1:30","nodeType":"YulLiteral","src":"4192:1:30","type":"","value":"1"}],"functionName":{"name":"shl","nativeSrc":"4183:3:30","nodeType":"YulIdentifier","src":"4183:3:30"},"nativeSrc":"4183:11:30","nodeType":"YulFunctionCall","src":"4183:11:30"},{"kind":"number","nativeSrc":"4196:1:30","nodeType":"YulLiteral","src":"4196:1:30","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"4179:3:30","nodeType":"YulIdentifier","src":"4179:3:30"},"nativeSrc":"4179:19:30","nodeType":"YulFunctionCall","src":"4179:19:30"}],"functionName":{"name":"and","nativeSrc":"4167:3:30","nodeType":"YulIdentifier","src":"4167:3:30"},"nativeSrc":"4167:32:30","nodeType":"YulFunctionCall","src":"4167:32:30"}],"functionName":{"name":"mstore","nativeSrc":"4140:6:30","nodeType":"YulIdentifier","src":"4140:6:30"},"nativeSrc":"4140:60:30","nodeType":"YulFunctionCall","src":"4140:60:30"},"nativeSrc":"4140:60:30","nodeType":"YulExpressionStatement","src":"4140:60:30"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"4220:9:30","nodeType":"YulIdentifier","src":"4220:9:30"},{"kind":"number","nativeSrc":"4231:2:30","nodeType":"YulLiteral","src":"4231:2:30","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"4216:3:30","nodeType":"YulIdentifier","src":"4216:3:30"},"nativeSrc":"4216:18:30","nodeType":"YulFunctionCall","src":"4216:18:30"},{"name":"value2","nativeSrc":"4236:6:30","nodeType":"YulIdentifier","src":"4236:6:30"}],"functionName":{"name":"mstore","nativeSrc":"4209:6:30","nodeType":"YulIdentifier","src":"4209:6:30"},"nativeSrc":"4209:34:30","nodeType":"YulFunctionCall","src":"4209:34:30"},"nativeSrc":"4209:34:30","nodeType":"YulExpressionStatement","src":"4209:34:30"}]},"name":"abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed","nativeSrc":"3878:371:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"3988:9:30","nodeType":"YulTypedName","src":"3988:9:30","type":""},{"name":"value2","nativeSrc":"3999:6:30","nodeType":"YulTypedName","src":"3999:6:30","type":""},{"name":"value1","nativeSrc":"4007:6:30","nodeType":"YulTypedName","src":"4007:6:30","type":""},{"name":"value0","nativeSrc":"4015:6:30","nodeType":"YulTypedName","src":"4015:6:30","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"4026:4:30","nodeType":"YulTypedName","src":"4026:4:30","type":""}],"src":"3878:371:30"},{"body":{"nativeSrc":"4303:176:30","nodeType":"YulBlock","src":"4303:176:30","statements":[{"nativeSrc":"4313:17:30","nodeType":"YulAssignment","src":"4313:17:30","value":{"arguments":[{"name":"x","nativeSrc":"4325:1:30","nodeType":"YulIdentifier","src":"4325:1:30"},{"name":"y","nativeSrc":"4328:1:30","nodeType":"YulIdentifier","src":"4328:1:30"}],"functionName":{"name":"sub","nativeSrc":"4321:3:30","nodeType":"YulIdentifier","src":"4321:3:30"},"nativeSrc":"4321:9:30","nodeType":"YulFunctionCall","src":"4321:9:30"},"variableNames":[{"name":"diff","nativeSrc":"4313:4:30","nodeType":"YulIdentifier","src":"4313:4:30"}]},{"body":{"nativeSrc":"4362:111:30","nodeType":"YulBlock","src":"4362:111:30","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"4383:1:30","nodeType":"YulLiteral","src":"4383:1:30","type":"","value":"0"},{"arguments":[{"kind":"number","nativeSrc":"4390:3:30","nodeType":"YulLiteral","src":"4390:3:30","type":"","value":"224"},{"kind":"number","nativeSrc":"4395:10:30","nodeType":"YulLiteral","src":"4395:10:30","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nativeSrc":"4386:3:30","nodeType":"YulIdentifier","src":"4386:3:30"},"nativeSrc":"4386:20:30","nodeType":"YulFunctionCall","src":"4386:20:30"}],"functionName":{"name":"mstore","nativeSrc":"4376:6:30","nodeType":"YulIdentifier","src":"4376:6:30"},"nativeSrc":"4376:31:30","nodeType":"YulFunctionCall","src":"4376:31:30"},"nativeSrc":"4376:31:30","nodeType":"YulExpressionStatement","src":"4376:31:30"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"4427:1:30","nodeType":"YulLiteral","src":"4427:1:30","type":"","value":"4"},{"kind":"number","nativeSrc":"4430:4:30","nodeType":"YulLiteral","src":"4430:4:30","type":"","value":"0x11"}],"functionName":{"name":"mstore","nativeSrc":"4420:6:30","nodeType":"YulIdentifier","src":"4420:6:30"},"nativeSrc":"4420:15:30","nodeType":"YulFunctionCall","src":"4420:15:30"},"nativeSrc":"4420:15:30","nodeType":"YulExpressionStatement","src":"4420:15:30"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"4455:1:30","nodeType":"YulLiteral","src":"4455:1:30","type":"","value":"0"},{"kind":"number","nativeSrc":"4458:4:30","nodeType":"YulLiteral","src":"4458:4:30","type":"","value":"0x24"}],"functionName":{"name":"revert","nativeSrc":"4448:6:30","nodeType":"YulIdentifier","src":"4448:6:30"},"nativeSrc":"4448:15:30","nodeType":"YulFunctionCall","src":"4448:15:30"},"nativeSrc":"4448:15:30","nodeType":"YulExpressionStatement","src":"4448:15:30"}]},"condition":{"arguments":[{"name":"diff","nativeSrc":"4345:4:30","nodeType":"YulIdentifier","src":"4345:4:30"},{"name":"x","nativeSrc":"4351:1:30","nodeType":"YulIdentifier","src":"4351:1:30"}],"functionName":{"name":"gt","nativeSrc":"4342:2:30","nodeType":"YulIdentifier","src":"4342:2:30"},"nativeSrc":"4342:11:30","nodeType":"YulFunctionCall","src":"4342:11:30"},"nativeSrc":"4339:134:30","nodeType":"YulIf","src":"4339:134:30"}]},"name":"checked_sub_t_uint256","nativeSrc":"4254:225:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nativeSrc":"4285:1:30","nodeType":"YulTypedName","src":"4285:1:30","type":""},{"name":"y","nativeSrc":"4288:1:30","nodeType":"YulTypedName","src":"4288:1:30","type":""}],"returnVariables":[{"name":"diff","nativeSrc":"4294:4:30","nodeType":"YulTypedName","src":"4294:4:30","type":""}],"src":"4254:225:30"},{"body":{"nativeSrc":"4516:95:30","nodeType":"YulBlock","src":"4516:95:30","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"4533:1:30","nodeType":"YulLiteral","src":"4533:1:30","type":"","value":"0"},{"arguments":[{"kind":"number","nativeSrc":"4540:3:30","nodeType":"YulLiteral","src":"4540:3:30","type":"","value":"224"},{"kind":"number","nativeSrc":"4545:10:30","nodeType":"YulLiteral","src":"4545:10:30","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nativeSrc":"4536:3:30","nodeType":"YulIdentifier","src":"4536:3:30"},"nativeSrc":"4536:20:30","nodeType":"YulFunctionCall","src":"4536:20:30"}],"functionName":{"name":"mstore","nativeSrc":"4526:6:30","nodeType":"YulIdentifier","src":"4526:6:30"},"nativeSrc":"4526:31:30","nodeType":"YulFunctionCall","src":"4526:31:30"},"nativeSrc":"4526:31:30","nodeType":"YulExpressionStatement","src":"4526:31:30"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"4573:1:30","nodeType":"YulLiteral","src":"4573:1:30","type":"","value":"4"},{"kind":"number","nativeSrc":"4576:4:30","nodeType":"YulLiteral","src":"4576:4:30","type":"","value":"0x32"}],"functionName":{"name":"mstore","nativeSrc":"4566:6:30","nodeType":"YulIdentifier","src":"4566:6:30"},"nativeSrc":"4566:15:30","nodeType":"YulFunctionCall","src":"4566:15:30"},"nativeSrc":"4566:15:30","nodeType":"YulExpressionStatement","src":"4566:15:30"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"4597:1:30","nodeType":"YulLiteral","src":"4597:1:30","type":"","value":"0"},{"kind":"number","nativeSrc":"4600:4:30","nodeType":"YulLiteral","src":"4600:4:30","type":"","value":"0x24"}],"functionName":{"name":"revert","nativeSrc":"4590:6:30","nodeType":"YulIdentifier","src":"4590:6:30"},"nativeSrc":"4590:15:30","nodeType":"YulFunctionCall","src":"4590:15:30"},"nativeSrc":"4590:15:30","nodeType":"YulExpressionStatement","src":"4590:15:30"}]},"name":"panic_error_0x32","nativeSrc":"4484:127:30","nodeType":"YulFunctionDefinition","src":"4484:127:30"},{"body":{"nativeSrc":"4648:95:30","nodeType":"YulBlock","src":"4648:95:30","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"4665:1:30","nodeType":"YulLiteral","src":"4665:1:30","type":"","value":"0"},{"arguments":[{"kind":"number","nativeSrc":"4672:3:30","nodeType":"YulLiteral","src":"4672:3:30","type":"","value":"224"},{"kind":"number","nativeSrc":"4677:10:30","nodeType":"YulLiteral","src":"4677:10:30","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nativeSrc":"4668:3:30","nodeType":"YulIdentifier","src":"4668:3:30"},"nativeSrc":"4668:20:30","nodeType":"YulFunctionCall","src":"4668:20:30"}],"functionName":{"name":"mstore","nativeSrc":"4658:6:30","nodeType":"YulIdentifier","src":"4658:6:30"},"nativeSrc":"4658:31:30","nodeType":"YulFunctionCall","src":"4658:31:30"},"nativeSrc":"4658:31:30","nodeType":"YulExpressionStatement","src":"4658:31:30"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"4705:1:30","nodeType":"YulLiteral","src":"4705:1:30","type":"","value":"4"},{"kind":"number","nativeSrc":"4708:4:30","nodeType":"YulLiteral","src":"4708:4:30","type":"","value":"0x31"}],"functionName":{"name":"mstore","nativeSrc":"4698:6:30","nodeType":"YulIdentifier","src":"4698:6:30"},"nativeSrc":"4698:15:30","nodeType":"YulFunctionCall","src":"4698:15:30"},"nativeSrc":"4698:15:30","nodeType":"YulExpressionStatement","src":"4698:15:30"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"4729:1:30","nodeType":"YulLiteral","src":"4729:1:30","type":"","value":"0"},{"kind":"number","nativeSrc":"4732:4:30","nodeType":"YulLiteral","src":"4732:4:30","type":"","value":"0x24"}],"functionName":{"name":"revert","nativeSrc":"4722:6:30","nodeType":"YulIdentifier","src":"4722:6:30"},"nativeSrc":"4722:15:30","nodeType":"YulFunctionCall","src":"4722:15:30"},"nativeSrc":"4722:15:30","nodeType":"YulExpressionStatement","src":"4722:15:30"}]},"name":"panic_error_0x31","nativeSrc":"4616:127:30","nodeType":"YulFunctionDefinition","src":"4616:127:30"}]},"contents":"{\n { }\n function validator_revert_address(value)\n {\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n }\n function abi_decode_tuple_t_uint256t_address(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n let value := 0\n value := calldataload(headStart)\n value0 := value\n let value_1 := calldataload(add(headStart, 32))\n validator_revert_address(value_1)\n value1 := value_1\n }\n function abi_decode_tuple_t_addresst_addresst_uint256t_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4\n {\n if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_address(value)\n value0 := value\n let value_1 := calldataload(add(headStart, 32))\n validator_revert_address(value_1)\n value1 := value_1\n let value_2 := 0\n value_2 := calldataload(add(headStart, 64))\n value2 := value_2\n let offset := calldataload(add(headStart, 96))\n if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n let _1 := add(headStart, offset)\n if iszero(slt(add(_1, 0x1f), dataEnd)) { revert(0, 0) }\n let length := calldataload(_1)\n if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n if gt(add(add(_1, length), 32), dataEnd) { revert(0, 0) }\n value3 := add(_1, 32)\n value4 := length\n }\n function abi_encode_tuple_t_bytes4__to_t_bytes4__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, shl(224, 0xffffffff)))\n }\n function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := 0\n value := calldataload(headStart)\n value0 := value\n }\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, value0)\n }\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n }\n function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_address(value)\n value0 := value\n }\n function abi_encode_tuple_t_array$_t_uint256_$dyn_memory_ptr__to_t_array$_t_uint256_$dyn_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n let tail_1 := add(headStart, 32)\n mstore(headStart, 32)\n let pos := tail_1\n let length := mload(value0)\n mstore(tail_1, length)\n pos := add(headStart, 64)\n let srcPtr := add(value0, 32)\n let i := 0\n for { } lt(i, length) { i := add(i, 1) }\n {\n mstore(pos, mload(srcPtr))\n pos := add(pos, 32)\n srcPtr := add(srcPtr, 32)\n }\n tail := pos\n }\n function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, iszero(iszero(value0)))\n }\n function abi_encode_tuple_t_contract$_IERC721_$2686__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n }\n function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := mload(headStart)\n validator_revert_address(value)\n value0 := value\n }\n function abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n {\n tail := add(headStart, 96)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n mstore(add(headStart, 32), and(value1, sub(shl(160, 1), 1)))\n mstore(add(headStart, 64), value2)\n }\n function checked_sub_t_uint256(x, y) -> diff\n {\n diff := sub(x, y)\n if gt(diff, x)\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n }\n function panic_error_0x32()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x32)\n revert(0, 0x24)\n }\n function panic_error_0x31()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x31)\n revert(0, 0x24)\n }\n}","id":30,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"9788":[{"length":32,"start":670},{"length":32,"start":880},{"length":32,"start":1047},{"length":32,"start":1271},{"length":32,"start":1783},{"length":32,"start":2158},{"length":32,"start":2565},{"length":32,"start":2776}]},"linkReferences":{},"object":"608060405234801561000f575f80fd5b5060043610610111575f3560e01c8063715018a61161009e578063a694fc3a1161006e578063a694fc3a1461025c578063baa51f861461026f578063d56d229d14610299578063e30c3978146102c0578063f2fde38b146102d1575f80fd5b8063715018a61461023457806379ba50971461023c5780638456cb59146102445780638da5cb5b1461024c575f80fd5b80632b4bc300116100e45780632b4bc300146101c85780632e17de78146101e85780632f940c70146101fb5780633f4ba83a1461020e5780635c975abb14610216575f80fd5b80630fa6f64214610115578063150b7a021461012a5780631b3253b01461015b5780631dcac94d14610188575b5f80fd5b610128610123366004610f2b565b6102e4565b005b61013d610138366004610f59565b6104db565b6040516001600160e01b031990911681526020015b60405180910390f35b61017a610169366004610ff2565b5f9081526003602052604090205490565b604051908152602001610152565b6101b0610196366004610ff2565b5f908152600260205260409020546001600160a01b031690565b6040516001600160a01b039091168152602001610152565b6101db6101d6366004611009565b610607565b604051610152919061102b565b6101286101f6366004610ff2565b610670565b610128610209366004610f2b565b6107af565b610128610939565b600154600160a01b900460ff165b6040519015158152602001610152565b61012861094b565b61012861095c565b6101286109a2565b5f546001600160a01b03166101b0565b61012861026a366004610ff2565b6109b2565b61022461027d366004610ff2565b5f908152600260205260409020546001600160a01b0316151590565b6101b07f000000000000000000000000000000000000000000000000000000000000000081565b6001546001600160a01b03166101b0565b6101286102df366004611009565b610b7a565b6102ec610bea565b6102f4610c16565b6001600160a01b03811661031b5760405163d92e233d60e01b815260040160405180910390fd5b5f828152600260205260409020546001600160a01b031615610350576040516382d272e360e01b815260040160405180910390fd5b6040516331a9108f60e11b81526004810183905230906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa1580156103b5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103d9919061106d565b6001600160a01b03161461040057604051636bcd243760e11b815260040160405180910390fd5b6040516323b872dd60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906323b872dd9061045090309085908790600401611088565b5f604051808303815f87803b158015610467575f80fd5b505af1158015610479573d5f803e3d5ffd5b5050505081816001600160a01b03167fc27a1277308b3908a0fb998812a60b1da8911b8583f20bf8f98e5246db8c47ef426040516104b991815260200190565b60405180910390a36104d760015f805160206110fa83398151915255565b5050565b5f6104e4610c16565b6104ec610c31565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105355760405163de1db39560e01b815260040160405180910390fd5b6001600160a01b03851661055c5760405163d92e233d60e01b815260040160405180910390fd5b5f848152600260205260409020546001600160a01b031615610591576040516316e9ad8f60e01b815260040160405180910390fd5b61059b8585610c5c565b83856001600160a01b03167f6173e4d2d9dd52aae0ed37afed3adcf924a490639b759ca93d32dc43366c17d2426040516105d791815260200190565b60405180910390a350630a85bd0160e11b6105fe60015f805160206110fa83398151915255565b95945050505050565b6001600160a01b0381165f9081526004602090815260409182902080548351818402810184019094528084526060939283018282801561066457602002820191905f5260205f20905b815481526020019060010190808311610650575b50505050509050919050565b610678610c16565b5f818152600260205260409020546001600160a01b0316806106ad57604051630a49bbc360e21b815260040160405180910390fd5b6001600160a01b03811633146106d6576040516332dc95cb60e01b815260040160405180910390fd5b6106e08183610cc0565b6040516323b872dd60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906323b872dd9061073090309033908790600401611088565b5f604051808303815f87803b158015610747575f80fd5b505af1158015610759573d5f803e3d5ffd5b50506040514281528492503391507f563fc70fca9d440d883299c76a721644d5aca7c45df98aeb5292c4cb823579bf906020015b60405180910390a3506107ac60015f805160206110fa83398151915255565b50565b6107b7610bea565b6107bf610c16565b5f828152600260205260409020546001600160a01b0316806107f457604051630a49bbc360e21b815260040160405180910390fd5b6001600160a01b03821661081b5760405163d92e233d60e01b815260040160405180910390fd5b806001600160a01b0316826001600160a01b03161461084d5760405163c56a390560e01b815260040160405180910390fd5b6108578184610cc0565b6040516323b872dd60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906323b872dd906108a790309086908890600401611088565b5f604051808303815f87803b1580156108be575f80fd5b505af11580156108d0573d5f803e3d5ffd5b50505050816001600160a01b031683826001600160a01b03167ff4408f2b7cb3bb2b43ddb3715579eae68a12af5f2e6d938537db2be5e72f5f7d4260405161091a91815260200190565b60405180910390a4506104d760015f805160206110fa83398151915255565b610941610bea565b610949610cf0565b565b610953610bea565b6109495f610d45565b60015433906001600160a01b031681146109995760405163118cdaa760e01b81526001600160a01b03821660048201526024015b60405180910390fd5b6107ac81610d45565b6109aa610bea565b610949610d5e565b6109ba610c16565b6109c2610c31565b5f8181526002602052604090205433906001600160a01b0316156109f9576040516316e9ad8f60e01b815260040160405180910390fd5b806001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636352211e846040518263ffffffff1660e01b8152600401610a5191815260200190565b602060405180830381865afa158015610a6c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a90919061106d565b6001600160a01b031614610ab7576040516359dc379f60e01b815260040160405180910390fd5b610ac18183610c5c565b6040516323b872dd60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906323b872dd90610b1190849030908790600401611088565b5f604051808303815f87803b158015610b28575f80fd5b505af1158015610b3a573d5f803e3d5ffd5b5050505081816001600160a01b03167f6173e4d2d9dd52aae0ed37afed3adcf924a490639b759ca93d32dc43366c17d24260405161078d91815260200190565b610b82610bea565b600180546001600160a01b0383166001600160a01b03199091168117909155610bb25f546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b5f546001600160a01b031633146109495760405163118cdaa760e01b8152336004820152602401610990565b610c1e610da1565b60025f805160206110fa83398151915255565b600154600160a01b900460ff16156109495760405163d93c066560e01b815260040160405180910390fd5b5f81815260026020908152604080832080546001600160a01b039096166001600160a01b0319909616861790556003825280832042905593825260048082528483208054858552600584529584208690559082526001850181558252902090910155565b5f81815260026020908152604080832080546001600160a01b031916905560039091528120556104d78282610dd0565b610cf8610e9e565b6001805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600180546001600160a01b03191690556107ac81610ec8565b610d66610c31565b6001805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610d283390565b5f805160206110fa8339815191525460020361094957604051633ee5aeb560e01b815260040160405180910390fd5b6001600160a01b0382165f9081526004602090815260408083208484526005909252822054815491929091610e07906001906110ac565b9050808214610e60575f838281548110610e2357610e236110d1565b905f5260205f200154905080848481548110610e4157610e416110d1565b5f91825260208083209091019290925591825260059052604090208290555b82805480610e7057610e706110e5565b600190038181905f5260205f20015f9055905560055f8581526020019081526020015f205f90555050505050565b600154600160a01b900460ff1661094957604051638dfc202b60e01b815260040160405180910390fd5b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146107ac575f80fd5b5f8060408385031215610f3c575f80fd5b823591506020830135610f4e81610f17565b809150509250929050565b5f805f805f60808688031215610f6d575f80fd5b8535610f7881610f17565b94506020860135610f8881610f17565b935060408601359250606086013567ffffffffffffffff811115610faa575f80fd5b8601601f81018813610fba575f80fd5b803567ffffffffffffffff811115610fd0575f80fd5b886020828401011115610fe1575f80fd5b959894975092955050506020019190565b5f60208284031215611002575f80fd5b5035919050565b5f60208284031215611019575f80fd5b813561102481610f17565b9392505050565b602080825282518282018190525f918401906040840190835b81811015611062578351835260209384019390920191600101611044565b509095945050505050565b5f6020828403121561107d575f80fd5b815161102481610f17565b6001600160a01b039384168152919092166020820152604081019190915260600190565b818103818111156110cb57634e487b7160e01b5f52601160045260245ffd5b92915050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52603160045260245ffdfe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a2646970667358221220f8e5afe3df2897c05bd05e17e152d07acba805eed0e132300174b368b573437b64736f6c634300081a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0xF JUMPI PUSH0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x111 JUMPI PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x715018A6 GT PUSH2 0x9E JUMPI DUP1 PUSH4 0xA694FC3A GT PUSH2 0x6E JUMPI DUP1 PUSH4 0xA694FC3A EQ PUSH2 0x25C JUMPI DUP1 PUSH4 0xBAA51F86 EQ PUSH2 0x26F JUMPI DUP1 PUSH4 0xD56D229D EQ PUSH2 0x299 JUMPI DUP1 PUSH4 0xE30C3978 EQ PUSH2 0x2C0 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x2D1 JUMPI PUSH0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x715018A6 EQ PUSH2 0x234 JUMPI DUP1 PUSH4 0x79BA5097 EQ PUSH2 0x23C JUMPI DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x244 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x24C JUMPI PUSH0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x2B4BC300 GT PUSH2 0xE4 JUMPI DUP1 PUSH4 0x2B4BC300 EQ PUSH2 0x1C8 JUMPI DUP1 PUSH4 0x2E17DE78 EQ PUSH2 0x1E8 JUMPI DUP1 PUSH4 0x2F940C70 EQ PUSH2 0x1FB JUMPI DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0x20E JUMPI DUP1 PUSH4 0x5C975ABB EQ PUSH2 0x216 JUMPI PUSH0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xFA6F642 EQ PUSH2 0x115 JUMPI DUP1 PUSH4 0x150B7A02 EQ PUSH2 0x12A JUMPI DUP1 PUSH4 0x1B3253B0 EQ PUSH2 0x15B JUMPI DUP1 PUSH4 0x1DCAC94D EQ PUSH2 0x188 JUMPI JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH2 0x128 PUSH2 0x123 CALLDATASIZE PUSH1 0x4 PUSH2 0xF2B JUMP JUMPDEST PUSH2 0x2E4 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x13D PUSH2 0x138 CALLDATASIZE PUSH1 0x4 PUSH2 0xF59 JUMP JUMPDEST PUSH2 0x4DB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x17A PUSH2 0x169 CALLDATASIZE PUSH1 0x4 PUSH2 0xFF2 JUMP JUMPDEST PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x152 JUMP JUMPDEST PUSH2 0x1B0 PUSH2 0x196 CALLDATASIZE PUSH1 0x4 PUSH2 0xFF2 JUMP JUMPDEST PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x152 JUMP JUMPDEST PUSH2 0x1DB PUSH2 0x1D6 CALLDATASIZE PUSH1 0x4 PUSH2 0x1009 JUMP JUMPDEST PUSH2 0x607 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x152 SWAP2 SWAP1 PUSH2 0x102B JUMP JUMPDEST PUSH2 0x128 PUSH2 0x1F6 CALLDATASIZE PUSH1 0x4 PUSH2 0xFF2 JUMP JUMPDEST PUSH2 0x670 JUMP JUMPDEST PUSH2 0x128 PUSH2 0x209 CALLDATASIZE PUSH1 0x4 PUSH2 0xF2B JUMP JUMPDEST PUSH2 0x7AF JUMP JUMPDEST PUSH2 0x128 PUSH2 0x939 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x152 JUMP JUMPDEST PUSH2 0x128 PUSH2 0x94B JUMP JUMPDEST PUSH2 0x128 PUSH2 0x95C JUMP JUMPDEST PUSH2 0x128 PUSH2 0x9A2 JUMP JUMPDEST PUSH0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1B0 JUMP JUMPDEST PUSH2 0x128 PUSH2 0x26A CALLDATASIZE PUSH1 0x4 PUSH2 0xFF2 JUMP JUMPDEST PUSH2 0x9B2 JUMP JUMPDEST PUSH2 0x224 PUSH2 0x27D CALLDATASIZE PUSH1 0x4 PUSH2 0xFF2 JUMP JUMPDEST PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH2 0x1B0 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1B0 JUMP JUMPDEST PUSH2 0x128 PUSH2 0x2DF CALLDATASIZE PUSH1 0x4 PUSH2 0x1009 JUMP JUMPDEST PUSH2 0xB7A JUMP JUMPDEST PUSH2 0x2EC PUSH2 0xBEA JUMP JUMPDEST PUSH2 0x2F4 PUSH2 0xC16 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x31B JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH0 DUP3 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x350 JUMPI PUSH1 0x40 MLOAD PUSH4 0x82D272E3 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x31A9108F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP4 SWAP1 MSTORE ADDRESS SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP1 PUSH4 0x6352211E SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3B5 JUMPI RETURNDATASIZE PUSH0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3D9 SWAP2 SWAP1 PUSH2 0x106D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x400 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6BCD2437 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x23B872DD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP1 PUSH4 0x23B872DD SWAP1 PUSH2 0x450 SWAP1 ADDRESS SWAP1 DUP6 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x1088 JUMP JUMPDEST PUSH0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x467 JUMPI PUSH0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x479 JUMPI RETURNDATASIZE PUSH0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH0 REVERT JUMPDEST POP POP POP POP DUP2 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xC27A1277308B3908A0FB998812A60B1DA8911B8583F20BF8F98E5246DB8C47EF TIMESTAMP PUSH1 0x40 MLOAD PUSH2 0x4B9 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH2 0x4D7 PUSH1 0x1 PUSH0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x10FA DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SSTORE JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH0 PUSH2 0x4E4 PUSH2 0xC16 JUMP JUMPDEST PUSH2 0x4EC PUSH2 0xC31 JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0x535 JUMPI PUSH1 0x40 MLOAD PUSH4 0xDE1DB395 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH2 0x55C JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH0 DUP5 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x591 JUMPI PUSH1 0x40 MLOAD PUSH4 0x16E9AD8F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x59B DUP6 DUP6 PUSH2 0xC5C JUMP JUMPDEST DUP4 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x6173E4D2D9DD52AAE0ED37AFED3ADCF924A490639B759CA93D32DC43366C17D2 TIMESTAMP PUSH1 0x40 MLOAD PUSH2 0x5D7 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP PUSH4 0xA85BD01 PUSH1 0xE1 SHL PUSH2 0x5FE PUSH1 0x1 PUSH0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x10FA DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SSTORE JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD DUP4 MLOAD DUP2 DUP5 MUL DUP2 ADD DUP5 ADD SWAP1 SWAP5 MSTORE DUP1 DUP5 MSTORE PUSH1 0x60 SWAP4 SWAP3 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x664 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x650 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x678 PUSH2 0xC16 JUMP JUMPDEST PUSH0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP1 PUSH2 0x6AD JUMPI PUSH1 0x40 MLOAD PUSH4 0xA49BBC3 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND CALLER EQ PUSH2 0x6D6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x32DC95CB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x6E0 DUP2 DUP4 PUSH2 0xCC0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x23B872DD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP1 PUSH4 0x23B872DD SWAP1 PUSH2 0x730 SWAP1 ADDRESS SWAP1 CALLER SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x1088 JUMP JUMPDEST PUSH0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x747 JUMPI PUSH0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x759 JUMPI RETURNDATASIZE PUSH0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD TIMESTAMP DUP2 MSTORE DUP5 SWAP3 POP CALLER SWAP2 POP PUSH32 0x563FC70FCA9D440D883299C76A721644D5ACA7C45DF98AEB5292C4CB823579BF SWAP1 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP PUSH2 0x7AC PUSH1 0x1 PUSH0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x10FA DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SSTORE JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x7B7 PUSH2 0xBEA JUMP JUMPDEST PUSH2 0x7BF PUSH2 0xC16 JUMP JUMPDEST PUSH0 DUP3 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP1 PUSH2 0x7F4 JUMPI PUSH1 0x40 MLOAD PUSH4 0xA49BBC3 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x81B JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x84D JUMPI PUSH1 0x40 MLOAD PUSH4 0xC56A3905 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x857 DUP2 DUP5 PUSH2 0xCC0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x23B872DD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP1 PUSH4 0x23B872DD SWAP1 PUSH2 0x8A7 SWAP1 ADDRESS SWAP1 DUP7 SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0x1088 JUMP JUMPDEST PUSH0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x8BE JUMPI PUSH0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x8D0 JUMPI RETURNDATASIZE PUSH0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH0 REVERT JUMPDEST POP POP POP POP DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xF4408F2B7CB3BB2B43DDB3715579EAE68A12AF5F2E6D938537DB2BE5E72F5F7D TIMESTAMP PUSH1 0x40 MLOAD PUSH2 0x91A SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP PUSH2 0x4D7 PUSH1 0x1 PUSH0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x10FA DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SSTORE JUMP JUMPDEST PUSH2 0x941 PUSH2 0xBEA JUMP JUMPDEST PUSH2 0x949 PUSH2 0xCF0 JUMP JUMPDEST JUMP JUMPDEST PUSH2 0x953 PUSH2 0xBEA JUMP JUMPDEST PUSH2 0x949 PUSH0 PUSH2 0xD45 JUMP JUMPDEST PUSH1 0x1 SLOAD CALLER SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 EQ PUSH2 0x999 JUMPI PUSH1 0x40 MLOAD PUSH4 0x118CDAA7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x7AC DUP2 PUSH2 0xD45 JUMP JUMPDEST PUSH2 0x9AA PUSH2 0xBEA JUMP JUMPDEST PUSH2 0x949 PUSH2 0xD5E JUMP JUMPDEST PUSH2 0x9BA PUSH2 0xC16 JUMP JUMPDEST PUSH2 0x9C2 PUSH2 0xC31 JUMP JUMPDEST PUSH0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD CALLER SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x9F9 JUMPI PUSH1 0x40 MLOAD PUSH4 0x16E9AD8F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x6352211E DUP5 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA51 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xA6C JUMPI RETURNDATASIZE PUSH0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xA90 SWAP2 SWAP1 PUSH2 0x106D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0xAB7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x59DC379F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xAC1 DUP2 DUP4 PUSH2 0xC5C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x23B872DD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP1 PUSH4 0x23B872DD SWAP1 PUSH2 0xB11 SWAP1 DUP5 SWAP1 ADDRESS SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x1088 JUMP JUMPDEST PUSH0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xB28 JUMPI PUSH0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xB3A JUMPI RETURNDATASIZE PUSH0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH0 REVERT JUMPDEST POP POP POP POP DUP2 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x6173E4D2D9DD52AAE0ED37AFED3ADCF924A490639B759CA93D32DC43366C17D2 TIMESTAMP PUSH1 0x40 MLOAD PUSH2 0x78D SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH2 0xB82 PUSH2 0xBEA JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 SWAP2 AND DUP2 OR SWAP1 SWAP2 SSTORE PUSH2 0xBB2 PUSH0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP JUMP JUMPDEST PUSH0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x949 JUMPI PUSH1 0x40 MLOAD PUSH4 0x118CDAA7 PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x990 JUMP JUMPDEST PUSH2 0xC1E PUSH2 0xDA1 JUMP JUMPDEST PUSH1 0x2 PUSH0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x10FA DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SSTORE JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x949 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD93C0665 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP7 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 SWAP7 AND DUP7 OR SWAP1 SSTORE PUSH1 0x3 DUP3 MSTORE DUP1 DUP4 KECCAK256 TIMESTAMP SWAP1 SSTORE SWAP4 DUP3 MSTORE PUSH1 0x4 DUP1 DUP3 MSTORE DUP5 DUP4 KECCAK256 DUP1 SLOAD DUP6 DUP6 MSTORE PUSH1 0x5 DUP5 MSTORE SWAP6 DUP5 KECCAK256 DUP7 SWAP1 SSTORE SWAP1 DUP3 MSTORE PUSH1 0x1 DUP6 ADD DUP2 SSTORE DUP3 MSTORE SWAP1 KECCAK256 SWAP1 SWAP2 ADD SSTORE JUMP JUMPDEST PUSH0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE PUSH1 0x3 SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SSTORE PUSH2 0x4D7 DUP3 DUP3 PUSH2 0xDD0 JUMP JUMPDEST PUSH2 0xCF8 PUSH2 0xE9E JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND SWAP1 SSTORE PUSH32 0x5DB9EE0A495BF2E6FF9C91A7834C1BA4FDD244A5E8AA4E537BD38AEAE4B073AA CALLER JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE PUSH2 0x7AC DUP2 PUSH2 0xEC8 JUMP JUMPDEST PUSH2 0xD66 PUSH2 0xC31 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND PUSH1 0x1 PUSH1 0xA0 SHL OR SWAP1 SSTORE PUSH32 0x62E78CEA01BEE320CD4E420270B5EA74000D11B0C9F74754EBDBFC544B05A258 PUSH2 0xD28 CALLER SWAP1 JUMP JUMPDEST PUSH0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x10FA DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SLOAD PUSH1 0x2 SUB PUSH2 0x949 JUMPI PUSH1 0x40 MLOAD PUSH4 0x3EE5AEB5 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP5 DUP5 MSTORE PUSH1 0x5 SWAP1 SWAP3 MSTORE DUP3 KECCAK256 SLOAD DUP2 SLOAD SWAP2 SWAP3 SWAP1 SWAP2 PUSH2 0xE07 SWAP1 PUSH1 0x1 SWAP1 PUSH2 0x10AC JUMP JUMPDEST SWAP1 POP DUP1 DUP3 EQ PUSH2 0xE60 JUMPI PUSH0 DUP4 DUP3 DUP2 SLOAD DUP2 LT PUSH2 0xE23 JUMPI PUSH2 0xE23 PUSH2 0x10D1 JUMP JUMPDEST SWAP1 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 ADD SLOAD SWAP1 POP DUP1 DUP5 DUP5 DUP2 SLOAD DUP2 LT PUSH2 0xE41 JUMPI PUSH2 0xE41 PUSH2 0x10D1 JUMP JUMPDEST PUSH0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SWAP3 SWAP1 SWAP3 SSTORE SWAP2 DUP3 MSTORE PUSH1 0x5 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP3 SWAP1 SSTORE JUMPDEST DUP3 DUP1 SLOAD DUP1 PUSH2 0xE70 JUMPI PUSH2 0xE70 PUSH2 0x10E5 JUMP JUMPDEST PUSH1 0x1 SWAP1 SUB DUP2 DUP2 SWAP1 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 ADD PUSH0 SWAP1 SSTORE SWAP1 SSTORE PUSH1 0x5 PUSH0 DUP6 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH0 KECCAK256 PUSH0 SWAP1 SSTORE POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH2 0x949 JUMPI PUSH1 0x40 MLOAD PUSH4 0x8DFC202B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP3 DUP4 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x7AC JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xF3C JUMPI PUSH0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0xF4E DUP2 PUSH2 0xF17 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH0 DUP1 PUSH0 DUP1 PUSH0 PUSH1 0x80 DUP7 DUP9 SUB SLT ISZERO PUSH2 0xF6D JUMPI PUSH0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0xF78 DUP2 PUSH2 0xF17 JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH2 0xF88 DUP2 PUSH2 0xF17 JUMP JUMPDEST SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD SWAP3 POP PUSH1 0x60 DUP7 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xFAA JUMPI PUSH0 DUP1 REVERT JUMPDEST DUP7 ADD PUSH1 0x1F DUP2 ADD DUP9 SGT PUSH2 0xFBA JUMPI PUSH0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xFD0 JUMPI PUSH0 DUP1 REVERT JUMPDEST DUP9 PUSH1 0x20 DUP3 DUP5 ADD ADD GT ISZERO PUSH2 0xFE1 JUMPI PUSH0 DUP1 REVERT JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP3 SWAP6 POP POP POP PUSH1 0x20 ADD SWAP2 SWAP1 JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1002 JUMPI PUSH0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1019 JUMPI PUSH0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1024 DUP2 PUSH2 0xF17 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH0 SWAP2 DUP5 ADD SWAP1 PUSH1 0x40 DUP5 ADD SWAP1 DUP4 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1062 JUMPI DUP4 MLOAD DUP4 MSTORE PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x1044 JUMP JUMPDEST POP SWAP1 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x107D JUMPI PUSH0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x1024 DUP2 PUSH2 0xF17 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND DUP2 MSTORE SWAP2 SWAP1 SWAP3 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x10CB JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID SWAP12 PUSH24 0x9B17422D0DF92223018B32B4D1FA46E071723D6817E2486D STOP EXTCODESIZE 0xEC 0xC5 PUSH0 STOP LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xF8 0xE5 0xAF 0xE3 0xDF 0x28 SWAP8 0xC0 JUMPDEST 0xD0 MCOPY OR 0xE1 MSTORE 0xD0 PUSH27 0xCBA805EED0E132300174B368B573437B64736F6C634300081A0033 ","sourceMap":"1462:12831:28:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10346:460;;;;;;:::i;:::-;;:::i;:::-;;7482:571;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;;1672:33:30;;;1654:52;;1642:2;1627:18;7482:571:28;;;;;;;;12193:111;;;;;;:::i;:::-;12253:7;12279:18;;;:9;:18;;;;;;;12193:111;;;;2094:25:30;;;2082:2;2067:18;12193:111:28;1948:177:30;11887:114:28;;;;;;:::i;:::-;11950:7;11976:18;;;:9;:18;;;;;;-1:-1:-1;;;;;11976:18:28;;11887:114;;;;-1:-1:-1;;;;;2294:32:30;;;2276:51;;2264:2;2249:18;11887:114:28;2130:203:30;12753:135:28;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;8283:437::-;;;;;;:::i;:::-;;:::i;9467:561::-;;;;;;:::i;:::-;;:::i;11167:65::-;;;:::i;1726:84:18:-;1796:7;;-1:-1:-1;;;1796:7:18;;;;1726:84;;;3371:14:30;;3364:22;3346:41;;3334:2;3319:18;1726:84:18;3206:187:30;2293:101:2;;;:::i;2244:229:3:-;;;:::i;11066:61:28:-;;;:::i;1638:85:2:-;1684:7;1710:6;-1:-1:-1;;;;;1710:6:2;1638:85;;6381:430:28;;;;;;:::i;:::-;;:::i;11573:120::-;;;;;;:::i;:::-;11631:4;11654:18;;;:9;:18;;;;;;-1:-1:-1;;;;;11654:18:28;:32;;;11573:120;4770:36;;;;;1232:99:3;1311:13;;-1:-1:-1;;;;;1311:13:3;1232:99;;1649:178;;;;;;:::i;:::-;;:::i;10346:460:28:-;1531:13:2;:11;:13::i;:::-;3023:21:19::1;:19;:21::i;:::-;-1:-1:-1::0;;;;;10458:23:28;::::2;10454:49;;10490:13;;-1:-1:-1::0;;;10490:13:28::2;;;;;;;;;;;10454:49;10547:1;10517:18:::0;;;:9:::2;:18;::::0;;;;;-1:-1:-1;;;;;10517:18:28::2;:32:::0;10513:61:::2;;10558:16;;-1:-1:-1::0;;;10558:16:28::2;;;;;;;;;;;10513:61;10588:28;::::0;-1:-1:-1;;;10588:28:28;;::::2;::::0;::::2;2094:25:30::0;;;10628:4:28::2;::::0;-1:-1:-1;;;;;10588:11:28::2;:19;::::0;::::2;::::0;2067:18:30;;10588:28:28::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;10588:45:28::2;;10584:72;;10642:14;;-1:-1:-1::0;;;10642:14:28::2;;;;;;;;;;;10584:72;10667:59;::::0;-1:-1:-1;;;10667:59:28;;-1:-1:-1;;;;;10667:11:28::2;:24;::::0;::::2;::::0;:59:::2;::::0;10700:4:::2;::::0;10707:9;;10718:7;;10667:59:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;10774:7;10763:9;-1:-1:-1::0;;;;;10741:58:28::2;;10783:15;10741:58;;;;2094:25:30::0;;2082:2;2067:18;;1948:177;10741:58:28::2;;;;;;;;3065:20:19::1;2365:1:::0;-1:-1:-1;;;;;;;;;;;3972:62:19;3749:292;3065:20:::1;10346:460:28::0;;:::o;7482:571::-;7673:6;3023:21:19;:19;:21::i;:::-;1350:19:18::1;:17;:19::i;:::-;7695:10:28::2;-1:-1:-1::0;;;;;7717:11:28::2;7695:34;;7691:71;;7738:24;;-1:-1:-1::0;;;7738:24:28::2;;;;;;;;;;;7691:71;-1:-1:-1::0;;;;;7776:18:28;::::2;7772:44;;7803:13;;-1:-1:-1::0;;;7803:13:28::2;;;;;;;;;;;7772:44;7860:1;7830:18:::0;;;:9:::2;:18;::::0;;;;;-1:-1:-1;;;;;7830:18:28::2;:32:::0;7826:65:::2;;7871:20;;-1:-1:-1::0;;;7871:20:28::2;;;;;;;;;;;7826:65;7902:27;7915:4;7921:7;7902:12;:27::i;:::-;7962:7;7956:4;-1:-1:-1::0;;;;;7944:43:28::2;;7971:15;7944:43;;;;2094:25:30::0;;2082:2;2067:18;;1948:177;7944:43:28::2;;;;;;;;-1:-1:-1::0;;;;3065:20:19;2365:1;-1:-1:-1;;;;;;;;;;;3972:62:19;3749:292;3065:20;7482:571:28;;;;;;;:::o;12753:135::-;-1:-1:-1;;;;;12858:23:28;;;;;;:15;:23;;;;;;;;;12851:30;;;;;;;;;;;;;;;;;12823:16;;12851:30;;;12858:23;12851:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12753:135;;;:::o;8283:437::-;3023:21:19;:19;:21::i;:::-;8349:22:28::1;8374:18:::0;;;:9:::1;:18;::::0;;;;;-1:-1:-1;;;;;8374:18:28::1;::::0;8402:57:::1;;8443:16;;-1:-1:-1::0;;;8443:16:28::1;;;;;;;;;;;8402:57;-1:-1:-1::0;;;;;8473:28:28;::::1;8491:10;8473:28;8469:60;;8510:19;;-1:-1:-1::0;;;8510:19:28::1;;;;;;;;;;;8469:60;8540:36;8552:14;8568:7;8540:11;:36::i;:::-;8586:60;::::0;-1:-1:-1;;;8586:60:28;;-1:-1:-1;;;;;8586:11:28::1;:24;::::0;::::1;::::0;:60:::1;::::0;8619:4:::1;::::0;8626:10:::1;::::0;8638:7;;8586:60:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;8662:51:28::1;::::0;8697:15:::1;2094:25:30::0;;8688:7:28;;-1:-1:-1;8676:10:28::1;::::0;-1:-1:-1;8662:51:28::1;::::0;2082:2:30;2067:18;8662:51:28::1;;;;;;;;8339:381;3065:20:19::0;2365:1;-1:-1:-1;;;;;;;;;;;3972:62:19;3749:292;3065:20;8283:437:28;:::o;9467:561::-;1531:13:2;:11;:13::i;:::-;3023:21:19::1;:19;:21::i;:::-;9572:22:28::2;9597:18:::0;;;:9:::2;:18;::::0;;;;;-1:-1:-1;;;;;9597:18:28::2;::::0;9625:57:::2;;9666:16;;-1:-1:-1::0;;;9666:16:28::2;;;;;;;;;;;9625:57;-1:-1:-1::0;;;;;9696:23:28;::::2;9692:49;;9728:13;;-1:-1:-1::0;;;9728:13:28::2;;;;;;;;;;;9692:49;9768:14;-1:-1:-1::0;;;;;9755:27:28::2;:9;-1:-1:-1::0;;;;;9755:27:28::2;;9751:67;;9791:27;;-1:-1:-1::0;;;9791:27:28::2;;;;;;;;;;;9751:67;9829:36;9841:14;9857:7;9829:11;:36::i;:::-;9875:59;::::0;-1:-1:-1;;;9875:59:28;;-1:-1:-1;;;;;9875:11:28::2;:24;::::0;::::2;::::0;:59:::2;::::0;9908:4:::2;::::0;9915:9;;9926:7;;9875:59:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;9994:9;-1:-1:-1::0;;;;;9950:71:28::2;9985:7;9969:14;-1:-1:-1::0;;;;;9950:71:28::2;;10005:15;9950:71;;;;2094:25:30::0;;2082:2;2067:18;;1948:177;9950:71:28::2;;;;;;;;9562:466;3065:20:19::1;2365:1:::0;-1:-1:-1;;;;;;;;;;;3972:62:19;3749:292;11167:65:28;1531:13:2;:11;:13::i;:::-;11215:10:28::1;:8;:10::i;:::-;11167:65::o:0;2293:101:2:-;1531:13;:11;:13::i;:::-;2357:30:::1;2384:1;2357:18;:30::i;2244:229:3:-:0;1311:13;;735:10:16;;-1:-1:-1;;;;;1311:13:3;2339:24;;2335:96;;2386:34;;-1:-1:-1;;;2386:34:3;;-1:-1:-1;;;;;2294:32:30;;2386:34:3;;;2276:51:30;2249:18;;2386:34:3;;;;;;;;2335:96;2440:26;2459:6;2440:18;:26::i;11066:61:28:-;1531:13:2;:11;:13::i;:::-;11112:8:28::1;:6;:8::i;6381:430::-:0;3023:21:19;:19;:21::i;:::-;1350:19:18::1;:17;:19::i;:::-;6459:14:28::2;6500:18:::0;;;:9:::2;:18;::::0;;;;;6476:10:::2;::::0;-1:-1:-1;;;;;6500:18:28::2;:32:::0;6496:65:::2;;6541:20;;-1:-1:-1::0;;;6541:20:28::2;;;;;;;;;;;6496:65;6607:6;-1:-1:-1::0;;;;;6575:38:28::2;:11;-1:-1:-1::0;;;;;6575:19:28::2;;6595:7;6575:28;;;;;;;;;;;;;2094:25:30::0;;2082:2;2067:18;;1948:177;6575:28:28::2;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;6575:38:28::2;;6571:66;;6622:15;;-1:-1:-1::0;;;6622:15:28::2;;;;;;;;;;;6571:66;6648:29;6661:6;6669:7;6648:12;:29::i;:::-;6687:56;::::0;-1:-1:-1;;;6687:56:28;;-1:-1:-1;;;;;6687:11:28::2;:24;::::0;::::2;::::0;:56:::2;::::0;6712:6;;6728:4:::2;::::0;6735:7;;6687:56:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;6779:7;6771:6;-1:-1:-1::0;;;;;6759:45:28::2;;6788:15;6759:45;;;;2094:25:30::0;;2082:2;2067:18;;1948:177;1649:178:3;1531:13:2;:11;:13::i;:::-;1738::3::1;:24:::0;;-1:-1:-1;;;;;1738:24:3;::::1;-1:-1:-1::0;;;;;;1738:24:3;;::::1;::::0;::::1;::::0;;;1802:7:::1;1684::2::0;1710:6;-1:-1:-1;;;;;1710:6:2;;1638:85;1802:7:3::1;-1:-1:-1::0;;;;;1777:43:3::1;;;;;;;;;;;1649:178:::0;:::o;1796:162:2:-;1684:7;1710:6;-1:-1:-1;;;;;1710:6:2;735:10:16;1855:23:2;1851:101;;1901:40;;-1:-1:-1;;;1901:40:2;;735:10:16;1901:40:2;;;2276:51:30;2249:18;;1901:40:2;2130:203:30;3749:292:19;3872:25;:23;:25::i;:::-;2407:1;-1:-1:-1;;;;;;;;;;;3972:62:19;3749:292::o;1878:128:18:-;1796:7;;-1:-1:-1;;;1796:7:18;;;;1939:61;;;1974:15;;-1:-1:-1;;;1974:15:18;;;;;;;;;;;13158:270:28;13232:18;;;;:9;:18;;;;;;;;:27;;-1:-1:-1;;;;;13232:27:28;;;-1:-1:-1;;;;;;13232:27:28;;;;;;;13269:9;:18;;;;;13290:15;13269:36;;13344:23;;;:15;:23;;;;;;:30;;13315:26;;;:17;:26;;;;;:59;;;13384:23;;;13232:27;13384:37;;;;;;;;;;;;13158:270::o;13514:184::-;13594:18;;;;:9;:18;;;;;;;;13587:25;;-1:-1:-1;;;;;;13587:25:28;;;13629:9;:18;;;;;13622:25;13657:34;13675:6;13604:7;13657:17;:34::i;2586:117:18:-;1597:16;:14;:16::i;:::-;2644:7:::1;:15:::0;;-1:-1:-1;;;;2644:15:18::1;::::0;;2674:22:::1;735:10:16::0;2683:12:18::1;2674:22;::::0;-1:-1:-1;;;;;2294:32:30;;;2276:51;;2264:2;2249:18;2674:22:18::1;;;;;;;2586:117::o:0;2011:153:3:-;2100:13;2093:20;;-1:-1:-1;;;;;;2093:20:3;;;2123:34;2148:8;2123:24;:34::i;2339:115:18:-;1350:19;:17;:19::i;:::-;2408:4:::1;2398:14:::0;;-1:-1:-1;;;;2398:14:18::1;-1:-1:-1::0;;;2398:14:18::1;::::0;;2427:20:::1;2434:12;735:10:16::0;;656:96;3586:157:19;-1:-1:-1;;;;;;;;;;;4560:52:19;2407:1;4560:63;3644:93;;3696:30;;-1:-1:-1;;;3696:30:19;;;;;;;;;;;13799:492:28;-1:-1:-1;;;;;13905:23:28;;13878:24;13905:23;;;:15;:23;;;;;;;;13954:26;;;:17;:26;;;;;;14010:13;;13905:23;;13954:26;;14010:17;;14026:1;;14010:17;:::i;:::-;13990:37;;14051:9;14042:5;:18;14038:181;;14076:19;14098:6;14105:9;14098:17;;;;;;;;:::i;:::-;;;;;;;;;14076:39;;14145:11;14129:6;14136:5;14129:13;;;;;;;;:::i;:::-;;;;;;;;;;;;:27;;;;14170:30;;;:17;:30;;;;;:38;;;14038:181;14229:6;:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;14258:17;:26;14276:7;14258:26;;;;;;;;;;;14251:33;;;13868:423;;;13799:492;;:::o;2078:126:18:-;1796:7;;-1:-1:-1;;;1796:7:18;;;;2136:62;;2172:15;;-1:-1:-1;;;2172:15:18;;;;;;;;;;;2912:187:2;2985:16;3004:6;;-1:-1:-1;;;;;3020:17:2;;;-1:-1:-1;;;;;;3020:17:2;;;;;;3052:40;;3004:6;;;;;;;3052:40;;2985:16;3052:40;2975:124;2912:187;:::o;14:131:30:-;-1:-1:-1;;;;;89:31:30;;79:42;;69:70;;135:1;132;125:12;150:367;218:6;226;279:2;267:9;258:7;254:23;250:32;247:52;;;295:1;292;285:12;247:52;340:23;;;-1:-1:-1;439:2:30;424:18;;411:32;452:33;411:32;452:33;:::i;:::-;504:7;494:17;;;150:367;;;;;:::o;522:983::-;619:6;627;635;643;651;704:3;692:9;683:7;679:23;675:33;672:53;;;721:1;718;711:12;672:53;760:9;747:23;779:31;804:5;779:31;:::i;:::-;829:5;-1:-1:-1;886:2:30;871:18;;858:32;899:33;858:32;899:33;:::i;:::-;951:7;-1:-1:-1;1031:2:30;1016:18;;1003:32;;-1:-1:-1;1112:2:30;1097:18;;1084:32;1139:18;1128:30;;1125:50;;;1171:1;1168;1161:12;1125:50;1194:22;;1247:4;1239:13;;1235:27;-1:-1:-1;1225:55:30;;1276:1;1273;1266:12;1225:55;1316:2;1303:16;1342:18;1334:6;1331:30;1328:50;;;1374:1;1371;1364:12;1328:50;1419:7;1414:2;1405:6;1401:2;1397:15;1393:24;1390:37;1387:57;;;1440:1;1437;1430:12;1387:57;522:983;;;;-1:-1:-1;522:983:30;;-1:-1:-1;;;1471:2:30;1463:11;;1493:6;522:983::o;1717:226::-;1776:6;1829:2;1817:9;1808:7;1804:23;1800:32;1797:52;;;1845:1;1842;1835:12;1797:52;-1:-1:-1;1890:23:30;;1717:226;-1:-1:-1;1717:226:30:o;2338:247::-;2397:6;2450:2;2438:9;2429:7;2425:23;2421:32;2418:52;;;2466:1;2463;2456:12;2418:52;2505:9;2492:23;2524:31;2549:5;2524:31;:::i;:::-;2574:5;2338:247;-1:-1:-1;;;2338:247:30:o;2590:611::-;2780:2;2792:21;;;2862:13;;2765:18;;;2884:22;;;2732:4;;2963:15;;;2937:2;2922:18;;;2732:4;3006:169;3020:6;3017:1;3014:13;3006:169;;;3081:13;;3069:26;;3124:2;3150:15;;;;3115:12;;;;3042:1;3035:9;3006:169;;;-1:-1:-1;3192:3:30;;2590:611;-1:-1:-1;;;;;2590:611:30:o;3622:251::-;3692:6;3745:2;3733:9;3724:7;3720:23;3716:32;3713:52;;;3761:1;3758;3751:12;3713:52;3793:9;3787:16;3812:31;3837:5;3812:31;:::i;3878:371::-;-1:-1:-1;;;;;4098:32:30;;;4080:51;;4167:32;;;;4162:2;4147:18;;4140:60;4231:2;4216:18;;4209:34;;;;4068:2;4053:18;;3878:371::o;4254:225::-;4321:9;;;4342:11;;;4339:134;;;4395:10;4390:3;4386:20;4383:1;4376:31;4430:4;4427:1;4420:15;4458:4;4455:1;4448:15;4339:134;4254:225;;;;:::o;4484:127::-;4545:10;4540:3;4536:20;4533:1;4526:31;4576:4;4573:1;4566:15;4600:4;4597:1;4590:15;4616:127;4677:10;4672:3;4668:20;4665:1;4658:31;4708:4;4705:1;4698:15;4732:4;4729:1;4722:15"},"methodIdentifiers":{"acceptOwnership()":"79ba5097","emergencyWithdraw(uint256,address)":"2f940c70","getWalletStakedTokens(address)":"2b4bc300","isStaked(uint256)":"baa51f86","nftContract()":"d56d229d","onERC721Received(address,address,uint256,bytes)":"150b7a02","owner()":"8da5cb5b","pause()":"8456cb59","paused()":"5c975abb","pendingOwner()":"e30c3978","renounceOwnership()":"715018a6","rescueUntrackedToken(uint256,address)":"0fa6f642","stake(uint256)":"a694fc3a","stakedAtOf(uint256)":"1b3253b0","stakedOwnerOf(uint256)":"1dcac94d","transferOwnership(address)":"f2fde38b","unpause()":"3f4ba83a","unstake(uint256)":"2e17de78"}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"nftContract_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"EnforcedPause\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExpectedPause\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidEmergencyRecipient\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotOriginalStaker\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotTokenOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokenAlreadyStaked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokenIsTracked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokenNotHeld\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokenNotStaked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnsupportedNFTContract\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"originalStaker\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"withdrawnAt\",\"type\":\"uint256\"}],\"name\":\"EmergencyWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stakedAt\",\"type\":\"uint256\"}],\"name\":\"TokenStaked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"unstakedAt\",\"type\":\"uint256\"}],\"name\":\"TokenUnstaked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rescuedAt\",\"type\":\"uint256\"}],\"name\":\"UntrackedTokenRescued\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"emergencyWithdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"wallet\",\"type\":\"address\"}],\"name\":\"getWalletStakedTokens\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"isStaked\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nftContract\",\"outputs\":[{\"internalType\":\"contract IERC721\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC721Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"rescueUntrackedToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"stake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"stakedAtOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"stakedOwnerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"unstake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Pause gates new staking only. Unstaking is always available so players can always recover their assets. emergencyWithdraw is an explicit, named, and event-emitting admin path \\u2014 it is not hidden.\",\"errors\":{\"EnforcedPause()\":[{\"details\":\"The operation failed because the contract is paused.\"}],\"ExpectedPause()\":[{\"details\":\"The operation failed because the contract is not paused.\"}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"ReentrancyGuardReentrantCall()\":[{\"details\":\"Unauthorized reentrant call.\"}]},\"events\":{\"EmergencyWithdrawn(address,uint256,address,uint256)\":{\"params\":{\"originalStaker\":\"The wallet that originally staked the token.\",\"recipient\":\"The address that received the token.\",\"tokenId\":\"The affected NFT token ID.\",\"withdrawnAt\":\"Block timestamp at the moment of the withdrawal.\"}},\"Paused(address)\":{\"details\":\"Emitted when the pause is triggered by `account`.\"},\"TokenStaked(address,uint256,uint256)\":{\"params\":{\"stakedAt\":\"Block timestamp at the moment of staking.\",\"staker\":\"The wallet address that owns and staked the token.\",\"tokenId\":\"The staked NFT token ID.\"}},\"TokenUnstaked(address,uint256,uint256)\":{\"params\":{\"staker\":\"The wallet address that originally staked (and receives back) the token.\",\"tokenId\":\"The unstaked NFT token ID.\",\"unstakedAt\":\"Block timestamp at the moment of unstaking.\"}},\"Unpaused(address)\":{\"details\":\"Emitted when the pause is lifted by `account`.\"}},\"kind\":\"dev\",\"methods\":{\"acceptOwnership()\":{\"details\":\"The new owner accepts the ownership transfer.\"},\"constructor\":{\"params\":{\"initialOwner_\":\"Initial contract owner. Mainnet deployments should use a multisig.\",\"nftContract_\":\"Address of the TricksforBoosterNFT contract.\"}},\"emergencyWithdraw(uint256,address)\":{\"params\":{\"recipient\":\"The address to send the token to.\",\"tokenId\":\"The token ID to withdraw.\"}},\"getWalletStakedTokens(address)\":{\"details\":\"Ordering is not guaranteed. Tokens are stored in an array with swap-and-pop removal: when a token is unstaked or emergency-withdrawn, the last element in the array takes its position. Do not rely on index stability across state-changing transactions.\",\"params\":{\"wallet\":\"The address to query.\"}},\"isStaked(uint256)\":{\"params\":{\"tokenId\":\"The token ID to query.\"}},\"onERC721Received(address,address,uint256,bytes)\":{\"params\":{\"from\":\"The address that previously owned the token (recorded as staker).\",\"tokenId\":\"The token ID being transferred.\"},\"returns\":{\"_0\":\"The ERC-721 receiver magic value confirming acceptance.\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"paused()\":{\"details\":\"Returns true if the contract is paused, and false otherwise.\"},\"pendingOwner()\":{\"details\":\"Returns the address of the pending owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"rescueUntrackedToken(uint256,address)\":{\"params\":{\"recipient\":\"The non-zero address that receives the recovered token.\",\"tokenId\":\"The untracked token held by this contract.\"}},\"stake(uint256)\":{\"params\":{\"tokenId\":\"The token ID to stake.\"}},\"stakedAtOf(uint256)\":{\"params\":{\"tokenId\":\"The token ID to query.\"}},\"stakedOwnerOf(uint256)\":{\"params\":{\"tokenId\":\"The token ID to query.\"}},\"transferOwnership(address)\":{\"details\":\"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner. Setting `newOwner` to the zero address is allowed; this can be used to cancel an initiated ownership transfer.\"},\"unstake(uint256)\":{\"params\":{\"tokenId\":\"The token ID to unstake.\"}}},\"stateVariables\":{\"_stakedAt\":{\"details\":\"Maps tokenId \\u2192 block.timestamp at which the token was staked.\"},\"_stakedBy\":{\"details\":\"Maps tokenId \\u2192 original staker address. Zero address means not staked.\"},\"_walletTokenIds\":{\"details\":\"Maps staker address \\u2192 list of currently staked token IDs.\"},\"_walletTokenIndex\":{\"details\":\"Maps tokenId \\u2192 index in _walletTokenIds[staker] for O(1) removal.\"}},\"title\":\"TricksforBoosterStaking\",\"version\":1},\"userdoc\":{\"errors\":{\"InvalidEmergencyRecipient()\":[{\"notice\":\"Emergency withdrawals can only return a tracked token to its original staker.\"}],\"NotOriginalStaker()\":[{\"notice\":\"Caller is not the original staker of this token.\"}],\"NotTokenOwner()\":[{\"notice\":\"Caller does not own the token they are trying to stake.\"}],\"TokenAlreadyStaked()\":[{\"notice\":\"Token is already staked.\"}],\"TokenIsTracked()\":[{\"notice\":\"Rescue is only available for tokens that have no staking record.\"}],\"TokenNotHeld()\":[{\"notice\":\"Rescue requires the staking contract to currently hold the token.\"}],\"TokenNotStaked()\":[{\"notice\":\"Token is not currently staked.\"}],\"UnsupportedNFTContract()\":[{\"notice\":\"Token received from an unsupported NFT contract.\"}],\"ZeroAddress()\":[{\"notice\":\"Zero address supplied where a non-zero address is required.\"}]},\"events\":{\"EmergencyWithdrawn(address,uint256,address,uint256)\":{\"notice\":\"Emitted when an owner-initiated emergency withdrawal occurs. This is the only admin path that moves a user's staked NFT without their consent. It is explicitly named, event-emitting, and documented here.\"},\"TokenStaked(address,uint256,uint256)\":{\"notice\":\"Emitted when a token is successfully staked.\"},\"TokenUnstaked(address,uint256,uint256)\":{\"notice\":\"Emitted when a token is successfully unstaked.\"},\"UntrackedTokenRescued(address,uint256,uint256)\":{\"notice\":\"Emitted when an untracked NFT sent with transferFrom is recovered by the owner.\"}},\"kind\":\"user\",\"methods\":{\"emergencyWithdraw(uint256,address)\":{\"notice\":\"Emergency withdrawal of a staked token by the contract owner. Use only in exceptional circumstances (e.g., critical contract bug). This is the only admin path that moves a user's staked NFT without their direct action. It is explicitly named, emits EmergencyWithdrawn, and is documented in this contract and the project's architecture documentation.\"},\"getWalletStakedTokens(address)\":{\"notice\":\"Returns the list of token IDs currently staked by the given wallet.\"},\"isStaked(uint256)\":{\"notice\":\"Returns true if the given token is currently staked.\"},\"nftContract()\":{\"notice\":\"The ERC-721 NFT contract whose tokens this staking contract manages.\"},\"onERC721Received(address,address,uint256,bytes)\":{\"notice\":\"Handles the receipt of a Booster NFT transferred via safeTransferFrom. Only accepts tokens from the configured nftContract; reverts for all others. Records `from` as the staker and emits TokenStaked \\u2014 functionally equivalent to calling stake() but triggered by safeTransferFrom rather than approve+stake. Not available while paused (mirrors stake() pause behaviour).\"},\"pause()\":{\"notice\":\"Pauses new staking. Unstaking remains available while paused.\"},\"rescueUntrackedToken(uint256,address)\":{\"notice\":\"Recovers an NFT that was sent directly with transferFrom and therefore did not invoke onERC721Received or create a staking record.\"},\"stake(uint256)\":{\"notice\":\"Stakes a Booster NFT. The caller must have first approved this contract (or set approval for all) on the NFT contract. Custody of the token is transferred to this contract.\"},\"stakedAtOf(uint256)\":{\"notice\":\"Returns the block timestamp at which a token was staked. Returns zero if the token is not currently staked.\"},\"stakedOwnerOf(uint256)\":{\"notice\":\"Returns the original staker of a currently staked token. Returns the zero address if the token is not staked.\"},\"unpause()\":{\"notice\":\"Unpauses staking.\"},\"unstake(uint256)\":{\"notice\":\"Unstakes a Booster NFT and returns it to the original staker. Always available \\u2014 not gated by pause \\u2014 so players can always recover assets.\"}},\"notice\":\"Custodial staking contract for Tricksfor Booster NFTs. Players transfer their NFTs into this contract to stake them and retrieve them when they unstake. Staking state and timestamps are recorded on-chain via integration-critical events consumed by the Tricksfor backend indexer. Responsibilities: - Accepting NFT custody during staking - Emitting TokenStaked / TokenUnstaked events for backend log processing - Providing read methods (isStaked, stakedOwnerOf) consistent with event state Not responsible for: - Reward calculation or distribution - Booster tier or multiplier classification - Game logic or settlement\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/TricksforBoosterStaking.sol\":\"TricksforBoosterStaking\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"@openzeppelin/contracts/access/Ownable2Step.sol\":{\"keccak256\":\"0xdcad8898fda432696597752e8ec361b87d85c82cb258115427af006dacf7128c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e2c9d517f0c136d54bd00cd57959d25681d4d6273f5bbbc263afe228303772f0\",\"dweb:/ipfs/QmReNFjXBiufByiAAzfSQ2SM5r3qeUErn46BmN3yVRvrek\"]},\"@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0xf78f05f3b8c9f75570e85300d7b4600d7f6f6a198449273f31d44c1641adb46f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e28b872613b45e0e801d4995aa4380be2531147bfe2d85c1d6275f1de514fba3\",\"dweb:/ipfs/QmeeFcfShHYaS3BdgVj78nxR28ZaVUwbvr66ud8bT6kzw9\"]},\"@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol\":{\"keccak256\":\"0x88cd5e3bee2e8c36b8d9058fbcaa81ad5704281b25634122234b55ea853d8055\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8dc7e7ab5b8ea36c15027ab04221b05d1c970f47a53e9fd47ead8ca665d49c7e\",\"dweb:/ipfs/Qmeeph7fsDyfRr8vb2L8KcDEmKPb224TAayMvgqgGAnqpL\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"@openzeppelin/contracts/utils/Pausable.sol\":{\"keccak256\":\"0xdb484371dfbb848cb6f5d70464e9ac9b2900e4164ead76bbce4fef0b44bcc68f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f9d6f6f6600a2bec622f699081b58350873b5e63ce05464d17d674a290bb8a7c\",\"dweb:/ipfs/QmQKVzSQY1PM3Bid4QhgVVZyx6B4Jx7XgaQzLKHj38vJz8\"]},\"@openzeppelin/contracts/utils/ReentrancyGuard.sol\":{\"keccak256\":\"0xa516cbf1c7d15d3517c2d668601ce016c54395bf5171918a14e2686977465f53\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e1d079e8edfb58efd23a311e315a4807b01b5d1cf153f8fa2d0608b9dec3e99\",\"dweb:/ipfs/QmTBExeX2SDTkn5xbk5ssbYSx7VqRp9H4Ux1CY4uQM4b9N\"]},\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b\",\"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617\",\"dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u\"]},\"contracts/TricksforBoosterStaking.sol\":{\"keccak256\":\"0x3b9c56329e3811131ccbbafcdd6bd37f1e96603871606b08e3b3b078fb264854\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be76e0edbb731951fd5a577642d2d226dd1b5ce7b3100887f14983d22a0e9b16\",\"dweb:/ipfs/QmVbA1mdJuYNW85tbaeSwztcejg7fpRit3K1beVtLAMX2L\"]}},\"version\":1}","storageLayout":{"storage":[{"astId":387,"contract":"contracts/TricksforBoosterStaking.sol:TricksforBoosterStaking","label":"_owner","offset":0,"slot":"0","type":"t_address"},{"astId":535,"contract":"contracts/TricksforBoosterStaking.sol:TricksforBoosterStaking","label":"_pendingOwner","offset":0,"slot":"1","type":"t_address"},{"astId":3968,"contract":"contracts/TricksforBoosterStaking.sol:TricksforBoosterStaking","label":"_paused","offset":20,"slot":"1","type":"t_bool"},{"astId":9793,"contract":"contracts/TricksforBoosterStaking.sol:TricksforBoosterStaking","label":"_stakedBy","offset":0,"slot":"2","type":"t_mapping(t_uint256,t_address)"},{"astId":9798,"contract":"contracts/TricksforBoosterStaking.sol:TricksforBoosterStaking","label":"_stakedAt","offset":0,"slot":"3","type":"t_mapping(t_uint256,t_uint256)"},{"astId":9804,"contract":"contracts/TricksforBoosterStaking.sol:TricksforBoosterStaking","label":"_walletTokenIds","offset":0,"slot":"4","type":"t_mapping(t_address,t_array(t_uint256)dyn_storage)"},{"astId":9809,"contract":"contracts/TricksforBoosterStaking.sol:TricksforBoosterStaking","label":"_walletTokenIndex","offset":0,"slot":"5","type":"t_mapping(t_uint256,t_uint256)"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_uint256)dyn_storage":{"base":"t_uint256","encoding":"dynamic_array","label":"uint256[]","numberOfBytes":"32"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_mapping(t_address,t_array(t_uint256)dyn_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256[])","numberOfBytes":"32","value":"t_array(t_uint256)dyn_storage"},"t_mapping(t_uint256,t_address)":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => address)","numberOfBytes":"32","value":"t_address"},"t_mapping(t_uint256,t_uint256)":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"errors":{"InvalidEmergencyRecipient()":[{"notice":"Emergency withdrawals can only return a tracked token to its original staker."}],"NotOriginalStaker()":[{"notice":"Caller is not the original staker of this token."}],"NotTokenOwner()":[{"notice":"Caller does not own the token they are trying to stake."}],"TokenAlreadyStaked()":[{"notice":"Token is already staked."}],"TokenIsTracked()":[{"notice":"Rescue is only available for tokens that have no staking record."}],"TokenNotHeld()":[{"notice":"Rescue requires the staking contract to currently hold the token."}],"TokenNotStaked()":[{"notice":"Token is not currently staked."}],"UnsupportedNFTContract()":[{"notice":"Token received from an unsupported NFT contract."}],"ZeroAddress()":[{"notice":"Zero address supplied where a non-zero address is required."}]},"events":{"EmergencyWithdrawn(address,uint256,address,uint256)":{"notice":"Emitted when an owner-initiated emergency withdrawal occurs. This is the only admin path that moves a user's staked NFT without their consent. It is explicitly named, event-emitting, and documented here."},"TokenStaked(address,uint256,uint256)":{"notice":"Emitted when a token is successfully staked."},"TokenUnstaked(address,uint256,uint256)":{"notice":"Emitted when a token is successfully unstaked."},"UntrackedTokenRescued(address,uint256,uint256)":{"notice":"Emitted when an untracked NFT sent with transferFrom is recovered by the owner."}},"kind":"user","methods":{"emergencyWithdraw(uint256,address)":{"notice":"Emergency withdrawal of a staked token by the contract owner. Use only in exceptional circumstances (e.g., critical contract bug). This is the only admin path that moves a user's staked NFT without their direct action. It is explicitly named, emits EmergencyWithdrawn, and is documented in this contract and the project's architecture documentation."},"getWalletStakedTokens(address)":{"notice":"Returns the list of token IDs currently staked by the given wallet."},"isStaked(uint256)":{"notice":"Returns true if the given token is currently staked."},"nftContract()":{"notice":"The ERC-721 NFT contract whose tokens this staking contract manages."},"onERC721Received(address,address,uint256,bytes)":{"notice":"Handles the receipt of a Booster NFT transferred via safeTransferFrom. Only accepts tokens from the configured nftContract; reverts for all others. Records `from` as the staker and emits TokenStaked — functionally equivalent to calling stake() but triggered by safeTransferFrom rather than approve+stake. Not available while paused (mirrors stake() pause behaviour)."},"pause()":{"notice":"Pauses new staking. Unstaking remains available while paused."},"rescueUntrackedToken(uint256,address)":{"notice":"Recovers an NFT that was sent directly with transferFrom and therefore did not invoke onERC721Received or create a staking record."},"stake(uint256)":{"notice":"Stakes a Booster NFT. The caller must have first approved this contract (or set approval for all) on the NFT contract. Custody of the token is transferred to this contract."},"stakedAtOf(uint256)":{"notice":"Returns the block timestamp at which a token was staked. Returns zero if the token is not currently staked."},"stakedOwnerOf(uint256)":{"notice":"Returns the original staker of a currently staked token. Returns the zero address if the token is not staked."},"unpause()":{"notice":"Unpauses staking."},"unstake(uint256)":{"notice":"Unstakes a Booster NFT and returns it to the original staker. Always available — not gated by pause — so players can always recover assets."}},"notice":"Custodial staking contract for Tricksfor Booster NFTs. Players transfer their NFTs into this contract to stake them and retrieve them when they unstake. Staking state and timestamps are recorded on-chain via integration-critical events consumed by the Tricksfor backend indexer. Responsibilities: - Accepting NFT custody during staking - Emitting TokenStaked / TokenUnstaked events for backend log processing - Providing read methods (isStaked, stakedOwnerOf) consistent with event state Not responsible for: - Reward calculation or distribution - Booster tier or multiplier classification - Game logic or settlement","version":1}}},"contracts/test/ReentrantERC721.sol":{"IReentrantStakingTarget":{"abi":[{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"stake(uint256)":"a694fc3a"}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"stake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/test/ReentrantERC721.sol\":\"IReentrantStakingTarget\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/test/ReentrantERC721.sol\":{\"keccak256\":\"0x8ebe653ea43a215fd1ec9d1dcd88f347d972fb07a16665155eabcbfb1c8b2d3c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a552d63277936a9176f59919e274068c73d1b98e5f4fd693ecf93d35f7e1d31\",\"dweb:/ipfs/QmWrZLhASr37r5BqNTLAAaySLvvsV2LvCpMtyogUu6BQvC\"]}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}},"ReentrantERC721":{"abi":[{"inputs":[{"internalType":"address","name":"staking_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"attackEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableAttack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"staking","outputs":[{"internalType":"contract IReentrantStakingTarget","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"details":"Test-only NFT double that calls stake again from transferFrom.","kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{"@_10402":{"entryPoint":null,"id":10402,"parameterSlots":1,"returnSlots":0},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":59,"id":null,"parameterSlots":2,"returnSlots":1}},"generatedSources":[{"ast":{"nativeSrc":"0:306:30","nodeType":"YulBlock","src":"0:306:30","statements":[{"nativeSrc":"6:3:30","nodeType":"YulBlock","src":"6:3:30","statements":[]},{"body":{"nativeSrc":"95:209:30","nodeType":"YulBlock","src":"95:209:30","statements":[{"body":{"nativeSrc":"141:16:30","nodeType":"YulBlock","src":"141:16:30","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"150:1:30","nodeType":"YulLiteral","src":"150:1:30","type":"","value":"0"},{"kind":"number","nativeSrc":"153:1:30","nodeType":"YulLiteral","src":"153:1:30","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"143:6:30","nodeType":"YulIdentifier","src":"143:6:30"},"nativeSrc":"143:12:30","nodeType":"YulFunctionCall","src":"143:12:30"},"nativeSrc":"143:12:30","nodeType":"YulExpressionStatement","src":"143:12:30"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"116:7:30","nodeType":"YulIdentifier","src":"116:7:30"},{"name":"headStart","nativeSrc":"125:9:30","nodeType":"YulIdentifier","src":"125:9:30"}],"functionName":{"name":"sub","nativeSrc":"112:3:30","nodeType":"YulIdentifier","src":"112:3:30"},"nativeSrc":"112:23:30","nodeType":"YulFunctionCall","src":"112:23:30"},{"kind":"number","nativeSrc":"137:2:30","nodeType":"YulLiteral","src":"137:2:30","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"108:3:30","nodeType":"YulIdentifier","src":"108:3:30"},"nativeSrc":"108:32:30","nodeType":"YulFunctionCall","src":"108:32:30"},"nativeSrc":"105:52:30","nodeType":"YulIf","src":"105:52:30"},{"nativeSrc":"166:29:30","nodeType":"YulVariableDeclaration","src":"166:29:30","value":{"arguments":[{"name":"headStart","nativeSrc":"185:9:30","nodeType":"YulIdentifier","src":"185:9:30"}],"functionName":{"name":"mload","nativeSrc":"179:5:30","nodeType":"YulIdentifier","src":"179:5:30"},"nativeSrc":"179:16:30","nodeType":"YulFunctionCall","src":"179:16:30"},"variables":[{"name":"value","nativeSrc":"170:5:30","nodeType":"YulTypedName","src":"170:5:30","type":""}]},{"body":{"nativeSrc":"258:16:30","nodeType":"YulBlock","src":"258:16:30","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"267:1:30","nodeType":"YulLiteral","src":"267:1:30","type":"","value":"0"},{"kind":"number","nativeSrc":"270:1:30","nodeType":"YulLiteral","src":"270:1:30","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"260:6:30","nodeType":"YulIdentifier","src":"260:6:30"},"nativeSrc":"260:12:30","nodeType":"YulFunctionCall","src":"260:12:30"},"nativeSrc":"260:12:30","nodeType":"YulExpressionStatement","src":"260:12:30"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"217:5:30","nodeType":"YulIdentifier","src":"217:5:30"},{"arguments":[{"name":"value","nativeSrc":"228:5:30","nodeType":"YulIdentifier","src":"228:5:30"},{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"243:3:30","nodeType":"YulLiteral","src":"243:3:30","type":"","value":"160"},{"kind":"number","nativeSrc":"248:1:30","nodeType":"YulLiteral","src":"248:1:30","type":"","value":"1"}],"functionName":{"name":"shl","nativeSrc":"239:3:30","nodeType":"YulIdentifier","src":"239:3:30"},"nativeSrc":"239:11:30","nodeType":"YulFunctionCall","src":"239:11:30"},{"kind":"number","nativeSrc":"252:1:30","nodeType":"YulLiteral","src":"252:1:30","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"235:3:30","nodeType":"YulIdentifier","src":"235:3:30"},"nativeSrc":"235:19:30","nodeType":"YulFunctionCall","src":"235:19:30"}],"functionName":{"name":"and","nativeSrc":"224:3:30","nodeType":"YulIdentifier","src":"224:3:30"},"nativeSrc":"224:31:30","nodeType":"YulFunctionCall","src":"224:31:30"}],"functionName":{"name":"eq","nativeSrc":"214:2:30","nodeType":"YulIdentifier","src":"214:2:30"},"nativeSrc":"214:42:30","nodeType":"YulFunctionCall","src":"214:42:30"}],"functionName":{"name":"iszero","nativeSrc":"207:6:30","nodeType":"YulIdentifier","src":"207:6:30"},"nativeSrc":"207:50:30","nodeType":"YulFunctionCall","src":"207:50:30"},"nativeSrc":"204:70:30","nodeType":"YulIf","src":"204:70:30"},{"nativeSrc":"283:15:30","nodeType":"YulAssignment","src":"283:15:30","value":{"name":"value","nativeSrc":"293:5:30","nodeType":"YulIdentifier","src":"293:5:30"},"variableNames":[{"name":"value0","nativeSrc":"283:6:30","nodeType":"YulIdentifier","src":"283:6:30"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nativeSrc":"14:290:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"61:9:30","nodeType":"YulTypedName","src":"61:9:30","type":""},{"name":"dataEnd","nativeSrc":"72:7:30","nodeType":"YulTypedName","src":"72:7:30","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"84:6:30","nodeType":"YulTypedName","src":"84:6:30","type":""}],"src":"14:290:30"}]},"contents":"{\n { }\n function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := mload(headStart)\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n value0 := value\n }\n}","id":30,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"60a0604052348015600e575f80fd5b506040516103ec3803806103ec833981016040819052602b91603b565b6001600160a01b03166080526066565b5f60208284031215604a575f80fd5b81516001600160a01b0381168114605f575f80fd5b9392505050565b6080516103676100855f395f8181610105015261020f01526103675ff3fe608060405234801561000f575f80fd5b5060043610610060575f3560e01c806321f161931461006457806323b872dd146100b257806340c10f19146100c55780634cf088d9146101005780636352211e14610144578063d7751b851461016c575b5f80fd5b6100b06001805460ff1916811790556103e75f9081526020527f332eac5de6beffe8ee7761a0342c75594c3acb5fdde0a2555227e56aa65d414180546001600160a01b03191630179055565b005b6100b06100c03660046102b8565b610189565b6100b06100d33660046102f2565b5f90815260208190526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b6101277f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61012761015236600461031a565b5f908152602081905260409020546001600160a01b031690565b6001546101799060ff1681565b604051901515815260200161013b565b5f818152602081905260409020546001600160a01b038481169116146101e35760405162461bcd60e51b815260206004820152600b60248201526a3bb937b7339037bbb732b960a91b604482015260640160405180910390fd5b60015460ff161561026f576001805460ff1916905560405163534a7e1d60e11b81526103e760048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a694fc3a906024015f604051808303815f87803b158015610258575f80fd5b505af115801561026a573d5f803e3d5ffd5b505050505b5f90815260208190526040902080546001600160a01b0319166001600160a01b039290921691909117905550565b80356001600160a01b03811681146102b3575f80fd5b919050565b5f805f606084860312156102ca575f80fd5b6102d38461029d565b92506102e16020850161029d565b929592945050506040919091013590565b5f8060408385031215610303575f80fd5b61030c8361029d565b946020939093013593505050565b5f6020828403121561032a575f80fd5b503591905056fea2646970667358221220be094efbcfd99befb0cdd910374618b8ffce949b88e6c540d277bc50eb87bb4064736f6c634300081a0033","opcodes":"PUSH1 0xA0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xE JUMPI PUSH0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x3EC CODESIZE SUB DUP1 PUSH2 0x3EC DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH1 0x2B SWAP2 PUSH1 0x3B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 MSTORE PUSH1 0x66 JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH1 0x4A JUMPI PUSH0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH1 0x5F JUMPI PUSH0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH2 0x367 PUSH2 0x85 PUSH0 CODECOPY PUSH0 DUP2 DUP2 PUSH2 0x105 ADD MSTORE PUSH2 0x20F ADD MSTORE PUSH2 0x367 PUSH0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0xF JUMPI PUSH0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x60 JUMPI PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x21F16193 EQ PUSH2 0x64 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0xB2 JUMPI DUP1 PUSH4 0x40C10F19 EQ PUSH2 0xC5 JUMPI DUP1 PUSH4 0x4CF088D9 EQ PUSH2 0x100 JUMPI DUP1 PUSH4 0x6352211E EQ PUSH2 0x144 JUMPI DUP1 PUSH4 0xD7751B85 EQ PUSH2 0x16C JUMPI JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH2 0xB0 PUSH1 0x1 DUP1 SLOAD PUSH1 0xFF NOT AND DUP2 OR SWAP1 SSTORE PUSH2 0x3E7 PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x20 MSTORE PUSH32 0x332EAC5DE6BEFFE8EE7761A0342C75594C3ACB5FDDE0A2555227E56AA65D4141 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND ADDRESS OR SWAP1 SSTORE JUMP JUMPDEST STOP JUMPDEST PUSH2 0xB0 PUSH2 0xC0 CALLDATASIZE PUSH1 0x4 PUSH2 0x2B8 JUMP JUMPDEST PUSH2 0x189 JUMP JUMPDEST PUSH2 0xB0 PUSH2 0xD3 CALLDATASIZE PUSH1 0x4 PUSH2 0x2F2 JUMP JUMPDEST PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x127 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x127 PUSH2 0x152 CALLDATASIZE PUSH1 0x4 PUSH2 0x31A JUMP JUMPDEST PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH2 0x179 SWAP1 PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x13B JUMP JUMPDEST PUSH0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND SWAP2 AND EQ PUSH2 0x1E3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xB PUSH1 0x24 DUP3 ADD MSTORE PUSH11 0x3BB937B7339037BBB732B9 PUSH1 0xA9 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x26F JUMPI PUSH1 0x1 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH4 0x534A7E1D PUSH1 0xE1 SHL DUP2 MSTORE PUSH2 0x3E7 PUSH1 0x4 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0xA694FC3A SWAP1 PUSH1 0x24 ADD PUSH0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x258 JUMPI PUSH0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x26A JUMPI RETURNDATASIZE PUSH0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x2B3 JUMPI PUSH0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 DUP1 PUSH0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x2CA JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH2 0x2D3 DUP5 PUSH2 0x29D JUMP JUMPDEST SWAP3 POP PUSH2 0x2E1 PUSH1 0x20 DUP6 ADD PUSH2 0x29D JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x303 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH2 0x30C DUP4 PUSH2 0x29D JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x32A JUMPI PUSH0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xBE MULMOD 0x4E 0xFB 0xCF 0xD9 SWAP12 0xEF 0xB0 0xCD 0xD9 LT CALLDATACOPY CHAINID XOR 0xB8 SELFDESTRUCT 0xCE SWAP5 SWAP12 DUP9 0xE6 0xC5 BLOCKHASH 0xD2 PUSH24 0xBC50EB87BB4064736F6C634300081A003300000000000000 ","sourceMap":"215:876:29:-:0;;;395:90;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;435:43:29;;;215:876;;14:290:30;84:6;137:2;125:9;116:7;112:23;108:32;105:52;;;153:1;150;143:12;105:52;179:16;;-1:-1:-1;;;;;224:31:30;;214:42;;204:70;;270:1;267;260:12;204:70;293:5;14:290;-1:-1:-1;;;14:290:30:o;:::-;215:876:29;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@attackEnabled_10390":{"entryPoint":null,"id":10390,"parameterSlots":0,"returnSlots":0},"@enableAttack_10433":{"entryPoint":null,"id":10433,"parameterSlots":0,"returnSlots":0},"@mint_10416":{"entryPoint":null,"id":10416,"parameterSlots":2,"returnSlots":0},"@ownerOf_10445":{"entryPoint":null,"id":10445,"parameterSlots":1,"returnSlots":1},"@staking_10388":{"entryPoint":null,"id":10388,"parameterSlots":0,"returnSlots":0},"@transferFrom_10483":{"entryPoint":393,"id":10483,"parameterSlots":3,"returnSlots":0},"abi_decode_address":{"entryPoint":669,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_addresst_addresst_uint256":{"entryPoint":696,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_addresst_uint256":{"entryPoint":754,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_uint256":{"entryPoint":794,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IReentrantStakingTarget_$10380__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_rational_999_by_1__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_1910a1b31627cb44672fa41011dea21df90d76304ea37cd5fe77e38d944205f7__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[{"ast":{"nativeSrc":"0:2277:30","nodeType":"YulBlock","src":"0:2277:30","statements":[{"nativeSrc":"6:3:30","nodeType":"YulBlock","src":"6:3:30","statements":[]},{"body":{"nativeSrc":"63:124:30","nodeType":"YulBlock","src":"63:124:30","statements":[{"nativeSrc":"73:29:30","nodeType":"YulAssignment","src":"73:29:30","value":{"arguments":[{"name":"offset","nativeSrc":"95:6:30","nodeType":"YulIdentifier","src":"95:6:30"}],"functionName":{"name":"calldataload","nativeSrc":"82:12:30","nodeType":"YulIdentifier","src":"82:12:30"},"nativeSrc":"82:20:30","nodeType":"YulFunctionCall","src":"82:20:30"},"variableNames":[{"name":"value","nativeSrc":"73:5:30","nodeType":"YulIdentifier","src":"73:5:30"}]},{"body":{"nativeSrc":"165:16:30","nodeType":"YulBlock","src":"165:16:30","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"174:1:30","nodeType":"YulLiteral","src":"174:1:30","type":"","value":"0"},{"kind":"number","nativeSrc":"177:1:30","nodeType":"YulLiteral","src":"177:1:30","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"167:6:30","nodeType":"YulIdentifier","src":"167:6:30"},"nativeSrc":"167:12:30","nodeType":"YulFunctionCall","src":"167:12:30"},"nativeSrc":"167:12:30","nodeType":"YulExpressionStatement","src":"167:12:30"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"124:5:30","nodeType":"YulIdentifier","src":"124:5:30"},{"arguments":[{"name":"value","nativeSrc":"135:5:30","nodeType":"YulIdentifier","src":"135:5:30"},{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"150:3:30","nodeType":"YulLiteral","src":"150:3:30","type":"","value":"160"},{"kind":"number","nativeSrc":"155:1:30","nodeType":"YulLiteral","src":"155:1:30","type":"","value":"1"}],"functionName":{"name":"shl","nativeSrc":"146:3:30","nodeType":"YulIdentifier","src":"146:3:30"},"nativeSrc":"146:11:30","nodeType":"YulFunctionCall","src":"146:11:30"},{"kind":"number","nativeSrc":"159:1:30","nodeType":"YulLiteral","src":"159:1:30","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"142:3:30","nodeType":"YulIdentifier","src":"142:3:30"},"nativeSrc":"142:19:30","nodeType":"YulFunctionCall","src":"142:19:30"}],"functionName":{"name":"and","nativeSrc":"131:3:30","nodeType":"YulIdentifier","src":"131:3:30"},"nativeSrc":"131:31:30","nodeType":"YulFunctionCall","src":"131:31:30"}],"functionName":{"name":"eq","nativeSrc":"121:2:30","nodeType":"YulIdentifier","src":"121:2:30"},"nativeSrc":"121:42:30","nodeType":"YulFunctionCall","src":"121:42:30"}],"functionName":{"name":"iszero","nativeSrc":"114:6:30","nodeType":"YulIdentifier","src":"114:6:30"},"nativeSrc":"114:50:30","nodeType":"YulFunctionCall","src":"114:50:30"},"nativeSrc":"111:70:30","nodeType":"YulIf","src":"111:70:30"}]},"name":"abi_decode_address","nativeSrc":"14:173:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"42:6:30","nodeType":"YulTypedName","src":"42:6:30","type":""}],"returnVariables":[{"name":"value","nativeSrc":"53:5:30","nodeType":"YulTypedName","src":"53:5:30","type":""}],"src":"14:173:30"},{"body":{"nativeSrc":"296:270:30","nodeType":"YulBlock","src":"296:270:30","statements":[{"body":{"nativeSrc":"342:16:30","nodeType":"YulBlock","src":"342:16:30","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"351:1:30","nodeType":"YulLiteral","src":"351:1:30","type":"","value":"0"},{"kind":"number","nativeSrc":"354:1:30","nodeType":"YulLiteral","src":"354:1:30","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"344:6:30","nodeType":"YulIdentifier","src":"344:6:30"},"nativeSrc":"344:12:30","nodeType":"YulFunctionCall","src":"344:12:30"},"nativeSrc":"344:12:30","nodeType":"YulExpressionStatement","src":"344:12:30"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"317:7:30","nodeType":"YulIdentifier","src":"317:7:30"},{"name":"headStart","nativeSrc":"326:9:30","nodeType":"YulIdentifier","src":"326:9:30"}],"functionName":{"name":"sub","nativeSrc":"313:3:30","nodeType":"YulIdentifier","src":"313:3:30"},"nativeSrc":"313:23:30","nodeType":"YulFunctionCall","src":"313:23:30"},{"kind":"number","nativeSrc":"338:2:30","nodeType":"YulLiteral","src":"338:2:30","type":"","value":"96"}],"functionName":{"name":"slt","nativeSrc":"309:3:30","nodeType":"YulIdentifier","src":"309:3:30"},"nativeSrc":"309:32:30","nodeType":"YulFunctionCall","src":"309:32:30"},"nativeSrc":"306:52:30","nodeType":"YulIf","src":"306:52:30"},{"nativeSrc":"367:39:30","nodeType":"YulAssignment","src":"367:39:30","value":{"arguments":[{"name":"headStart","nativeSrc":"396:9:30","nodeType":"YulIdentifier","src":"396:9:30"}],"functionName":{"name":"abi_decode_address","nativeSrc":"377:18:30","nodeType":"YulIdentifier","src":"377:18:30"},"nativeSrc":"377:29:30","nodeType":"YulFunctionCall","src":"377:29:30"},"variableNames":[{"name":"value0","nativeSrc":"367:6:30","nodeType":"YulIdentifier","src":"367:6:30"}]},{"nativeSrc":"415:48:30","nodeType":"YulAssignment","src":"415:48:30","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"448:9:30","nodeType":"YulIdentifier","src":"448:9:30"},{"kind":"number","nativeSrc":"459:2:30","nodeType":"YulLiteral","src":"459:2:30","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"444:3:30","nodeType":"YulIdentifier","src":"444:3:30"},"nativeSrc":"444:18:30","nodeType":"YulFunctionCall","src":"444:18:30"}],"functionName":{"name":"abi_decode_address","nativeSrc":"425:18:30","nodeType":"YulIdentifier","src":"425:18:30"},"nativeSrc":"425:38:30","nodeType":"YulFunctionCall","src":"425:38:30"},"variableNames":[{"name":"value1","nativeSrc":"415:6:30","nodeType":"YulIdentifier","src":"415:6:30"}]},{"nativeSrc":"472:14:30","nodeType":"YulVariableDeclaration","src":"472:14:30","value":{"kind":"number","nativeSrc":"485:1:30","nodeType":"YulLiteral","src":"485:1:30","type":"","value":"0"},"variables":[{"name":"value","nativeSrc":"476:5:30","nodeType":"YulTypedName","src":"476:5:30","type":""}]},{"nativeSrc":"495:41:30","nodeType":"YulAssignment","src":"495:41:30","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"521:9:30","nodeType":"YulIdentifier","src":"521:9:30"},{"kind":"number","nativeSrc":"532:2:30","nodeType":"YulLiteral","src":"532:2:30","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"517:3:30","nodeType":"YulIdentifier","src":"517:3:30"},"nativeSrc":"517:18:30","nodeType":"YulFunctionCall","src":"517:18:30"}],"functionName":{"name":"calldataload","nativeSrc":"504:12:30","nodeType":"YulIdentifier","src":"504:12:30"},"nativeSrc":"504:32:30","nodeType":"YulFunctionCall","src":"504:32:30"},"variableNames":[{"name":"value","nativeSrc":"495:5:30","nodeType":"YulIdentifier","src":"495:5:30"}]},{"nativeSrc":"545:15:30","nodeType":"YulAssignment","src":"545:15:30","value":{"name":"value","nativeSrc":"555:5:30","nodeType":"YulIdentifier","src":"555:5:30"},"variableNames":[{"name":"value2","nativeSrc":"545:6:30","nodeType":"YulIdentifier","src":"545:6:30"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256","nativeSrc":"192:374:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"246:9:30","nodeType":"YulTypedName","src":"246:9:30","type":""},{"name":"dataEnd","nativeSrc":"257:7:30","nodeType":"YulTypedName","src":"257:7:30","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"269:6:30","nodeType":"YulTypedName","src":"269:6:30","type":""},{"name":"value1","nativeSrc":"277:6:30","nodeType":"YulTypedName","src":"277:6:30","type":""},{"name":"value2","nativeSrc":"285:6:30","nodeType":"YulTypedName","src":"285:6:30","type":""}],"src":"192:374:30"},{"body":{"nativeSrc":"658:213:30","nodeType":"YulBlock","src":"658:213:30","statements":[{"body":{"nativeSrc":"704:16:30","nodeType":"YulBlock","src":"704:16:30","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"713:1:30","nodeType":"YulLiteral","src":"713:1:30","type":"","value":"0"},{"kind":"number","nativeSrc":"716:1:30","nodeType":"YulLiteral","src":"716:1:30","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"706:6:30","nodeType":"YulIdentifier","src":"706:6:30"},"nativeSrc":"706:12:30","nodeType":"YulFunctionCall","src":"706:12:30"},"nativeSrc":"706:12:30","nodeType":"YulExpressionStatement","src":"706:12:30"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"679:7:30","nodeType":"YulIdentifier","src":"679:7:30"},{"name":"headStart","nativeSrc":"688:9:30","nodeType":"YulIdentifier","src":"688:9:30"}],"functionName":{"name":"sub","nativeSrc":"675:3:30","nodeType":"YulIdentifier","src":"675:3:30"},"nativeSrc":"675:23:30","nodeType":"YulFunctionCall","src":"675:23:30"},{"kind":"number","nativeSrc":"700:2:30","nodeType":"YulLiteral","src":"700:2:30","type":"","value":"64"}],"functionName":{"name":"slt","nativeSrc":"671:3:30","nodeType":"YulIdentifier","src":"671:3:30"},"nativeSrc":"671:32:30","nodeType":"YulFunctionCall","src":"671:32:30"},"nativeSrc":"668:52:30","nodeType":"YulIf","src":"668:52:30"},{"nativeSrc":"729:39:30","nodeType":"YulAssignment","src":"729:39:30","value":{"arguments":[{"name":"headStart","nativeSrc":"758:9:30","nodeType":"YulIdentifier","src":"758:9:30"}],"functionName":{"name":"abi_decode_address","nativeSrc":"739:18:30","nodeType":"YulIdentifier","src":"739:18:30"},"nativeSrc":"739:29:30","nodeType":"YulFunctionCall","src":"739:29:30"},"variableNames":[{"name":"value0","nativeSrc":"729:6:30","nodeType":"YulIdentifier","src":"729:6:30"}]},{"nativeSrc":"777:14:30","nodeType":"YulVariableDeclaration","src":"777:14:30","value":{"kind":"number","nativeSrc":"790:1:30","nodeType":"YulLiteral","src":"790:1:30","type":"","value":"0"},"variables":[{"name":"value","nativeSrc":"781:5:30","nodeType":"YulTypedName","src":"781:5:30","type":""}]},{"nativeSrc":"800:41:30","nodeType":"YulAssignment","src":"800:41:30","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"826:9:30","nodeType":"YulIdentifier","src":"826:9:30"},{"kind":"number","nativeSrc":"837:2:30","nodeType":"YulLiteral","src":"837:2:30","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"822:3:30","nodeType":"YulIdentifier","src":"822:3:30"},"nativeSrc":"822:18:30","nodeType":"YulFunctionCall","src":"822:18:30"}],"functionName":{"name":"calldataload","nativeSrc":"809:12:30","nodeType":"YulIdentifier","src":"809:12:30"},"nativeSrc":"809:32:30","nodeType":"YulFunctionCall","src":"809:32:30"},"variableNames":[{"name":"value","nativeSrc":"800:5:30","nodeType":"YulIdentifier","src":"800:5:30"}]},{"nativeSrc":"850:15:30","nodeType":"YulAssignment","src":"850:15:30","value":{"name":"value","nativeSrc":"860:5:30","nodeType":"YulIdentifier","src":"860:5:30"},"variableNames":[{"name":"value1","nativeSrc":"850:6:30","nodeType":"YulIdentifier","src":"850:6:30"}]}]},"name":"abi_decode_tuple_t_addresst_uint256","nativeSrc":"571:300:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"616:9:30","nodeType":"YulTypedName","src":"616:9:30","type":""},{"name":"dataEnd","nativeSrc":"627:7:30","nodeType":"YulTypedName","src":"627:7:30","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"639:6:30","nodeType":"YulTypedName","src":"639:6:30","type":""},{"name":"value1","nativeSrc":"647:6:30","nodeType":"YulTypedName","src":"647:6:30","type":""}],"src":"571:300:30"},{"body":{"nativeSrc":"1010:102:30","nodeType":"YulBlock","src":"1010:102:30","statements":[{"nativeSrc":"1020:26:30","nodeType":"YulAssignment","src":"1020:26:30","value":{"arguments":[{"name":"headStart","nativeSrc":"1032:9:30","nodeType":"YulIdentifier","src":"1032:9:30"},{"kind":"number","nativeSrc":"1043:2:30","nodeType":"YulLiteral","src":"1043:2:30","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"1028:3:30","nodeType":"YulIdentifier","src":"1028:3:30"},"nativeSrc":"1028:18:30","nodeType":"YulFunctionCall","src":"1028:18:30"},"variableNames":[{"name":"tail","nativeSrc":"1020:4:30","nodeType":"YulIdentifier","src":"1020:4:30"}]},{"expression":{"arguments":[{"name":"headStart","nativeSrc":"1062:9:30","nodeType":"YulIdentifier","src":"1062:9:30"},{"arguments":[{"name":"value0","nativeSrc":"1077:6:30","nodeType":"YulIdentifier","src":"1077:6:30"},{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"1093:3:30","nodeType":"YulLiteral","src":"1093:3:30","type":"","value":"160"},{"kind":"number","nativeSrc":"1098:1:30","nodeType":"YulLiteral","src":"1098:1:30","type":"","value":"1"}],"functionName":{"name":"shl","nativeSrc":"1089:3:30","nodeType":"YulIdentifier","src":"1089:3:30"},"nativeSrc":"1089:11:30","nodeType":"YulFunctionCall","src":"1089:11:30"},{"kind":"number","nativeSrc":"1102:1:30","nodeType":"YulLiteral","src":"1102:1:30","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"1085:3:30","nodeType":"YulIdentifier","src":"1085:3:30"},"nativeSrc":"1085:19:30","nodeType":"YulFunctionCall","src":"1085:19:30"}],"functionName":{"name":"and","nativeSrc":"1073:3:30","nodeType":"YulIdentifier","src":"1073:3:30"},"nativeSrc":"1073:32:30","nodeType":"YulFunctionCall","src":"1073:32:30"}],"functionName":{"name":"mstore","nativeSrc":"1055:6:30","nodeType":"YulIdentifier","src":"1055:6:30"},"nativeSrc":"1055:51:30","nodeType":"YulFunctionCall","src":"1055:51:30"},"nativeSrc":"1055:51:30","nodeType":"YulExpressionStatement","src":"1055:51:30"}]},"name":"abi_encode_tuple_t_contract$_IReentrantStakingTarget_$10380__to_t_address__fromStack_reversed","nativeSrc":"876:236:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"979:9:30","nodeType":"YulTypedName","src":"979:9:30","type":""},{"name":"value0","nativeSrc":"990:6:30","nodeType":"YulTypedName","src":"990:6:30","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"1001:4:30","nodeType":"YulTypedName","src":"1001:4:30","type":""}],"src":"876:236:30"},{"body":{"nativeSrc":"1187:156:30","nodeType":"YulBlock","src":"1187:156:30","statements":[{"body":{"nativeSrc":"1233:16:30","nodeType":"YulBlock","src":"1233:16:30","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"1242:1:30","nodeType":"YulLiteral","src":"1242:1:30","type":"","value":"0"},{"kind":"number","nativeSrc":"1245:1:30","nodeType":"YulLiteral","src":"1245:1:30","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"1235:6:30","nodeType":"YulIdentifier","src":"1235:6:30"},"nativeSrc":"1235:12:30","nodeType":"YulFunctionCall","src":"1235:12:30"},"nativeSrc":"1235:12:30","nodeType":"YulExpressionStatement","src":"1235:12:30"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"1208:7:30","nodeType":"YulIdentifier","src":"1208:7:30"},{"name":"headStart","nativeSrc":"1217:9:30","nodeType":"YulIdentifier","src":"1217:9:30"}],"functionName":{"name":"sub","nativeSrc":"1204:3:30","nodeType":"YulIdentifier","src":"1204:3:30"},"nativeSrc":"1204:23:30","nodeType":"YulFunctionCall","src":"1204:23:30"},{"kind":"number","nativeSrc":"1229:2:30","nodeType":"YulLiteral","src":"1229:2:30","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"1200:3:30","nodeType":"YulIdentifier","src":"1200:3:30"},"nativeSrc":"1200:32:30","nodeType":"YulFunctionCall","src":"1200:32:30"},"nativeSrc":"1197:52:30","nodeType":"YulIf","src":"1197:52:30"},{"nativeSrc":"1258:14:30","nodeType":"YulVariableDeclaration","src":"1258:14:30","value":{"kind":"number","nativeSrc":"1271:1:30","nodeType":"YulLiteral","src":"1271:1:30","type":"","value":"0"},"variables":[{"name":"value","nativeSrc":"1262:5:30","nodeType":"YulTypedName","src":"1262:5:30","type":""}]},{"nativeSrc":"1281:32:30","nodeType":"YulAssignment","src":"1281:32:30","value":{"arguments":[{"name":"headStart","nativeSrc":"1303:9:30","nodeType":"YulIdentifier","src":"1303:9:30"}],"functionName":{"name":"calldataload","nativeSrc":"1290:12:30","nodeType":"YulIdentifier","src":"1290:12:30"},"nativeSrc":"1290:23:30","nodeType":"YulFunctionCall","src":"1290:23:30"},"variableNames":[{"name":"value","nativeSrc":"1281:5:30","nodeType":"YulIdentifier","src":"1281:5:30"}]},{"nativeSrc":"1322:15:30","nodeType":"YulAssignment","src":"1322:15:30","value":{"name":"value","nativeSrc":"1332:5:30","nodeType":"YulIdentifier","src":"1332:5:30"},"variableNames":[{"name":"value0","nativeSrc":"1322:6:30","nodeType":"YulIdentifier","src":"1322:6:30"}]}]},"name":"abi_decode_tuple_t_uint256","nativeSrc":"1117:226:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"1153:9:30","nodeType":"YulTypedName","src":"1153:9:30","type":""},{"name":"dataEnd","nativeSrc":"1164:7:30","nodeType":"YulTypedName","src":"1164:7:30","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"1176:6:30","nodeType":"YulTypedName","src":"1176:6:30","type":""}],"src":"1117:226:30"},{"body":{"nativeSrc":"1449:102:30","nodeType":"YulBlock","src":"1449:102:30","statements":[{"nativeSrc":"1459:26:30","nodeType":"YulAssignment","src":"1459:26:30","value":{"arguments":[{"name":"headStart","nativeSrc":"1471:9:30","nodeType":"YulIdentifier","src":"1471:9:30"},{"kind":"number","nativeSrc":"1482:2:30","nodeType":"YulLiteral","src":"1482:2:30","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"1467:3:30","nodeType":"YulIdentifier","src":"1467:3:30"},"nativeSrc":"1467:18:30","nodeType":"YulFunctionCall","src":"1467:18:30"},"variableNames":[{"name":"tail","nativeSrc":"1459:4:30","nodeType":"YulIdentifier","src":"1459:4:30"}]},{"expression":{"arguments":[{"name":"headStart","nativeSrc":"1501:9:30","nodeType":"YulIdentifier","src":"1501:9:30"},{"arguments":[{"name":"value0","nativeSrc":"1516:6:30","nodeType":"YulIdentifier","src":"1516:6:30"},{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"1532:3:30","nodeType":"YulLiteral","src":"1532:3:30","type":"","value":"160"},{"kind":"number","nativeSrc":"1537:1:30","nodeType":"YulLiteral","src":"1537:1:30","type":"","value":"1"}],"functionName":{"name":"shl","nativeSrc":"1528:3:30","nodeType":"YulIdentifier","src":"1528:3:30"},"nativeSrc":"1528:11:30","nodeType":"YulFunctionCall","src":"1528:11:30"},{"kind":"number","nativeSrc":"1541:1:30","nodeType":"YulLiteral","src":"1541:1:30","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"1524:3:30","nodeType":"YulIdentifier","src":"1524:3:30"},"nativeSrc":"1524:19:30","nodeType":"YulFunctionCall","src":"1524:19:30"}],"functionName":{"name":"and","nativeSrc":"1512:3:30","nodeType":"YulIdentifier","src":"1512:3:30"},"nativeSrc":"1512:32:30","nodeType":"YulFunctionCall","src":"1512:32:30"}],"functionName":{"name":"mstore","nativeSrc":"1494:6:30","nodeType":"YulIdentifier","src":"1494:6:30"},"nativeSrc":"1494:51:30","nodeType":"YulFunctionCall","src":"1494:51:30"},"nativeSrc":"1494:51:30","nodeType":"YulExpressionStatement","src":"1494:51:30"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nativeSrc":"1348:203:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"1418:9:30","nodeType":"YulTypedName","src":"1418:9:30","type":""},{"name":"value0","nativeSrc":"1429:6:30","nodeType":"YulTypedName","src":"1429:6:30","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"1440:4:30","nodeType":"YulTypedName","src":"1440:4:30","type":""}],"src":"1348:203:30"},{"body":{"nativeSrc":"1651:92:30","nodeType":"YulBlock","src":"1651:92:30","statements":[{"nativeSrc":"1661:26:30","nodeType":"YulAssignment","src":"1661:26:30","value":{"arguments":[{"name":"headStart","nativeSrc":"1673:9:30","nodeType":"YulIdentifier","src":"1673:9:30"},{"kind":"number","nativeSrc":"1684:2:30","nodeType":"YulLiteral","src":"1684:2:30","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"1669:3:30","nodeType":"YulIdentifier","src":"1669:3:30"},"nativeSrc":"1669:18:30","nodeType":"YulFunctionCall","src":"1669:18:30"},"variableNames":[{"name":"tail","nativeSrc":"1661:4:30","nodeType":"YulIdentifier","src":"1661:4:30"}]},{"expression":{"arguments":[{"name":"headStart","nativeSrc":"1703:9:30","nodeType":"YulIdentifier","src":"1703:9:30"},{"arguments":[{"arguments":[{"name":"value0","nativeSrc":"1728:6:30","nodeType":"YulIdentifier","src":"1728:6:30"}],"functionName":{"name":"iszero","nativeSrc":"1721:6:30","nodeType":"YulIdentifier","src":"1721:6:30"},"nativeSrc":"1721:14:30","nodeType":"YulFunctionCall","src":"1721:14:30"}],"functionName":{"name":"iszero","nativeSrc":"1714:6:30","nodeType":"YulIdentifier","src":"1714:6:30"},"nativeSrc":"1714:22:30","nodeType":"YulFunctionCall","src":"1714:22:30"}],"functionName":{"name":"mstore","nativeSrc":"1696:6:30","nodeType":"YulIdentifier","src":"1696:6:30"},"nativeSrc":"1696:41:30","nodeType":"YulFunctionCall","src":"1696:41:30"},"nativeSrc":"1696:41:30","nodeType":"YulExpressionStatement","src":"1696:41:30"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nativeSrc":"1556:187:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"1620:9:30","nodeType":"YulTypedName","src":"1620:9:30","type":""},{"name":"value0","nativeSrc":"1631:6:30","nodeType":"YulTypedName","src":"1631:6:30","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"1642:4:30","nodeType":"YulTypedName","src":"1642:4:30","type":""}],"src":"1556:187:30"},{"body":{"nativeSrc":"1922:161:30","nodeType":"YulBlock","src":"1922:161:30","statements":[{"expression":{"arguments":[{"name":"headStart","nativeSrc":"1939:9:30","nodeType":"YulIdentifier","src":"1939:9:30"},{"kind":"number","nativeSrc":"1950:2:30","nodeType":"YulLiteral","src":"1950:2:30","type":"","value":"32"}],"functionName":{"name":"mstore","nativeSrc":"1932:6:30","nodeType":"YulIdentifier","src":"1932:6:30"},"nativeSrc":"1932:21:30","nodeType":"YulFunctionCall","src":"1932:21:30"},"nativeSrc":"1932:21:30","nodeType":"YulExpressionStatement","src":"1932:21:30"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"1973:9:30","nodeType":"YulIdentifier","src":"1973:9:30"},{"kind":"number","nativeSrc":"1984:2:30","nodeType":"YulLiteral","src":"1984:2:30","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"1969:3:30","nodeType":"YulIdentifier","src":"1969:3:30"},"nativeSrc":"1969:18:30","nodeType":"YulFunctionCall","src":"1969:18:30"},{"kind":"number","nativeSrc":"1989:2:30","nodeType":"YulLiteral","src":"1989:2:30","type":"","value":"11"}],"functionName":{"name":"mstore","nativeSrc":"1962:6:30","nodeType":"YulIdentifier","src":"1962:6:30"},"nativeSrc":"1962:30:30","nodeType":"YulFunctionCall","src":"1962:30:30"},"nativeSrc":"1962:30:30","nodeType":"YulExpressionStatement","src":"1962:30:30"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"2012:9:30","nodeType":"YulIdentifier","src":"2012:9:30"},{"kind":"number","nativeSrc":"2023:2:30","nodeType":"YulLiteral","src":"2023:2:30","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"2008:3:30","nodeType":"YulIdentifier","src":"2008:3:30"},"nativeSrc":"2008:18:30","nodeType":"YulFunctionCall","src":"2008:18:30"},{"hexValue":"77726f6e67206f776e6572","kind":"string","nativeSrc":"2028:13:30","nodeType":"YulLiteral","src":"2028:13:30","type":"","value":"wrong owner"}],"functionName":{"name":"mstore","nativeSrc":"2001:6:30","nodeType":"YulIdentifier","src":"2001:6:30"},"nativeSrc":"2001:41:30","nodeType":"YulFunctionCall","src":"2001:41:30"},"nativeSrc":"2001:41:30","nodeType":"YulExpressionStatement","src":"2001:41:30"},{"nativeSrc":"2051:26:30","nodeType":"YulAssignment","src":"2051:26:30","value":{"arguments":[{"name":"headStart","nativeSrc":"2063:9:30","nodeType":"YulIdentifier","src":"2063:9:30"},{"kind":"number","nativeSrc":"2074:2:30","nodeType":"YulLiteral","src":"2074:2:30","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"2059:3:30","nodeType":"YulIdentifier","src":"2059:3:30"},"nativeSrc":"2059:18:30","nodeType":"YulFunctionCall","src":"2059:18:30"},"variableNames":[{"name":"tail","nativeSrc":"2051:4:30","nodeType":"YulIdentifier","src":"2051:4:30"}]}]},"name":"abi_encode_tuple_t_stringliteral_1910a1b31627cb44672fa41011dea21df90d76304ea37cd5fe77e38d944205f7__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"1748:335:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"1899:9:30","nodeType":"YulTypedName","src":"1899:9:30","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"1913:4:30","nodeType":"YulTypedName","src":"1913:4:30","type":""}],"src":"1748:335:30"},{"body":{"nativeSrc":"2199:76:30","nodeType":"YulBlock","src":"2199:76:30","statements":[{"nativeSrc":"2209:26:30","nodeType":"YulAssignment","src":"2209:26:30","value":{"arguments":[{"name":"headStart","nativeSrc":"2221:9:30","nodeType":"YulIdentifier","src":"2221:9:30"},{"kind":"number","nativeSrc":"2232:2:30","nodeType":"YulLiteral","src":"2232:2:30","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"2217:3:30","nodeType":"YulIdentifier","src":"2217:3:30"},"nativeSrc":"2217:18:30","nodeType":"YulFunctionCall","src":"2217:18:30"},"variableNames":[{"name":"tail","nativeSrc":"2209:4:30","nodeType":"YulIdentifier","src":"2209:4:30"}]},{"expression":{"arguments":[{"name":"headStart","nativeSrc":"2251:9:30","nodeType":"YulIdentifier","src":"2251:9:30"},{"name":"value0","nativeSrc":"2262:6:30","nodeType":"YulIdentifier","src":"2262:6:30"}],"functionName":{"name":"mstore","nativeSrc":"2244:6:30","nodeType":"YulIdentifier","src":"2244:6:30"},"nativeSrc":"2244:25:30","nodeType":"YulFunctionCall","src":"2244:25:30"},"nativeSrc":"2244:25:30","nodeType":"YulExpressionStatement","src":"2244:25:30"}]},"name":"abi_encode_tuple_t_rational_999_by_1__to_t_uint256__fromStack_reversed","nativeSrc":"2088:187:30","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"2168:9:30","nodeType":"YulTypedName","src":"2168:9:30","type":""},{"name":"value0","nativeSrc":"2179:6:30","nodeType":"YulTypedName","src":"2179:6:30","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"2190:4:30","nodeType":"YulTypedName","src":"2190:4:30","type":""}],"src":"2088:187:30"}]},"contents":"{\n { }\n function abi_decode_address(offset) -> value\n {\n value := calldataload(offset)\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n }\n function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n {\n if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n value0 := abi_decode_address(headStart)\n value1 := abi_decode_address(add(headStart, 32))\n let value := 0\n value := calldataload(add(headStart, 64))\n value2 := value\n }\n function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n value0 := abi_decode_address(headStart)\n let value := 0\n value := calldataload(add(headStart, 32))\n value1 := value\n }\n function abi_encode_tuple_t_contract$_IReentrantStakingTarget_$10380__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n }\n function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := 0\n value := calldataload(headStart)\n value0 := value\n }\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n }\n function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, iszero(iszero(value0)))\n }\n function abi_encode_tuple_t_stringliteral_1910a1b31627cb44672fa41011dea21df90d76304ea37cd5fe77e38d944205f7__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 11)\n mstore(add(headStart, 64), \"wrong owner\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_rational_999_by_1__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, value0)\n }\n}","id":30,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"10388":[{"length":32,"start":261},{"length":32,"start":527}]},"linkReferences":{},"object":"608060405234801561000f575f80fd5b5060043610610060575f3560e01c806321f161931461006457806323b872dd146100b257806340c10f19146100c55780634cf088d9146101005780636352211e14610144578063d7751b851461016c575b5f80fd5b6100b06001805460ff1916811790556103e75f9081526020527f332eac5de6beffe8ee7761a0342c75594c3acb5fdde0a2555227e56aa65d414180546001600160a01b03191630179055565b005b6100b06100c03660046102b8565b610189565b6100b06100d33660046102f2565b5f90815260208190526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b6101277f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61012761015236600461031a565b5f908152602081905260409020546001600160a01b031690565b6001546101799060ff1681565b604051901515815260200161013b565b5f818152602081905260409020546001600160a01b038481169116146101e35760405162461bcd60e51b815260206004820152600b60248201526a3bb937b7339037bbb732b960a91b604482015260640160405180910390fd5b60015460ff161561026f576001805460ff1916905560405163534a7e1d60e11b81526103e760048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a694fc3a906024015f604051808303815f87803b158015610258575f80fd5b505af115801561026a573d5f803e3d5ffd5b505050505b5f90815260208190526040902080546001600160a01b0319166001600160a01b039290921691909117905550565b80356001600160a01b03811681146102b3575f80fd5b919050565b5f805f606084860312156102ca575f80fd5b6102d38461029d565b92506102e16020850161029d565b929592945050506040919091013590565b5f8060408385031215610303575f80fd5b61030c8361029d565b946020939093013593505050565b5f6020828403121561032a575f80fd5b503591905056fea2646970667358221220be094efbcfd99befb0cdd910374618b8ffce949b88e6c540d277bc50eb87bb4064736f6c634300081a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0xF JUMPI PUSH0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x60 JUMPI PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x21F16193 EQ PUSH2 0x64 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0xB2 JUMPI DUP1 PUSH4 0x40C10F19 EQ PUSH2 0xC5 JUMPI DUP1 PUSH4 0x4CF088D9 EQ PUSH2 0x100 JUMPI DUP1 PUSH4 0x6352211E EQ PUSH2 0x144 JUMPI DUP1 PUSH4 0xD7751B85 EQ PUSH2 0x16C JUMPI JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH2 0xB0 PUSH1 0x1 DUP1 SLOAD PUSH1 0xFF NOT AND DUP2 OR SWAP1 SSTORE PUSH2 0x3E7 PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x20 MSTORE PUSH32 0x332EAC5DE6BEFFE8EE7761A0342C75594C3ACB5FDDE0A2555227E56AA65D4141 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND ADDRESS OR SWAP1 SSTORE JUMP JUMPDEST STOP JUMPDEST PUSH2 0xB0 PUSH2 0xC0 CALLDATASIZE PUSH1 0x4 PUSH2 0x2B8 JUMP JUMPDEST PUSH2 0x189 JUMP JUMPDEST PUSH2 0xB0 PUSH2 0xD3 CALLDATASIZE PUSH1 0x4 PUSH2 0x2F2 JUMP JUMPDEST PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x127 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x127 PUSH2 0x152 CALLDATASIZE PUSH1 0x4 PUSH2 0x31A JUMP JUMPDEST PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH2 0x179 SWAP1 PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x13B JUMP JUMPDEST PUSH0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND SWAP2 AND EQ PUSH2 0x1E3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xB PUSH1 0x24 DUP3 ADD MSTORE PUSH11 0x3BB937B7339037BBB732B9 PUSH1 0xA9 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x26F JUMPI PUSH1 0x1 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH4 0x534A7E1D PUSH1 0xE1 SHL DUP2 MSTORE PUSH2 0x3E7 PUSH1 0x4 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0xA694FC3A SWAP1 PUSH1 0x24 ADD PUSH0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x258 JUMPI PUSH0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x26A JUMPI RETURNDATASIZE PUSH0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x2B3 JUMPI PUSH0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 DUP1 PUSH0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x2CA JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH2 0x2D3 DUP5 PUSH2 0x29D JUMP JUMPDEST SWAP3 POP PUSH2 0x2E1 PUSH1 0x20 DUP6 ADD PUSH2 0x29D JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x303 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH2 0x30C DUP4 PUSH2 0x29D JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x32A JUMPI PUSH0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xBE MULMOD 0x4E 0xFB 0xCF 0xD9 SWAP12 0xEF 0xB0 0xCD 0xD9 LT CALLDATACOPY CHAINID XOR 0xB8 SELFDESTRUCT 0xCE SWAP5 SWAP12 DUP9 0xE6 0xC5 BLOCKHASH 0xD2 PUSH24 0xBC50EB87BB4064736F6C634300081A003300000000000000 ","sourceMap":"215:876:29:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;587:108;;646:4;630:20;;-1:-1:-1;;630:20:29;;;;;668:3;630:13;660:12;;;;;;:28;;-1:-1:-1;;;;;;660:28:29;683:4;660:28;;;587:108;;;813:276;;;;;;:::i;:::-;;:::i;491:90::-;;;;;;:::i;:::-;553:7;:16;;;;;;;;;;:21;;-1:-1:-1;;;;;;553:21:29;-1:-1:-1;;;;;553:21:29;;;;;;;;;;491:90;309:48;;;;;;;;-1:-1:-1;;;;;1073:32:30;;;1055:51;;1043:2;1028:18;309:48:29;;;;;;;;701:106;;;;;;:::i;:::-;758:7;784:16;;;;;;;;;;;-1:-1:-1;;;;;784:16:29;;701:106;363:25;;;;;;;;;;;;1721:14:30;;1714:22;1696:41;;1684:2;1669:18;363:25:29;1556:187:30;813:276:29;905:7;:16;;;;;;;;;;;-1:-1:-1;;;;;905:24:29;;;:16;;:24;897:48;;;;-1:-1:-1;;;897:48:29;;1950:2:30;897:48:29;;;1932:21:30;1989:2;1969:18;;;1962:30;-1:-1:-1;;;2008:18:30;;;2001:41;2059:18;;897:48:29;;;;;;;;959:13;;;;955:97;;;988:13;:21;;-1:-1:-1;;988:21:29;;;1023:18;;-1:-1:-1;;;1023:18:29;;1037:3;1023:18;;;2244:25:30;1023:7:29;-1:-1:-1;;;;;1023:13:29;;;;2217:18:30;;1023::29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;955:97;1061:7;:16;;;;;;;;;;:21;;-1:-1:-1;;;;;;1061:21:29;-1:-1:-1;;;;;1061:21:29;;;;;;;;;;-1:-1:-1;813:276:29:o;14:173:30:-;82:20;;-1:-1:-1;;;;;131:31:30;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:374::-;269:6;277;285;338:2;326:9;317:7;313:23;309:32;306:52;;;354:1;351;344:12;306:52;377:29;396:9;377:29;:::i;:::-;367:39;;425:38;459:2;448:9;444:18;425:38;:::i;:::-;192:374;;415:48;;-1:-1:-1;;;532:2:30;517:18;;;;504:32;;192:374::o;571:300::-;639:6;647;700:2;688:9;679:7;675:23;671:32;668:52;;;716:1;713;706:12;668:52;739:29;758:9;739:29;:::i;:::-;729:39;837:2;822:18;;;;809:32;;-1:-1:-1;;;571:300:30:o;1117:226::-;1176:6;1229:2;1217:9;1208:7;1204:23;1200:32;1197:52;;;1245:1;1242;1235:12;1197:52;-1:-1:-1;1290:23:30;;1117:226;-1:-1:-1;1117:226:30:o"},"methodIdentifiers":{"attackEnabled()":"d7751b85","enableAttack()":"21f16193","mint(address,uint256)":"40c10f19","ownerOf(uint256)":"6352211e","staking()":"4cf088d9","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"staking_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"attackEnabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"enableAttack\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"staking\",\"outputs\":[{\"internalType\":\"contract IReentrantStakingTarget\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Test-only NFT double that calls stake again from transferFrom.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/test/ReentrantERC721.sol\":\"ReentrantERC721\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/test/ReentrantERC721.sol\":{\"keccak256\":\"0x8ebe653ea43a215fd1ec9d1dcd88f347d972fb07a16665155eabcbfb1c8b2d3c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a552d63277936a9176f59919e274068c73d1b98e5f4fd693ecf93d35f7e1d31\",\"dweb:/ipfs/QmWrZLhASr37r5BqNTLAAaySLvvsV2LvCpMtyogUu6BQvC\"]}},\"version\":1}","storageLayout":{"storage":[{"astId":10385,"contract":"contracts/test/ReentrantERC721.sol:ReentrantERC721","label":"_owners","offset":0,"slot":"0","type":"t_mapping(t_uint256,t_address)"},{"astId":10390,"contract":"contracts/test/ReentrantERC721.sol:ReentrantERC721","label":"attackEnabled","offset":0,"slot":"1","type":"t_bool"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_mapping(t_uint256,t_address)":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => address)","numberOfBytes":"32","value":"t_address"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{},"version":1}}}},"sources":{"@openzeppelin/contracts/access/AccessControl.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/access/AccessControl.sol","exportedSymbols":{"AccessControl":[295],"Context":[3907],"ERC165":[5838],"IAccessControl":[378]},"id":296,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":1,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"108:24:0"},{"absolutePath":"@openzeppelin/contracts/access/IAccessControl.sol","file":"./IAccessControl.sol","id":3,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":296,"sourceUnit":379,"src":"134:52:0","symbolAliases":[{"foreign":{"id":2,"name":"IAccessControl","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":378,"src":"142:14:0","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/Context.sol","file":"../utils/Context.sol","id":5,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":296,"sourceUnit":3908,"src":"187:45:0","symbolAliases":[{"foreign":{"id":4,"name":"Context","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3907,"src":"195:7:0","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/introspection/ERC165.sol","file":"../utils/introspection/ERC165.sol","id":7,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":296,"sourceUnit":5839,"src":"233:57:0","symbolAliases":[{"foreign":{"id":6,"name":"ERC165","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5838,"src":"241:6:0","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":9,"name":"Context","nameLocations":["1988:7:0"],"nodeType":"IdentifierPath","referencedDeclaration":3907,"src":"1988:7:0"},"id":10,"nodeType":"InheritanceSpecifier","src":"1988:7:0"},{"baseName":{"id":11,"name":"IAccessControl","nameLocations":["1997:14:0"],"nodeType":"IdentifierPath","referencedDeclaration":378,"src":"1997:14:0"},"id":12,"nodeType":"InheritanceSpecifier","src":"1997:14:0"},{"baseName":{"id":13,"name":"ERC165","nameLocations":["2013:6:0"],"nodeType":"IdentifierPath","referencedDeclaration":5838,"src":"2013:6:0"},"id":14,"nodeType":"InheritanceSpecifier","src":"2013:6:0"}],"canonicalName":"AccessControl","contractDependencies":[],"contractKind":"contract","documentation":{"id":8,"nodeType":"StructuredDocumentation","src":"292:1660:0","text":" @dev Contract module that allows children to implement role-based access\n control mechanisms. This is a lightweight version that doesn't allow enumerating role\n members except through off-chain means by accessing the contract event logs. Some\n applications may benefit from on-chain enumerability, for those cases see\n {AccessControlEnumerable}.\n Roles are referred to by their `bytes32` identifier. These should be exposed\n in the external API and be unique. The best way to achieve this is by\n using `public constant` hash digests:\n ```solidity\n bytes32 public constant MY_ROLE = keccak256(\"MY_ROLE\");\n ```\n Roles can be used to represent a set of permissions. To restrict access to a\n function call, use {hasRole}:\n ```solidity\n function foo() public {\n require(hasRole(MY_ROLE, msg.sender));\n ...\n }\n ```\n Roles can be granted and revoked dynamically via the {grantRole} and\n {revokeRole} functions. Each role has an associated admin role, and only\n accounts that have a role's admin role can call {grantRole} and {revokeRole}.\n By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means\n that only accounts with this role will be able to grant or revoke other\n roles. More complex role relationships can be created by using\n {_setRoleAdmin}.\n WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to\n grant and revoke this role. Extra precautions should be taken to secure\n accounts that have been granted it. We recommend using {AccessControlDefaultAdminRules}\n to enforce additional security measures for this role."},"fullyImplemented":true,"id":295,"linearizedBaseContracts":[295,5838,5850,378,3907],"name":"AccessControl","nameLocation":"1971:13:0","nodeType":"ContractDefinition","nodes":[{"canonicalName":"AccessControl.RoleData","id":21,"members":[{"constant":false,"id":18,"mutability":"mutable","name":"hasRole","nameLocation":"2085:7:0","nodeType":"VariableDeclaration","scope":21,"src":"2052:40:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"typeName":{"id":17,"keyName":"account","keyNameLocation":"2068:7:0","keyType":{"id":15,"name":"address","nodeType":"ElementaryTypeName","src":"2060:7:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"2052:32:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":16,"name":"bool","nodeType":"ElementaryTypeName","src":"2079:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}},"visibility":"internal"},{"constant":false,"id":20,"mutability":"mutable","name":"adminRole","nameLocation":"2110:9:0","nodeType":"VariableDeclaration","scope":21,"src":"2102:17:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":19,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2102:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"name":"RoleData","nameLocation":"2033:8:0","nodeType":"StructDefinition","scope":295,"src":"2026:100:0","visibility":"public"},{"constant":false,"id":26,"mutability":"mutable","name":"_roles","nameLocation":"2174:6:0","nodeType":"VariableDeclaration","scope":295,"src":"2132:48:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_RoleData_$21_storage_$","typeString":"mapping(bytes32 => struct AccessControl.RoleData)"},"typeName":{"id":25,"keyName":"role","keyNameLocation":"2148:4:0","keyType":{"id":22,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2140:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Mapping","src":"2132:33:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_RoleData_$21_storage_$","typeString":"mapping(bytes32 => struct AccessControl.RoleData)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":24,"nodeType":"UserDefinedTypeName","pathNode":{"id":23,"name":"RoleData","nameLocations":["2156:8:0"],"nodeType":"IdentifierPath","referencedDeclaration":21,"src":"2156:8:0"},"referencedDeclaration":21,"src":"2156:8:0","typeDescriptions":{"typeIdentifier":"t_struct$_RoleData_$21_storage_ptr","typeString":"struct AccessControl.RoleData"}}},"visibility":"private"},{"constant":true,"functionSelector":"a217fddf","id":29,"mutability":"constant","name":"DEFAULT_ADMIN_ROLE","nameLocation":"2211:18:0","nodeType":"VariableDeclaration","scope":295,"src":"2187:49:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":27,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2187:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"30783030","id":28,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2232:4:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0x00"},"visibility":"public"},{"body":{"id":39,"nodeType":"Block","src":"2454:44:0","statements":[{"expression":{"arguments":[{"id":35,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32,"src":"2475:4:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":34,"name":"_checkRole","nodeType":"Identifier","overloadedDeclarations":[93,114],"referencedDeclaration":93,"src":"2464:10:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$returns$__$","typeString":"function (bytes32) view"}},"id":36,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2464:16:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":37,"nodeType":"ExpressionStatement","src":"2464:16:0"},{"id":38,"nodeType":"PlaceholderStatement","src":"2490:1:0"}]},"documentation":{"id":30,"nodeType":"StructuredDocumentation","src":"2243:174:0","text":" @dev Modifier that checks that an account has a specific role. Reverts\n with an {AccessControlUnauthorizedAccount} error including the required role."},"id":40,"name":"onlyRole","nameLocation":"2431:8:0","nodeType":"ModifierDefinition","parameters":{"id":33,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32,"mutability":"mutable","name":"role","nameLocation":"2448:4:0","nodeType":"VariableDeclaration","scope":40,"src":"2440:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":31,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2440:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2439:14:0"},"src":"2422:76:0","virtual":false,"visibility":"internal"},{"baseFunctions":[5837],"body":{"id":61,"nodeType":"Block","src":"2622:111:0","statements":[{"expression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":59,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":54,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":49,"name":"interfaceId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43,"src":"2639:11:0","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"arguments":[{"id":51,"name":"IAccessControl","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":378,"src":"2659:14:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IAccessControl_$378_$","typeString":"type(contract IAccessControl)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_contract$_IAccessControl_$378_$","typeString":"type(contract IAccessControl)"}],"id":50,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967269,"src":"2654:4:0","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":52,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2654:20:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_contract$_IAccessControl_$378","typeString":"type(contract IAccessControl)"}},"id":53,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2675:11:0","memberName":"interfaceId","nodeType":"MemberAccess","src":"2654:32:0","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"2639:47:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"arguments":[{"id":57,"name":"interfaceId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43,"src":"2714:11:0","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"expression":{"id":55,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967271,"src":"2690:5:0","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_AccessControl_$295_$","typeString":"type(contract super AccessControl)"}},"id":56,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2696:17:0","memberName":"supportsInterface","nodeType":"MemberAccess","referencedDeclaration":5837,"src":"2690:23:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes4_$returns$_t_bool_$","typeString":"function (bytes4) view returns (bool)"}},"id":58,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2690:36:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2639:87:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":48,"id":60,"nodeType":"Return","src":"2632:94:0"}]},"documentation":{"id":41,"nodeType":"StructuredDocumentation","src":"2504:22:0","text":"@inheritdoc ERC165"},"functionSelector":"01ffc9a7","id":62,"implemented":true,"kind":"function","modifiers":[],"name":"supportsInterface","nameLocation":"2540:17:0","nodeType":"FunctionDefinition","overrides":{"id":45,"nodeType":"OverrideSpecifier","overrides":[],"src":"2598:8:0"},"parameters":{"id":44,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43,"mutability":"mutable","name":"interfaceId","nameLocation":"2565:11:0","nodeType":"VariableDeclaration","scope":62,"src":"2558:18:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":42,"name":"bytes4","nodeType":"ElementaryTypeName","src":"2558:6:0","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"2557:20:0"},"returnParameters":{"id":48,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":62,"src":"2616:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":46,"name":"bool","nodeType":"ElementaryTypeName","src":"2616:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2615:6:0"},"scope":295,"src":"2531:202:0","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[345],"body":{"id":79,"nodeType":"Block","src":"2903:53:0","statements":[{"expression":{"baseExpression":{"expression":{"baseExpression":{"id":72,"name":"_roles","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26,"src":"2920:6:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_RoleData_$21_storage_$","typeString":"mapping(bytes32 => struct AccessControl.RoleData storage ref)"}},"id":74,"indexExpression":{"id":73,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65,"src":"2927:4:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2920:12:0","typeDescriptions":{"typeIdentifier":"t_struct$_RoleData_$21_storage","typeString":"struct AccessControl.RoleData storage ref"}},"id":75,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2933:7:0","memberName":"hasRole","nodeType":"MemberAccess","referencedDeclaration":18,"src":"2920:20:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":77,"indexExpression":{"id":76,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67,"src":"2941:7:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2920:29:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":71,"id":78,"nodeType":"Return","src":"2913:36:0"}]},"documentation":{"id":63,"nodeType":"StructuredDocumentation","src":"2739:76:0","text":" @dev Returns `true` if `account` has been granted `role`."},"functionSelector":"91d14854","id":80,"implemented":true,"kind":"function","modifiers":[],"name":"hasRole","nameLocation":"2829:7:0","nodeType":"FunctionDefinition","parameters":{"id":68,"nodeType":"ParameterList","parameters":[{"constant":false,"id":65,"mutability":"mutable","name":"role","nameLocation":"2845:4:0","nodeType":"VariableDeclaration","scope":80,"src":"2837:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":64,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2837:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":67,"mutability":"mutable","name":"account","nameLocation":"2859:7:0","nodeType":"VariableDeclaration","scope":80,"src":"2851:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":66,"name":"address","nodeType":"ElementaryTypeName","src":"2851:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2836:31:0"},"returnParameters":{"id":71,"nodeType":"ParameterList","parameters":[{"constant":false,"id":70,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":80,"src":"2897:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":69,"name":"bool","nodeType":"ElementaryTypeName","src":"2897:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2896:6:0"},"scope":295,"src":"2820:136:0","stateMutability":"view","virtual":true,"visibility":"public"},{"body":{"id":92,"nodeType":"Block","src":"3221:47:0","statements":[{"expression":{"arguments":[{"id":87,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":83,"src":"3242:4:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[],"expression":{"argumentTypes":[],"id":88,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3889,"src":"3248:10:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":89,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3248:12:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":86,"name":"_checkRole","nodeType":"Identifier","overloadedDeclarations":[93,114],"referencedDeclaration":114,"src":"3231:10:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address) view"}},"id":90,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3231:30:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":91,"nodeType":"ExpressionStatement","src":"3231:30:0"}]},"documentation":{"id":81,"nodeType":"StructuredDocumentation","src":"2962:198:0","text":" @dev Reverts with an {AccessControlUnauthorizedAccount} error if `_msgSender()`\n is missing `role`. Overriding this function changes the behavior of the {onlyRole} modifier."},"id":93,"implemented":true,"kind":"function","modifiers":[],"name":"_checkRole","nameLocation":"3174:10:0","nodeType":"FunctionDefinition","parameters":{"id":84,"nodeType":"ParameterList","parameters":[{"constant":false,"id":83,"mutability":"mutable","name":"role","nameLocation":"3193:4:0","nodeType":"VariableDeclaration","scope":93,"src":"3185:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":82,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3185:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3184:14:0"},"returnParameters":{"id":85,"nodeType":"ParameterList","parameters":[],"src":"3221:0:0"},"scope":295,"src":"3165:103:0","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":113,"nodeType":"Block","src":"3471:124:0","statements":[{"condition":{"id":105,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"3485:23:0","subExpression":{"arguments":[{"id":102,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":96,"src":"3494:4:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":103,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98,"src":"3500:7:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":101,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80,"src":"3486:7:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":104,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3486:22:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":112,"nodeType":"IfStatement","src":"3481:108:0","trueBody":{"id":111,"nodeType":"Block","src":"3510:79:0","statements":[{"errorCall":{"arguments":[{"id":107,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98,"src":"3564:7:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":108,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":96,"src":"3573:4:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":106,"name":"AccessControlUnauthorizedAccount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":305,"src":"3531:32:0","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_bytes32_$returns$_t_error_$","typeString":"function (address,bytes32) pure returns (error)"}},"id":109,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3531:47:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":110,"nodeType":"RevertStatement","src":"3524:54:0"}]}}]},"documentation":{"id":94,"nodeType":"StructuredDocumentation","src":"3274:119:0","text":" @dev Reverts with an {AccessControlUnauthorizedAccount} error if `account`\n is missing `role`."},"id":114,"implemented":true,"kind":"function","modifiers":[],"name":"_checkRole","nameLocation":"3407:10:0","nodeType":"FunctionDefinition","parameters":{"id":99,"nodeType":"ParameterList","parameters":[{"constant":false,"id":96,"mutability":"mutable","name":"role","nameLocation":"3426:4:0","nodeType":"VariableDeclaration","scope":114,"src":"3418:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":95,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3418:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":98,"mutability":"mutable","name":"account","nameLocation":"3440:7:0","nodeType":"VariableDeclaration","scope":114,"src":"3432:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":97,"name":"address","nodeType":"ElementaryTypeName","src":"3432:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3417:31:0"},"returnParameters":{"id":100,"nodeType":"ParameterList","parameters":[],"src":"3471:0:0"},"scope":295,"src":"3398:197:0","stateMutability":"view","virtual":true,"visibility":"internal"},{"baseFunctions":[353],"body":{"id":127,"nodeType":"Block","src":"3850:46:0","statements":[{"expression":{"expression":{"baseExpression":{"id":122,"name":"_roles","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26,"src":"3867:6:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_RoleData_$21_storage_$","typeString":"mapping(bytes32 => struct AccessControl.RoleData storage ref)"}},"id":124,"indexExpression":{"id":123,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":117,"src":"3874:4:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3867:12:0","typeDescriptions":{"typeIdentifier":"t_struct$_RoleData_$21_storage","typeString":"struct AccessControl.RoleData storage ref"}},"id":125,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3880:9:0","memberName":"adminRole","nodeType":"MemberAccess","referencedDeclaration":20,"src":"3867:22:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":121,"id":126,"nodeType":"Return","src":"3860:29:0"}]},"documentation":{"id":115,"nodeType":"StructuredDocumentation","src":"3601:170:0","text":" @dev Returns the admin role that controls `role`. See {grantRole} and\n {revokeRole}.\n To change a role's admin, use {_setRoleAdmin}."},"functionSelector":"248a9ca3","id":128,"implemented":true,"kind":"function","modifiers":[],"name":"getRoleAdmin","nameLocation":"3785:12:0","nodeType":"FunctionDefinition","parameters":{"id":118,"nodeType":"ParameterList","parameters":[{"constant":false,"id":117,"mutability":"mutable","name":"role","nameLocation":"3806:4:0","nodeType":"VariableDeclaration","scope":128,"src":"3798:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":116,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3798:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3797:14:0"},"returnParameters":{"id":121,"nodeType":"ParameterList","parameters":[{"constant":false,"id":120,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":128,"src":"3841:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":119,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3841:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3840:9:0"},"scope":295,"src":"3776:120:0","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[361],"body":{"id":146,"nodeType":"Block","src":"4286:42:0","statements":[{"expression":{"arguments":[{"id":142,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":131,"src":"4307:4:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":143,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":133,"src":"4313:7:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":141,"name":"_grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":256,"src":"4296:10:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) returns (bool)"}},"id":144,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4296:25:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":145,"nodeType":"ExpressionStatement","src":"4296:25:0"}]},"documentation":{"id":129,"nodeType":"StructuredDocumentation","src":"3902:285:0","text":" @dev Grants `role` to `account`.\n If `account` had not been already granted `role`, emits a {RoleGranted}\n event.\n Requirements:\n - the caller must have ``role``'s admin role.\n May emit a {RoleGranted} event."},"functionSelector":"2f2ff15d","id":147,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"arguments":[{"id":137,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":131,"src":"4279:4:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":136,"name":"getRoleAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":128,"src":"4266:12:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$returns$_t_bytes32_$","typeString":"function (bytes32) view returns (bytes32)"}},"id":138,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4266:18:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":139,"kind":"modifierInvocation","modifierName":{"id":135,"name":"onlyRole","nameLocations":["4257:8:0"],"nodeType":"IdentifierPath","referencedDeclaration":40,"src":"4257:8:0"},"nodeType":"ModifierInvocation","src":"4257:28:0"}],"name":"grantRole","nameLocation":"4201:9:0","nodeType":"FunctionDefinition","parameters":{"id":134,"nodeType":"ParameterList","parameters":[{"constant":false,"id":131,"mutability":"mutable","name":"role","nameLocation":"4219:4:0","nodeType":"VariableDeclaration","scope":147,"src":"4211:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":130,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4211:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":133,"mutability":"mutable","name":"account","nameLocation":"4233:7:0","nodeType":"VariableDeclaration","scope":147,"src":"4225:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":132,"name":"address","nodeType":"ElementaryTypeName","src":"4225:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4210:31:0"},"returnParameters":{"id":140,"nodeType":"ParameterList","parameters":[],"src":"4286:0:0"},"scope":295,"src":"4192:136:0","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[369],"body":{"id":165,"nodeType":"Block","src":"4703:43:0","statements":[{"expression":{"arguments":[{"id":161,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":150,"src":"4725:4:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":162,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":152,"src":"4731:7:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":160,"name":"_revokeRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":294,"src":"4713:11:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) returns (bool)"}},"id":163,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4713:26:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":164,"nodeType":"ExpressionStatement","src":"4713:26:0"}]},"documentation":{"id":148,"nodeType":"StructuredDocumentation","src":"4334:269:0","text":" @dev Revokes `role` from `account`.\n If `account` had been granted `role`, emits a {RoleRevoked} event.\n Requirements:\n - the caller must have ``role``'s admin role.\n May emit a {RoleRevoked} event."},"functionSelector":"d547741f","id":166,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"arguments":[{"id":156,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":150,"src":"4696:4:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":155,"name":"getRoleAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":128,"src":"4683:12:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$returns$_t_bytes32_$","typeString":"function (bytes32) view returns (bytes32)"}},"id":157,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4683:18:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":158,"kind":"modifierInvocation","modifierName":{"id":154,"name":"onlyRole","nameLocations":["4674:8:0"],"nodeType":"IdentifierPath","referencedDeclaration":40,"src":"4674:8:0"},"nodeType":"ModifierInvocation","src":"4674:28:0"}],"name":"revokeRole","nameLocation":"4617:10:0","nodeType":"FunctionDefinition","parameters":{"id":153,"nodeType":"ParameterList","parameters":[{"constant":false,"id":150,"mutability":"mutable","name":"role","nameLocation":"4636:4:0","nodeType":"VariableDeclaration","scope":166,"src":"4628:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":149,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4628:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":152,"mutability":"mutable","name":"account","nameLocation":"4650:7:0","nodeType":"VariableDeclaration","scope":166,"src":"4642:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":151,"name":"address","nodeType":"ElementaryTypeName","src":"4642:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4627:31:0"},"returnParameters":{"id":159,"nodeType":"ParameterList","parameters":[],"src":"4703:0:0"},"scope":295,"src":"4608:138:0","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[377],"body":{"id":188,"nodeType":"Block","src":"5373:166:0","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":177,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":174,"name":"callerConfirmation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":171,"src":"5387:18:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":175,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3889,"src":"5409:10:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":176,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5409:12:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5387:34:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":182,"nodeType":"IfStatement","src":"5383:102:0","trueBody":{"id":181,"nodeType":"Block","src":"5423:62:0","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":178,"name":"AccessControlBadConfirmation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":308,"src":"5444:28:0","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":179,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5444:30:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":180,"nodeType":"RevertStatement","src":"5437:37:0"}]}},{"expression":{"arguments":[{"id":184,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":169,"src":"5507:4:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":185,"name":"callerConfirmation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":171,"src":"5513:18:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":183,"name":"_revokeRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":294,"src":"5495:11:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) returns (bool)"}},"id":186,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5495:37:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":187,"nodeType":"ExpressionStatement","src":"5495:37:0"}]},"documentation":{"id":167,"nodeType":"StructuredDocumentation","src":"4752:537:0","text":" @dev Revokes `role` from the calling account.\n Roles are often managed via {grantRole} and {revokeRole}: this function's\n purpose is to provide a mechanism for accounts to lose their privileges\n if they are compromised (such as when a trusted device is misplaced).\n If the calling account had been revoked `role`, emits a {RoleRevoked}\n event.\n Requirements:\n - the caller must be `callerConfirmation`.\n May emit a {RoleRevoked} event."},"functionSelector":"36568abe","id":189,"implemented":true,"kind":"function","modifiers":[],"name":"renounceRole","nameLocation":"5303:12:0","nodeType":"FunctionDefinition","parameters":{"id":172,"nodeType":"ParameterList","parameters":[{"constant":false,"id":169,"mutability":"mutable","name":"role","nameLocation":"5324:4:0","nodeType":"VariableDeclaration","scope":189,"src":"5316:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":168,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5316:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":171,"mutability":"mutable","name":"callerConfirmation","nameLocation":"5338:18:0","nodeType":"VariableDeclaration","scope":189,"src":"5330:26:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":170,"name":"address","nodeType":"ElementaryTypeName","src":"5330:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5315:42:0"},"returnParameters":{"id":173,"nodeType":"ParameterList","parameters":[],"src":"5373:0:0"},"scope":295,"src":"5294:245:0","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":216,"nodeType":"Block","src":"5737:174:0","statements":[{"assignments":[198],"declarations":[{"constant":false,"id":198,"mutability":"mutable","name":"previousAdminRole","nameLocation":"5755:17:0","nodeType":"VariableDeclaration","scope":216,"src":"5747:25:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":197,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5747:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":202,"initialValue":{"arguments":[{"id":200,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":192,"src":"5788:4:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":199,"name":"getRoleAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":128,"src":"5775:12:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$returns$_t_bytes32_$","typeString":"function (bytes32) view returns (bytes32)"}},"id":201,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5775:18:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"5747:46:0"},{"expression":{"id":208,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":203,"name":"_roles","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26,"src":"5803:6:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_RoleData_$21_storage_$","typeString":"mapping(bytes32 => struct AccessControl.RoleData storage ref)"}},"id":205,"indexExpression":{"id":204,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":192,"src":"5810:4:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5803:12:0","typeDescriptions":{"typeIdentifier":"t_struct$_RoleData_$21_storage","typeString":"struct AccessControl.RoleData storage ref"}},"id":206,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"5816:9:0","memberName":"adminRole","nodeType":"MemberAccess","referencedDeclaration":20,"src":"5803:22:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":207,"name":"adminRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":194,"src":"5828:9:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"5803:34:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":209,"nodeType":"ExpressionStatement","src":"5803:34:0"},{"eventCall":{"arguments":[{"id":211,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":192,"src":"5869:4:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":212,"name":"previousAdminRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":198,"src":"5875:17:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":213,"name":"adminRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":194,"src":"5894:9:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":210,"name":"RoleAdminChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":317,"src":"5852:16:0","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_bytes32_$_t_bytes32_$returns$__$","typeString":"function (bytes32,bytes32,bytes32)"}},"id":214,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5852:52:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":215,"nodeType":"EmitStatement","src":"5847:57:0"}]},"documentation":{"id":190,"nodeType":"StructuredDocumentation","src":"5545:114:0","text":" @dev Sets `adminRole` as ``role``'s admin role.\n Emits a {RoleAdminChanged} event."},"id":217,"implemented":true,"kind":"function","modifiers":[],"name":"_setRoleAdmin","nameLocation":"5673:13:0","nodeType":"FunctionDefinition","parameters":{"id":195,"nodeType":"ParameterList","parameters":[{"constant":false,"id":192,"mutability":"mutable","name":"role","nameLocation":"5695:4:0","nodeType":"VariableDeclaration","scope":217,"src":"5687:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":191,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5687:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":194,"mutability":"mutable","name":"adminRole","nameLocation":"5709:9:0","nodeType":"VariableDeclaration","scope":217,"src":"5701:17:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":193,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5701:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"5686:33:0"},"returnParameters":{"id":196,"nodeType":"ParameterList","parameters":[],"src":"5737:0:0"},"scope":295,"src":"5664:247:0","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":255,"nodeType":"Block","src":"6228:233:0","statements":[{"condition":{"id":231,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"6242:23:0","subExpression":{"arguments":[{"id":228,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":220,"src":"6251:4:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":229,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":222,"src":"6257:7:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":227,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80,"src":"6243:7:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":230,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6243:22:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":253,"nodeType":"Block","src":"6418:37:0","statements":[{"expression":{"hexValue":"66616c7365","id":251,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"6439:5:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":226,"id":252,"nodeType":"Return","src":"6432:12:0"}]},"id":254,"nodeType":"IfStatement","src":"6238:217:0","trueBody":{"id":250,"nodeType":"Block","src":"6267:145:0","statements":[{"expression":{"id":239,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"baseExpression":{"id":232,"name":"_roles","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26,"src":"6281:6:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_RoleData_$21_storage_$","typeString":"mapping(bytes32 => struct AccessControl.RoleData storage ref)"}},"id":234,"indexExpression":{"id":233,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":220,"src":"6288:4:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6281:12:0","typeDescriptions":{"typeIdentifier":"t_struct$_RoleData_$21_storage","typeString":"struct AccessControl.RoleData storage ref"}},"id":235,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6294:7:0","memberName":"hasRole","nodeType":"MemberAccess","referencedDeclaration":18,"src":"6281:20:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":237,"indexExpression":{"id":236,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":222,"src":"6302:7:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6281:29:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":238,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"6313:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"6281:36:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":240,"nodeType":"ExpressionStatement","src":"6281:36:0"},{"eventCall":{"arguments":[{"id":242,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":220,"src":"6348:4:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":243,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":222,"src":"6354:7:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[],"expression":{"argumentTypes":[],"id":244,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3889,"src":"6363:10:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":245,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6363:12:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":241,"name":"RoleGranted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":326,"src":"6336:11:0","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_address_$returns$__$","typeString":"function (bytes32,address,address)"}},"id":246,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6336:40:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":247,"nodeType":"EmitStatement","src":"6331:45:0"},{"expression":{"hexValue":"74727565","id":248,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"6397:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":226,"id":249,"nodeType":"Return","src":"6390:11:0"}]}}]},"documentation":{"id":218,"nodeType":"StructuredDocumentation","src":"5917:223:0","text":" @dev Attempts to grant `role` to `account` and returns a boolean indicating if `role` was granted.\n Internal function without access restriction.\n May emit a {RoleGranted} event."},"id":256,"implemented":true,"kind":"function","modifiers":[],"name":"_grantRole","nameLocation":"6154:10:0","nodeType":"FunctionDefinition","parameters":{"id":223,"nodeType":"ParameterList","parameters":[{"constant":false,"id":220,"mutability":"mutable","name":"role","nameLocation":"6173:4:0","nodeType":"VariableDeclaration","scope":256,"src":"6165:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":219,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6165:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":222,"mutability":"mutable","name":"account","nameLocation":"6187:7:0","nodeType":"VariableDeclaration","scope":256,"src":"6179:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":221,"name":"address","nodeType":"ElementaryTypeName","src":"6179:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6164:31:0"},"returnParameters":{"id":226,"nodeType":"ParameterList","parameters":[{"constant":false,"id":225,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":256,"src":"6222:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":224,"name":"bool","nodeType":"ElementaryTypeName","src":"6222:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6221:6:0"},"scope":295,"src":"6145:316:0","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":293,"nodeType":"Block","src":"6782:233:0","statements":[{"condition":{"arguments":[{"id":267,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":259,"src":"6804:4:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":268,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":261,"src":"6810:7:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":266,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":80,"src":"6796:7:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":269,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6796:22:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":291,"nodeType":"Block","src":"6972:37:0","statements":[{"expression":{"hexValue":"66616c7365","id":289,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"6993:5:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":265,"id":290,"nodeType":"Return","src":"6986:12:0"}]},"id":292,"nodeType":"IfStatement","src":"6792:217:0","trueBody":{"id":288,"nodeType":"Block","src":"6820:146:0","statements":[{"expression":{"id":277,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"baseExpression":{"id":270,"name":"_roles","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26,"src":"6834:6:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_RoleData_$21_storage_$","typeString":"mapping(bytes32 => struct AccessControl.RoleData storage ref)"}},"id":272,"indexExpression":{"id":271,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":259,"src":"6841:4:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6834:12:0","typeDescriptions":{"typeIdentifier":"t_struct$_RoleData_$21_storage","typeString":"struct AccessControl.RoleData storage ref"}},"id":273,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6847:7:0","memberName":"hasRole","nodeType":"MemberAccess","referencedDeclaration":18,"src":"6834:20:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":275,"indexExpression":{"id":274,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":261,"src":"6855:7:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6834:29:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"66616c7365","id":276,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"6866:5:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"6834:37:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":278,"nodeType":"ExpressionStatement","src":"6834:37:0"},{"eventCall":{"arguments":[{"id":280,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":259,"src":"6902:4:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":281,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":261,"src":"6908:7:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[],"expression":{"argumentTypes":[],"id":282,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3889,"src":"6917:10:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":283,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6917:12:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":279,"name":"RoleRevoked","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":335,"src":"6890:11:0","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_address_$returns$__$","typeString":"function (bytes32,address,address)"}},"id":284,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6890:40:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":285,"nodeType":"EmitStatement","src":"6885:45:0"},{"expression":{"hexValue":"74727565","id":286,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"6951:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":265,"id":287,"nodeType":"Return","src":"6944:11:0"}]}}]},"documentation":{"id":257,"nodeType":"StructuredDocumentation","src":"6467:226:0","text":" @dev Attempts to revoke `role` from `account` and returns a boolean indicating if `role` was revoked.\n Internal function without access restriction.\n May emit a {RoleRevoked} event."},"id":294,"implemented":true,"kind":"function","modifiers":[],"name":"_revokeRole","nameLocation":"6707:11:0","nodeType":"FunctionDefinition","parameters":{"id":262,"nodeType":"ParameterList","parameters":[{"constant":false,"id":259,"mutability":"mutable","name":"role","nameLocation":"6727:4:0","nodeType":"VariableDeclaration","scope":294,"src":"6719:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":258,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6719:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":261,"mutability":"mutable","name":"account","nameLocation":"6741:7:0","nodeType":"VariableDeclaration","scope":294,"src":"6733:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":260,"name":"address","nodeType":"ElementaryTypeName","src":"6733:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6718:31:0"},"returnParameters":{"id":265,"nodeType":"ParameterList","parameters":[{"constant":false,"id":264,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":294,"src":"6776:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":263,"name":"bool","nodeType":"ElementaryTypeName","src":"6776:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6775:6:0"},"scope":295,"src":"6698:317:0","stateMutability":"nonpayable","virtual":true,"visibility":"internal"}],"scope":296,"src":"1953:5064:0","usedErrors":[305,308],"usedEvents":[317,326,335]}],"src":"108:6910:0"},"id":0},"@openzeppelin/contracts/access/IAccessControl.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/access/IAccessControl.sol","exportedSymbols":{"IAccessControl":[378]},"id":379,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":297,"literals":["solidity",">=","0.8",".4"],"nodeType":"PragmaDirective","src":"109:24:1"},{"abstract":false,"baseContracts":[],"canonicalName":"IAccessControl","contractDependencies":[],"contractKind":"interface","documentation":{"id":298,"nodeType":"StructuredDocumentation","src":"135:90:1","text":" @dev External interface of AccessControl declared to support ERC-165 detection."},"fullyImplemented":false,"id":378,"linearizedBaseContracts":[378],"name":"IAccessControl","nameLocation":"236:14:1","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":299,"nodeType":"StructuredDocumentation","src":"257:56:1","text":" @dev The `account` is missing a role."},"errorSelector":"e2517d3f","id":305,"name":"AccessControlUnauthorizedAccount","nameLocation":"324:32:1","nodeType":"ErrorDefinition","parameters":{"id":304,"nodeType":"ParameterList","parameters":[{"constant":false,"id":301,"mutability":"mutable","name":"account","nameLocation":"365:7:1","nodeType":"VariableDeclaration","scope":305,"src":"357:15:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":300,"name":"address","nodeType":"ElementaryTypeName","src":"357:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":303,"mutability":"mutable","name":"neededRole","nameLocation":"382:10:1","nodeType":"VariableDeclaration","scope":305,"src":"374:18:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":302,"name":"bytes32","nodeType":"ElementaryTypeName","src":"374:7:1","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"356:37:1"},"src":"318:76:1"},{"documentation":{"id":306,"nodeType":"StructuredDocumentation","src":"400:148:1","text":" @dev The caller of a function is not the expected one.\n NOTE: Don't confuse with {AccessControlUnauthorizedAccount}."},"errorSelector":"6697b232","id":308,"name":"AccessControlBadConfirmation","nameLocation":"559:28:1","nodeType":"ErrorDefinition","parameters":{"id":307,"nodeType":"ParameterList","parameters":[],"src":"587:2:1"},"src":"553:37:1"},{"anonymous":false,"documentation":{"id":309,"nodeType":"StructuredDocumentation","src":"596:254:1","text":" @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\n `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\n {RoleAdminChanged} not being emitted to signal this."},"eventSelector":"bd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff","id":317,"name":"RoleAdminChanged","nameLocation":"861:16:1","nodeType":"EventDefinition","parameters":{"id":316,"nodeType":"ParameterList","parameters":[{"constant":false,"id":311,"indexed":true,"mutability":"mutable","name":"role","nameLocation":"894:4:1","nodeType":"VariableDeclaration","scope":317,"src":"878:20:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":310,"name":"bytes32","nodeType":"ElementaryTypeName","src":"878:7:1","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":313,"indexed":true,"mutability":"mutable","name":"previousAdminRole","nameLocation":"916:17:1","nodeType":"VariableDeclaration","scope":317,"src":"900:33:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":312,"name":"bytes32","nodeType":"ElementaryTypeName","src":"900:7:1","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":315,"indexed":true,"mutability":"mutable","name":"newAdminRole","nameLocation":"951:12:1","nodeType":"VariableDeclaration","scope":317,"src":"935:28:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":314,"name":"bytes32","nodeType":"ElementaryTypeName","src":"935:7:1","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"877:87:1"},"src":"855:110:1"},{"anonymous":false,"documentation":{"id":318,"nodeType":"StructuredDocumentation","src":"971:295:1","text":" @dev Emitted when `account` is granted `role`.\n `sender` is the account that originated the contract call. This account bears the admin role (for the granted role).\n Expected in cases where the role was granted using the internal {AccessControl-_grantRole}."},"eventSelector":"2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d","id":326,"name":"RoleGranted","nameLocation":"1277:11:1","nodeType":"EventDefinition","parameters":{"id":325,"nodeType":"ParameterList","parameters":[{"constant":false,"id":320,"indexed":true,"mutability":"mutable","name":"role","nameLocation":"1305:4:1","nodeType":"VariableDeclaration","scope":326,"src":"1289:20:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":319,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1289:7:1","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":322,"indexed":true,"mutability":"mutable","name":"account","nameLocation":"1327:7:1","nodeType":"VariableDeclaration","scope":326,"src":"1311:23:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":321,"name":"address","nodeType":"ElementaryTypeName","src":"1311:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":324,"indexed":true,"mutability":"mutable","name":"sender","nameLocation":"1352:6:1","nodeType":"VariableDeclaration","scope":326,"src":"1336:22:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":323,"name":"address","nodeType":"ElementaryTypeName","src":"1336:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1288:71:1"},"src":"1271:89:1"},{"anonymous":false,"documentation":{"id":327,"nodeType":"StructuredDocumentation","src":"1366:275:1","text":" @dev Emitted when `account` is revoked `role`.\n `sender` is the account that originated the contract call:\n - if using `revokeRole`, it is the admin role bearer\n - if using `renounceRole`, it is the role bearer (i.e. `account`)"},"eventSelector":"f6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b","id":335,"name":"RoleRevoked","nameLocation":"1652:11:1","nodeType":"EventDefinition","parameters":{"id":334,"nodeType":"ParameterList","parameters":[{"constant":false,"id":329,"indexed":true,"mutability":"mutable","name":"role","nameLocation":"1680:4:1","nodeType":"VariableDeclaration","scope":335,"src":"1664:20:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":328,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1664:7:1","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":331,"indexed":true,"mutability":"mutable","name":"account","nameLocation":"1702:7:1","nodeType":"VariableDeclaration","scope":335,"src":"1686:23:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":330,"name":"address","nodeType":"ElementaryTypeName","src":"1686:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":333,"indexed":true,"mutability":"mutable","name":"sender","nameLocation":"1727:6:1","nodeType":"VariableDeclaration","scope":335,"src":"1711:22:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":332,"name":"address","nodeType":"ElementaryTypeName","src":"1711:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1663:71:1"},"src":"1646:89:1"},{"documentation":{"id":336,"nodeType":"StructuredDocumentation","src":"1741:76:1","text":" @dev Returns `true` if `account` has been granted `role`."},"functionSelector":"91d14854","id":345,"implemented":false,"kind":"function","modifiers":[],"name":"hasRole","nameLocation":"1831:7:1","nodeType":"FunctionDefinition","parameters":{"id":341,"nodeType":"ParameterList","parameters":[{"constant":false,"id":338,"mutability":"mutable","name":"role","nameLocation":"1847:4:1","nodeType":"VariableDeclaration","scope":345,"src":"1839:12:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":337,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1839:7:1","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":340,"mutability":"mutable","name":"account","nameLocation":"1861:7:1","nodeType":"VariableDeclaration","scope":345,"src":"1853:15:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":339,"name":"address","nodeType":"ElementaryTypeName","src":"1853:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1838:31:1"},"returnParameters":{"id":344,"nodeType":"ParameterList","parameters":[{"constant":false,"id":343,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":345,"src":"1893:4:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":342,"name":"bool","nodeType":"ElementaryTypeName","src":"1893:4:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1892:6:1"},"scope":378,"src":"1822:77:1","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":346,"nodeType":"StructuredDocumentation","src":"1905:184:1","text":" @dev Returns the admin role that controls `role`. See {grantRole} and\n {revokeRole}.\n To change a role's admin, use {AccessControl-_setRoleAdmin}."},"functionSelector":"248a9ca3","id":353,"implemented":false,"kind":"function","modifiers":[],"name":"getRoleAdmin","nameLocation":"2103:12:1","nodeType":"FunctionDefinition","parameters":{"id":349,"nodeType":"ParameterList","parameters":[{"constant":false,"id":348,"mutability":"mutable","name":"role","nameLocation":"2124:4:1","nodeType":"VariableDeclaration","scope":353,"src":"2116:12:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":347,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2116:7:1","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2115:14:1"},"returnParameters":{"id":352,"nodeType":"ParameterList","parameters":[{"constant":false,"id":351,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":353,"src":"2153:7:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":350,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2153:7:1","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2152:9:1"},"scope":378,"src":"2094:68:1","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":354,"nodeType":"StructuredDocumentation","src":"2168:239:1","text":" @dev Grants `role` to `account`.\n If `account` had not been already granted `role`, emits a {RoleGranted}\n event.\n Requirements:\n - the caller must have ``role``'s admin role."},"functionSelector":"2f2ff15d","id":361,"implemented":false,"kind":"function","modifiers":[],"name":"grantRole","nameLocation":"2421:9:1","nodeType":"FunctionDefinition","parameters":{"id":359,"nodeType":"ParameterList","parameters":[{"constant":false,"id":356,"mutability":"mutable","name":"role","nameLocation":"2439:4:1","nodeType":"VariableDeclaration","scope":361,"src":"2431:12:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":355,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2431:7:1","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":358,"mutability":"mutable","name":"account","nameLocation":"2453:7:1","nodeType":"VariableDeclaration","scope":361,"src":"2445:15:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":357,"name":"address","nodeType":"ElementaryTypeName","src":"2445:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2430:31:1"},"returnParameters":{"id":360,"nodeType":"ParameterList","parameters":[],"src":"2470:0:1"},"scope":378,"src":"2412:59:1","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":362,"nodeType":"StructuredDocumentation","src":"2477:223:1","text":" @dev Revokes `role` from `account`.\n If `account` had been granted `role`, emits a {RoleRevoked} event.\n Requirements:\n - the caller must have ``role``'s admin role."},"functionSelector":"d547741f","id":369,"implemented":false,"kind":"function","modifiers":[],"name":"revokeRole","nameLocation":"2714:10:1","nodeType":"FunctionDefinition","parameters":{"id":367,"nodeType":"ParameterList","parameters":[{"constant":false,"id":364,"mutability":"mutable","name":"role","nameLocation":"2733:4:1","nodeType":"VariableDeclaration","scope":369,"src":"2725:12:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":363,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2725:7:1","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":366,"mutability":"mutable","name":"account","nameLocation":"2747:7:1","nodeType":"VariableDeclaration","scope":369,"src":"2739:15:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":365,"name":"address","nodeType":"ElementaryTypeName","src":"2739:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2724:31:1"},"returnParameters":{"id":368,"nodeType":"ParameterList","parameters":[],"src":"2764:0:1"},"scope":378,"src":"2705:60:1","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":370,"nodeType":"StructuredDocumentation","src":"2771:491:1","text":" @dev Revokes `role` from the calling account.\n Roles are often managed via {grantRole} and {revokeRole}: this function's\n purpose is to provide a mechanism for accounts to lose their privileges\n if they are compromised (such as when a trusted device is misplaced).\n If the calling account had been granted `role`, emits a {RoleRevoked}\n event.\n Requirements:\n - the caller must be `callerConfirmation`."},"functionSelector":"36568abe","id":377,"implemented":false,"kind":"function","modifiers":[],"name":"renounceRole","nameLocation":"3276:12:1","nodeType":"FunctionDefinition","parameters":{"id":375,"nodeType":"ParameterList","parameters":[{"constant":false,"id":372,"mutability":"mutable","name":"role","nameLocation":"3297:4:1","nodeType":"VariableDeclaration","scope":377,"src":"3289:12:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":371,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3289:7:1","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":374,"mutability":"mutable","name":"callerConfirmation","nameLocation":"3311:18:1","nodeType":"VariableDeclaration","scope":377,"src":"3303:26:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":373,"name":"address","nodeType":"ElementaryTypeName","src":"3303:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3288:42:1"},"returnParameters":{"id":376,"nodeType":"ParameterList","parameters":[],"src":"3339:0:1"},"scope":378,"src":"3267:73:1","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":379,"src":"226:3116:1","usedErrors":[305,308],"usedEvents":[317,326,335]}],"src":"109:3234:1"},"id":1},"@openzeppelin/contracts/access/Ownable.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/access/Ownable.sol","exportedSymbols":{"Context":[3907],"Ownable":[526]},"id":527,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":380,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"102:24:2"},{"absolutePath":"@openzeppelin/contracts/utils/Context.sol","file":"../utils/Context.sol","id":382,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":527,"sourceUnit":3908,"src":"128:45:2","symbolAliases":[{"foreign":{"id":381,"name":"Context","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3907,"src":"136:7:2","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":384,"name":"Context","nameLocations":["692:7:2"],"nodeType":"IdentifierPath","referencedDeclaration":3907,"src":"692:7:2"},"id":385,"nodeType":"InheritanceSpecifier","src":"692:7:2"}],"canonicalName":"Ownable","contractDependencies":[],"contractKind":"contract","documentation":{"id":383,"nodeType":"StructuredDocumentation","src":"175:487:2","text":" @dev Contract module which provides a basic access control mechanism, where\n there is an account (an owner) that can be granted exclusive access to\n specific functions.\n The initial owner is set to the address provided by the deployer. This can\n later be changed with {transferOwnership}.\n This module is used through inheritance. It will make available the modifier\n `onlyOwner`, which can be applied to your functions to restrict their use to\n the owner."},"fullyImplemented":true,"id":526,"linearizedBaseContracts":[526,3907],"name":"Ownable","nameLocation":"681:7:2","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":387,"mutability":"mutable","name":"_owner","nameLocation":"722:6:2","nodeType":"VariableDeclaration","scope":526,"src":"706:22:2","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":386,"name":"address","nodeType":"ElementaryTypeName","src":"706:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"private"},{"documentation":{"id":388,"nodeType":"StructuredDocumentation","src":"735:85:2","text":" @dev The caller account is not authorized to perform an operation."},"errorSelector":"118cdaa7","id":392,"name":"OwnableUnauthorizedAccount","nameLocation":"831:26:2","nodeType":"ErrorDefinition","parameters":{"id":391,"nodeType":"ParameterList","parameters":[{"constant":false,"id":390,"mutability":"mutable","name":"account","nameLocation":"866:7:2","nodeType":"VariableDeclaration","scope":392,"src":"858:15:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":389,"name":"address","nodeType":"ElementaryTypeName","src":"858:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"857:17:2"},"src":"825:50:2"},{"documentation":{"id":393,"nodeType":"StructuredDocumentation","src":"881:82:2","text":" @dev The owner is not a valid owner account. (eg. `address(0)`)"},"errorSelector":"1e4fbdf7","id":397,"name":"OwnableInvalidOwner","nameLocation":"974:19:2","nodeType":"ErrorDefinition","parameters":{"id":396,"nodeType":"ParameterList","parameters":[{"constant":false,"id":395,"mutability":"mutable","name":"owner","nameLocation":"1002:5:2","nodeType":"VariableDeclaration","scope":397,"src":"994:13:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":394,"name":"address","nodeType":"ElementaryTypeName","src":"994:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"993:15:2"},"src":"968:41:2"},{"anonymous":false,"eventSelector":"8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0","id":403,"name":"OwnershipTransferred","nameLocation":"1021:20:2","nodeType":"EventDefinition","parameters":{"id":402,"nodeType":"ParameterList","parameters":[{"constant":false,"id":399,"indexed":true,"mutability":"mutable","name":"previousOwner","nameLocation":"1058:13:2","nodeType":"VariableDeclaration","scope":403,"src":"1042:29:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":398,"name":"address","nodeType":"ElementaryTypeName","src":"1042:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":401,"indexed":true,"mutability":"mutable","name":"newOwner","nameLocation":"1089:8:2","nodeType":"VariableDeclaration","scope":403,"src":"1073:24:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":400,"name":"address","nodeType":"ElementaryTypeName","src":"1073:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1041:57:2"},"src":"1015:84:2"},{"body":{"id":428,"nodeType":"Block","src":"1259:153:2","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":414,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":409,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":406,"src":"1273:12:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":412,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1297:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":411,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1289:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":410,"name":"address","nodeType":"ElementaryTypeName","src":"1289:7:2","typeDescriptions":{}}},"id":413,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1289:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1273:26:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":423,"nodeType":"IfStatement","src":"1269:95:2","trueBody":{"id":422,"nodeType":"Block","src":"1301:63:2","statements":[{"errorCall":{"arguments":[{"arguments":[{"hexValue":"30","id":418,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1350:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":417,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1342:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":416,"name":"address","nodeType":"ElementaryTypeName","src":"1342:7:2","typeDescriptions":{}}},"id":419,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1342:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":415,"name":"OwnableInvalidOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":397,"src":"1322:19:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":420,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1322:31:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":421,"nodeType":"RevertStatement","src":"1315:38:2"}]}},{"expression":{"arguments":[{"id":425,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":406,"src":"1392:12:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":424,"name":"_transferOwnership","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":525,"src":"1373:18:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":426,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1373:32:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":427,"nodeType":"ExpressionStatement","src":"1373:32:2"}]},"documentation":{"id":404,"nodeType":"StructuredDocumentation","src":"1105:115:2","text":" @dev Initializes the contract setting the address provided by the deployer as the initial owner."},"id":429,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":407,"nodeType":"ParameterList","parameters":[{"constant":false,"id":406,"mutability":"mutable","name":"initialOwner","nameLocation":"1245:12:2","nodeType":"VariableDeclaration","scope":429,"src":"1237:20:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":405,"name":"address","nodeType":"ElementaryTypeName","src":"1237:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1236:22:2"},"returnParameters":{"id":408,"nodeType":"ParameterList","parameters":[],"src":"1259:0:2"},"scope":526,"src":"1225:187:2","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":436,"nodeType":"Block","src":"1521:41:2","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":432,"name":"_checkOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":463,"src":"1531:11:2","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":433,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1531:13:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":434,"nodeType":"ExpressionStatement","src":"1531:13:2"},{"id":435,"nodeType":"PlaceholderStatement","src":"1554:1:2"}]},"documentation":{"id":430,"nodeType":"StructuredDocumentation","src":"1418:77:2","text":" @dev Throws if called by any account other than the owner."},"id":437,"name":"onlyOwner","nameLocation":"1509:9:2","nodeType":"ModifierDefinition","parameters":{"id":431,"nodeType":"ParameterList","parameters":[],"src":"1518:2:2"},"src":"1500:62:2","virtual":false,"visibility":"internal"},{"body":{"id":445,"nodeType":"Block","src":"1693:30:2","statements":[{"expression":{"id":443,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":387,"src":"1710:6:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":442,"id":444,"nodeType":"Return","src":"1703:13:2"}]},"documentation":{"id":438,"nodeType":"StructuredDocumentation","src":"1568:65:2","text":" @dev Returns the address of the current owner."},"functionSelector":"8da5cb5b","id":446,"implemented":true,"kind":"function","modifiers":[],"name":"owner","nameLocation":"1647:5:2","nodeType":"FunctionDefinition","parameters":{"id":439,"nodeType":"ParameterList","parameters":[],"src":"1652:2:2"},"returnParameters":{"id":442,"nodeType":"ParameterList","parameters":[{"constant":false,"id":441,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":446,"src":"1684:7:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":440,"name":"address","nodeType":"ElementaryTypeName","src":"1684:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1683:9:2"},"scope":526,"src":"1638:85:2","stateMutability":"view","virtual":true,"visibility":"public"},{"body":{"id":462,"nodeType":"Block","src":"1841:117:2","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":454,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":450,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":446,"src":"1855:5:2","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":451,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1855:7:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":452,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3889,"src":"1866:10:2","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":453,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1866:12:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1855:23:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":461,"nodeType":"IfStatement","src":"1851:101:2","trueBody":{"id":460,"nodeType":"Block","src":"1880:72:2","statements":[{"errorCall":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":456,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3889,"src":"1928:10:2","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":457,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1928:12:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":455,"name":"OwnableUnauthorizedAccount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":392,"src":"1901:26:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":458,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1901:40:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":459,"nodeType":"RevertStatement","src":"1894:47:2"}]}}]},"documentation":{"id":447,"nodeType":"StructuredDocumentation","src":"1729:62:2","text":" @dev Throws if the sender is not the owner."},"id":463,"implemented":true,"kind":"function","modifiers":[],"name":"_checkOwner","nameLocation":"1805:11:2","nodeType":"FunctionDefinition","parameters":{"id":448,"nodeType":"ParameterList","parameters":[],"src":"1816:2:2"},"returnParameters":{"id":449,"nodeType":"ParameterList","parameters":[],"src":"1841:0:2"},"scope":526,"src":"1796:162:2","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":476,"nodeType":"Block","src":"2347:47:2","statements":[{"expression":{"arguments":[{"arguments":[{"hexValue":"30","id":472,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2384:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":471,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2376:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":470,"name":"address","nodeType":"ElementaryTypeName","src":"2376:7:2","typeDescriptions":{}}},"id":473,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2376:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":469,"name":"_transferOwnership","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":525,"src":"2357:18:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":474,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2357:30:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":475,"nodeType":"ExpressionStatement","src":"2357:30:2"}]},"documentation":{"id":464,"nodeType":"StructuredDocumentation","src":"1964:324:2","text":" @dev Leaves the contract without owner. It will not be possible to call\n `onlyOwner` functions. Can only be called by the current owner.\n NOTE: Renouncing ownership will leave the contract without an owner,\n thereby disabling any functionality that is only available to the owner."},"functionSelector":"715018a6","id":477,"implemented":true,"kind":"function","modifiers":[{"id":467,"kind":"modifierInvocation","modifierName":{"id":466,"name":"onlyOwner","nameLocations":["2337:9:2"],"nodeType":"IdentifierPath","referencedDeclaration":437,"src":"2337:9:2"},"nodeType":"ModifierInvocation","src":"2337:9:2"}],"name":"renounceOwnership","nameLocation":"2302:17:2","nodeType":"FunctionDefinition","parameters":{"id":465,"nodeType":"ParameterList","parameters":[],"src":"2319:2:2"},"returnParameters":{"id":468,"nodeType":"ParameterList","parameters":[],"src":"2347:0:2"},"scope":526,"src":"2293:101:2","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":504,"nodeType":"Block","src":"2613:145:2","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":490,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":485,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":480,"src":"2627:8:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":488,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2647:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":487,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2639:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":486,"name":"address","nodeType":"ElementaryTypeName","src":"2639:7:2","typeDescriptions":{}}},"id":489,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2639:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2627:22:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":499,"nodeType":"IfStatement","src":"2623:91:2","trueBody":{"id":498,"nodeType":"Block","src":"2651:63:2","statements":[{"errorCall":{"arguments":[{"arguments":[{"hexValue":"30","id":494,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2700:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":493,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2692:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":492,"name":"address","nodeType":"ElementaryTypeName","src":"2692:7:2","typeDescriptions":{}}},"id":495,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2692:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":491,"name":"OwnableInvalidOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":397,"src":"2672:19:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":496,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2672:31:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":497,"nodeType":"RevertStatement","src":"2665:38:2"}]}},{"expression":{"arguments":[{"id":501,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":480,"src":"2742:8:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":500,"name":"_transferOwnership","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":525,"src":"2723:18:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":502,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2723:28:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":503,"nodeType":"ExpressionStatement","src":"2723:28:2"}]},"documentation":{"id":478,"nodeType":"StructuredDocumentation","src":"2400:138:2","text":" @dev Transfers ownership of the contract to a new account (`newOwner`).\n Can only be called by the current owner."},"functionSelector":"f2fde38b","id":505,"implemented":true,"kind":"function","modifiers":[{"id":483,"kind":"modifierInvocation","modifierName":{"id":482,"name":"onlyOwner","nameLocations":["2603:9:2"],"nodeType":"IdentifierPath","referencedDeclaration":437,"src":"2603:9:2"},"nodeType":"ModifierInvocation","src":"2603:9:2"}],"name":"transferOwnership","nameLocation":"2552:17:2","nodeType":"FunctionDefinition","parameters":{"id":481,"nodeType":"ParameterList","parameters":[{"constant":false,"id":480,"mutability":"mutable","name":"newOwner","nameLocation":"2578:8:2","nodeType":"VariableDeclaration","scope":505,"src":"2570:16:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":479,"name":"address","nodeType":"ElementaryTypeName","src":"2570:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2569:18:2"},"returnParameters":{"id":484,"nodeType":"ParameterList","parameters":[],"src":"2613:0:2"},"scope":526,"src":"2543:215:2","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":524,"nodeType":"Block","src":"2975:124:2","statements":[{"assignments":[512],"declarations":[{"constant":false,"id":512,"mutability":"mutable","name":"oldOwner","nameLocation":"2993:8:2","nodeType":"VariableDeclaration","scope":524,"src":"2985:16:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":511,"name":"address","nodeType":"ElementaryTypeName","src":"2985:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":514,"initialValue":{"id":513,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":387,"src":"3004:6:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"2985:25:2"},{"expression":{"id":517,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":515,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":387,"src":"3020:6:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":516,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":508,"src":"3029:8:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3020:17:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":518,"nodeType":"ExpressionStatement","src":"3020:17:2"},{"eventCall":{"arguments":[{"id":520,"name":"oldOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":512,"src":"3073:8:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":521,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":508,"src":"3083:8:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":519,"name":"OwnershipTransferred","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":403,"src":"3052:20:2","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":522,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3052:40:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":523,"nodeType":"EmitStatement","src":"3047:45:2"}]},"documentation":{"id":506,"nodeType":"StructuredDocumentation","src":"2764:143:2","text":" @dev Transfers ownership of the contract to a new account (`newOwner`).\n Internal function without access restriction."},"id":525,"implemented":true,"kind":"function","modifiers":[],"name":"_transferOwnership","nameLocation":"2921:18:2","nodeType":"FunctionDefinition","parameters":{"id":509,"nodeType":"ParameterList","parameters":[{"constant":false,"id":508,"mutability":"mutable","name":"newOwner","nameLocation":"2948:8:2","nodeType":"VariableDeclaration","scope":525,"src":"2940:16:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":507,"name":"address","nodeType":"ElementaryTypeName","src":"2940:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2939:18:2"},"returnParameters":{"id":510,"nodeType":"ParameterList","parameters":[],"src":"2975:0:2"},"scope":526,"src":"2912:187:2","stateMutability":"nonpayable","virtual":true,"visibility":"internal"}],"scope":527,"src":"663:2438:2","usedErrors":[392,397],"usedEvents":[403]}],"src":"102:3000:2"},"id":2},"@openzeppelin/contracts/access/Ownable2Step.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/access/Ownable2Step.sol","exportedSymbols":{"Ownable":[526],"Ownable2Step":[612]},"id":613,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":528,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"107:24:3"},{"absolutePath":"@openzeppelin/contracts/access/Ownable.sol","file":"./Ownable.sol","id":530,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":613,"sourceUnit":527,"src":"133:38:3","symbolAliases":[{"foreign":{"id":529,"name":"Ownable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":526,"src":"141:7:3","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":532,"name":"Ownable","nameLocations":["1018:7:3"],"nodeType":"IdentifierPath","referencedDeclaration":526,"src":"1018:7:3"},"id":533,"nodeType":"InheritanceSpecifier","src":"1018:7:3"}],"canonicalName":"Ownable2Step","contractDependencies":[],"contractKind":"contract","documentation":{"id":531,"nodeType":"StructuredDocumentation","src":"173:810:3","text":" @dev Contract module which provides access control mechanism, where\n there is an account (an owner) that can be granted exclusive access to\n specific functions.\n This extension of the {Ownable} contract includes a two-step mechanism to transfer\n ownership, where the new owner must call {acceptOwnership} in order to replace the\n old one. This can help prevent common mistakes, such as transfers of ownership to\n incorrect accounts, or to contracts that are unable to interact with the\n permission system.\n The initial owner is specified at deployment time in the constructor for `Ownable`. This\n can later be changed with {transferOwnership} and {acceptOwnership}.\n This module is used through inheritance. It will make available all functions\n from parent (Ownable)."},"fullyImplemented":true,"id":612,"linearizedBaseContracts":[612,526,3907],"name":"Ownable2Step","nameLocation":"1002:12:3","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":535,"mutability":"mutable","name":"_pendingOwner","nameLocation":"1048:13:3","nodeType":"VariableDeclaration","scope":612,"src":"1032:29:3","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":534,"name":"address","nodeType":"ElementaryTypeName","src":"1032:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"private"},{"anonymous":false,"eventSelector":"38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700","id":541,"name":"OwnershipTransferStarted","nameLocation":"1074:24:3","nodeType":"EventDefinition","parameters":{"id":540,"nodeType":"ParameterList","parameters":[{"constant":false,"id":537,"indexed":true,"mutability":"mutable","name":"previousOwner","nameLocation":"1115:13:3","nodeType":"VariableDeclaration","scope":541,"src":"1099:29:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":536,"name":"address","nodeType":"ElementaryTypeName","src":"1099:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":539,"indexed":true,"mutability":"mutable","name":"newOwner","nameLocation":"1146:8:3","nodeType":"VariableDeclaration","scope":541,"src":"1130:24:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":538,"name":"address","nodeType":"ElementaryTypeName","src":"1130:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1098:57:3"},"src":"1068:88:3"},{"body":{"id":549,"nodeType":"Block","src":"1294:37:3","statements":[{"expression":{"id":547,"name":"_pendingOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":535,"src":"1311:13:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":546,"id":548,"nodeType":"Return","src":"1304:20:3"}]},"documentation":{"id":542,"nodeType":"StructuredDocumentation","src":"1162:65:3","text":" @dev Returns the address of the pending owner."},"functionSelector":"e30c3978","id":550,"implemented":true,"kind":"function","modifiers":[],"name":"pendingOwner","nameLocation":"1241:12:3","nodeType":"FunctionDefinition","parameters":{"id":543,"nodeType":"ParameterList","parameters":[],"src":"1253:2:3"},"returnParameters":{"id":546,"nodeType":"ParameterList","parameters":[{"constant":false,"id":545,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":550,"src":"1285:7:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":544,"name":"address","nodeType":"ElementaryTypeName","src":"1285:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1284:9:3"},"scope":612,"src":"1232:99:3","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[505],"body":{"id":569,"nodeType":"Block","src":"1728:99:3","statements":[{"expression":{"id":561,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":559,"name":"_pendingOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":535,"src":"1738:13:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":560,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":553,"src":"1754:8:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1738:24:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":562,"nodeType":"ExpressionStatement","src":"1738:24:3"},{"eventCall":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":564,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":446,"src":"1802:5:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":565,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1802:7:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":566,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":553,"src":"1811:8:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":563,"name":"OwnershipTransferStarted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":541,"src":"1777:24:3","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":567,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1777:43:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":568,"nodeType":"EmitStatement","src":"1772:48:3"}]},"documentation":{"id":551,"nodeType":"StructuredDocumentation","src":"1337:307:3","text":" @dev Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one.\n Can only be called by the current owner.\n Setting `newOwner` to the zero address is allowed; this can be used to cancel an initiated ownership transfer."},"functionSelector":"f2fde38b","id":570,"implemented":true,"kind":"function","modifiers":[{"id":557,"kind":"modifierInvocation","modifierName":{"id":556,"name":"onlyOwner","nameLocations":["1718:9:3"],"nodeType":"IdentifierPath","referencedDeclaration":437,"src":"1718:9:3"},"nodeType":"ModifierInvocation","src":"1718:9:3"}],"name":"transferOwnership","nameLocation":"1658:17:3","nodeType":"FunctionDefinition","overrides":{"id":555,"nodeType":"OverrideSpecifier","overrides":[],"src":"1709:8:3"},"parameters":{"id":554,"nodeType":"ParameterList","parameters":[{"constant":false,"id":553,"mutability":"mutable","name":"newOwner","nameLocation":"1684:8:3","nodeType":"VariableDeclaration","scope":570,"src":"1676:16:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":552,"name":"address","nodeType":"ElementaryTypeName","src":"1676:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1675:18:3"},"returnParameters":{"id":558,"nodeType":"ParameterList","parameters":[],"src":"1728:0:3"},"scope":612,"src":"1649:178:3","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[525],"body":{"id":586,"nodeType":"Block","src":"2083:81:3","statements":[{"expression":{"id":578,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"2093:20:3","subExpression":{"id":577,"name":"_pendingOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":535,"src":"2100:13:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":579,"nodeType":"ExpressionStatement","src":"2093:20:3"},{"expression":{"arguments":[{"id":583,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":573,"src":"2148:8:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":580,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967271,"src":"2123:5:3","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_Ownable2Step_$612_$","typeString":"type(contract super Ownable2Step)"}},"id":582,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2129:18:3","memberName":"_transferOwnership","nodeType":"MemberAccess","referencedDeclaration":525,"src":"2123:24:3","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":584,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2123:34:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":585,"nodeType":"ExpressionStatement","src":"2123:34:3"}]},"documentation":{"id":571,"nodeType":"StructuredDocumentation","src":"1833:173:3","text":" @dev Transfers ownership of the contract to a new account (`newOwner`) and deletes any pending owner.\n Internal function without access restriction."},"id":587,"implemented":true,"kind":"function","modifiers":[],"name":"_transferOwnership","nameLocation":"2020:18:3","nodeType":"FunctionDefinition","overrides":{"id":575,"nodeType":"OverrideSpecifier","overrides":[],"src":"2074:8:3"},"parameters":{"id":574,"nodeType":"ParameterList","parameters":[{"constant":false,"id":573,"mutability":"mutable","name":"newOwner","nameLocation":"2047:8:3","nodeType":"VariableDeclaration","scope":587,"src":"2039:16:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":572,"name":"address","nodeType":"ElementaryTypeName","src":"2039:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2038:18:3"},"returnParameters":{"id":576,"nodeType":"ParameterList","parameters":[],"src":"2083:0:3"},"scope":612,"src":"2011:153:3","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":610,"nodeType":"Block","src":"2286:187:3","statements":[{"assignments":[592],"declarations":[{"constant":false,"id":592,"mutability":"mutable","name":"sender","nameLocation":"2304:6:3","nodeType":"VariableDeclaration","scope":610,"src":"2296:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":591,"name":"address","nodeType":"ElementaryTypeName","src":"2296:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":595,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":593,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3889,"src":"2313:10:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":594,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2313:12:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"2296:29:3"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":599,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":596,"name":"pendingOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":550,"src":"2339:12:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":597,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2339:14:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":598,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":592,"src":"2357:6:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2339:24:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":605,"nodeType":"IfStatement","src":"2335:96:3","trueBody":{"id":604,"nodeType":"Block","src":"2365:66:3","statements":[{"errorCall":{"arguments":[{"id":601,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":592,"src":"2413:6:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":600,"name":"OwnableUnauthorizedAccount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":392,"src":"2386:26:3","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":602,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2386:34:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":603,"nodeType":"RevertStatement","src":"2379:41:3"}]}},{"expression":{"arguments":[{"id":607,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":592,"src":"2459:6:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":606,"name":"_transferOwnership","nodeType":"Identifier","overloadedDeclarations":[587],"referencedDeclaration":587,"src":"2440:18:3","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":608,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2440:26:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":609,"nodeType":"ExpressionStatement","src":"2440:26:3"}]},"documentation":{"id":588,"nodeType":"StructuredDocumentation","src":"2170:69:3","text":" @dev The new owner accepts the ownership transfer."},"functionSelector":"79ba5097","id":611,"implemented":true,"kind":"function","modifiers":[],"name":"acceptOwnership","nameLocation":"2253:15:3","nodeType":"FunctionDefinition","parameters":{"id":589,"nodeType":"ParameterList","parameters":[],"src":"2268:2:3"},"returnParameters":{"id":590,"nodeType":"ParameterList","parameters":[],"src":"2286:0:3"},"scope":612,"src":"2244:229:3","stateMutability":"nonpayable","virtual":true,"visibility":"public"}],"scope":613,"src":"984:1491:3","usedErrors":[392,397],"usedEvents":[403,541]}],"src":"107:2369:3"},"id":3},"@openzeppelin/contracts/access/extensions/AccessControlDefaultAdminRules.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/access/extensions/AccessControlDefaultAdminRules.sol","exportedSymbols":{"AccessControl":[295],"AccessControlDefaultAdminRules":[1331],"IAccessControl":[378],"IAccessControlDefaultAdminRules":[1430],"IERC165":[5850],"IERC5313":[1460],"Math":[7507],"SafeCast":[9272]},"id":1332,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":614,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"136:24:4"},{"absolutePath":"@openzeppelin/contracts/access/extensions/IAccessControlDefaultAdminRules.sol","file":"./IAccessControlDefaultAdminRules.sol","id":616,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1332,"sourceUnit":1431,"src":"162:86:4","symbolAliases":[{"foreign":{"id":615,"name":"IAccessControlDefaultAdminRules","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1430,"src":"170:31:4","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/access/AccessControl.sol","file":"../AccessControl.sol","id":619,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1332,"sourceUnit":296,"src":"249:67:4","symbolAliases":[{"foreign":{"id":617,"name":"AccessControl","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":295,"src":"257:13:4","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":618,"name":"IAccessControl","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":378,"src":"272:14:4","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/math/SafeCast.sol","file":"../../utils/math/SafeCast.sol","id":621,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1332,"sourceUnit":9273,"src":"317:55:4","symbolAliases":[{"foreign":{"id":620,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9272,"src":"325:8:4","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/math/Math.sol","file":"../../utils/math/Math.sol","id":623,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1332,"sourceUnit":7508,"src":"373:47:4","symbolAliases":[{"foreign":{"id":622,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7507,"src":"381:4:4","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC5313.sol","file":"../../interfaces/IERC5313.sol","id":625,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1332,"sourceUnit":1461,"src":"421:55:4","symbolAliases":[{"foreign":{"id":624,"name":"IERC5313","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1460,"src":"429:8:4","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/introspection/IERC165.sol","file":"../../utils/introspection/IERC165.sol","id":627,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1332,"sourceUnit":5851,"src":"477:62:4","symbolAliases":[{"foreign":{"id":626,"name":"IERC165","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5850,"src":"485:7:4","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":629,"name":"IAccessControlDefaultAdminRules","nameLocations":["1905:31:4"],"nodeType":"IdentifierPath","referencedDeclaration":1430,"src":"1905:31:4"},"id":630,"nodeType":"InheritanceSpecifier","src":"1905:31:4"},{"baseName":{"id":631,"name":"IERC5313","nameLocations":["1938:8:4"],"nodeType":"IdentifierPath","referencedDeclaration":1460,"src":"1938:8:4"},"id":632,"nodeType":"InheritanceSpecifier","src":"1938:8:4"},{"baseName":{"id":633,"name":"AccessControl","nameLocations":["1948:13:4"],"nodeType":"IdentifierPath","referencedDeclaration":295,"src":"1948:13:4"},"id":634,"nodeType":"InheritanceSpecifier","src":"1948:13:4"}],"canonicalName":"AccessControlDefaultAdminRules","contractDependencies":[],"contractKind":"contract","documentation":{"id":628,"nodeType":"StructuredDocumentation","src":"541:1311:4","text":" @dev Extension of {AccessControl} that allows specifying special rules to manage\n the `DEFAULT_ADMIN_ROLE` holder, which is a sensitive role with special permissions\n over other roles that may potentially have privileged rights in the system.\n If a specific role doesn't have an admin role assigned, the holder of the\n `DEFAULT_ADMIN_ROLE` will have the ability to grant it and revoke it.\n This contract implements the following risk mitigations on top of {AccessControl}:\n * Only one account holds the `DEFAULT_ADMIN_ROLE` since deployment until it's potentially renounced.\n * Enforces a 2-step process to transfer the `DEFAULT_ADMIN_ROLE` to another account.\n * Enforces a configurable delay between the two steps, with the ability to cancel before the transfer is accepted.\n * The delay can be changed by scheduling, see {changeDefaultAdminDelay}.\n * Role transfers must wait at least one block after scheduling before it can be accepted.\n * It is not possible to use another role to manage the `DEFAULT_ADMIN_ROLE`.\n Example usage:\n ```solidity\n contract MyToken is AccessControlDefaultAdminRules {\n constructor() AccessControlDefaultAdminRules(\n 3 days,\n msg.sender // Explicit initial `DEFAULT_ADMIN_ROLE` holder\n ) {}\n }\n ```"},"fullyImplemented":true,"id":1331,"linearizedBaseContracts":[1331,295,5838,5850,1460,1430,378,3907],"name":"AccessControlDefaultAdminRules","nameLocation":"1871:30:4","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":636,"mutability":"mutable","name":"_pendingDefaultAdmin","nameLocation":"2043:20:4","nodeType":"VariableDeclaration","scope":1331,"src":"2027:36:4","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":635,"name":"address","nodeType":"ElementaryTypeName","src":"2027:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"private"},{"constant":false,"id":638,"mutability":"mutable","name":"_pendingDefaultAdminSchedule","nameLocation":"2084:28:4","nodeType":"VariableDeclaration","scope":1331,"src":"2069:43:4","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":637,"name":"uint48","nodeType":"ElementaryTypeName","src":"2069:6:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"private"},{"constant":false,"id":640,"mutability":"mutable","name":"_currentDelay","nameLocation":"2148:13:4","nodeType":"VariableDeclaration","scope":1331,"src":"2133:28:4","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":639,"name":"uint48","nodeType":"ElementaryTypeName","src":"2133:6:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"private"},{"constant":false,"id":642,"mutability":"mutable","name":"_currentDefaultAdmin","nameLocation":"2183:20:4","nodeType":"VariableDeclaration","scope":1331,"src":"2167:36:4","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":641,"name":"address","nodeType":"ElementaryTypeName","src":"2167:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"private"},{"constant":false,"id":644,"mutability":"mutable","name":"_pendingDelay","nameLocation":"2284:13:4","nodeType":"VariableDeclaration","scope":1331,"src":"2269:28:4","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":643,"name":"uint48","nodeType":"ElementaryTypeName","src":"2269:6:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"private"},{"constant":false,"id":646,"mutability":"mutable","name":"_pendingDelaySchedule","nameLocation":"2318:21:4","nodeType":"VariableDeclaration","scope":1331,"src":"2303:36:4","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":645,"name":"uint48","nodeType":"ElementaryTypeName","src":"2303:6:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"private"},{"body":{"id":678,"nodeType":"Block","src":"2526:230:4","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":659,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":654,"name":"initialDefaultAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":651,"src":"2540:19:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":657,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2571:1:4","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":656,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2563:7:4","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":655,"name":"address","nodeType":"ElementaryTypeName","src":"2563:7:4","typeDescriptions":{}}},"id":658,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2563:10:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2540:33:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":668,"nodeType":"IfStatement","src":"2536:115:4","trueBody":{"id":667,"nodeType":"Block","src":"2575:76:4","statements":[{"errorCall":{"arguments":[{"arguments":[{"hexValue":"30","id":663,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2637:1:4","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":662,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2629:7:4","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":661,"name":"address","nodeType":"ElementaryTypeName","src":"2629:7:4","typeDescriptions":{}}},"id":664,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2629:10:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":660,"name":"AccessControlInvalidDefaultAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1343,"src":"2596:32:4","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":665,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2596:44:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":666,"nodeType":"RevertStatement","src":"2589:51:4"}]}},{"expression":{"id":671,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":669,"name":"_currentDelay","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":640,"src":"2660:13:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":670,"name":"initialDelay","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":649,"src":"2676:12:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"2660:28:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"id":672,"nodeType":"ExpressionStatement","src":"2660:28:4"},{"expression":{"arguments":[{"id":674,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29,"src":"2709:18:4","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":675,"name":"initialDefaultAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":651,"src":"2729:19:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":673,"name":"_grantRole","nodeType":"Identifier","overloadedDeclarations":[865],"referencedDeclaration":865,"src":"2698:10:4","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) returns (bool)"}},"id":676,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2698:51:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":677,"nodeType":"ExpressionStatement","src":"2698:51:4"}]},"documentation":{"id":647,"nodeType":"StructuredDocumentation","src":"2360:99:4","text":" @dev Sets the initial values for {defaultAdminDelay} and {defaultAdmin} address."},"id":679,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":652,"nodeType":"ParameterList","parameters":[{"constant":false,"id":649,"mutability":"mutable","name":"initialDelay","nameLocation":"2483:12:4","nodeType":"VariableDeclaration","scope":679,"src":"2476:19:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":648,"name":"uint48","nodeType":"ElementaryTypeName","src":"2476:6:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"},{"constant":false,"id":651,"mutability":"mutable","name":"initialDefaultAdmin","nameLocation":"2505:19:4","nodeType":"VariableDeclaration","scope":679,"src":"2497:27:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":650,"name":"address","nodeType":"ElementaryTypeName","src":"2497:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2475:50:4"},"returnParameters":{"id":653,"nodeType":"ParameterList","parameters":[],"src":"2526:0:4"},"scope":1331,"src":"2464:292:4","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[62],"body":{"id":700,"nodeType":"Block","src":"2881:128:4","statements":[{"expression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":698,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":693,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":688,"name":"interfaceId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":682,"src":"2898:11:4","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"arguments":[{"id":690,"name":"IAccessControlDefaultAdminRules","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1430,"src":"2918:31:4","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IAccessControlDefaultAdminRules_$1430_$","typeString":"type(contract IAccessControlDefaultAdminRules)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_contract$_IAccessControlDefaultAdminRules_$1430_$","typeString":"type(contract IAccessControlDefaultAdminRules)"}],"id":689,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967269,"src":"2913:4:4","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":691,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2913:37:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_contract$_IAccessControlDefaultAdminRules_$1430","typeString":"type(contract IAccessControlDefaultAdminRules)"}},"id":692,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2951:11:4","memberName":"interfaceId","nodeType":"MemberAccess","src":"2913:49:4","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"2898:64:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"arguments":[{"id":696,"name":"interfaceId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":682,"src":"2990:11:4","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"expression":{"id":694,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967271,"src":"2966:5:4","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_AccessControlDefaultAdminRules_$1331_$","typeString":"type(contract super AccessControlDefaultAdminRules)"}},"id":695,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2972:17:4","memberName":"supportsInterface","nodeType":"MemberAccess","referencedDeclaration":62,"src":"2966:23:4","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes4_$returns$_t_bool_$","typeString":"function (bytes4) view returns (bool)"}},"id":697,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2966:36:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2898:104:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":687,"id":699,"nodeType":"Return","src":"2891:111:4"}]},"documentation":{"id":680,"nodeType":"StructuredDocumentation","src":"2762:23:4","text":"@inheritdoc IERC165"},"functionSelector":"01ffc9a7","id":701,"implemented":true,"kind":"function","modifiers":[],"name":"supportsInterface","nameLocation":"2799:17:4","nodeType":"FunctionDefinition","overrides":{"id":684,"nodeType":"OverrideSpecifier","overrides":[],"src":"2857:8:4"},"parameters":{"id":683,"nodeType":"ParameterList","parameters":[{"constant":false,"id":682,"mutability":"mutable","name":"interfaceId","nameLocation":"2824:11:4","nodeType":"VariableDeclaration","scope":701,"src":"2817:18:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":681,"name":"bytes4","nodeType":"ElementaryTypeName","src":"2817:6:4","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"2816:20:4"},"returnParameters":{"id":687,"nodeType":"ParameterList","parameters":[{"constant":false,"id":686,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":701,"src":"2875:4:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":685,"name":"bool","nodeType":"ElementaryTypeName","src":"2875:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2874:6:4"},"scope":1331,"src":"2790:219:4","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[1459],"body":{"id":710,"nodeType":"Block","src":"3099:38:4","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":707,"name":"defaultAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":930,"src":"3116:12:4","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":708,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3116:14:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":706,"id":709,"nodeType":"Return","src":"3109:21:4"}]},"documentation":{"id":702,"nodeType":"StructuredDocumentation","src":"3015:24:4","text":"@inheritdoc IERC5313"},"functionSelector":"8da5cb5b","id":711,"implemented":true,"kind":"function","modifiers":[],"name":"owner","nameLocation":"3053:5:4","nodeType":"FunctionDefinition","parameters":{"id":703,"nodeType":"ParameterList","parameters":[],"src":"3058:2:4"},"returnParameters":{"id":706,"nodeType":"ParameterList","parameters":[{"constant":false,"id":705,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":711,"src":"3090:7:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":704,"name":"address","nodeType":"ElementaryTypeName","src":"3090:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3089:9:4"},"scope":1331,"src":"3044:93:4","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[147,361],"body":{"id":737,"nodeType":"Block","src":"3405:160:4","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":724,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":722,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":714,"src":"3419:4:4","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":723,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29,"src":"3427:18:4","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"3419:26:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":729,"nodeType":"IfStatement","src":"3415:104:4","trueBody":{"id":728,"nodeType":"Block","src":"3447:72:4","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":725,"name":"AccessControlEnforcedDefaultAdminRules","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1346,"src":"3468:38:4","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":726,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3468:40:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":727,"nodeType":"RevertStatement","src":"3461:47:4"}]}},{"expression":{"arguments":[{"id":733,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":714,"src":"3544:4:4","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":734,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":716,"src":"3550:7:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":730,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967271,"src":"3528:5:4","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_AccessControlDefaultAdminRules_$1331_$","typeString":"type(contract super AccessControlDefaultAdminRules)"}},"id":732,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3534:9:4","memberName":"grantRole","nodeType":"MemberAccess","referencedDeclaration":147,"src":"3528:15:4","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":735,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3528:30:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":736,"nodeType":"ExpressionStatement","src":"3528:30:4"}]},"documentation":{"id":712,"nodeType":"StructuredDocumentation","src":"3207:88:4","text":" @dev See {AccessControl-grantRole}. Reverts for `DEFAULT_ADMIN_ROLE`."},"functionSelector":"2f2ff15d","id":738,"implemented":true,"kind":"function","modifiers":[],"name":"grantRole","nameLocation":"3309:9:4","nodeType":"FunctionDefinition","overrides":{"id":720,"nodeType":"OverrideSpecifier","overrides":[{"id":718,"name":"AccessControl","nameLocations":["3374:13:4"],"nodeType":"IdentifierPath","referencedDeclaration":295,"src":"3374:13:4"},{"id":719,"name":"IAccessControl","nameLocations":["3389:14:4"],"nodeType":"IdentifierPath","referencedDeclaration":378,"src":"3389:14:4"}],"src":"3365:39:4"},"parameters":{"id":717,"nodeType":"ParameterList","parameters":[{"constant":false,"id":714,"mutability":"mutable","name":"role","nameLocation":"3327:4:4","nodeType":"VariableDeclaration","scope":738,"src":"3319:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":713,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3319:7:4","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":716,"mutability":"mutable","name":"account","nameLocation":"3341:7:4","nodeType":"VariableDeclaration","scope":738,"src":"3333:15:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":715,"name":"address","nodeType":"ElementaryTypeName","src":"3333:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3318:31:4"},"returnParameters":{"id":721,"nodeType":"ParameterList","parameters":[],"src":"3405:0:4"},"scope":1331,"src":"3300:265:4","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[166,369],"body":{"id":764,"nodeType":"Block","src":"3771:161:4","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":751,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":749,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":741,"src":"3785:4:4","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":750,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29,"src":"3793:18:4","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"3785:26:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":756,"nodeType":"IfStatement","src":"3781:104:4","trueBody":{"id":755,"nodeType":"Block","src":"3813:72:4","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":752,"name":"AccessControlEnforcedDefaultAdminRules","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1346,"src":"3834:38:4","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":753,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3834:40:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":754,"nodeType":"RevertStatement","src":"3827:47:4"}]}},{"expression":{"arguments":[{"id":760,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":741,"src":"3911:4:4","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":761,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":743,"src":"3917:7:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":757,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967271,"src":"3894:5:4","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_AccessControlDefaultAdminRules_$1331_$","typeString":"type(contract super AccessControlDefaultAdminRules)"}},"id":759,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3900:10:4","memberName":"revokeRole","nodeType":"MemberAccess","referencedDeclaration":166,"src":"3894:16:4","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":762,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3894:31:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":763,"nodeType":"ExpressionStatement","src":"3894:31:4"}]},"documentation":{"id":739,"nodeType":"StructuredDocumentation","src":"3571:89:4","text":" @dev See {AccessControl-revokeRole}. Reverts for `DEFAULT_ADMIN_ROLE`."},"functionSelector":"d547741f","id":765,"implemented":true,"kind":"function","modifiers":[],"name":"revokeRole","nameLocation":"3674:10:4","nodeType":"FunctionDefinition","overrides":{"id":747,"nodeType":"OverrideSpecifier","overrides":[{"id":745,"name":"AccessControl","nameLocations":["3740:13:4"],"nodeType":"IdentifierPath","referencedDeclaration":295,"src":"3740:13:4"},{"id":746,"name":"IAccessControl","nameLocations":["3755:14:4"],"nodeType":"IdentifierPath","referencedDeclaration":378,"src":"3755:14:4"}],"src":"3731:39:4"},"parameters":{"id":744,"nodeType":"ParameterList","parameters":[{"constant":false,"id":741,"mutability":"mutable","name":"role","nameLocation":"3693:4:4","nodeType":"VariableDeclaration","scope":765,"src":"3685:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":740,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3685:7:4","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":743,"mutability":"mutable","name":"account","nameLocation":"3707:7:4","nodeType":"VariableDeclaration","scope":765,"src":"3699:15:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":742,"name":"address","nodeType":"ElementaryTypeName","src":"3699:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3684:31:4"},"returnParameters":{"id":748,"nodeType":"ParameterList","parameters":[],"src":"3771:0:4"},"scope":1331,"src":"3665:267:4","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[189,377],"body":{"id":825,"nodeType":"Block","src":"4725:458:4","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":783,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":778,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":776,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":768,"src":"4739:4:4","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":777,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29,"src":"4747:18:4","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"4739:26:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":782,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":779,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":770,"src":"4769:7:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":780,"name":"defaultAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":930,"src":"4780:12:4","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":781,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4780:14:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4769:25:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"4739:55:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":817,"nodeType":"IfStatement","src":"4735:399:4","trueBody":{"id":816,"nodeType":"Block","src":"4796:338:4","statements":[{"assignments":[785,787],"declarations":[{"constant":false,"id":785,"mutability":"mutable","name":"newDefaultAdmin","nameLocation":"4819:15:4","nodeType":"VariableDeclaration","scope":816,"src":"4811:23:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":784,"name":"address","nodeType":"ElementaryTypeName","src":"4811:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":787,"mutability":"mutable","name":"schedule","nameLocation":"4843:8:4","nodeType":"VariableDeclaration","scope":816,"src":"4836:15:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":786,"name":"uint48","nodeType":"ElementaryTypeName","src":"4836:6:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"id":790,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":788,"name":"pendingDefaultAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":943,"src":"4855:19:4","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$_t_uint48_$","typeString":"function () view returns (address,uint48)"}},"id":789,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4855:21:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint48_$","typeString":"tuple(address,uint48)"}},"nodeType":"VariableDeclarationStatement","src":"4810:66:4"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":806,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":801,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":796,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":791,"name":"newDefaultAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":785,"src":"4894:15:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":794,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4921:1:4","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":793,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4913:7:4","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":792,"name":"address","nodeType":"ElementaryTypeName","src":"4913:7:4","typeDescriptions":{}}},"id":795,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4913:10:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4894:29:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"id":800,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"4927:25:4","subExpression":{"arguments":[{"id":798,"name":"schedule","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":787,"src":"4943:8:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint48","typeString":"uint48"}],"id":797,"name":"_isScheduleSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1316,"src":"4928:14:4","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint48_$returns$_t_bool_$","typeString":"function (uint48) pure returns (bool)"}},"id":799,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4928:24:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"4894:58:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"id":805,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"4956:29:4","subExpression":{"arguments":[{"id":803,"name":"schedule","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":787,"src":"4976:8:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint48","typeString":"uint48"}],"id":802,"name":"_hasSchedulePassed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1330,"src":"4957:18:4","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint48_$returns$_t_bool_$","typeString":"function (uint48) view returns (bool)"}},"id":804,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4957:28:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"4894:91:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":812,"nodeType":"IfStatement","src":"4890:185:4","trueBody":{"id":811,"nodeType":"Block","src":"4987:88:4","statements":[{"errorCall":{"arguments":[{"id":808,"name":"schedule","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":787,"src":"5051:8:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint48","typeString":"uint48"}],"id":807,"name":"AccessControlEnforcedDefaultAdminDelay","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1351,"src":"5012:38:4","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint48_$returns$_t_error_$","typeString":"function (uint48) pure returns (error)"}},"id":809,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5012:48:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":810,"nodeType":"RevertStatement","src":"5005:55:4"}]}},{"expression":{"id":814,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"5088:35:4","subExpression":{"id":813,"name":"_pendingDefaultAdminSchedule","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":638,"src":"5095:28:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":815,"nodeType":"ExpressionStatement","src":"5088:35:4"}]}},{"expression":{"arguments":[{"id":821,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":768,"src":"5162:4:4","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":822,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":770,"src":"5168:7:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":818,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967271,"src":"5143:5:4","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_AccessControlDefaultAdminRules_$1331_$","typeString":"type(contract super AccessControlDefaultAdminRules)"}},"id":820,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5149:12:4","memberName":"renounceRole","nodeType":"MemberAccess","referencedDeclaration":189,"src":"5143:18:4","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":823,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5143:33:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":824,"nodeType":"ExpressionStatement","src":"5143:33:4"}]},"documentation":{"id":766,"nodeType":"StructuredDocumentation","src":"3938:674:4","text":" @dev See {AccessControl-renounceRole}.\n For the `DEFAULT_ADMIN_ROLE`, it only allows renouncing in two steps by first calling\n {beginDefaultAdminTransfer} to the `address(0)`, so it's required that the {pendingDefaultAdmin} schedule\n has also passed when calling this function.\n After its execution, it will not be possible to call `onlyRole(DEFAULT_ADMIN_ROLE)` functions.\n NOTE: Renouncing `DEFAULT_ADMIN_ROLE` will leave the contract without a {defaultAdmin},\n thereby disabling any functionality that is only available for it, and the possibility of reassigning a\n non-administrated role."},"functionSelector":"36568abe","id":826,"implemented":true,"kind":"function","modifiers":[],"name":"renounceRole","nameLocation":"4626:12:4","nodeType":"FunctionDefinition","overrides":{"id":774,"nodeType":"OverrideSpecifier","overrides":[{"id":772,"name":"AccessControl","nameLocations":["4694:13:4"],"nodeType":"IdentifierPath","referencedDeclaration":295,"src":"4694:13:4"},{"id":773,"name":"IAccessControl","nameLocations":["4709:14:4"],"nodeType":"IdentifierPath","referencedDeclaration":378,"src":"4709:14:4"}],"src":"4685:39:4"},"parameters":{"id":771,"nodeType":"ParameterList","parameters":[{"constant":false,"id":768,"mutability":"mutable","name":"role","nameLocation":"4647:4:4","nodeType":"VariableDeclaration","scope":826,"src":"4639:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":767,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4639:7:4","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":770,"mutability":"mutable","name":"account","nameLocation":"4661:7:4","nodeType":"VariableDeclaration","scope":826,"src":"4653:15:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":769,"name":"address","nodeType":"ElementaryTypeName","src":"4653:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4638:31:4"},"returnParameters":{"id":775,"nodeType":"ParameterList","parameters":[],"src":"4725:0:4"},"scope":1331,"src":"4617:566:4","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[256],"body":{"id":864,"nodeType":"Block","src":"5703:278:4","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":839,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":837,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":829,"src":"5717:4:4","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":838,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29,"src":"5725:18:4","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"5717:26:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":857,"nodeType":"IfStatement","src":"5713:214:4","trueBody":{"id":856,"nodeType":"Block","src":"5745:182:4","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":846,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":840,"name":"defaultAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":930,"src":"5763:12:4","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":841,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5763:14:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":844,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5789:1:4","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":843,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5781:7:4","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":842,"name":"address","nodeType":"ElementaryTypeName","src":"5781:7:4","typeDescriptions":{}}},"id":845,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5781:10:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5763:28:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":851,"nodeType":"IfStatement","src":"5759:114:4","trueBody":{"id":850,"nodeType":"Block","src":"5793:80:4","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":847,"name":"AccessControlEnforcedDefaultAdminRules","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1346,"src":"5818:38:4","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":848,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5818:40:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":849,"nodeType":"RevertStatement","src":"5811:47:4"}]}},{"expression":{"id":854,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":852,"name":"_currentDefaultAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":642,"src":"5886:20:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":853,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":831,"src":"5909:7:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5886:30:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":855,"nodeType":"ExpressionStatement","src":"5886:30:4"}]}},{"expression":{"arguments":[{"id":860,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":829,"src":"5960:4:4","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":861,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":831,"src":"5966:7:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":858,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967271,"src":"5943:5:4","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_AccessControlDefaultAdminRules_$1331_$","typeString":"type(contract super AccessControlDefaultAdminRules)"}},"id":859,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5949:10:4","memberName":"_grantRole","nodeType":"MemberAccess","referencedDeclaration":256,"src":"5943:16:4","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) returns (bool)"}},"id":862,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5943:31:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":836,"id":863,"nodeType":"Return","src":"5936:38:4"}]},"documentation":{"id":827,"nodeType":"StructuredDocumentation","src":"5189:417:4","text":" @dev See {AccessControl-_grantRole}.\n For `DEFAULT_ADMIN_ROLE`, it only allows granting if there isn't already a {defaultAdmin} or if the\n role has been previously renounced.\n NOTE: Exposing this function through another mechanism may make the `DEFAULT_ADMIN_ROLE`\n assignable again. Make sure to guarantee this is the expected behavior in your implementation."},"id":865,"implemented":true,"kind":"function","modifiers":[],"name":"_grantRole","nameLocation":"5620:10:4","nodeType":"FunctionDefinition","overrides":{"id":833,"nodeType":"OverrideSpecifier","overrides":[],"src":"5679:8:4"},"parameters":{"id":832,"nodeType":"ParameterList","parameters":[{"constant":false,"id":829,"mutability":"mutable","name":"role","nameLocation":"5639:4:4","nodeType":"VariableDeclaration","scope":865,"src":"5631:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":828,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5631:7:4","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":831,"mutability":"mutable","name":"account","nameLocation":"5653:7:4","nodeType":"VariableDeclaration","scope":865,"src":"5645:15:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":830,"name":"address","nodeType":"ElementaryTypeName","src":"5645:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5630:31:4"},"returnParameters":{"id":836,"nodeType":"ParameterList","parameters":[{"constant":false,"id":835,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":865,"src":"5697:4:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":834,"name":"bool","nodeType":"ElementaryTypeName","src":"5697:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5696:6:4"},"scope":1331,"src":"5611:370:4","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"baseFunctions":[294],"body":{"id":895,"nodeType":"Block","src":"6114:178:4","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":883,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":878,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":876,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":868,"src":"6128:4:4","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":877,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29,"src":"6136:18:4","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"6128:26:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":882,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":879,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":870,"src":"6158:7:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":880,"name":"defaultAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":930,"src":"6169:12:4","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":881,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6169:14:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6158:25:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"6128:55:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":888,"nodeType":"IfStatement","src":"6124:113:4","trueBody":{"id":887,"nodeType":"Block","src":"6185:52:4","statements":[{"expression":{"id":885,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"6199:27:4","subExpression":{"id":884,"name":"_currentDefaultAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":642,"src":"6206:20:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":886,"nodeType":"ExpressionStatement","src":"6199:27:4"}]}},{"expression":{"arguments":[{"id":891,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":868,"src":"6271:4:4","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":892,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":870,"src":"6277:7:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":889,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967271,"src":"6253:5:4","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_AccessControlDefaultAdminRules_$1331_$","typeString":"type(contract super AccessControlDefaultAdminRules)"}},"id":890,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6259:11:4","memberName":"_revokeRole","nodeType":"MemberAccess","referencedDeclaration":294,"src":"6253:17:4","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) returns (bool)"}},"id":893,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6253:32:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":875,"id":894,"nodeType":"Return","src":"6246:39:4"}]},"documentation":{"id":866,"nodeType":"StructuredDocumentation","src":"5987:29:4","text":"@inheritdoc AccessControl"},"id":896,"implemented":true,"kind":"function","modifiers":[],"name":"_revokeRole","nameLocation":"6030:11:4","nodeType":"FunctionDefinition","overrides":{"id":872,"nodeType":"OverrideSpecifier","overrides":[],"src":"6090:8:4"},"parameters":{"id":871,"nodeType":"ParameterList","parameters":[{"constant":false,"id":868,"mutability":"mutable","name":"role","nameLocation":"6050:4:4","nodeType":"VariableDeclaration","scope":896,"src":"6042:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":867,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6042:7:4","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":870,"mutability":"mutable","name":"account","nameLocation":"6064:7:4","nodeType":"VariableDeclaration","scope":896,"src":"6056:15:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":869,"name":"address","nodeType":"ElementaryTypeName","src":"6056:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6041:31:4"},"returnParameters":{"id":875,"nodeType":"ParameterList","parameters":[{"constant":false,"id":874,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":896,"src":"6108:4:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":873,"name":"bool","nodeType":"ElementaryTypeName","src":"6108:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6107:6:4"},"scope":1331,"src":"6021:271:4","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"baseFunctions":[217],"body":{"id":920,"nodeType":"Block","src":"6477:166:4","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":907,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":905,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":899,"src":"6491:4:4","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":906,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29,"src":"6499:18:4","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"6491:26:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":912,"nodeType":"IfStatement","src":"6487:104:4","trueBody":{"id":911,"nodeType":"Block","src":"6519:72:4","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":908,"name":"AccessControlEnforcedDefaultAdminRules","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1346,"src":"6540:38:4","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":909,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6540:40:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":910,"nodeType":"RevertStatement","src":"6533:47:4"}]}},{"expression":{"arguments":[{"id":916,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":899,"src":"6620:4:4","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":917,"name":"adminRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":901,"src":"6626:9:4","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":913,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967271,"src":"6600:5:4","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_AccessControlDefaultAdminRules_$1331_$","typeString":"type(contract super AccessControlDefaultAdminRules)"}},"id":915,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6606:13:4","memberName":"_setRoleAdmin","nodeType":"MemberAccess","referencedDeclaration":217,"src":"6600:19:4","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_bytes32_$returns$__$","typeString":"function (bytes32,bytes32)"}},"id":918,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6600:36:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":919,"nodeType":"ExpressionStatement","src":"6600:36:4"}]},"documentation":{"id":897,"nodeType":"StructuredDocumentation","src":"6298:92:4","text":" @dev See {AccessControl-_setRoleAdmin}. Reverts for `DEFAULT_ADMIN_ROLE`."},"id":921,"implemented":true,"kind":"function","modifiers":[],"name":"_setRoleAdmin","nameLocation":"6404:13:4","nodeType":"FunctionDefinition","overrides":{"id":903,"nodeType":"OverrideSpecifier","overrides":[],"src":"6468:8:4"},"parameters":{"id":902,"nodeType":"ParameterList","parameters":[{"constant":false,"id":899,"mutability":"mutable","name":"role","nameLocation":"6426:4:4","nodeType":"VariableDeclaration","scope":921,"src":"6418:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":898,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6418:7:4","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":901,"mutability":"mutable","name":"adminRole","nameLocation":"6440:9:4","nodeType":"VariableDeclaration","scope":921,"src":"6432:17:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":900,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6432:7:4","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"6417:33:4"},"returnParameters":{"id":904,"nodeType":"ParameterList","parameters":[],"src":"6477:0:4"},"scope":1331,"src":"6395:248:4","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"baseFunctions":[1377],"body":{"id":929,"nodeType":"Block","src":"6829:44:4","statements":[{"expression":{"id":927,"name":"_currentDefaultAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":642,"src":"6846:20:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":926,"id":928,"nodeType":"Return","src":"6839:27:4"}]},"documentation":{"id":922,"nodeType":"StructuredDocumentation","src":"6715:47:4","text":"@inheritdoc IAccessControlDefaultAdminRules"},"functionSelector":"84ef8ffc","id":930,"implemented":true,"kind":"function","modifiers":[],"name":"defaultAdmin","nameLocation":"6776:12:4","nodeType":"FunctionDefinition","parameters":{"id":923,"nodeType":"ParameterList","parameters":[],"src":"6788:2:4"},"returnParameters":{"id":926,"nodeType":"ParameterList","parameters":[{"constant":false,"id":925,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":930,"src":"6820:7:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":924,"name":"address","nodeType":"ElementaryTypeName","src":"6820:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6819:9:4"},"scope":1331,"src":"6767:106:4","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[1385],"body":{"id":942,"nodeType":"Block","src":"7026:76:4","statements":[{"expression":{"components":[{"id":938,"name":"_pendingDefaultAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":636,"src":"7044:20:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":939,"name":"_pendingDefaultAdminSchedule","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":638,"src":"7066:28:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}}],"id":940,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7043:52:4","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint48_$","typeString":"tuple(address,uint48)"}},"functionReturnParameters":937,"id":941,"nodeType":"Return","src":"7036:59:4"}]},"documentation":{"id":931,"nodeType":"StructuredDocumentation","src":"6879:47:4","text":"@inheritdoc IAccessControlDefaultAdminRules"},"functionSelector":"cf6eefb7","id":943,"implemented":true,"kind":"function","modifiers":[],"name":"pendingDefaultAdmin","nameLocation":"6940:19:4","nodeType":"FunctionDefinition","parameters":{"id":932,"nodeType":"ParameterList","parameters":[],"src":"6959:2:4"},"returnParameters":{"id":937,"nodeType":"ParameterList","parameters":[{"constant":false,"id":934,"mutability":"mutable","name":"newAdmin","nameLocation":"6999:8:4","nodeType":"VariableDeclaration","scope":943,"src":"6991:16:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":933,"name":"address","nodeType":"ElementaryTypeName","src":"6991:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":936,"mutability":"mutable","name":"schedule","nameLocation":"7016:8:4","nodeType":"VariableDeclaration","scope":943,"src":"7009:15:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":935,"name":"uint48","nodeType":"ElementaryTypeName","src":"7009:6:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"src":"6990:35:4"},"scope":1331,"src":"6931:171:4","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[1391],"body":{"id":965,"nodeType":"Block","src":"7226:163:4","statements":[{"assignments":[950],"declarations":[{"constant":false,"id":950,"mutability":"mutable","name":"schedule","nameLocation":"7243:8:4","nodeType":"VariableDeclaration","scope":965,"src":"7236:15:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":949,"name":"uint48","nodeType":"ElementaryTypeName","src":"7236:6:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"id":952,"initialValue":{"id":951,"name":"_pendingDelaySchedule","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":646,"src":"7254:21:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"VariableDeclarationStatement","src":"7236:39:4"},{"expression":{"condition":{"components":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":959,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":954,"name":"schedule","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":950,"src":"7308:8:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint48","typeString":"uint48"}],"id":953,"name":"_isScheduleSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1316,"src":"7293:14:4","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint48_$returns$_t_bool_$","typeString":"function (uint48) pure returns (bool)"}},"id":955,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7293:24:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"arguments":[{"id":957,"name":"schedule","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":950,"src":"7340:8:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint48","typeString":"uint48"}],"id":956,"name":"_hasSchedulePassed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1330,"src":"7321:18:4","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint48_$returns$_t_bool_$","typeString":"function (uint48) view returns (bool)"}},"id":958,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7321:28:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"7293:56:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":960,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7292:58:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":962,"name":"_currentDelay","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":640,"src":"7369:13:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"id":963,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"7292:90:4","trueExpression":{"id":961,"name":"_pendingDelay","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":644,"src":"7353:13:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"functionReturnParameters":948,"id":964,"nodeType":"Return","src":"7285:97:4"}]},"documentation":{"id":944,"nodeType":"StructuredDocumentation","src":"7108:47:4","text":"@inheritdoc IAccessControlDefaultAdminRules"},"functionSelector":"cc8463c8","id":966,"implemented":true,"kind":"function","modifiers":[],"name":"defaultAdminDelay","nameLocation":"7169:17:4","nodeType":"FunctionDefinition","parameters":{"id":945,"nodeType":"ParameterList","parameters":[],"src":"7186:2:4"},"returnParameters":{"id":948,"nodeType":"ParameterList","parameters":[{"constant":false,"id":947,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":966,"src":"7218:6:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":946,"name":"uint48","nodeType":"ElementaryTypeName","src":"7218:6:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"src":"7217:8:4"},"scope":1331,"src":"7160:229:4","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[1399],"body":{"id":995,"nodeType":"Block","src":"7546:162:4","statements":[{"expression":{"id":976,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":974,"name":"schedule","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":972,"src":"7556:8:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":975,"name":"_pendingDelaySchedule","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":646,"src":"7567:21:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"7556:32:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"id":977,"nodeType":"ExpressionStatement","src":"7556:32:4"},{"expression":{"condition":{"components":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":985,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":979,"name":"schedule","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":972,"src":"7621:8:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint48","typeString":"uint48"}],"id":978,"name":"_isScheduleSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1316,"src":"7606:14:4","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint48_$returns$_t_bool_$","typeString":"function (uint48) pure returns (bool)"}},"id":980,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7606:24:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"id":984,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"7634:29:4","subExpression":{"arguments":[{"id":982,"name":"schedule","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":972,"src":"7654:8:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint48","typeString":"uint48"}],"id":981,"name":"_hasSchedulePassed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1330,"src":"7635:18:4","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint48_$returns$_t_bool_$","typeString":"function (uint48) view returns (bool)"}},"id":983,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7635:28:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"7606:57:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":986,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7605:59:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"components":[{"hexValue":"30","id":990,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7696:1:4","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":991,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7699:1:4","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":992,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"7695:6:4","typeDescriptions":{"typeIdentifier":"t_tuple$_t_rational_0_by_1_$_t_rational_0_by_1_$","typeString":"tuple(int_const 0,int_const 0)"}},"id":993,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"7605:96:4","trueExpression":{"components":[{"id":987,"name":"_pendingDelay","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":644,"src":"7668:13:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},{"id":988,"name":"schedule","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":972,"src":"7683:8:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}}],"id":989,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7667:25:4","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint48_$_t_uint48_$","typeString":"tuple(uint48,uint48)"}},"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint48_$_t_uint48_$","typeString":"tuple(uint48,uint48)"}},"functionReturnParameters":973,"id":994,"nodeType":"Return","src":"7598:103:4"}]},"documentation":{"id":967,"nodeType":"StructuredDocumentation","src":"7395:47:4","text":"@inheritdoc IAccessControlDefaultAdminRules"},"functionSelector":"a1eda53c","id":996,"implemented":true,"kind":"function","modifiers":[],"name":"pendingDefaultAdminDelay","nameLocation":"7456:24:4","nodeType":"FunctionDefinition","parameters":{"id":968,"nodeType":"ParameterList","parameters":[],"src":"7480:2:4"},"returnParameters":{"id":973,"nodeType":"ParameterList","parameters":[{"constant":false,"id":970,"mutability":"mutable","name":"newDelay","nameLocation":"7519:8:4","nodeType":"VariableDeclaration","scope":996,"src":"7512:15:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":969,"name":"uint48","nodeType":"ElementaryTypeName","src":"7512:6:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"},{"constant":false,"id":972,"mutability":"mutable","name":"schedule","nameLocation":"7536:8:4","nodeType":"VariableDeclaration","scope":996,"src":"7529:15:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":971,"name":"uint48","nodeType":"ElementaryTypeName","src":"7529:6:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"src":"7511:34:4"},"scope":1331,"src":"7447:261:4","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[1429],"body":{"id":1004,"nodeType":"Block","src":"7844:30:4","statements":[{"expression":{"hexValue":"35","id":1002,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7861:6:4","subdenomination":"days","typeDescriptions":{"typeIdentifier":"t_rational_432000_by_1","typeString":"int_const 432000"},"value":"5"},"functionReturnParameters":1001,"id":1003,"nodeType":"Return","src":"7854:13:4"}]},"documentation":{"id":997,"nodeType":"StructuredDocumentation","src":"7714:47:4","text":"@inheritdoc IAccessControlDefaultAdminRules"},"functionSelector":"022d63fb","id":1005,"implemented":true,"kind":"function","modifiers":[],"name":"defaultAdminDelayIncreaseWait","nameLocation":"7775:29:4","nodeType":"FunctionDefinition","parameters":{"id":998,"nodeType":"ParameterList","parameters":[],"src":"7804:2:4"},"returnParameters":{"id":1001,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1000,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1005,"src":"7836:6:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":999,"name":"uint48","nodeType":"ElementaryTypeName","src":"7836:6:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"src":"7835:8:4"},"scope":1331,"src":"7766:108:4","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[1405],"body":{"id":1018,"nodeType":"Block","src":"8150:53:4","statements":[{"expression":{"arguments":[{"id":1015,"name":"newAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1008,"src":"8187:8:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1014,"name":"_beginDefaultAdminTransfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1047,"src":"8160:26:4","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":1016,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8160:36:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1017,"nodeType":"ExpressionStatement","src":"8160:36:4"}]},"documentation":{"id":1006,"nodeType":"StructuredDocumentation","src":"8001:47:4","text":"@inheritdoc IAccessControlDefaultAdminRules"},"functionSelector":"634e93da","id":1019,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":1011,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29,"src":"8130:18:4","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":1012,"kind":"modifierInvocation","modifierName":{"id":1010,"name":"onlyRole","nameLocations":["8121:8:4"],"nodeType":"IdentifierPath","referencedDeclaration":40,"src":"8121:8:4"},"nodeType":"ModifierInvocation","src":"8121:28:4"}],"name":"beginDefaultAdminTransfer","nameLocation":"8062:25:4","nodeType":"FunctionDefinition","parameters":{"id":1009,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1008,"mutability":"mutable","name":"newAdmin","nameLocation":"8096:8:4","nodeType":"VariableDeclaration","scope":1019,"src":"8088:16:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1007,"name":"address","nodeType":"ElementaryTypeName","src":"8088:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8087:18:4"},"returnParameters":{"id":1013,"nodeType":"ParameterList","parameters":[],"src":"8150:0:4"},"scope":1331,"src":"8053:150:4","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":1046,"nodeType":"Block","src":"8401:217:4","statements":[{"assignments":[1026],"declarations":[{"constant":false,"id":1026,"mutability":"mutable","name":"newSchedule","nameLocation":"8418:11:4","nodeType":"VariableDeclaration","scope":1046,"src":"8411:18:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":1025,"name":"uint48","nodeType":"ElementaryTypeName","src":"8411:6:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"id":1035,"initialValue":{"commonType":{"typeIdentifier":"t_uint48","typeString":"uint48"},"id":1034,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"expression":{"id":1029,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967292,"src":"8450:5:4","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":1030,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8456:9:4","memberName":"timestamp","nodeType":"MemberAccess","src":"8450:15:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":1027,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9272,"src":"8432:8:4","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$9272_$","typeString":"type(library SafeCast)"}},"id":1028,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8441:8:4","memberName":"toUint48","nodeType":"MemberAccess","referencedDeclaration":8262,"src":"8432:17:4","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint48_$","typeString":"function (uint256) pure returns (uint48)"}},"id":1031,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8432:34:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":1032,"name":"defaultAdminDelay","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":966,"src":"8469:17:4","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint48_$","typeString":"function () view returns (uint48)"}},"id":1033,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8469:19:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"8432:56:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"VariableDeclarationStatement","src":"8411:77:4"},{"expression":{"arguments":[{"id":1037,"name":"newAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1022,"src":"8522:8:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1038,"name":"newSchedule","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1026,"src":"8532:11:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint48","typeString":"uint48"}],"id":1036,"name":"_setPendingDefaultAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1264,"src":"8498:23:4","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint48_$returns$__$","typeString":"function (address,uint48)"}},"id":1039,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8498:46:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1040,"nodeType":"ExpressionStatement","src":"8498:46:4"},{"eventCall":{"arguments":[{"id":1042,"name":"newAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1022,"src":"8589:8:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1043,"name":"newSchedule","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1026,"src":"8599:11:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint48","typeString":"uint48"}],"id":1041,"name":"DefaultAdminTransferScheduled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1358,"src":"8559:29:4","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint48_$returns$__$","typeString":"function (address,uint48)"}},"id":1044,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8559:52:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1045,"nodeType":"EmitStatement","src":"8554:57:4"}]},"documentation":{"id":1020,"nodeType":"StructuredDocumentation","src":"8209:116:4","text":" @dev See {beginDefaultAdminTransfer}.\n Internal function without access restriction."},"id":1047,"implemented":true,"kind":"function","modifiers":[],"name":"_beginDefaultAdminTransfer","nameLocation":"8339:26:4","nodeType":"FunctionDefinition","parameters":{"id":1023,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1022,"mutability":"mutable","name":"newAdmin","nameLocation":"8374:8:4","nodeType":"VariableDeclaration","scope":1047,"src":"8366:16:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1021,"name":"address","nodeType":"ElementaryTypeName","src":"8366:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8365:18:4"},"returnParameters":{"id":1024,"nodeType":"ParameterList","parameters":[],"src":"8401:0:4"},"scope":1331,"src":"8330:288:4","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"baseFunctions":[1409],"body":{"id":1057,"nodeType":"Block","src":"8758:46:4","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":1054,"name":"_cancelDefaultAdminTransfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1071,"src":"8768:27:4","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":1055,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8768:29:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1056,"nodeType":"ExpressionStatement","src":"8768:29:4"}]},"documentation":{"id":1048,"nodeType":"StructuredDocumentation","src":"8624:47:4","text":"@inheritdoc IAccessControlDefaultAdminRules"},"functionSelector":"d602b9fd","id":1058,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":1051,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29,"src":"8738:18:4","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":1052,"kind":"modifierInvocation","modifierName":{"id":1050,"name":"onlyRole","nameLocations":["8729:8:4"],"nodeType":"IdentifierPath","referencedDeclaration":40,"src":"8729:8:4"},"nodeType":"ModifierInvocation","src":"8729:28:4"}],"name":"cancelDefaultAdminTransfer","nameLocation":"8685:26:4","nodeType":"FunctionDefinition","parameters":{"id":1049,"nodeType":"ParameterList","parameters":[],"src":"8711:2:4"},"returnParameters":{"id":1053,"nodeType":"ParameterList","parameters":[],"src":"8758:0:4"},"scope":1331,"src":"8676:128:4","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":1070,"nodeType":"Block","src":"8988:55:4","statements":[{"expression":{"arguments":[{"arguments":[{"hexValue":"30","id":1065,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9030:1:4","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":1064,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9022:7:4","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1063,"name":"address","nodeType":"ElementaryTypeName","src":"9022:7:4","typeDescriptions":{}}},"id":1066,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9022:10:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":1067,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9034:1:4","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":1062,"name":"_setPendingDefaultAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1264,"src":"8998:23:4","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint48_$returns$__$","typeString":"function (address,uint48)"}},"id":1068,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8998:38:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1069,"nodeType":"ExpressionStatement","src":"8998:38:4"}]},"documentation":{"id":1059,"nodeType":"StructuredDocumentation","src":"8810:117:4","text":" @dev See {cancelDefaultAdminTransfer}.\n Internal function without access restriction."},"id":1071,"implemented":true,"kind":"function","modifiers":[],"name":"_cancelDefaultAdminTransfer","nameLocation":"8941:27:4","nodeType":"FunctionDefinition","parameters":{"id":1060,"nodeType":"ParameterList","parameters":[],"src":"8968:2:4"},"returnParameters":{"id":1061,"nodeType":"ParameterList","parameters":[],"src":"8988:0:4"},"scope":1331,"src":"8932:111:4","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"baseFunctions":[1413],"body":{"id":1094,"nodeType":"Block","src":"9154:291:4","statements":[{"assignments":[1076,null],"declarations":[{"constant":false,"id":1076,"mutability":"mutable","name":"newDefaultAdmin","nameLocation":"9173:15:4","nodeType":"VariableDeclaration","scope":1094,"src":"9165:23:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1075,"name":"address","nodeType":"ElementaryTypeName","src":"9165:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},null],"id":1079,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":1077,"name":"pendingDefaultAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":943,"src":"9194:19:4","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$_t_uint48_$","typeString":"function () view returns (address,uint48)"}},"id":1078,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9194:21:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint48_$","typeString":"tuple(address,uint48)"}},"nodeType":"VariableDeclarationStatement","src":"9164:51:4"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1083,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":1080,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3889,"src":"9229:10:4","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":1081,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9229:12:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":1082,"name":"newDefaultAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1076,"src":"9245:15:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9229:31:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1090,"nodeType":"IfStatement","src":"9225:175:4","trueBody":{"id":1089,"nodeType":"Block","src":"9262:138:4","statements":[{"errorCall":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":1085,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3889,"src":"9376:10:4","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":1086,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9376:12:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1084,"name":"AccessControlInvalidDefaultAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1343,"src":"9343:32:4","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":1087,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9343:46:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":1088,"nodeType":"RevertStatement","src":"9336:53:4"}]}},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":1091,"name":"_acceptDefaultAdminTransfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1139,"src":"9409:27:4","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":1092,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9409:29:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1093,"nodeType":"ExpressionStatement","src":"9409:29:4"}]},"documentation":{"id":1072,"nodeType":"StructuredDocumentation","src":"9049:47:4","text":"@inheritdoc IAccessControlDefaultAdminRules"},"functionSelector":"cefc1429","id":1095,"implemented":true,"kind":"function","modifiers":[],"name":"acceptDefaultAdminTransfer","nameLocation":"9110:26:4","nodeType":"FunctionDefinition","parameters":{"id":1073,"nodeType":"ParameterList","parameters":[],"src":"9136:2:4"},"returnParameters":{"id":1074,"nodeType":"ParameterList","parameters":[],"src":"9154:0:4"},"scope":1331,"src":"9101:344:4","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":1138,"nodeType":"Block","src":"9629:418:4","statements":[{"assignments":[1100,1102],"declarations":[{"constant":false,"id":1100,"mutability":"mutable","name":"newAdmin","nameLocation":"9648:8:4","nodeType":"VariableDeclaration","scope":1138,"src":"9640:16:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1099,"name":"address","nodeType":"ElementaryTypeName","src":"9640:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1102,"mutability":"mutable","name":"schedule","nameLocation":"9665:8:4","nodeType":"VariableDeclaration","scope":1138,"src":"9658:15:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":1101,"name":"uint48","nodeType":"ElementaryTypeName","src":"9658:6:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"id":1105,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":1103,"name":"pendingDefaultAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":943,"src":"9677:19:4","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$_t_uint48_$","typeString":"function () view returns (address,uint48)"}},"id":1104,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9677:21:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint48_$","typeString":"tuple(address,uint48)"}},"nodeType":"VariableDeclarationStatement","src":"9639:59:4"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":1114,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1109,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"9712:25:4","subExpression":{"arguments":[{"id":1107,"name":"schedule","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1102,"src":"9728:8:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint48","typeString":"uint48"}],"id":1106,"name":"_isScheduleSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1316,"src":"9713:14:4","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint48_$returns$_t_bool_$","typeString":"function (uint48) pure returns (bool)"}},"id":1108,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9713:24:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"id":1113,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"9741:29:4","subExpression":{"arguments":[{"id":1111,"name":"schedule","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1102,"src":"9761:8:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint48","typeString":"uint48"}],"id":1110,"name":"_hasSchedulePassed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1330,"src":"9742:18:4","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint48_$returns$_t_bool_$","typeString":"function (uint48) view returns (bool)"}},"id":1112,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9742:28:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"9712:58:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1120,"nodeType":"IfStatement","src":"9708:144:4","trueBody":{"id":1119,"nodeType":"Block","src":"9772:80:4","statements":[{"errorCall":{"arguments":[{"id":1116,"name":"schedule","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1102,"src":"9832:8:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint48","typeString":"uint48"}],"id":1115,"name":"AccessControlEnforcedDefaultAdminDelay","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1351,"src":"9793:38:4","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint48_$returns$_t_error_$","typeString":"function (uint48) pure returns (error)"}},"id":1117,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9793:48:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":1118,"nodeType":"RevertStatement","src":"9786:55:4"}]}},{"expression":{"arguments":[{"id":1122,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29,"src":"9873:18:4","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[],"expression":{"argumentTypes":[],"id":1123,"name":"defaultAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":930,"src":"9893:12:4","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":1124,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9893:14:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":1121,"name":"_revokeRole","nodeType":"Identifier","overloadedDeclarations":[896],"referencedDeclaration":896,"src":"9861:11:4","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) returns (bool)"}},"id":1125,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9861:47:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1126,"nodeType":"ExpressionStatement","src":"9861:47:4"},{"expression":{"arguments":[{"id":1128,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29,"src":"9929:18:4","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":1129,"name":"newAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1100,"src":"9949:8:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":1127,"name":"_grantRole","nodeType":"Identifier","overloadedDeclarations":[865],"referencedDeclaration":865,"src":"9918:10:4","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) returns (bool)"}},"id":1130,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9918:40:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1131,"nodeType":"ExpressionStatement","src":"9918:40:4"},{"expression":{"id":1133,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"9968:27:4","subExpression":{"id":1132,"name":"_pendingDefaultAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":636,"src":"9975:20:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1134,"nodeType":"ExpressionStatement","src":"9968:27:4"},{"expression":{"id":1136,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"10005:35:4","subExpression":{"id":1135,"name":"_pendingDefaultAdminSchedule","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":638,"src":"10012:28:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1137,"nodeType":"ExpressionStatement","src":"10005:35:4"}]},"documentation":{"id":1096,"nodeType":"StructuredDocumentation","src":"9451:117:4","text":" @dev See {acceptDefaultAdminTransfer}.\n Internal function without access restriction."},"id":1139,"implemented":true,"kind":"function","modifiers":[],"name":"_acceptDefaultAdminTransfer","nameLocation":"9582:27:4","nodeType":"FunctionDefinition","parameters":{"id":1097,"nodeType":"ParameterList","parameters":[],"src":"9609:2:4"},"returnParameters":{"id":1098,"nodeType":"ParameterList","parameters":[],"src":"9629:0:4"},"scope":1331,"src":"9573:474:4","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"baseFunctions":[1419],"body":{"id":1152,"nodeType":"Block","src":"10330:51:4","statements":[{"expression":{"arguments":[{"id":1149,"name":"newDelay","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1142,"src":"10365:8:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint48","typeString":"uint48"}],"id":1148,"name":"_changeDefaultAdminDelay","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1182,"src":"10340:24:4","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint48_$returns$__$","typeString":"function (uint48)"}},"id":1150,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10340:34:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1151,"nodeType":"ExpressionStatement","src":"10340:34:4"}]},"documentation":{"id":1140,"nodeType":"StructuredDocumentation","src":"10184:47:4","text":"@inheritdoc IAccessControlDefaultAdminRules"},"functionSelector":"649a5ec7","id":1153,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":1145,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29,"src":"10310:18:4","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":1146,"kind":"modifierInvocation","modifierName":{"id":1144,"name":"onlyRole","nameLocations":["10301:8:4"],"nodeType":"IdentifierPath","referencedDeclaration":40,"src":"10301:8:4"},"nodeType":"ModifierInvocation","src":"10301:28:4"}],"name":"changeDefaultAdminDelay","nameLocation":"10245:23:4","nodeType":"FunctionDefinition","parameters":{"id":1143,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1142,"mutability":"mutable","name":"newDelay","nameLocation":"10276:8:4","nodeType":"VariableDeclaration","scope":1153,"src":"10269:15:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":1141,"name":"uint48","nodeType":"ElementaryTypeName","src":"10269:6:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"src":"10268:17:4"},"returnParameters":{"id":1147,"nodeType":"ParameterList","parameters":[],"src":"10330:0:4"},"scope":1331,"src":"10236:145:4","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":1181,"nodeType":"Block","src":"10574:220:4","statements":[{"assignments":[1160],"declarations":[{"constant":false,"id":1160,"mutability":"mutable","name":"newSchedule","nameLocation":"10591:11:4","nodeType":"VariableDeclaration","scope":1181,"src":"10584:18:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":1159,"name":"uint48","nodeType":"ElementaryTypeName","src":"10584:6:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"id":1170,"initialValue":{"commonType":{"typeIdentifier":"t_uint48","typeString":"uint48"},"id":1169,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"expression":{"id":1163,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967292,"src":"10623:5:4","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":1164,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10629:9:4","memberName":"timestamp","nodeType":"MemberAccess","src":"10623:15:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":1161,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9272,"src":"10605:8:4","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$9272_$","typeString":"type(library SafeCast)"}},"id":1162,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10614:8:4","memberName":"toUint48","nodeType":"MemberAccess","referencedDeclaration":8262,"src":"10605:17:4","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint48_$","typeString":"function (uint256) pure returns (uint48)"}},"id":1165,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10605:34:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[{"id":1167,"name":"newDelay","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1156,"src":"10659:8:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint48","typeString":"uint48"}],"id":1166,"name":"_delayChangeWait","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1234,"src":"10642:16:4","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint48_$returns$_t_uint48_$","typeString":"function (uint48) view returns (uint48)"}},"id":1168,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10642:26:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"10605:63:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"VariableDeclarationStatement","src":"10584:84:4"},{"expression":{"arguments":[{"id":1172,"name":"newDelay","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1156,"src":"10695:8:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},{"id":1173,"name":"newSchedule","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1160,"src":"10705:11:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint48","typeString":"uint48"},{"typeIdentifier":"t_uint48","typeString":"uint48"}],"id":1171,"name":"_setPendingDelay","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1303,"src":"10678:16:4","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint48_$_t_uint48_$returns$__$","typeString":"function (uint48,uint48)"}},"id":1174,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10678:39:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1175,"nodeType":"ExpressionStatement","src":"10678:39:4"},{"eventCall":{"arguments":[{"id":1177,"name":"newDelay","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1156,"src":"10765:8:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},{"id":1178,"name":"newSchedule","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1160,"src":"10775:11:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint48","typeString":"uint48"},{"typeIdentifier":"t_uint48","typeString":"uint48"}],"id":1176,"name":"DefaultAdminDelayChangeScheduled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1368,"src":"10732:32:4","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint48_$_t_uint48_$returns$__$","typeString":"function (uint48,uint48)"}},"id":1179,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10732:55:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1180,"nodeType":"EmitStatement","src":"10727:60:4"}]},"documentation":{"id":1154,"nodeType":"StructuredDocumentation","src":"10387:114:4","text":" @dev See {changeDefaultAdminDelay}.\n Internal function without access restriction."},"id":1182,"implemented":true,"kind":"function","modifiers":[],"name":"_changeDefaultAdminDelay","nameLocation":"10515:24:4","nodeType":"FunctionDefinition","parameters":{"id":1157,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1156,"mutability":"mutable","name":"newDelay","nameLocation":"10547:8:4","nodeType":"VariableDeclaration","scope":1182,"src":"10540:15:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":1155,"name":"uint48","nodeType":"ElementaryTypeName","src":"10540:6:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"src":"10539:17:4"},"returnParameters":{"id":1158,"nodeType":"ParameterList","parameters":[],"src":"10574:0:4"},"scope":1331,"src":"10506:288:4","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"baseFunctions":[1423],"body":{"id":1192,"nodeType":"Block","src":"10933:45:4","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":1189,"name":"_rollbackDefaultAdminDelay","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1203,"src":"10943:26:4","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":1190,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10943:28:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1191,"nodeType":"ExpressionStatement","src":"10943:28:4"}]},"documentation":{"id":1183,"nodeType":"StructuredDocumentation","src":"10800:47:4","text":"@inheritdoc IAccessControlDefaultAdminRules"},"functionSelector":"0aa6220b","id":1193,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":1186,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29,"src":"10913:18:4","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":1187,"kind":"modifierInvocation","modifierName":{"id":1185,"name":"onlyRole","nameLocations":["10904:8:4"],"nodeType":"IdentifierPath","referencedDeclaration":40,"src":"10904:8:4"},"nodeType":"ModifierInvocation","src":"10904:28:4"}],"name":"rollbackDefaultAdminDelay","nameLocation":"10861:25:4","nodeType":"FunctionDefinition","parameters":{"id":1184,"nodeType":"ParameterList","parameters":[],"src":"10886:2:4"},"returnParameters":{"id":1188,"nodeType":"ParameterList","parameters":[],"src":"10933:0:4"},"scope":1331,"src":"10852:126:4","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":1202,"nodeType":"Block","src":"11160:39:4","statements":[{"expression":{"arguments":[{"hexValue":"30","id":1198,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11187:1:4","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":1199,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11190:1:4","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":1197,"name":"_setPendingDelay","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1303,"src":"11170:16:4","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint48_$_t_uint48_$returns$__$","typeString":"function (uint48,uint48)"}},"id":1200,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11170:22:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1201,"nodeType":"ExpressionStatement","src":"11170:22:4"}]},"documentation":{"id":1194,"nodeType":"StructuredDocumentation","src":"10984:116:4","text":" @dev See {rollbackDefaultAdminDelay}.\n Internal function without access restriction."},"id":1203,"implemented":true,"kind":"function","modifiers":[],"name":"_rollbackDefaultAdminDelay","nameLocation":"11114:26:4","nodeType":"FunctionDefinition","parameters":{"id":1195,"nodeType":"ParameterList","parameters":[],"src":"11140:2:4"},"returnParameters":{"id":1196,"nodeType":"ParameterList","parameters":[],"src":"11160:0:4"},"scope":1331,"src":"11105:94:4","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":1233,"nodeType":"Block","src":"11628:1167:4","statements":[{"assignments":[1212],"declarations":[{"constant":false,"id":1212,"mutability":"mutable","name":"currentDelay","nameLocation":"11645:12:4","nodeType":"VariableDeclaration","scope":1233,"src":"11638:19:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":1211,"name":"uint48","nodeType":"ElementaryTypeName","src":"11638:6:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"id":1215,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":1213,"name":"defaultAdminDelay","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":966,"src":"11660:17:4","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint48_$","typeString":"function () view returns (uint48)"}},"id":1214,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11660:19:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"VariableDeclarationStatement","src":"11638:41:4"},{"expression":{"condition":{"commonType":{"typeIdentifier":"t_uint48","typeString":"uint48"},"id":1218,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1216,"name":"newDelay","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1206,"src":"12598:8:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":1217,"name":"currentDelay","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1212,"src":"12609:12:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"12598:23:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"commonType":{"typeIdentifier":"t_uint48","typeString":"uint48"},"id":1230,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1228,"name":"currentDelay","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1212,"src":"12765:12:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":1229,"name":"newDelay","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1206,"src":"12780:8:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"12765:23:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"id":1231,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"12598:190:4","trueExpression":{"arguments":[{"arguments":[{"id":1223,"name":"newDelay","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1206,"src":"12656:8:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},{"arguments":[],"expression":{"argumentTypes":[],"id":1224,"name":"defaultAdminDelayIncreaseWait","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1005,"src":"12666:29:4","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint48_$","typeString":"function () view returns (uint48)"}},"id":1225,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12666:31:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint48","typeString":"uint48"},{"typeIdentifier":"t_uint48","typeString":"uint48"}],"expression":{"id":1221,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7507,"src":"12647:4:4","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$7507_$","typeString":"type(library Math)"}},"id":1222,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12652:3:4","memberName":"min","nodeType":"MemberAccess","referencedDeclaration":6177,"src":"12647:8:4","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":1226,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12647:51:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1220,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12640:6:4","typeDescriptions":{"typeIdentifier":"t_type$_t_uint48_$","typeString":"type(uint48)"},"typeName":{"id":1219,"name":"uint48","nodeType":"ElementaryTypeName","src":"12640:6:4","typeDescriptions":{}}},"id":1227,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12640:59:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"functionReturnParameters":1210,"id":1232,"nodeType":"Return","src":"12579:209:4"}]},"documentation":{"id":1204,"nodeType":"StructuredDocumentation","src":"11205:336:4","text":" @dev Returns the amount of seconds to wait after the `newDelay` will\n become the new {defaultAdminDelay}.\n The value returned guarantees that if the delay is reduced, it will go into effect\n after a wait that honors the previously set delay.\n See {defaultAdminDelayIncreaseWait}."},"id":1234,"implemented":true,"kind":"function","modifiers":[],"name":"_delayChangeWait","nameLocation":"11555:16:4","nodeType":"FunctionDefinition","parameters":{"id":1207,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1206,"mutability":"mutable","name":"newDelay","nameLocation":"11579:8:4","nodeType":"VariableDeclaration","scope":1234,"src":"11572:15:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":1205,"name":"uint48","nodeType":"ElementaryTypeName","src":"11572:6:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"src":"11571:17:4"},"returnParameters":{"id":1210,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1209,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1234,"src":"11620:6:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":1208,"name":"uint48","nodeType":"ElementaryTypeName","src":"11620:6:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"src":"11619:8:4"},"scope":1331,"src":"11546:1249:4","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":1263,"nodeType":"Block","src":"13068:446:4","statements":[{"assignments":[null,1243],"declarations":[null,{"constant":false,"id":1243,"mutability":"mutable","name":"oldSchedule","nameLocation":"13088:11:4","nodeType":"VariableDeclaration","scope":1263,"src":"13081:18:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":1242,"name":"uint48","nodeType":"ElementaryTypeName","src":"13081:6:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"id":1246,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":1244,"name":"pendingDefaultAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":943,"src":"13103:19:4","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$_t_uint48_$","typeString":"function () view returns (address,uint48)"}},"id":1245,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13103:21:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint48_$","typeString":"tuple(address,uint48)"}},"nodeType":"VariableDeclarationStatement","src":"13078:46:4"},{"expression":{"id":1249,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1247,"name":"_pendingDefaultAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":636,"src":"13135:20:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":1248,"name":"newAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1237,"src":"13158:8:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"13135:31:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1250,"nodeType":"ExpressionStatement","src":"13135:31:4"},{"expression":{"id":1253,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1251,"name":"_pendingDefaultAdminSchedule","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":638,"src":"13176:28:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":1252,"name":"newSchedule","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1239,"src":"13207:11:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"13176:42:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"id":1254,"nodeType":"ExpressionStatement","src":"13176:42:4"},{"condition":{"arguments":[{"id":1256,"name":"oldSchedule","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1243,"src":"13345:11:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint48","typeString":"uint48"}],"id":1255,"name":"_isScheduleSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1316,"src":"13330:14:4","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint48_$returns$_t_bool_$","typeString":"function (uint48) pure returns (bool)"}},"id":1257,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13330:27:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1262,"nodeType":"IfStatement","src":"13326:182:4","trueBody":{"id":1261,"nodeType":"Block","src":"13359:149:4","statements":[{"eventCall":{"arguments":[],"expression":{"argumentTypes":[],"id":1258,"name":"DefaultAdminTransferCanceled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1361,"src":"13467:28:4","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$__$returns$__$","typeString":"function ()"}},"id":1259,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13467:30:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1260,"nodeType":"EmitStatement","src":"13462:35:4"}]}}]},"documentation":{"id":1235,"nodeType":"StructuredDocumentation","src":"12842:142:4","text":" @dev Setter of the tuple for pending admin and its schedule.\n May emit a {DefaultAdminTransferCanceled} event."},"id":1264,"implemented":true,"kind":"function","modifiers":[],"name":"_setPendingDefaultAdmin","nameLocation":"12998:23:4","nodeType":"FunctionDefinition","parameters":{"id":1240,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1237,"mutability":"mutable","name":"newAdmin","nameLocation":"13030:8:4","nodeType":"VariableDeclaration","scope":1264,"src":"13022:16:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1236,"name":"address","nodeType":"ElementaryTypeName","src":"13022:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1239,"mutability":"mutable","name":"newSchedule","nameLocation":"13047:11:4","nodeType":"VariableDeclaration","scope":1264,"src":"13040:18:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":1238,"name":"uint48","nodeType":"ElementaryTypeName","src":"13040:6:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"src":"13021:38:4"},"returnParameters":{"id":1241,"nodeType":"ParameterList","parameters":[],"src":"13068:0:4"},"scope":1331,"src":"12989:525:4","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":1302,"nodeType":"Block","src":"13741:514:4","statements":[{"assignments":[1273],"declarations":[{"constant":false,"id":1273,"mutability":"mutable","name":"oldSchedule","nameLocation":"13758:11:4","nodeType":"VariableDeclaration","scope":1302,"src":"13751:18:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":1272,"name":"uint48","nodeType":"ElementaryTypeName","src":"13751:6:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"id":1275,"initialValue":{"id":1274,"name":"_pendingDelaySchedule","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":646,"src":"13772:21:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"VariableDeclarationStatement","src":"13751:42:4"},{"condition":{"arguments":[{"id":1277,"name":"oldSchedule","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1273,"src":"13823:11:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint48","typeString":"uint48"}],"id":1276,"name":"_isScheduleSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1316,"src":"13808:14:4","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint48_$returns$_t_bool_$","typeString":"function (uint48) pure returns (bool)"}},"id":1278,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13808:27:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1293,"nodeType":"IfStatement","src":"13804:365:4","trueBody":{"id":1292,"nodeType":"Block","src":"13837:332:4","statements":[{"condition":{"arguments":[{"id":1280,"name":"oldSchedule","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1273,"src":"13874:11:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint48","typeString":"uint48"}],"id":1279,"name":"_hasSchedulePassed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1330,"src":"13855:18:4","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint48_$returns$_t_bool_$","typeString":"function (uint48) view returns (bool)"}},"id":1281,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13855:31:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":1290,"nodeType":"Block","src":"14003:156:4","statements":[{"eventCall":{"arguments":[],"expression":{"argumentTypes":[],"id":1287,"name":"DefaultAdminDelayChangeCanceled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1371,"src":"14111:31:4","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$__$returns$__$","typeString":"function ()"}},"id":1288,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14111:33:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1289,"nodeType":"EmitStatement","src":"14106:38:4"}]},"id":1291,"nodeType":"IfStatement","src":"13851:308:4","trueBody":{"id":1286,"nodeType":"Block","src":"13888:109:4","statements":[{"expression":{"id":1284,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1282,"name":"_currentDelay","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":640,"src":"13953:13:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":1283,"name":"_pendingDelay","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":644,"src":"13969:13:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"13953:29:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"id":1285,"nodeType":"ExpressionStatement","src":"13953:29:4"}]}}]}},{"expression":{"id":1296,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1294,"name":"_pendingDelay","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":644,"src":"14179:13:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":1295,"name":"newDelay","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1267,"src":"14195:8:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"14179:24:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"id":1297,"nodeType":"ExpressionStatement","src":"14179:24:4"},{"expression":{"id":1300,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1298,"name":"_pendingDelaySchedule","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":646,"src":"14213:21:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":1299,"name":"newSchedule","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1269,"src":"14237:11:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"14213:35:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"id":1301,"nodeType":"ExpressionStatement","src":"14213:35:4"}]},"documentation":{"id":1265,"nodeType":"StructuredDocumentation","src":"13520:145:4","text":" @dev Setter of the tuple for pending delay and its schedule.\n May emit a {DefaultAdminDelayChangeCanceled} event."},"id":1303,"implemented":true,"kind":"function","modifiers":[],"name":"_setPendingDelay","nameLocation":"13679:16:4","nodeType":"FunctionDefinition","parameters":{"id":1270,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1267,"mutability":"mutable","name":"newDelay","nameLocation":"13703:8:4","nodeType":"VariableDeclaration","scope":1303,"src":"13696:15:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":1266,"name":"uint48","nodeType":"ElementaryTypeName","src":"13696:6:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"},{"constant":false,"id":1269,"mutability":"mutable","name":"newSchedule","nameLocation":"13720:11:4","nodeType":"VariableDeclaration","scope":1303,"src":"13713:18:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":1268,"name":"uint48","nodeType":"ElementaryTypeName","src":"13713:6:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"src":"13695:37:4"},"returnParameters":{"id":1271,"nodeType":"ParameterList","parameters":[],"src":"13741:0:4"},"scope":1331,"src":"13670:585:4","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":1315,"nodeType":"Block","src":"14468:37:4","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint48","typeString":"uint48"},"id":1313,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1311,"name":"schedule","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1306,"src":"14485:8:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":1312,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14497:1:4","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"14485:13:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":1310,"id":1314,"nodeType":"Return","src":"14478:20:4"}]},"documentation":{"id":1304,"nodeType":"StructuredDocumentation","src":"14302:92:4","text":" @dev Defines if a `schedule` is considered set. For consistency purposes."},"id":1316,"implemented":true,"kind":"function","modifiers":[],"name":"_isScheduleSet","nameLocation":"14408:14:4","nodeType":"FunctionDefinition","parameters":{"id":1307,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1306,"mutability":"mutable","name":"schedule","nameLocation":"14430:8:4","nodeType":"VariableDeclaration","scope":1316,"src":"14423:15:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":1305,"name":"uint48","nodeType":"ElementaryTypeName","src":"14423:6:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"src":"14422:17:4"},"returnParameters":{"id":1310,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1309,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1316,"src":"14462:4:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1308,"name":"bool","nodeType":"ElementaryTypeName","src":"14462:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"14461:6:4"},"scope":1331,"src":"14399:106:4","stateMutability":"pure","virtual":false,"visibility":"private"},{"body":{"id":1329,"nodeType":"Block","src":"14684:50:4","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1327,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1324,"name":"schedule","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1319,"src":"14701:8:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":1325,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967292,"src":"14712:5:4","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":1326,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14718:9:4","memberName":"timestamp","nodeType":"MemberAccess","src":"14712:15:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14701:26:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":1323,"id":1328,"nodeType":"Return","src":"14694:33:4"}]},"documentation":{"id":1317,"nodeType":"StructuredDocumentation","src":"14511:95:4","text":" @dev Defines if a `schedule` is considered passed. For consistency purposes."},"id":1330,"implemented":true,"kind":"function","modifiers":[],"name":"_hasSchedulePassed","nameLocation":"14620:18:4","nodeType":"FunctionDefinition","parameters":{"id":1320,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1319,"mutability":"mutable","name":"schedule","nameLocation":"14646:8:4","nodeType":"VariableDeclaration","scope":1330,"src":"14639:15:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":1318,"name":"uint48","nodeType":"ElementaryTypeName","src":"14639:6:4","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"src":"14638:17:4"},"returnParameters":{"id":1323,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1322,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1330,"src":"14678:4:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1321,"name":"bool","nodeType":"ElementaryTypeName","src":"14678:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"14677:6:4"},"scope":1331,"src":"14611:123:4","stateMutability":"view","virtual":false,"visibility":"private"}],"scope":1332,"src":"1853:12883:4","usedErrors":[305,308,1343,1346,1351,7517],"usedEvents":[317,326,335,1358,1361,1368,1371]}],"src":"136:14601:4"},"id":4},"@openzeppelin/contracts/access/extensions/IAccessControlDefaultAdminRules.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/access/extensions/IAccessControlDefaultAdminRules.sol","exportedSymbols":{"IAccessControl":[378],"IAccessControlDefaultAdminRules":[1430]},"id":1431,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":1333,"literals":["solidity",">=","0.8",".4"],"nodeType":"PragmaDirective","src":"137:24:5"},{"absolutePath":"@openzeppelin/contracts/access/IAccessControl.sol","file":"../IAccessControl.sol","id":1335,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1431,"sourceUnit":379,"src":"163:53:5","symbolAliases":[{"foreign":{"id":1334,"name":"IAccessControl","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":378,"src":"171:14:5","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":1337,"name":"IAccessControl","nameLocations":["371:14:5"],"nodeType":"IdentifierPath","referencedDeclaration":378,"src":"371:14:5"},"id":1338,"nodeType":"InheritanceSpecifier","src":"371:14:5"}],"canonicalName":"IAccessControlDefaultAdminRules","contractDependencies":[],"contractKind":"interface","documentation":{"id":1336,"nodeType":"StructuredDocumentation","src":"218:107:5","text":" @dev External interface of AccessControlDefaultAdminRules declared to support ERC-165 detection."},"fullyImplemented":false,"id":1430,"linearizedBaseContracts":[1430,378],"name":"IAccessControlDefaultAdminRules","nameLocation":"336:31:5","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":1339,"nodeType":"StructuredDocumentation","src":"392:75:5","text":" @dev The new default admin is not a valid default admin."},"errorSelector":"c22c8022","id":1343,"name":"AccessControlInvalidDefaultAdmin","nameLocation":"478:32:5","nodeType":"ErrorDefinition","parameters":{"id":1342,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1341,"mutability":"mutable","name":"defaultAdmin","nameLocation":"519:12:5","nodeType":"VariableDeclaration","scope":1343,"src":"511:20:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1340,"name":"address","nodeType":"ElementaryTypeName","src":"511:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"510:22:5"},"src":"472:61:5"},{"documentation":{"id":1344,"nodeType":"StructuredDocumentation","src":"539:299:5","text":" @dev At least one of the following rules was violated:\n - The `DEFAULT_ADMIN_ROLE` must only be managed by itself.\n - The `DEFAULT_ADMIN_ROLE` must only be held by one account at the time.\n - Any `DEFAULT_ADMIN_ROLE` transfer must be in two delayed steps."},"errorSelector":"3fc3c27a","id":1346,"name":"AccessControlEnforcedDefaultAdminRules","nameLocation":"849:38:5","nodeType":"ErrorDefinition","parameters":{"id":1345,"nodeType":"ParameterList","parameters":[],"src":"887:2:5"},"src":"843:47:5"},{"documentation":{"id":1347,"nodeType":"StructuredDocumentation","src":"896:221:5","text":" @dev The delay for transferring the default admin delay is enforced and\n the operation must wait until `schedule`.\n NOTE: `schedule` can be 0 indicating there's no transfer scheduled."},"errorSelector":"19ca5ebb","id":1351,"name":"AccessControlEnforcedDefaultAdminDelay","nameLocation":"1128:38:5","nodeType":"ErrorDefinition","parameters":{"id":1350,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1349,"mutability":"mutable","name":"schedule","nameLocation":"1174:8:5","nodeType":"VariableDeclaration","scope":1351,"src":"1167:15:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":1348,"name":"uint48","nodeType":"ElementaryTypeName","src":"1167:6:5","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"src":"1166:17:5"},"src":"1122:62:5"},{"anonymous":false,"documentation":{"id":1352,"nodeType":"StructuredDocumentation","src":"1190:232:5","text":" @dev Emitted when a {defaultAdmin} transfer is started, setting `newAdmin` as the next\n address to become the {defaultAdmin} by calling {acceptDefaultAdminTransfer} only after `acceptSchedule`\n passes."},"eventSelector":"3377dc44241e779dd06afab5b788a35ca5f3b778836e2990bdb26a2a4b2e5ed6","id":1358,"name":"DefaultAdminTransferScheduled","nameLocation":"1433:29:5","nodeType":"EventDefinition","parameters":{"id":1357,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1354,"indexed":true,"mutability":"mutable","name":"newAdmin","nameLocation":"1479:8:5","nodeType":"VariableDeclaration","scope":1358,"src":"1463:24:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1353,"name":"address","nodeType":"ElementaryTypeName","src":"1463:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1356,"indexed":false,"mutability":"mutable","name":"acceptSchedule","nameLocation":"1496:14:5","nodeType":"VariableDeclaration","scope":1358,"src":"1489:21:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":1355,"name":"uint48","nodeType":"ElementaryTypeName","src":"1489:6:5","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"src":"1462:49:5"},"src":"1427:85:5"},{"anonymous":false,"documentation":{"id":1359,"nodeType":"StructuredDocumentation","src":"1518:123:5","text":" @dev Emitted when a {pendingDefaultAdmin} is reset if it was never accepted, regardless of its schedule."},"eventSelector":"8886ebfc4259abdbc16601dd8fb5678e54878f47b3c34836cfc51154a9605109","id":1361,"name":"DefaultAdminTransferCanceled","nameLocation":"1652:28:5","nodeType":"EventDefinition","parameters":{"id":1360,"nodeType":"ParameterList","parameters":[],"src":"1680:2:5"},"src":"1646:37:5"},{"anonymous":false,"documentation":{"id":1362,"nodeType":"StructuredDocumentation","src":"1689:201:5","text":" @dev Emitted when a {defaultAdminDelay} change is started, setting `newDelay` as the next\n delay to be applied between default admin transfer after `effectSchedule` has passed."},"eventSelector":"f1038c18cf84a56e432fdbfaf746924b7ea511dfe03a6506a0ceba4888788d9b","id":1368,"name":"DefaultAdminDelayChangeScheduled","nameLocation":"1901:32:5","nodeType":"EventDefinition","parameters":{"id":1367,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1364,"indexed":false,"mutability":"mutable","name":"newDelay","nameLocation":"1941:8:5","nodeType":"VariableDeclaration","scope":1368,"src":"1934:15:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":1363,"name":"uint48","nodeType":"ElementaryTypeName","src":"1934:6:5","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"},{"constant":false,"id":1366,"indexed":false,"mutability":"mutable","name":"effectSchedule","nameLocation":"1958:14:5","nodeType":"VariableDeclaration","scope":1368,"src":"1951:21:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":1365,"name":"uint48","nodeType":"ElementaryTypeName","src":"1951:6:5","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"src":"1933:40:5"},"src":"1895:79:5"},{"anonymous":false,"documentation":{"id":1369,"nodeType":"StructuredDocumentation","src":"1980:103:5","text":" @dev Emitted when a {pendingDefaultAdminDelay} is reset if its schedule didn't pass."},"eventSelector":"2b1fa2edafe6f7b9e97c1a9e0c3660e645beb2dcaa2d45bdbf9beaf5472e1ec5","id":1371,"name":"DefaultAdminDelayChangeCanceled","nameLocation":"2094:31:5","nodeType":"EventDefinition","parameters":{"id":1370,"nodeType":"ParameterList","parameters":[],"src":"2125:2:5"},"src":"2088:40:5"},{"documentation":{"id":1372,"nodeType":"StructuredDocumentation","src":"2134:87:5","text":" @dev Returns the address of the current `DEFAULT_ADMIN_ROLE` holder."},"functionSelector":"84ef8ffc","id":1377,"implemented":false,"kind":"function","modifiers":[],"name":"defaultAdmin","nameLocation":"2235:12:5","nodeType":"FunctionDefinition","parameters":{"id":1373,"nodeType":"ParameterList","parameters":[],"src":"2247:2:5"},"returnParameters":{"id":1376,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1375,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1377,"src":"2273:7:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1374,"name":"address","nodeType":"ElementaryTypeName","src":"2273:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2272:9:5"},"scope":1430,"src":"2226:56:5","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1378,"nodeType":"StructuredDocumentation","src":"2288:443:5","text":" @dev Returns a tuple of a `newAdmin` and an accept schedule.\n After the `schedule` passes, the `newAdmin` will be able to accept the {defaultAdmin} role\n by calling {acceptDefaultAdminTransfer}, completing the role transfer.\n A zero value only in `acceptSchedule` indicates no pending admin transfer.\n NOTE: A zero address `newAdmin` means that {defaultAdmin} is being renounced."},"functionSelector":"cf6eefb7","id":1385,"implemented":false,"kind":"function","modifiers":[],"name":"pendingDefaultAdmin","nameLocation":"2745:19:5","nodeType":"FunctionDefinition","parameters":{"id":1379,"nodeType":"ParameterList","parameters":[],"src":"2764:2:5"},"returnParameters":{"id":1384,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1381,"mutability":"mutable","name":"newAdmin","nameLocation":"2798:8:5","nodeType":"VariableDeclaration","scope":1385,"src":"2790:16:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1380,"name":"address","nodeType":"ElementaryTypeName","src":"2790:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1383,"mutability":"mutable","name":"acceptSchedule","nameLocation":"2815:14:5","nodeType":"VariableDeclaration","scope":1385,"src":"2808:21:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":1382,"name":"uint48","nodeType":"ElementaryTypeName","src":"2808:6:5","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"src":"2789:41:5"},"scope":1430,"src":"2736:95:5","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1386,"nodeType":"StructuredDocumentation","src":"2837:451:5","text":" @dev Returns the delay required to schedule the acceptance of a {defaultAdmin} transfer started.\n This delay will be added to the current timestamp when calling {beginDefaultAdminTransfer} to set\n the acceptance schedule.\n NOTE: If a delay change has been scheduled, it will take effect as soon as the schedule passes, making this\n function returns the new delay. See {changeDefaultAdminDelay}."},"functionSelector":"cc8463c8","id":1391,"implemented":false,"kind":"function","modifiers":[],"name":"defaultAdminDelay","nameLocation":"3302:17:5","nodeType":"FunctionDefinition","parameters":{"id":1387,"nodeType":"ParameterList","parameters":[],"src":"3319:2:5"},"returnParameters":{"id":1390,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1389,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1391,"src":"3345:6:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":1388,"name":"uint48","nodeType":"ElementaryTypeName","src":"3345:6:5","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"src":"3344:8:5"},"scope":1430,"src":"3293:60:5","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1392,"nodeType":"StructuredDocumentation","src":"3359:482:5","text":" @dev Returns a tuple of `newDelay` and an effect schedule.\n After the `schedule` passes, the `newDelay` will get into effect immediately for every\n new {defaultAdmin} transfer started with {beginDefaultAdminTransfer}.\n A zero value only in `effectSchedule` indicates no pending delay change.\n NOTE: A zero value only for `newDelay` means that the next {defaultAdminDelay}\n will be zero after the effect schedule."},"functionSelector":"a1eda53c","id":1399,"implemented":false,"kind":"function","modifiers":[],"name":"pendingDefaultAdminDelay","nameLocation":"3855:24:5","nodeType":"FunctionDefinition","parameters":{"id":1393,"nodeType":"ParameterList","parameters":[],"src":"3879:2:5"},"returnParameters":{"id":1398,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1395,"mutability":"mutable","name":"newDelay","nameLocation":"3912:8:5","nodeType":"VariableDeclaration","scope":1399,"src":"3905:15:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":1394,"name":"uint48","nodeType":"ElementaryTypeName","src":"3905:6:5","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"},{"constant":false,"id":1397,"mutability":"mutable","name":"effectSchedule","nameLocation":"3929:14:5","nodeType":"VariableDeclaration","scope":1399,"src":"3922:21:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":1396,"name":"uint48","nodeType":"ElementaryTypeName","src":"3922:6:5","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"src":"3904:40:5"},"scope":1430,"src":"3846:99:5","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1400,"nodeType":"StructuredDocumentation","src":"3951:334:5","text":" @dev Starts a {defaultAdmin} transfer by setting a {pendingDefaultAdmin} scheduled for acceptance\n after the current timestamp plus a {defaultAdminDelay}.\n Requirements:\n - Only can be called by the current {defaultAdmin}.\n Emits a {DefaultAdminTransferScheduled} event."},"functionSelector":"634e93da","id":1405,"implemented":false,"kind":"function","modifiers":[],"name":"beginDefaultAdminTransfer","nameLocation":"4299:25:5","nodeType":"FunctionDefinition","parameters":{"id":1403,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1402,"mutability":"mutable","name":"newAdmin","nameLocation":"4333:8:5","nodeType":"VariableDeclaration","scope":1405,"src":"4325:16:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1401,"name":"address","nodeType":"ElementaryTypeName","src":"4325:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4324:18:5"},"returnParameters":{"id":1404,"nodeType":"ParameterList","parameters":[],"src":"4351:0:5"},"scope":1430,"src":"4290:62:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1406,"nodeType":"StructuredDocumentation","src":"4358:364:5","text":" @dev Cancels a {defaultAdmin} transfer previously started with {beginDefaultAdminTransfer}.\n A {pendingDefaultAdmin} not yet accepted can also be cancelled with this function.\n Requirements:\n - Only can be called by the current {defaultAdmin}.\n May emit a {DefaultAdminTransferCanceled} event."},"functionSelector":"d602b9fd","id":1409,"implemented":false,"kind":"function","modifiers":[],"name":"cancelDefaultAdminTransfer","nameLocation":"4736:26:5","nodeType":"FunctionDefinition","parameters":{"id":1407,"nodeType":"ParameterList","parameters":[],"src":"4762:2:5"},"returnParameters":{"id":1408,"nodeType":"ParameterList","parameters":[],"src":"4773:0:5"},"scope":1430,"src":"4727:47:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1410,"nodeType":"StructuredDocumentation","src":"4780:539:5","text":" @dev Completes a {defaultAdmin} transfer previously started with {beginDefaultAdminTransfer}.\n After calling the function:\n - `DEFAULT_ADMIN_ROLE` should be granted to the caller.\n - `DEFAULT_ADMIN_ROLE` should be revoked from the previous holder.\n - {pendingDefaultAdmin} should be reset to zero values.\n Requirements:\n - Only can be called by the {pendingDefaultAdmin}'s `newAdmin`.\n - The {pendingDefaultAdmin}'s `acceptSchedule` should've passed."},"functionSelector":"cefc1429","id":1413,"implemented":false,"kind":"function","modifiers":[],"name":"acceptDefaultAdminTransfer","nameLocation":"5333:26:5","nodeType":"FunctionDefinition","parameters":{"id":1411,"nodeType":"ParameterList","parameters":[],"src":"5359:2:5"},"returnParameters":{"id":1412,"nodeType":"ParameterList","parameters":[],"src":"5370:0:5"},"scope":1430,"src":"5324:47:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1414,"nodeType":"StructuredDocumentation","src":"5377:1414:5","text":" @dev Initiates a {defaultAdminDelay} update by setting a {pendingDefaultAdminDelay} scheduled for getting\n into effect after the current timestamp plus a {defaultAdminDelay}.\n This function guarantees that any call to {beginDefaultAdminTransfer} done between the timestamp this\n method is called and the {pendingDefaultAdminDelay} effect schedule will use the current {defaultAdminDelay}\n set before calling.\n The {pendingDefaultAdminDelay}'s effect schedule is defined in a way that waiting until the schedule and then\n calling {beginDefaultAdminTransfer} with the new delay will take at least the same as another {defaultAdmin}\n complete transfer (including acceptance).\n The schedule is designed for two scenarios:\n - When the delay is changed for a larger one the schedule is `block.timestamp + newDelay` capped by\n {defaultAdminDelayIncreaseWait}.\n - When the delay is changed for a shorter one, the schedule is `block.timestamp + (current delay - new delay)`.\n A {pendingDefaultAdminDelay} that never got into effect will be canceled in favor of a new scheduled change.\n Requirements:\n - Only can be called by the current {defaultAdmin}.\n Emits a {DefaultAdminDelayChangeScheduled} event and may emit a {DefaultAdminDelayChangeCanceled} event."},"functionSelector":"649a5ec7","id":1419,"implemented":false,"kind":"function","modifiers":[],"name":"changeDefaultAdminDelay","nameLocation":"6805:23:5","nodeType":"FunctionDefinition","parameters":{"id":1417,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1416,"mutability":"mutable","name":"newDelay","nameLocation":"6836:8:5","nodeType":"VariableDeclaration","scope":1419,"src":"6829:15:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":1415,"name":"uint48","nodeType":"ElementaryTypeName","src":"6829:6:5","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"src":"6828:17:5"},"returnParameters":{"id":1418,"nodeType":"ParameterList","parameters":[],"src":"6854:0:5"},"scope":1430,"src":"6796:59:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1420,"nodeType":"StructuredDocumentation","src":"6861:231:5","text":" @dev Cancels a scheduled {defaultAdminDelay} change.\n Requirements:\n - Only can be called by the current {defaultAdmin}.\n May emit a {DefaultAdminDelayChangeCanceled} event."},"functionSelector":"0aa6220b","id":1423,"implemented":false,"kind":"function","modifiers":[],"name":"rollbackDefaultAdminDelay","nameLocation":"7106:25:5","nodeType":"FunctionDefinition","parameters":{"id":1421,"nodeType":"ParameterList","parameters":[],"src":"7131:2:5"},"returnParameters":{"id":1422,"nodeType":"ParameterList","parameters":[],"src":"7142:0:5"},"scope":1430,"src":"7097:46:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1424,"nodeType":"StructuredDocumentation","src":"7149:954:5","text":" @dev Maximum time in seconds for an increase to {defaultAdminDelay} (that is scheduled using {changeDefaultAdminDelay})\n to take effect. Default to 5 days.\n When the {defaultAdminDelay} is scheduled to be increased, it goes into effect after the new delay has passed with\n the purpose of giving enough time for reverting any accidental change (i.e. using milliseconds instead of seconds)\n that may lock the contract. However, to avoid excessive schedules, the wait is capped by this function and it can\n be overridden for a custom {defaultAdminDelay} increase scheduling.\n IMPORTANT: Make sure to add a reasonable amount of time while overriding this value, otherwise,\n there's a risk of setting a high new delay that goes into effect almost immediately without the\n possibility of human intervention in the case of an input error (eg. set milliseconds instead of seconds)."},"functionSelector":"022d63fb","id":1429,"implemented":false,"kind":"function","modifiers":[],"name":"defaultAdminDelayIncreaseWait","nameLocation":"8117:29:5","nodeType":"FunctionDefinition","parameters":{"id":1425,"nodeType":"ParameterList","parameters":[],"src":"8146:2:5"},"returnParameters":{"id":1428,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1427,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1429,"src":"8172:6:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":1426,"name":"uint48","nodeType":"ElementaryTypeName","src":"8172:6:5","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"src":"8171:8:5"},"scope":1430,"src":"8108:72:5","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":1431,"src":"326:7856:5","usedErrors":[305,308,1343,1346,1351],"usedEvents":[317,326,335,1358,1361,1368,1371]}],"src":"137:8046:5"},"id":5},"@openzeppelin/contracts/interfaces/IERC2981.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/interfaces/IERC2981.sol","exportedSymbols":{"IERC165":[5850],"IERC2981":[1450]},"id":1451,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":1432,"literals":["solidity",">=","0.6",".2"],"nodeType":"PragmaDirective","src":"107:24:6"},{"absolutePath":"@openzeppelin/contracts/utils/introspection/IERC165.sol","file":"../utils/introspection/IERC165.sol","id":1434,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1451,"sourceUnit":5851,"src":"133:59:6","symbolAliases":[{"foreign":{"id":1433,"name":"IERC165","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5850,"src":"141:7:6","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":1436,"name":"IERC165","nameLocations":["476:7:6"],"nodeType":"IdentifierPath","referencedDeclaration":5850,"src":"476:7:6"},"id":1437,"nodeType":"InheritanceSpecifier","src":"476:7:6"}],"canonicalName":"IERC2981","contractDependencies":[],"contractKind":"interface","documentation":{"id":1435,"nodeType":"StructuredDocumentation","src":"194:259:6","text":" @dev Interface for the NFT Royalty Standard.\n A standardized way to retrieve royalty payment information for non-fungible tokens (NFTs) to enable universal\n support for royalty payments across all NFT marketplaces and ecosystem participants."},"fullyImplemented":false,"id":1450,"linearizedBaseContracts":[1450,5850],"name":"IERC2981","nameLocation":"464:8:6","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":1438,"nodeType":"StructuredDocumentation","src":"490:473:6","text":" @dev Returns how much royalty is owed and to whom, based on a sale price that may be denominated in any unit of\n exchange. The royalty amount is denominated and should be paid in that same unit of exchange.\n NOTE: ERC-2981 allows setting the royalty to 100% of the price. In that case all the price would be sent to the\n royalty receiver and 0 tokens to the seller. Contracts dealing with royalty should consider empty transfers."},"functionSelector":"2a55205a","id":1449,"implemented":false,"kind":"function","modifiers":[],"name":"royaltyInfo","nameLocation":"977:11:6","nodeType":"FunctionDefinition","parameters":{"id":1443,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1440,"mutability":"mutable","name":"tokenId","nameLocation":"1006:7:6","nodeType":"VariableDeclaration","scope":1449,"src":"998:15:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1439,"name":"uint256","nodeType":"ElementaryTypeName","src":"998:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1442,"mutability":"mutable","name":"salePrice","nameLocation":"1031:9:6","nodeType":"VariableDeclaration","scope":1449,"src":"1023:17:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1441,"name":"uint256","nodeType":"ElementaryTypeName","src":"1023:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"988:58:6"},"returnParameters":{"id":1448,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1445,"mutability":"mutable","name":"receiver","nameLocation":"1078:8:6","nodeType":"VariableDeclaration","scope":1449,"src":"1070:16:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1444,"name":"address","nodeType":"ElementaryTypeName","src":"1070:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1447,"mutability":"mutable","name":"royaltyAmount","nameLocation":"1096:13:6","nodeType":"VariableDeclaration","scope":1449,"src":"1088:21:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1446,"name":"uint256","nodeType":"ElementaryTypeName","src":"1088:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1069:41:6"},"scope":1450,"src":"968:143:6","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":1451,"src":"454:659:6","usedErrors":[],"usedEvents":[]}],"src":"107:1007:6"},"id":6},"@openzeppelin/contracts/interfaces/IERC5313.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/interfaces/IERC5313.sol","exportedSymbols":{"IERC5313":[1460]},"id":1461,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":1452,"literals":["solidity",">=","0.4",".16"],"nodeType":"PragmaDirective","src":"107:25:7"},{"abstract":false,"baseContracts":[],"canonicalName":"IERC5313","contractDependencies":[],"contractKind":"interface","documentation":{"id":1453,"nodeType":"StructuredDocumentation","src":"134:164:7","text":" @dev Interface for the Light Contract Ownership Standard.\n A standardized minimal interface required to identify an account that controls a contract"},"fullyImplemented":false,"id":1460,"linearizedBaseContracts":[1460],"name":"IERC5313","nameLocation":"309:8:7","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":1454,"nodeType":"StructuredDocumentation","src":"324:54:7","text":" @dev Gets the address of the owner."},"functionSelector":"8da5cb5b","id":1459,"implemented":false,"kind":"function","modifiers":[],"name":"owner","nameLocation":"392:5:7","nodeType":"FunctionDefinition","parameters":{"id":1455,"nodeType":"ParameterList","parameters":[],"src":"397:2:7"},"returnParameters":{"id":1458,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1457,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1459,"src":"423:7:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1456,"name":"address","nodeType":"ElementaryTypeName","src":"423:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"422:9:7"},"scope":1460,"src":"383:49:7","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":1461,"src":"299:135:7","usedErrors":[],"usedEvents":[]}],"src":"107:328:7"},"id":7},"@openzeppelin/contracts/interfaces/draft-IERC6093.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/interfaces/draft-IERC6093.sol","exportedSymbols":{"IERC1155Errors":[1597],"IERC20Errors":[1502],"IERC721Errors":[1550]},"id":1598,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":1462,"literals":["solidity",">=","0.8",".4"],"nodeType":"PragmaDirective","src":"113:24:8"},{"abstract":false,"baseContracts":[],"canonicalName":"IERC20Errors","contractDependencies":[],"contractKind":"interface","documentation":{"id":1463,"nodeType":"StructuredDocumentation","src":"139:141:8","text":" @dev Standard ERC-20 Errors\n Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 tokens."},"fullyImplemented":true,"id":1502,"linearizedBaseContracts":[1502],"name":"IERC20Errors","nameLocation":"291:12:8","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":1464,"nodeType":"StructuredDocumentation","src":"310:309:8","text":" @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\n @param sender Address whose tokens are being transferred.\n @param balance Current balance for the interacting account.\n @param needed Minimum amount required to perform a transfer."},"errorSelector":"e450d38c","id":1472,"name":"ERC20InsufficientBalance","nameLocation":"630:24:8","nodeType":"ErrorDefinition","parameters":{"id":1471,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1466,"mutability":"mutable","name":"sender","nameLocation":"663:6:8","nodeType":"VariableDeclaration","scope":1472,"src":"655:14:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1465,"name":"address","nodeType":"ElementaryTypeName","src":"655:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1468,"mutability":"mutable","name":"balance","nameLocation":"679:7:8","nodeType":"VariableDeclaration","scope":1472,"src":"671:15:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1467,"name":"uint256","nodeType":"ElementaryTypeName","src":"671:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1470,"mutability":"mutable","name":"needed","nameLocation":"696:6:8","nodeType":"VariableDeclaration","scope":1472,"src":"688:14:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1469,"name":"uint256","nodeType":"ElementaryTypeName","src":"688:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"654:49:8"},"src":"624:80:8"},{"documentation":{"id":1473,"nodeType":"StructuredDocumentation","src":"710:152:8","text":" @dev Indicates a failure with the token `sender`. Used in transfers.\n @param sender Address whose tokens are being transferred."},"errorSelector":"96c6fd1e","id":1477,"name":"ERC20InvalidSender","nameLocation":"873:18:8","nodeType":"ErrorDefinition","parameters":{"id":1476,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1475,"mutability":"mutable","name":"sender","nameLocation":"900:6:8","nodeType":"VariableDeclaration","scope":1477,"src":"892:14:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1474,"name":"address","nodeType":"ElementaryTypeName","src":"892:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"891:16:8"},"src":"867:41:8"},{"documentation":{"id":1478,"nodeType":"StructuredDocumentation","src":"914:159:8","text":" @dev Indicates a failure with the token `receiver`. Used in transfers.\n @param receiver Address to which tokens are being transferred."},"errorSelector":"ec442f05","id":1482,"name":"ERC20InvalidReceiver","nameLocation":"1084:20:8","nodeType":"ErrorDefinition","parameters":{"id":1481,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1480,"mutability":"mutable","name":"receiver","nameLocation":"1113:8:8","nodeType":"VariableDeclaration","scope":1482,"src":"1105:16:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1479,"name":"address","nodeType":"ElementaryTypeName","src":"1105:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1104:18:8"},"src":"1078:45:8"},{"documentation":{"id":1483,"nodeType":"StructuredDocumentation","src":"1129:345:8","text":" @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers.\n @param spender Address that may be allowed to operate on tokens without being their owner.\n @param allowance Amount of tokens a `spender` is allowed to operate with.\n @param needed Minimum amount required to perform a transfer."},"errorSelector":"fb8f41b2","id":1491,"name":"ERC20InsufficientAllowance","nameLocation":"1485:26:8","nodeType":"ErrorDefinition","parameters":{"id":1490,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1485,"mutability":"mutable","name":"spender","nameLocation":"1520:7:8","nodeType":"VariableDeclaration","scope":1491,"src":"1512:15:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1484,"name":"address","nodeType":"ElementaryTypeName","src":"1512:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1487,"mutability":"mutable","name":"allowance","nameLocation":"1537:9:8","nodeType":"VariableDeclaration","scope":1491,"src":"1529:17:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1486,"name":"uint256","nodeType":"ElementaryTypeName","src":"1529:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1489,"mutability":"mutable","name":"needed","nameLocation":"1556:6:8","nodeType":"VariableDeclaration","scope":1491,"src":"1548:14:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1488,"name":"uint256","nodeType":"ElementaryTypeName","src":"1548:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1511:52:8"},"src":"1479:85:8"},{"documentation":{"id":1492,"nodeType":"StructuredDocumentation","src":"1570:174:8","text":" @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n @param approver Address initiating an approval operation."},"errorSelector":"e602df05","id":1496,"name":"ERC20InvalidApprover","nameLocation":"1755:20:8","nodeType":"ErrorDefinition","parameters":{"id":1495,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1494,"mutability":"mutable","name":"approver","nameLocation":"1784:8:8","nodeType":"VariableDeclaration","scope":1496,"src":"1776:16:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1493,"name":"address","nodeType":"ElementaryTypeName","src":"1776:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1775:18:8"},"src":"1749:45:8"},{"documentation":{"id":1497,"nodeType":"StructuredDocumentation","src":"1800:195:8","text":" @dev Indicates a failure with the `spender` to be approved. Used in approvals.\n @param spender Address that may be allowed to operate on tokens without being their owner."},"errorSelector":"94280d62","id":1501,"name":"ERC20InvalidSpender","nameLocation":"2006:19:8","nodeType":"ErrorDefinition","parameters":{"id":1500,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1499,"mutability":"mutable","name":"spender","nameLocation":"2034:7:8","nodeType":"VariableDeclaration","scope":1501,"src":"2026:15:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1498,"name":"address","nodeType":"ElementaryTypeName","src":"2026:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2025:17:8"},"src":"2000:43:8"}],"scope":1598,"src":"281:1764:8","usedErrors":[1472,1477,1482,1491,1496,1501],"usedEvents":[]},{"abstract":false,"baseContracts":[],"canonicalName":"IERC721Errors","contractDependencies":[],"contractKind":"interface","documentation":{"id":1503,"nodeType":"StructuredDocumentation","src":"2047:143:8","text":" @dev Standard ERC-721 Errors\n Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-721 tokens."},"fullyImplemented":true,"id":1550,"linearizedBaseContracts":[1550],"name":"IERC721Errors","nameLocation":"2201:13:8","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":1504,"nodeType":"StructuredDocumentation","src":"2221:220:8","text":" @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-721.\n Used in balance queries.\n @param owner Address of the current owner of a token."},"errorSelector":"89c62b64","id":1508,"name":"ERC721InvalidOwner","nameLocation":"2452:18:8","nodeType":"ErrorDefinition","parameters":{"id":1507,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1506,"mutability":"mutable","name":"owner","nameLocation":"2479:5:8","nodeType":"VariableDeclaration","scope":1508,"src":"2471:13:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1505,"name":"address","nodeType":"ElementaryTypeName","src":"2471:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2470:15:8"},"src":"2446:40:8"},{"documentation":{"id":1509,"nodeType":"StructuredDocumentation","src":"2492:132:8","text":" @dev Indicates a `tokenId` whose `owner` is the zero address.\n @param tokenId Identifier number of a token."},"errorSelector":"7e273289","id":1513,"name":"ERC721NonexistentToken","nameLocation":"2635:22:8","nodeType":"ErrorDefinition","parameters":{"id":1512,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1511,"mutability":"mutable","name":"tokenId","nameLocation":"2666:7:8","nodeType":"VariableDeclaration","scope":1513,"src":"2658:15:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1510,"name":"uint256","nodeType":"ElementaryTypeName","src":"2658:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2657:17:8"},"src":"2629:46:8"},{"documentation":{"id":1514,"nodeType":"StructuredDocumentation","src":"2681:289:8","text":" @dev Indicates an error related to the ownership over a particular token. Used in transfers.\n @param sender Address whose tokens are being transferred.\n @param tokenId Identifier number of a token.\n @param owner Address of the current owner of a token."},"errorSelector":"64283d7b","id":1522,"name":"ERC721IncorrectOwner","nameLocation":"2981:20:8","nodeType":"ErrorDefinition","parameters":{"id":1521,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1516,"mutability":"mutable","name":"sender","nameLocation":"3010:6:8","nodeType":"VariableDeclaration","scope":1522,"src":"3002:14:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1515,"name":"address","nodeType":"ElementaryTypeName","src":"3002:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1518,"mutability":"mutable","name":"tokenId","nameLocation":"3026:7:8","nodeType":"VariableDeclaration","scope":1522,"src":"3018:15:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1517,"name":"uint256","nodeType":"ElementaryTypeName","src":"3018:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1520,"mutability":"mutable","name":"owner","nameLocation":"3043:5:8","nodeType":"VariableDeclaration","scope":1522,"src":"3035:13:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1519,"name":"address","nodeType":"ElementaryTypeName","src":"3035:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3001:48:8"},"src":"2975:75:8"},{"documentation":{"id":1523,"nodeType":"StructuredDocumentation","src":"3056:152:8","text":" @dev Indicates a failure with the token `sender`. Used in transfers.\n @param sender Address whose tokens are being transferred."},"errorSelector":"73c6ac6e","id":1527,"name":"ERC721InvalidSender","nameLocation":"3219:19:8","nodeType":"ErrorDefinition","parameters":{"id":1526,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1525,"mutability":"mutable","name":"sender","nameLocation":"3247:6:8","nodeType":"VariableDeclaration","scope":1527,"src":"3239:14:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1524,"name":"address","nodeType":"ElementaryTypeName","src":"3239:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3238:16:8"},"src":"3213:42:8"},{"documentation":{"id":1528,"nodeType":"StructuredDocumentation","src":"3261:159:8","text":" @dev Indicates a failure with the token `receiver`. Used in transfers.\n @param receiver Address to which tokens are being transferred."},"errorSelector":"64a0ae92","id":1532,"name":"ERC721InvalidReceiver","nameLocation":"3431:21:8","nodeType":"ErrorDefinition","parameters":{"id":1531,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1530,"mutability":"mutable","name":"receiver","nameLocation":"3461:8:8","nodeType":"VariableDeclaration","scope":1532,"src":"3453:16:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1529,"name":"address","nodeType":"ElementaryTypeName","src":"3453:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3452:18:8"},"src":"3425:46:8"},{"documentation":{"id":1533,"nodeType":"StructuredDocumentation","src":"3477:247:8","text":" @dev Indicates a failure with the `operator`’s approval. Used in transfers.\n @param operator Address that may be allowed to operate on tokens without being their owner.\n @param tokenId Identifier number of a token."},"errorSelector":"177e802f","id":1539,"name":"ERC721InsufficientApproval","nameLocation":"3735:26:8","nodeType":"ErrorDefinition","parameters":{"id":1538,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1535,"mutability":"mutable","name":"operator","nameLocation":"3770:8:8","nodeType":"VariableDeclaration","scope":1539,"src":"3762:16:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1534,"name":"address","nodeType":"ElementaryTypeName","src":"3762:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1537,"mutability":"mutable","name":"tokenId","nameLocation":"3788:7:8","nodeType":"VariableDeclaration","scope":1539,"src":"3780:15:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1536,"name":"uint256","nodeType":"ElementaryTypeName","src":"3780:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3761:35:8"},"src":"3729:68:8"},{"documentation":{"id":1540,"nodeType":"StructuredDocumentation","src":"3803:174:8","text":" @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n @param approver Address initiating an approval operation."},"errorSelector":"a9fbf51f","id":1544,"name":"ERC721InvalidApprover","nameLocation":"3988:21:8","nodeType":"ErrorDefinition","parameters":{"id":1543,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1542,"mutability":"mutable","name":"approver","nameLocation":"4018:8:8","nodeType":"VariableDeclaration","scope":1544,"src":"4010:16:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1541,"name":"address","nodeType":"ElementaryTypeName","src":"4010:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4009:18:8"},"src":"3982:46:8"},{"documentation":{"id":1545,"nodeType":"StructuredDocumentation","src":"4034:197:8","text":" @dev Indicates a failure with the `operator` to be approved. Used in approvals.\n @param operator Address that may be allowed to operate on tokens without being their owner."},"errorSelector":"5b08ba18","id":1549,"name":"ERC721InvalidOperator","nameLocation":"4242:21:8","nodeType":"ErrorDefinition","parameters":{"id":1548,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1547,"mutability":"mutable","name":"operator","nameLocation":"4272:8:8","nodeType":"VariableDeclaration","scope":1549,"src":"4264:16:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1546,"name":"address","nodeType":"ElementaryTypeName","src":"4264:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4263:18:8"},"src":"4236:46:8"}],"scope":1598,"src":"2191:2093:8","usedErrors":[1508,1513,1522,1527,1532,1539,1544,1549],"usedEvents":[]},{"abstract":false,"baseContracts":[],"canonicalName":"IERC1155Errors","contractDependencies":[],"contractKind":"interface","documentation":{"id":1551,"nodeType":"StructuredDocumentation","src":"4286:145:8","text":" @dev Standard ERC-1155 Errors\n Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-1155 tokens."},"fullyImplemented":true,"id":1597,"linearizedBaseContracts":[1597],"name":"IERC1155Errors","nameLocation":"4442:14:8","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":1552,"nodeType":"StructuredDocumentation","src":"4463:361:8","text":" @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\n @param sender Address whose tokens are being transferred.\n @param balance Current balance for the interacting account.\n @param needed Minimum amount required to perform a transfer.\n @param tokenId Identifier number of a token."},"errorSelector":"03dee4c5","id":1562,"name":"ERC1155InsufficientBalance","nameLocation":"4835:26:8","nodeType":"ErrorDefinition","parameters":{"id":1561,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1554,"mutability":"mutable","name":"sender","nameLocation":"4870:6:8","nodeType":"VariableDeclaration","scope":1562,"src":"4862:14:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1553,"name":"address","nodeType":"ElementaryTypeName","src":"4862:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1556,"mutability":"mutable","name":"balance","nameLocation":"4886:7:8","nodeType":"VariableDeclaration","scope":1562,"src":"4878:15:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1555,"name":"uint256","nodeType":"ElementaryTypeName","src":"4878:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1558,"mutability":"mutable","name":"needed","nameLocation":"4903:6:8","nodeType":"VariableDeclaration","scope":1562,"src":"4895:14:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1557,"name":"uint256","nodeType":"ElementaryTypeName","src":"4895:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1560,"mutability":"mutable","name":"tokenId","nameLocation":"4919:7:8","nodeType":"VariableDeclaration","scope":1562,"src":"4911:15:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1559,"name":"uint256","nodeType":"ElementaryTypeName","src":"4911:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4861:66:8"},"src":"4829:99:8"},{"documentation":{"id":1563,"nodeType":"StructuredDocumentation","src":"4934:152:8","text":" @dev Indicates a failure with the token `sender`. Used in transfers.\n @param sender Address whose tokens are being transferred."},"errorSelector":"01a83514","id":1567,"name":"ERC1155InvalidSender","nameLocation":"5097:20:8","nodeType":"ErrorDefinition","parameters":{"id":1566,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1565,"mutability":"mutable","name":"sender","nameLocation":"5126:6:8","nodeType":"VariableDeclaration","scope":1567,"src":"5118:14:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1564,"name":"address","nodeType":"ElementaryTypeName","src":"5118:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5117:16:8"},"src":"5091:43:8"},{"documentation":{"id":1568,"nodeType":"StructuredDocumentation","src":"5140:159:8","text":" @dev Indicates a failure with the token `receiver`. Used in transfers.\n @param receiver Address to which tokens are being transferred."},"errorSelector":"57f447ce","id":1572,"name":"ERC1155InvalidReceiver","nameLocation":"5310:22:8","nodeType":"ErrorDefinition","parameters":{"id":1571,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1570,"mutability":"mutable","name":"receiver","nameLocation":"5341:8:8","nodeType":"VariableDeclaration","scope":1572,"src":"5333:16:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1569,"name":"address","nodeType":"ElementaryTypeName","src":"5333:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5332:18:8"},"src":"5304:47:8"},{"documentation":{"id":1573,"nodeType":"StructuredDocumentation","src":"5357:256:8","text":" @dev Indicates a failure with the `operator`’s approval. Used in transfers.\n @param operator Address that may be allowed to operate on tokens without being their owner.\n @param owner Address of the current owner of a token."},"errorSelector":"e237d922","id":1579,"name":"ERC1155MissingApprovalForAll","nameLocation":"5624:28:8","nodeType":"ErrorDefinition","parameters":{"id":1578,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1575,"mutability":"mutable","name":"operator","nameLocation":"5661:8:8","nodeType":"VariableDeclaration","scope":1579,"src":"5653:16:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1574,"name":"address","nodeType":"ElementaryTypeName","src":"5653:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1577,"mutability":"mutable","name":"owner","nameLocation":"5679:5:8","nodeType":"VariableDeclaration","scope":1579,"src":"5671:13:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1576,"name":"address","nodeType":"ElementaryTypeName","src":"5671:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5652:33:8"},"src":"5618:68:8"},{"documentation":{"id":1580,"nodeType":"StructuredDocumentation","src":"5692:174:8","text":" @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n @param approver Address initiating an approval operation."},"errorSelector":"3e31884e","id":1584,"name":"ERC1155InvalidApprover","nameLocation":"5877:22:8","nodeType":"ErrorDefinition","parameters":{"id":1583,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1582,"mutability":"mutable","name":"approver","nameLocation":"5908:8:8","nodeType":"VariableDeclaration","scope":1584,"src":"5900:16:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1581,"name":"address","nodeType":"ElementaryTypeName","src":"5900:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5899:18:8"},"src":"5871:47:8"},{"documentation":{"id":1585,"nodeType":"StructuredDocumentation","src":"5924:197:8","text":" @dev Indicates a failure with the `operator` to be approved. Used in approvals.\n @param operator Address that may be allowed to operate on tokens without being their owner."},"errorSelector":"ced3e100","id":1589,"name":"ERC1155InvalidOperator","nameLocation":"6132:22:8","nodeType":"ErrorDefinition","parameters":{"id":1588,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1587,"mutability":"mutable","name":"operator","nameLocation":"6163:8:8","nodeType":"VariableDeclaration","scope":1589,"src":"6155:16:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1586,"name":"address","nodeType":"ElementaryTypeName","src":"6155:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6154:18:8"},"src":"6126:47:8"},{"documentation":{"id":1590,"nodeType":"StructuredDocumentation","src":"6179:280:8","text":" @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.\n Used in batch transfers.\n @param idsLength Length of the array of token identifiers\n @param valuesLength Length of the array of token amounts"},"errorSelector":"5b059991","id":1596,"name":"ERC1155InvalidArrayLength","nameLocation":"6470:25:8","nodeType":"ErrorDefinition","parameters":{"id":1595,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1592,"mutability":"mutable","name":"idsLength","nameLocation":"6504:9:8","nodeType":"VariableDeclaration","scope":1596,"src":"6496:17:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1591,"name":"uint256","nodeType":"ElementaryTypeName","src":"6496:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1594,"mutability":"mutable","name":"valuesLength","nameLocation":"6523:12:8","nodeType":"VariableDeclaration","scope":1596,"src":"6515:20:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1593,"name":"uint256","nodeType":"ElementaryTypeName","src":"6515:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6495:41:8"},"src":"6464:73:8"}],"scope":1598,"src":"4432:2107:8","usedErrors":[1562,1567,1572,1579,1584,1589,1596],"usedEvents":[]}],"src":"113:6427:8"},"id":8},"@openzeppelin/contracts/token/ERC721/ERC721.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/token/ERC721/ERC721.sol","exportedSymbols":{"Context":[3907],"ERC165":[5838],"ERC721":[2569],"ERC721Utils":[2809],"IERC165":[5850],"IERC721":[2686],"IERC721Errors":[1550],"IERC721Metadata":[2732],"Strings":[5814]},"id":2570,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":1599,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"107:24:9"},{"absolutePath":"@openzeppelin/contracts/token/ERC721/IERC721.sol","file":"./IERC721.sol","id":1601,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2570,"sourceUnit":2687,"src":"133:38:9","symbolAliases":[{"foreign":{"id":1600,"name":"IERC721","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2686,"src":"141:7:9","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol","file":"./extensions/IERC721Metadata.sol","id":1603,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2570,"sourceUnit":2733,"src":"172:65:9","symbolAliases":[{"foreign":{"id":1602,"name":"IERC721Metadata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2732,"src":"180:15:9","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC721/utils/ERC721Utils.sol","file":"./utils/ERC721Utils.sol","id":1605,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2570,"sourceUnit":2810,"src":"238:52:9","symbolAliases":[{"foreign":{"id":1604,"name":"ERC721Utils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2809,"src":"246:11:9","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/Context.sol","file":"../../utils/Context.sol","id":1607,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2570,"sourceUnit":3908,"src":"291:48:9","symbolAliases":[{"foreign":{"id":1606,"name":"Context","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3907,"src":"299:7:9","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/Strings.sol","file":"../../utils/Strings.sol","id":1609,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2570,"sourceUnit":5815,"src":"340:48:9","symbolAliases":[{"foreign":{"id":1608,"name":"Strings","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5814,"src":"348:7:9","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/introspection/ERC165.sol","file":"../../utils/introspection/ERC165.sol","id":1612,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2570,"sourceUnit":5839,"src":"389:69:9","symbolAliases":[{"foreign":{"id":1610,"name":"IERC165","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5850,"src":"397:7:9","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":1611,"name":"ERC165","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5838,"src":"406:6:9","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/interfaces/draft-IERC6093.sol","file":"../../interfaces/draft-IERC6093.sol","id":1614,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2570,"sourceUnit":1598,"src":"459:66:9","symbolAliases":[{"foreign":{"id":1613,"name":"IERC721Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1550,"src":"467:13:9","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":1616,"name":"Context","nameLocations":["803:7:9"],"nodeType":"IdentifierPath","referencedDeclaration":3907,"src":"803:7:9"},"id":1617,"nodeType":"InheritanceSpecifier","src":"803:7:9"},{"baseName":{"id":1618,"name":"ERC165","nameLocations":["812:6:9"],"nodeType":"IdentifierPath","referencedDeclaration":5838,"src":"812:6:9"},"id":1619,"nodeType":"InheritanceSpecifier","src":"812:6:9"},{"baseName":{"id":1620,"name":"IERC721","nameLocations":["820:7:9"],"nodeType":"IdentifierPath","referencedDeclaration":2686,"src":"820:7:9"},"id":1621,"nodeType":"InheritanceSpecifier","src":"820:7:9"},{"baseName":{"id":1622,"name":"IERC721Metadata","nameLocations":["829:15:9"],"nodeType":"IdentifierPath","referencedDeclaration":2732,"src":"829:15:9"},"id":1623,"nodeType":"InheritanceSpecifier","src":"829:15:9"},{"baseName":{"id":1624,"name":"IERC721Errors","nameLocations":["846:13:9"],"nodeType":"IdentifierPath","referencedDeclaration":1550,"src":"846:13:9"},"id":1625,"nodeType":"InheritanceSpecifier","src":"846:13:9"}],"canonicalName":"ERC721","contractDependencies":[],"contractKind":"contract","documentation":{"id":1615,"nodeType":"StructuredDocumentation","src":"527:247:9","text":" @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC-721] Non-Fungible Token Standard, including\n the Metadata extension, but not including the Enumerable extension, which is available separately as\n {ERC721Enumerable}."},"fullyImplemented":true,"id":2569,"linearizedBaseContracts":[2569,1550,2732,2686,5838,5850,3907],"name":"ERC721","nameLocation":"793:6:9","nodeType":"ContractDefinition","nodes":[{"global":false,"id":1628,"libraryName":{"id":1626,"name":"Strings","nameLocations":["872:7:9"],"nodeType":"IdentifierPath","referencedDeclaration":5814,"src":"872:7:9"},"nodeType":"UsingForDirective","src":"866:26:9","typeName":{"id":1627,"name":"uint256","nodeType":"ElementaryTypeName","src":"884:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"constant":false,"id":1630,"mutability":"mutable","name":"_name","nameLocation":"931:5:9","nodeType":"VariableDeclaration","scope":2569,"src":"916:20:9","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":1629,"name":"string","nodeType":"ElementaryTypeName","src":"916:6:9","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"private"},{"constant":false,"id":1632,"mutability":"mutable","name":"_symbol","nameLocation":"978:7:9","nodeType":"VariableDeclaration","scope":2569,"src":"963:22:9","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":1631,"name":"string","nodeType":"ElementaryTypeName","src":"963:6:9","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"private"},{"constant":false,"id":1636,"mutability":"mutable","name":"_owners","nameLocation":"1036:7:9","nodeType":"VariableDeclaration","scope":2569,"src":"992:51:9","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"typeName":{"id":1635,"keyName":"tokenId","keyNameLocation":"1008:7:9","keyType":{"id":1633,"name":"uint256","nodeType":"ElementaryTypeName","src":"1000:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"992:35:9","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":1634,"name":"address","nodeType":"ElementaryTypeName","src":"1019:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"private"},{"constant":false,"id":1640,"mutability":"mutable","name":"_balances","nameLocation":"1092:9:9","nodeType":"VariableDeclaration","scope":2569,"src":"1050:51:9","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":1639,"keyName":"owner","keyNameLocation":"1066:5:9","keyType":{"id":1637,"name":"address","nodeType":"ElementaryTypeName","src":"1058:7:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1050:33:9","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":1638,"name":"uint256","nodeType":"ElementaryTypeName","src":"1075:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"private"},{"constant":false,"id":1644,"mutability":"mutable","name":"_tokenApprovals","nameLocation":"1152:15:9","nodeType":"VariableDeclaration","scope":2569,"src":"1108:59:9","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"typeName":{"id":1643,"keyName":"tokenId","keyNameLocation":"1124:7:9","keyType":{"id":1641,"name":"uint256","nodeType":"ElementaryTypeName","src":"1116:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"1108:35:9","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":1642,"name":"address","nodeType":"ElementaryTypeName","src":"1135:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"private"},{"constant":false,"id":1650,"mutability":"mutable","name":"_operatorApprovals","nameLocation":"1242:18:9","nodeType":"VariableDeclaration","scope":2569,"src":"1174:86:9","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$","typeString":"mapping(address => mapping(address => bool))"},"typeName":{"id":1649,"keyName":"owner","keyNameLocation":"1190:5:9","keyType":{"id":1645,"name":"address","nodeType":"ElementaryTypeName","src":"1182:7:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1174:59:9","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$","typeString":"mapping(address => mapping(address => bool))"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":1648,"keyName":"operator","keyNameLocation":"1215:8:9","keyType":{"id":1646,"name":"address","nodeType":"ElementaryTypeName","src":"1207:7:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1199:33:9","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":1647,"name":"bool","nodeType":"ElementaryTypeName","src":"1227:4:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}}},"visibility":"private"},{"body":{"id":1666,"nodeType":"Block","src":"1436:57:9","statements":[{"expression":{"id":1660,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1658,"name":"_name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1630,"src":"1446:5:9","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":1659,"name":"name_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1653,"src":"1454:5:9","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"1446:13:9","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":1661,"nodeType":"ExpressionStatement","src":"1446:13:9"},{"expression":{"id":1664,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1662,"name":"_symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1632,"src":"1469:7:9","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":1663,"name":"symbol_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1655,"src":"1479:7:9","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"1469:17:9","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":1665,"nodeType":"ExpressionStatement","src":"1469:17:9"}]},"documentation":{"id":1651,"nodeType":"StructuredDocumentation","src":"1267:108:9","text":" @dev Initializes the contract by setting a `name` and a `symbol` to the token collection."},"id":1667,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":1656,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1653,"mutability":"mutable","name":"name_","nameLocation":"1406:5:9","nodeType":"VariableDeclaration","scope":1667,"src":"1392:19:9","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":1652,"name":"string","nodeType":"ElementaryTypeName","src":"1392:6:9","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":1655,"mutability":"mutable","name":"symbol_","nameLocation":"1427:7:9","nodeType":"VariableDeclaration","scope":1667,"src":"1413:21:9","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":1654,"name":"string","nodeType":"ElementaryTypeName","src":"1413:6:9","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1391:44:9"},"returnParameters":{"id":1657,"nodeType":"ParameterList","parameters":[],"src":"1436:0:9"},"scope":2569,"src":"1380:113:9","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[5837,5849],"body":{"id":1697,"nodeType":"Block","src":"1635:192:9","statements":[{"expression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":1695,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":1690,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":1683,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1678,"name":"interfaceId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1670,"src":"1664:11:9","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"arguments":[{"id":1680,"name":"IERC721","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2686,"src":"1684:7:9","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC721_$2686_$","typeString":"type(contract IERC721)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_contract$_IERC721_$2686_$","typeString":"type(contract IERC721)"}],"id":1679,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967269,"src":"1679:4:9","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":1681,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1679:13:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_contract$_IERC721_$2686","typeString":"type(contract IERC721)"}},"id":1682,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1693:11:9","memberName":"interfaceId","nodeType":"MemberAccess","src":"1679:25:9","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"1664:40:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":1689,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1684,"name":"interfaceId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1670,"src":"1720:11:9","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"arguments":[{"id":1686,"name":"IERC721Metadata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2732,"src":"1740:15:9","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC721Metadata_$2732_$","typeString":"type(contract IERC721Metadata)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_contract$_IERC721Metadata_$2732_$","typeString":"type(contract IERC721Metadata)"}],"id":1685,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967269,"src":"1735:4:9","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":1687,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1735:21:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_contract$_IERC721Metadata_$2732","typeString":"type(contract IERC721Metadata)"}},"id":1688,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1757:11:9","memberName":"interfaceId","nodeType":"MemberAccess","src":"1735:33:9","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"1720:48:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"1664:104:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"arguments":[{"id":1693,"name":"interfaceId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1670,"src":"1808:11:9","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"expression":{"id":1691,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967271,"src":"1784:5:9","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_ERC721_$2569_$","typeString":"type(contract super ERC721)"}},"id":1692,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1790:17:9","memberName":"supportsInterface","nodeType":"MemberAccess","referencedDeclaration":5837,"src":"1784:23:9","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes4_$returns$_t_bool_$","typeString":"function (bytes4) view returns (bool)"}},"id":1694,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1784:36:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"1664:156:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":1677,"id":1696,"nodeType":"Return","src":"1645:175:9"}]},"documentation":{"id":1668,"nodeType":"StructuredDocumentation","src":"1499:23:9","text":"@inheritdoc IERC165"},"functionSelector":"01ffc9a7","id":1698,"implemented":true,"kind":"function","modifiers":[],"name":"supportsInterface","nameLocation":"1536:17:9","nodeType":"FunctionDefinition","overrides":{"id":1674,"nodeType":"OverrideSpecifier","overrides":[{"id":1672,"name":"ERC165","nameLocations":["1603:6:9"],"nodeType":"IdentifierPath","referencedDeclaration":5838,"src":"1603:6:9"},{"id":1673,"name":"IERC165","nameLocations":["1611:7:9"],"nodeType":"IdentifierPath","referencedDeclaration":5850,"src":"1611:7:9"}],"src":"1594:25:9"},"parameters":{"id":1671,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1670,"mutability":"mutable","name":"interfaceId","nameLocation":"1561:11:9","nodeType":"VariableDeclaration","scope":1698,"src":"1554:18:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":1669,"name":"bytes4","nodeType":"ElementaryTypeName","src":"1554:6:9","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"1553:20:9"},"returnParameters":{"id":1677,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1676,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1698,"src":"1629:4:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1675,"name":"bool","nodeType":"ElementaryTypeName","src":"1629:4:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1628:6:9"},"scope":2569,"src":"1527:300:9","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[2611],"body":{"id":1725,"nodeType":"Block","src":"1933:136:9","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1711,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1706,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1701,"src":"1947:5:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":1709,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1964:1:9","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":1708,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1956:7:9","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1707,"name":"address","nodeType":"ElementaryTypeName","src":"1956:7:9","typeDescriptions":{}}},"id":1710,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1956:10:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1947:19:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1720,"nodeType":"IfStatement","src":"1943:87:9","trueBody":{"id":1719,"nodeType":"Block","src":"1968:62:9","statements":[{"errorCall":{"arguments":[{"arguments":[{"hexValue":"30","id":1715,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2016:1:9","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":1714,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2008:7:9","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1713,"name":"address","nodeType":"ElementaryTypeName","src":"2008:7:9","typeDescriptions":{}}},"id":1716,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2008:10:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1712,"name":"ERC721InvalidOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1508,"src":"1989:18:9","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":1717,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1989:30:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":1718,"nodeType":"RevertStatement","src":"1982:37:9"}]}},{"expression":{"baseExpression":{"id":1721,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1640,"src":"2046:9:9","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":1723,"indexExpression":{"id":1722,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1701,"src":"2056:5:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2046:16:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":1705,"id":1724,"nodeType":"Return","src":"2039:23:9"}]},"documentation":{"id":1699,"nodeType":"StructuredDocumentation","src":"1833:23:9","text":"@inheritdoc IERC721"},"functionSelector":"70a08231","id":1726,"implemented":true,"kind":"function","modifiers":[],"name":"balanceOf","nameLocation":"1870:9:9","nodeType":"FunctionDefinition","parameters":{"id":1702,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1701,"mutability":"mutable","name":"owner","nameLocation":"1888:5:9","nodeType":"VariableDeclaration","scope":1726,"src":"1880:13:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1700,"name":"address","nodeType":"ElementaryTypeName","src":"1880:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1879:15:9"},"returnParameters":{"id":1705,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1704,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1726,"src":"1924:7:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1703,"name":"uint256","nodeType":"ElementaryTypeName","src":"1924:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1923:9:9"},"scope":2569,"src":"1861:208:9","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[2619],"body":{"id":1738,"nodeType":"Block","src":"2175:46:9","statements":[{"expression":{"arguments":[{"id":1735,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1729,"src":"2206:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1734,"name":"_requireOwned","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2568,"src":"2192:13:9","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_address_$","typeString":"function (uint256) view returns (address)"}},"id":1736,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2192:22:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":1733,"id":1737,"nodeType":"Return","src":"2185:29:9"}]},"documentation":{"id":1727,"nodeType":"StructuredDocumentation","src":"2075:23:9","text":"@inheritdoc IERC721"},"functionSelector":"6352211e","id":1739,"implemented":true,"kind":"function","modifiers":[],"name":"ownerOf","nameLocation":"2112:7:9","nodeType":"FunctionDefinition","parameters":{"id":1730,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1729,"mutability":"mutable","name":"tokenId","nameLocation":"2128:7:9","nodeType":"VariableDeclaration","scope":1739,"src":"2120:15:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1728,"name":"uint256","nodeType":"ElementaryTypeName","src":"2120:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2119:17:9"},"returnParameters":{"id":1733,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1732,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1739,"src":"2166:7:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1731,"name":"address","nodeType":"ElementaryTypeName","src":"2166:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2165:9:9"},"scope":2569,"src":"2103:118:9","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[2717],"body":{"id":1747,"nodeType":"Block","src":"2323:29:9","statements":[{"expression":{"id":1745,"name":"_name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1630,"src":"2340:5:9","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"functionReturnParameters":1744,"id":1746,"nodeType":"Return","src":"2333:12:9"}]},"documentation":{"id":1740,"nodeType":"StructuredDocumentation","src":"2227:31:9","text":"@inheritdoc IERC721Metadata"},"functionSelector":"06fdde03","id":1748,"implemented":true,"kind":"function","modifiers":[],"name":"name","nameLocation":"2272:4:9","nodeType":"FunctionDefinition","parameters":{"id":1741,"nodeType":"ParameterList","parameters":[],"src":"2276:2:9"},"returnParameters":{"id":1744,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1743,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1748,"src":"2308:13:9","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":1742,"name":"string","nodeType":"ElementaryTypeName","src":"2308:6:9","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2307:15:9"},"scope":2569,"src":"2263:89:9","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[2723],"body":{"id":1756,"nodeType":"Block","src":"2456:31:9","statements":[{"expression":{"id":1754,"name":"_symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1632,"src":"2473:7:9","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"functionReturnParameters":1753,"id":1755,"nodeType":"Return","src":"2466:14:9"}]},"documentation":{"id":1749,"nodeType":"StructuredDocumentation","src":"2358:31:9","text":"@inheritdoc IERC721Metadata"},"functionSelector":"95d89b41","id":1757,"implemented":true,"kind":"function","modifiers":[],"name":"symbol","nameLocation":"2403:6:9","nodeType":"FunctionDefinition","parameters":{"id":1750,"nodeType":"ParameterList","parameters":[],"src":"2409:2:9"},"returnParameters":{"id":1753,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1752,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1757,"src":"2441:13:9","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":1751,"name":"string","nodeType":"ElementaryTypeName","src":"2441:6:9","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2440:15:9"},"scope":2569,"src":"2394:93:9","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[2731],"body":{"id":1792,"nodeType":"Block","src":"2608:176:9","statements":[{"expression":{"arguments":[{"id":1766,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1760,"src":"2632:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1765,"name":"_requireOwned","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2568,"src":"2618:13:9","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_address_$","typeString":"function (uint256) view returns (address)"}},"id":1767,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2618:22:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1768,"nodeType":"ExpressionStatement","src":"2618:22:9"},{"assignments":[1770],"declarations":[{"constant":false,"id":1770,"mutability":"mutable","name":"baseURI","nameLocation":"2665:7:9","nodeType":"VariableDeclaration","scope":1792,"src":"2651:21:9","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":1769,"name":"string","nodeType":"ElementaryTypeName","src":"2651:6:9","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"id":1773,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":1771,"name":"_baseURI","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1802,"src":"2675:8:9","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_string_memory_ptr_$","typeString":"function () view returns (string memory)"}},"id":1772,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2675:10:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"nodeType":"VariableDeclarationStatement","src":"2651:34:9"},{"expression":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1780,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":1776,"name":"baseURI","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1770,"src":"2708:7:9","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":1775,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2702:5:9","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":1774,"name":"bytes","nodeType":"ElementaryTypeName","src":"2702:5:9","typeDescriptions":{}}},"id":1777,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2702:14:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":1778,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2717:6:9","memberName":"length","nodeType":"MemberAccess","src":"2702:21:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":1779,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2726:1:9","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2702:25:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"hexValue":"","id":1789,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2775:2:9","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""},"id":1790,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"2702:75:9","trueExpression":{"arguments":[{"id":1784,"name":"baseURI","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1770,"src":"2744:7:9","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":1785,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1760,"src":"2753:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1786,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2761:8:9","memberName":"toString","nodeType":"MemberAccess","referencedDeclaration":4397,"src":"2753:16:9","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_string_memory_ptr_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (string memory)"}},"id":1787,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2753:18:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"expression":{"id":1782,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2730:6:9","typeDescriptions":{"typeIdentifier":"t_type$_t_string_storage_ptr_$","typeString":"type(string storage pointer)"},"typeName":{"id":1781,"name":"string","nodeType":"ElementaryTypeName","src":"2730:6:9","typeDescriptions":{}}},"id":1783,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2737:6:9","memberName":"concat","nodeType":"MemberAccess","src":"2730:13:9","typeDescriptions":{"typeIdentifier":"t_function_stringconcat_pure$__$returns$_t_string_memory_ptr_$","typeString":"function () pure returns (string memory)"}},"id":1788,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2730:42:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"functionReturnParameters":1764,"id":1791,"nodeType":"Return","src":"2695:82:9"}]},"documentation":{"id":1758,"nodeType":"StructuredDocumentation","src":"2493:31:9","text":"@inheritdoc IERC721Metadata"},"functionSelector":"c87b56dd","id":1793,"implemented":true,"kind":"function","modifiers":[],"name":"tokenURI","nameLocation":"2538:8:9","nodeType":"FunctionDefinition","parameters":{"id":1761,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1760,"mutability":"mutable","name":"tokenId","nameLocation":"2555:7:9","nodeType":"VariableDeclaration","scope":1793,"src":"2547:15:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1759,"name":"uint256","nodeType":"ElementaryTypeName","src":"2547:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2546:17:9"},"returnParameters":{"id":1764,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1763,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1793,"src":"2593:13:9","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":1762,"name":"string","nodeType":"ElementaryTypeName","src":"2593:6:9","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2592:15:9"},"scope":2569,"src":"2529:255:9","stateMutability":"view","virtual":true,"visibility":"public"},{"body":{"id":1801,"nodeType":"Block","src":"3092:26:9","statements":[{"expression":{"hexValue":"","id":1799,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3109:2:9","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""},"functionReturnParameters":1798,"id":1800,"nodeType":"Return","src":"3102:9:9"}]},"documentation":{"id":1794,"nodeType":"StructuredDocumentation","src":"2790:231:9","text":" @dev Base URI for computing {tokenURI}. If set, the resulting URI for each\n token will be the concatenation of the `baseURI` and the `tokenId`. Empty\n by default, can be overridden in child contracts."},"id":1802,"implemented":true,"kind":"function","modifiers":[],"name":"_baseURI","nameLocation":"3035:8:9","nodeType":"FunctionDefinition","parameters":{"id":1795,"nodeType":"ParameterList","parameters":[],"src":"3043:2:9"},"returnParameters":{"id":1798,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1797,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1802,"src":"3077:13:9","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":1796,"name":"string","nodeType":"ElementaryTypeName","src":"3077:6:9","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3076:15:9"},"scope":2569,"src":"3026:92:9","stateMutability":"view","virtual":true,"visibility":"internal"},{"baseFunctions":[2659],"body":{"id":1817,"nodeType":"Block","src":"3213:52:9","statements":[{"expression":{"arguments":[{"id":1811,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1805,"src":"3232:2:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1812,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1807,"src":"3236:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[],"expression":{"argumentTypes":[],"id":1813,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3889,"src":"3245:10:9","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":1814,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3245:12:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":1810,"name":"_approve","nodeType":"Identifier","overloadedDeclarations":[2421,2487],"referencedDeclaration":2421,"src":"3223:8:9","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$returns$__$","typeString":"function (address,uint256,address)"}},"id":1815,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3223:35:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1816,"nodeType":"ExpressionStatement","src":"3223:35:9"}]},"documentation":{"id":1803,"nodeType":"StructuredDocumentation","src":"3124:23:9","text":"@inheritdoc IERC721"},"functionSelector":"095ea7b3","id":1818,"implemented":true,"kind":"function","modifiers":[],"name":"approve","nameLocation":"3161:7:9","nodeType":"FunctionDefinition","parameters":{"id":1808,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1805,"mutability":"mutable","name":"to","nameLocation":"3177:2:9","nodeType":"VariableDeclaration","scope":1818,"src":"3169:10:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1804,"name":"address","nodeType":"ElementaryTypeName","src":"3169:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1807,"mutability":"mutable","name":"tokenId","nameLocation":"3189:7:9","nodeType":"VariableDeclaration","scope":1818,"src":"3181:15:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1806,"name":"uint256","nodeType":"ElementaryTypeName","src":"3181:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3168:29:9"},"returnParameters":{"id":1809,"nodeType":"ParameterList","parameters":[],"src":"3213:0:9"},"scope":2569,"src":"3152:113:9","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[2675],"body":{"id":1834,"nodeType":"Block","src":"3375:78:9","statements":[{"expression":{"arguments":[{"id":1827,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1821,"src":"3399:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1826,"name":"_requireOwned","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2568,"src":"3385:13:9","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_address_$","typeString":"function (uint256) view returns (address)"}},"id":1828,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3385:22:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1829,"nodeType":"ExpressionStatement","src":"3385:22:9"},{"expression":{"arguments":[{"id":1831,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1821,"src":"3438:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1830,"name":"_getApproved","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1988,"src":"3425:12:9","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_address_$","typeString":"function (uint256) view returns (address)"}},"id":1832,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3425:21:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":1825,"id":1833,"nodeType":"Return","src":"3418:28:9"}]},"documentation":{"id":1819,"nodeType":"StructuredDocumentation","src":"3271:23:9","text":"@inheritdoc IERC721"},"functionSelector":"081812fc","id":1835,"implemented":true,"kind":"function","modifiers":[],"name":"getApproved","nameLocation":"3308:11:9","nodeType":"FunctionDefinition","parameters":{"id":1822,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1821,"mutability":"mutable","name":"tokenId","nameLocation":"3328:7:9","nodeType":"VariableDeclaration","scope":1835,"src":"3320:15:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1820,"name":"uint256","nodeType":"ElementaryTypeName","src":"3320:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3319:17:9"},"returnParameters":{"id":1825,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1824,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1835,"src":"3366:7:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1823,"name":"address","nodeType":"ElementaryTypeName","src":"3366:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3365:9:9"},"scope":2569,"src":"3299:154:9","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[2667],"body":{"id":1850,"nodeType":"Block","src":"3562:69:9","statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":1844,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3889,"src":"3591:10:9","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":1845,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3591:12:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1846,"name":"operator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1838,"src":"3605:8:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1847,"name":"approved","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1840,"src":"3615:8:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":1843,"name":"_setApprovalForAll","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2539,"src":"3572:18:9","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_bool_$returns$__$","typeString":"function (address,address,bool)"}},"id":1848,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3572:52:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1849,"nodeType":"ExpressionStatement","src":"3572:52:9"}]},"documentation":{"id":1836,"nodeType":"StructuredDocumentation","src":"3459:23:9","text":"@inheritdoc IERC721"},"functionSelector":"a22cb465","id":1851,"implemented":true,"kind":"function","modifiers":[],"name":"setApprovalForAll","nameLocation":"3496:17:9","nodeType":"FunctionDefinition","parameters":{"id":1841,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1838,"mutability":"mutable","name":"operator","nameLocation":"3522:8:9","nodeType":"VariableDeclaration","scope":1851,"src":"3514:16:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1837,"name":"address","nodeType":"ElementaryTypeName","src":"3514:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1840,"mutability":"mutable","name":"approved","nameLocation":"3537:8:9","nodeType":"VariableDeclaration","scope":1851,"src":"3532:13:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1839,"name":"bool","nodeType":"ElementaryTypeName","src":"3532:4:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3513:33:9"},"returnParameters":{"id":1842,"nodeType":"ParameterList","parameters":[],"src":"3562:0:9"},"scope":2569,"src":"3487:144:9","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[2685],"body":{"id":1867,"nodeType":"Block","src":"3759:59:9","statements":[{"expression":{"baseExpression":{"baseExpression":{"id":1861,"name":"_operatorApprovals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1650,"src":"3776:18:9","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$","typeString":"mapping(address => mapping(address => bool))"}},"id":1863,"indexExpression":{"id":1862,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1854,"src":"3795:5:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3776:25:9","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":1865,"indexExpression":{"id":1864,"name":"operator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1856,"src":"3802:8:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3776:35:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":1860,"id":1866,"nodeType":"Return","src":"3769:42:9"}]},"documentation":{"id":1852,"nodeType":"StructuredDocumentation","src":"3637:23:9","text":"@inheritdoc IERC721"},"functionSelector":"e985e9c5","id":1868,"implemented":true,"kind":"function","modifiers":[],"name":"isApprovedForAll","nameLocation":"3674:16:9","nodeType":"FunctionDefinition","parameters":{"id":1857,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1854,"mutability":"mutable","name":"owner","nameLocation":"3699:5:9","nodeType":"VariableDeclaration","scope":1868,"src":"3691:13:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1853,"name":"address","nodeType":"ElementaryTypeName","src":"3691:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1856,"mutability":"mutable","name":"operator","nameLocation":"3714:8:9","nodeType":"VariableDeclaration","scope":1868,"src":"3706:16:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1855,"name":"address","nodeType":"ElementaryTypeName","src":"3706:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3690:33:9"},"returnParameters":{"id":1860,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1859,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1868,"src":"3753:4:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1858,"name":"bool","nodeType":"ElementaryTypeName","src":"3753:4:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3752:6:9"},"scope":2569,"src":"3665:153:9","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[2651],"body":{"id":1913,"nodeType":"Block","src":"3932:498:9","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1883,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1878,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1873,"src":"3946:2:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":1881,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3960:1:9","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":1880,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3952:7:9","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1879,"name":"address","nodeType":"ElementaryTypeName","src":"3952:7:9","typeDescriptions":{}}},"id":1882,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3952:10:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3946:16:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1892,"nodeType":"IfStatement","src":"3942:87:9","trueBody":{"id":1891,"nodeType":"Block","src":"3964:65:9","statements":[{"errorCall":{"arguments":[{"arguments":[{"hexValue":"30","id":1887,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4015:1:9","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":1886,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4007:7:9","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1885,"name":"address","nodeType":"ElementaryTypeName","src":"4007:7:9","typeDescriptions":{}}},"id":1888,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4007:10:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1884,"name":"ERC721InvalidReceiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1532,"src":"3985:21:9","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":1889,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3985:33:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":1890,"nodeType":"RevertStatement","src":"3978:40:9"}]}},{"assignments":[1894],"declarations":[{"constant":false,"id":1894,"mutability":"mutable","name":"previousOwner","nameLocation":"4255:13:9","nodeType":"VariableDeclaration","scope":1913,"src":"4247:21:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1893,"name":"address","nodeType":"ElementaryTypeName","src":"4247:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":1901,"initialValue":{"arguments":[{"id":1896,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1873,"src":"4279:2:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1897,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1875,"src":"4283:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[],"expression":{"argumentTypes":[],"id":1898,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3889,"src":"4292:10:9","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":1899,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4292:12:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":1895,"name":"_update","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2167,"src":"4271:7:9","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$returns$_t_address_$","typeString":"function (address,uint256,address) returns (address)"}},"id":1900,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4271:34:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"4247:58:9"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1904,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1902,"name":"previousOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1894,"src":"4319:13:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":1903,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1871,"src":"4336:4:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4319:21:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1912,"nodeType":"IfStatement","src":"4315:109:9","trueBody":{"id":1911,"nodeType":"Block","src":"4342:82:9","statements":[{"errorCall":{"arguments":[{"id":1906,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1871,"src":"4384:4:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1907,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1875,"src":"4390:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1908,"name":"previousOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1894,"src":"4399:13:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":1905,"name":"ERC721IncorrectOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1522,"src":"4363:20:9","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_uint256_$_t_address_$returns$_t_error_$","typeString":"function (address,uint256,address) pure returns (error)"}},"id":1909,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4363:50:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":1910,"nodeType":"RevertStatement","src":"4356:57:9"}]}}]},"documentation":{"id":1869,"nodeType":"StructuredDocumentation","src":"3824:23:9","text":"@inheritdoc IERC721"},"functionSelector":"23b872dd","id":1914,"implemented":true,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"3861:12:9","nodeType":"FunctionDefinition","parameters":{"id":1876,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1871,"mutability":"mutable","name":"from","nameLocation":"3882:4:9","nodeType":"VariableDeclaration","scope":1914,"src":"3874:12:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1870,"name":"address","nodeType":"ElementaryTypeName","src":"3874:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1873,"mutability":"mutable","name":"to","nameLocation":"3896:2:9","nodeType":"VariableDeclaration","scope":1914,"src":"3888:10:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1872,"name":"address","nodeType":"ElementaryTypeName","src":"3888:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1875,"mutability":"mutable","name":"tokenId","nameLocation":"3908:7:9","nodeType":"VariableDeclaration","scope":1914,"src":"3900:15:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1874,"name":"uint256","nodeType":"ElementaryTypeName","src":"3900:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3873:43:9"},"returnParameters":{"id":1877,"nodeType":"ParameterList","parameters":[],"src":"3932:0:9"},"scope":2569,"src":"3852:578:9","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[2641],"body":{"id":1931,"nodeType":"Block","src":"4540:56:9","statements":[{"expression":{"arguments":[{"id":1925,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1917,"src":"4567:4:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1926,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1919,"src":"4573:2:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1927,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1921,"src":"4577:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"","id":1928,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4586:2:9","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"id":1924,"name":"safeTransferFrom","nodeType":"Identifier","overloadedDeclarations":[1932,1962],"referencedDeclaration":1962,"src":"4550:16:9","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,address,uint256,bytes memory)"}},"id":1929,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4550:39:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1930,"nodeType":"ExpressionStatement","src":"4550:39:9"}]},"documentation":{"id":1915,"nodeType":"StructuredDocumentation","src":"4436:23:9","text":"@inheritdoc IERC721"},"functionSelector":"42842e0e","id":1932,"implemented":true,"kind":"function","modifiers":[],"name":"safeTransferFrom","nameLocation":"4473:16:9","nodeType":"FunctionDefinition","parameters":{"id":1922,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1917,"mutability":"mutable","name":"from","nameLocation":"4498:4:9","nodeType":"VariableDeclaration","scope":1932,"src":"4490:12:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1916,"name":"address","nodeType":"ElementaryTypeName","src":"4490:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1919,"mutability":"mutable","name":"to","nameLocation":"4512:2:9","nodeType":"VariableDeclaration","scope":1932,"src":"4504:10:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1918,"name":"address","nodeType":"ElementaryTypeName","src":"4504:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1921,"mutability":"mutable","name":"tokenId","nameLocation":"4524:7:9","nodeType":"VariableDeclaration","scope":1932,"src":"4516:15:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1920,"name":"uint256","nodeType":"ElementaryTypeName","src":"4516:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4489:43:9"},"returnParameters":{"id":1923,"nodeType":"ParameterList","parameters":[],"src":"4540:0:9"},"scope":2569,"src":"4464:132:9","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[2631],"body":{"id":1961,"nodeType":"Block","src":"4733:130:9","statements":[{"expression":{"arguments":[{"id":1945,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1935,"src":"4756:4:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1946,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1937,"src":"4762:2:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1947,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1939,"src":"4766:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1944,"name":"transferFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1914,"src":"4743:12:9","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":1948,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4743:31:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1949,"nodeType":"ExpressionStatement","src":"4743:31:9"},{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":1953,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3889,"src":"4818:10:9","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":1954,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4818:12:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1955,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1935,"src":"4832:4:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1956,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1937,"src":"4838:2:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1957,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1939,"src":"4842:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1958,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1941,"src":"4851:4:9","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":1950,"name":"ERC721Utils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2809,"src":"4784:11:9","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ERC721Utils_$2809_$","typeString":"type(library ERC721Utils)"}},"id":1952,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4796:21:9","memberName":"checkOnERC721Received","nodeType":"MemberAccess","referencedDeclaration":2808,"src":"4784:33:9","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,address,address,uint256,bytes memory)"}},"id":1959,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4784:72:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1960,"nodeType":"ExpressionStatement","src":"4784:72:9"}]},"documentation":{"id":1933,"nodeType":"StructuredDocumentation","src":"4602:23:9","text":"@inheritdoc IERC721"},"functionSelector":"b88d4fde","id":1962,"implemented":true,"kind":"function","modifiers":[],"name":"safeTransferFrom","nameLocation":"4639:16:9","nodeType":"FunctionDefinition","parameters":{"id":1942,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1935,"mutability":"mutable","name":"from","nameLocation":"4664:4:9","nodeType":"VariableDeclaration","scope":1962,"src":"4656:12:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1934,"name":"address","nodeType":"ElementaryTypeName","src":"4656:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1937,"mutability":"mutable","name":"to","nameLocation":"4678:2:9","nodeType":"VariableDeclaration","scope":1962,"src":"4670:10:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1936,"name":"address","nodeType":"ElementaryTypeName","src":"4670:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1939,"mutability":"mutable","name":"tokenId","nameLocation":"4690:7:9","nodeType":"VariableDeclaration","scope":1962,"src":"4682:15:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1938,"name":"uint256","nodeType":"ElementaryTypeName","src":"4682:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1941,"mutability":"mutable","name":"data","nameLocation":"4712:4:9","nodeType":"VariableDeclaration","scope":1962,"src":"4699:17:9","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1940,"name":"bytes","nodeType":"ElementaryTypeName","src":"4699:5:9","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4655:62:9"},"returnParameters":{"id":1943,"nodeType":"ParameterList","parameters":[],"src":"4733:0:9"},"scope":2569,"src":"4630:233:9","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":1974,"nodeType":"Block","src":"5453:40:9","statements":[{"expression":{"baseExpression":{"id":1970,"name":"_owners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1636,"src":"5470:7:9","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":1972,"indexExpression":{"id":1971,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1965,"src":"5478:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5470:16:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":1969,"id":1973,"nodeType":"Return","src":"5463:23:9"}]},"documentation":{"id":1963,"nodeType":"StructuredDocumentation","src":"4869:504:9","text":" @dev Returns the owner of the `tokenId`. Does NOT revert if token doesn't exist\n IMPORTANT: Any overrides to this function that add ownership of tokens not tracked by the\n core ERC-721 logic MUST be matched with the use of {_increaseBalance} to keep balances\n consistent with ownership. The invariant to preserve is that for any address `a` the value returned by\n `balanceOf(a)` must be equal to the number of tokens such that `_ownerOf(tokenId)` is `a`."},"id":1975,"implemented":true,"kind":"function","modifiers":[],"name":"_ownerOf","nameLocation":"5387:8:9","nodeType":"FunctionDefinition","parameters":{"id":1966,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1965,"mutability":"mutable","name":"tokenId","nameLocation":"5404:7:9","nodeType":"VariableDeclaration","scope":1975,"src":"5396:15:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1964,"name":"uint256","nodeType":"ElementaryTypeName","src":"5396:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5395:17:9"},"returnParameters":{"id":1969,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1968,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1975,"src":"5444:7:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1967,"name":"address","nodeType":"ElementaryTypeName","src":"5444:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5443:9:9"},"scope":2569,"src":"5378:115:9","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":1987,"nodeType":"Block","src":"5688:48:9","statements":[{"expression":{"baseExpression":{"id":1983,"name":"_tokenApprovals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1644,"src":"5705:15:9","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":1985,"indexExpression":{"id":1984,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1978,"src":"5721:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5705:24:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":1982,"id":1986,"nodeType":"Return","src":"5698:31:9"}]},"documentation":{"id":1976,"nodeType":"StructuredDocumentation","src":"5499:105:9","text":" @dev Returns the approved address for `tokenId`. Returns 0 if `tokenId` is not minted."},"id":1988,"implemented":true,"kind":"function","modifiers":[],"name":"_getApproved","nameLocation":"5618:12:9","nodeType":"FunctionDefinition","parameters":{"id":1979,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1978,"mutability":"mutable","name":"tokenId","nameLocation":"5639:7:9","nodeType":"VariableDeclaration","scope":1988,"src":"5631:15:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1977,"name":"uint256","nodeType":"ElementaryTypeName","src":"5631:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5630:17:9"},"returnParameters":{"id":1982,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1981,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1988,"src":"5679:7:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1980,"name":"address","nodeType":"ElementaryTypeName","src":"5679:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5678:9:9"},"scope":2569,"src":"5609:127:9","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":2023,"nodeType":"Block","src":"6156:163:9","statements":[{"expression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":2021,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2005,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2000,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1993,"src":"6185:7:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":2003,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6204:1:9","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":2002,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6196:7:9","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2001,"name":"address","nodeType":"ElementaryTypeName","src":"6196:7:9","typeDescriptions":{}}},"id":2004,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6196:10:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6185:21:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":2019,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":2013,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2008,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2006,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1991,"src":"6223:5:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":2007,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1993,"src":"6232:7:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6223:16:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"arguments":[{"id":2010,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1991,"src":"6260:5:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2011,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1993,"src":"6267:7:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":2009,"name":"isApprovedForAll","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1868,"src":"6243:16:9","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$returns$_t_bool_$","typeString":"function (address,address) view returns (bool)"}},"id":2012,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6243:32:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"6223:52:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2018,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":2015,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1995,"src":"6292:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2014,"name":"_getApproved","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1988,"src":"6279:12:9","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_address_$","typeString":"function (uint256) view returns (address)"}},"id":2016,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6279:21:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":2017,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1993,"src":"6304:7:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6279:32:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"6223:88:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":2020,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6222:90:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"6185:127:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":1999,"id":2022,"nodeType":"Return","src":"6166:146:9"}]},"documentation":{"id":1989,"nodeType":"StructuredDocumentation","src":"5742:300:9","text":" @dev Returns whether `spender` is allowed to manage `owner`'s tokens, or `tokenId` in\n particular (ignoring whether it is owned by `owner`).\n WARNING: This function assumes that `owner` is the actual owner of `tokenId` and does not verify this\n assumption."},"id":2024,"implemented":true,"kind":"function","modifiers":[],"name":"_isAuthorized","nameLocation":"6056:13:9","nodeType":"FunctionDefinition","parameters":{"id":1996,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1991,"mutability":"mutable","name":"owner","nameLocation":"6078:5:9","nodeType":"VariableDeclaration","scope":2024,"src":"6070:13:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1990,"name":"address","nodeType":"ElementaryTypeName","src":"6070:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1993,"mutability":"mutable","name":"spender","nameLocation":"6093:7:9","nodeType":"VariableDeclaration","scope":2024,"src":"6085:15:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1992,"name":"address","nodeType":"ElementaryTypeName","src":"6085:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1995,"mutability":"mutable","name":"tokenId","nameLocation":"6110:7:9","nodeType":"VariableDeclaration","scope":2024,"src":"6102:15:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1994,"name":"uint256","nodeType":"ElementaryTypeName","src":"6102:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6069:49:9"},"returnParameters":{"id":1999,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1998,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2024,"src":"6150:4:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1997,"name":"bool","nodeType":"ElementaryTypeName","src":"6150:4:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6149:6:9"},"scope":2569,"src":"6047:272:9","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":2060,"nodeType":"Block","src":"6848:271:9","statements":[{"condition":{"id":2039,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"6862:39:9","subExpression":{"arguments":[{"id":2035,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2027,"src":"6877:5:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2036,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2029,"src":"6884:7:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2037,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2031,"src":"6893:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2034,"name":"_isAuthorized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2024,"src":"6863:13:9","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) view returns (bool)"}},"id":2038,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6863:38:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2059,"nodeType":"IfStatement","src":"6858:255:9","trueBody":{"id":2058,"nodeType":"Block","src":"6903:210:9","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2045,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2040,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2027,"src":"6921:5:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":2043,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6938:1:9","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":2042,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6930:7:9","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2041,"name":"address","nodeType":"ElementaryTypeName","src":"6930:7:9","typeDescriptions":{}}},"id":2044,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6930:10:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6921:19:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":2056,"nodeType":"Block","src":"7019:84:9","statements":[{"errorCall":{"arguments":[{"id":2052,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2029,"src":"7071:7:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2053,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2031,"src":"7080:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2051,"name":"ERC721InsufficientApproval","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1539,"src":"7044:26:9","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_uint256_$returns$_t_error_$","typeString":"function (address,uint256) pure returns (error)"}},"id":2054,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7044:44:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2055,"nodeType":"RevertStatement","src":"7037:51:9"}]},"id":2057,"nodeType":"IfStatement","src":"6917:186:9","trueBody":{"id":2050,"nodeType":"Block","src":"6942:71:9","statements":[{"errorCall":{"arguments":[{"id":2047,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2031,"src":"6990:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2046,"name":"ERC721NonexistentToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1513,"src":"6967:22:9","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$returns$_t_error_$","typeString":"function (uint256) pure returns (error)"}},"id":2048,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6967:31:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2049,"nodeType":"RevertStatement","src":"6960:38:9"}]}}]}}]},"documentation":{"id":2025,"nodeType":"StructuredDocumentation","src":"6325:421:9","text":" @dev Checks if `spender` can operate on `tokenId`, assuming the provided `owner` is the actual owner.\n Reverts if:\n - `spender` does not have approval from `owner` for `tokenId`.\n - `spender` does not have approval to manage all of `owner`'s assets.\n WARNING: This function assumes that `owner` is the actual owner of `tokenId` and does not verify this\n assumption."},"id":2061,"implemented":true,"kind":"function","modifiers":[],"name":"_checkAuthorized","nameLocation":"6760:16:9","nodeType":"FunctionDefinition","parameters":{"id":2032,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2027,"mutability":"mutable","name":"owner","nameLocation":"6785:5:9","nodeType":"VariableDeclaration","scope":2061,"src":"6777:13:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2026,"name":"address","nodeType":"ElementaryTypeName","src":"6777:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2029,"mutability":"mutable","name":"spender","nameLocation":"6800:7:9","nodeType":"VariableDeclaration","scope":2061,"src":"6792:15:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2028,"name":"address","nodeType":"ElementaryTypeName","src":"6792:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2031,"mutability":"mutable","name":"tokenId","nameLocation":"6817:7:9","nodeType":"VariableDeclaration","scope":2061,"src":"6809:15:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2030,"name":"uint256","nodeType":"ElementaryTypeName","src":"6809:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6776:49:9"},"returnParameters":{"id":2033,"nodeType":"ParameterList","parameters":[],"src":"6848:0:9"},"scope":2569,"src":"6751:368:9","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":2076,"nodeType":"Block","src":"7836:78:9","statements":[{"id":2075,"nodeType":"UncheckedBlock","src":"7846:62:9","statements":[{"expression":{"id":2073,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":2069,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1640,"src":"7870:9:9","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":2071,"indexExpression":{"id":2070,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2064,"src":"7880:7:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7870:18:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":2072,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2066,"src":"7892:5:9","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"7870:27:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2074,"nodeType":"ExpressionStatement","src":"7870:27:9"}]}]},"documentation":{"id":2062,"nodeType":"StructuredDocumentation","src":"7125:631:9","text":" @dev Unsafe write access to the balances, used by extensions that \"mint\" tokens using an {ownerOf} override.\n NOTE: the value is limited to type(uint128).max. This protect against _balance overflow. It is unrealistic that\n a uint256 would ever overflow from increments when these increments are bounded to uint128 values.\n WARNING: Increasing an account's balance using this function tends to be paired with an override of the\n {_ownerOf} function to resolve the ownership of the corresponding tokens so that balances and ownership\n remain consistent with one another."},"id":2077,"implemented":true,"kind":"function","modifiers":[],"name":"_increaseBalance","nameLocation":"7770:16:9","nodeType":"FunctionDefinition","parameters":{"id":2067,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2064,"mutability":"mutable","name":"account","nameLocation":"7795:7:9","nodeType":"VariableDeclaration","scope":2077,"src":"7787:15:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2063,"name":"address","nodeType":"ElementaryTypeName","src":"7787:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2066,"mutability":"mutable","name":"value","nameLocation":"7812:5:9","nodeType":"VariableDeclaration","scope":2077,"src":"7804:13:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":2065,"name":"uint128","nodeType":"ElementaryTypeName","src":"7804:7:9","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"7786:32:9"},"returnParameters":{"id":2068,"nodeType":"ParameterList","parameters":[],"src":"7836:0:9"},"scope":2569,"src":"7761:153:9","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":2166,"nodeType":"Block","src":"8602:700:9","statements":[{"assignments":[2090],"declarations":[{"constant":false,"id":2090,"mutability":"mutable","name":"from","nameLocation":"8620:4:9","nodeType":"VariableDeclaration","scope":2166,"src":"8612:12:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2089,"name":"address","nodeType":"ElementaryTypeName","src":"8612:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":2094,"initialValue":{"arguments":[{"id":2092,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2082,"src":"8636:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2091,"name":"_ownerOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1975,"src":"8627:8:9","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_address_$","typeString":"function (uint256) view returns (address)"}},"id":2093,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8627:17:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"8612:32:9"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2100,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2095,"name":"auth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2084,"src":"8704:4:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":2098,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8720:1:9","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":2097,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8712:7:9","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2096,"name":"address","nodeType":"ElementaryTypeName","src":"8712:7:9","typeDescriptions":{}}},"id":2099,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8712:10:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8704:18:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2108,"nodeType":"IfStatement","src":"8700:86:9","trueBody":{"id":2107,"nodeType":"Block","src":"8724:62:9","statements":[{"expression":{"arguments":[{"id":2102,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2090,"src":"8755:4:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2103,"name":"auth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2084,"src":"8761:4:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2104,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2082,"src":"8767:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2101,"name":"_checkAuthorized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2061,"src":"8738:16:9","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256) view"}},"id":2105,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8738:37:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2106,"nodeType":"ExpressionStatement","src":"8738:37:9"}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2114,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2109,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2090,"src":"8830:4:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":2112,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8846:1:9","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":2111,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8838:7:9","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2110,"name":"address","nodeType":"ElementaryTypeName","src":"8838:7:9","typeDescriptions":{}}},"id":2113,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8838:10:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8830:18:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2136,"nodeType":"IfStatement","src":"8826:256:9","trueBody":{"id":2135,"nodeType":"Block","src":"8850:232:9","statements":[{"expression":{"arguments":[{"arguments":[{"hexValue":"30","id":2118,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8963:1:9","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":2117,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8955:7:9","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2116,"name":"address","nodeType":"ElementaryTypeName","src":"8955:7:9","typeDescriptions":{}}},"id":2119,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8955:10:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2120,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2082,"src":"8967:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"hexValue":"30","id":2123,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8984:1:9","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":2122,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8976:7:9","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2121,"name":"address","nodeType":"ElementaryTypeName","src":"8976:7:9","typeDescriptions":{}}},"id":2124,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8976:10:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"66616c7365","id":2125,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"8988:5:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":2115,"name":"_approve","nodeType":"Identifier","overloadedDeclarations":[2421,2487],"referencedDeclaration":2487,"src":"8946:8:9","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_bool_$returns$__$","typeString":"function (address,uint256,address,bool)"}},"id":2126,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8946:48:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2127,"nodeType":"ExpressionStatement","src":"8946:48:9"},{"id":2134,"nodeType":"UncheckedBlock","src":"9009:63:9","statements":[{"expression":{"id":2132,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":2128,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1640,"src":"9037:9:9","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":2130,"indexExpression":{"id":2129,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2090,"src":"9047:4:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"9037:15:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"hexValue":"31","id":2131,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9056:1:9","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"9037:20:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2133,"nodeType":"ExpressionStatement","src":"9037:20:9"}]}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2142,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2137,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2080,"src":"9096:2:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":2140,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9110:1:9","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":2139,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9102:7:9","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2138,"name":"address","nodeType":"ElementaryTypeName","src":"9102:7:9","typeDescriptions":{}}},"id":2141,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9102:10:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9096:16:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2151,"nodeType":"IfStatement","src":"9092:107:9","trueBody":{"id":2150,"nodeType":"Block","src":"9114:85:9","statements":[{"id":2149,"nodeType":"UncheckedBlock","src":"9128:61:9","statements":[{"expression":{"id":2147,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":2143,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1640,"src":"9156:9:9","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":2145,"indexExpression":{"id":2144,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2080,"src":"9166:2:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"9156:13:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"31","id":2146,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9173:1:9","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"9156:18:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2148,"nodeType":"ExpressionStatement","src":"9156:18:9"}]}]}},{"expression":{"id":2156,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":2152,"name":"_owners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1636,"src":"9209:7:9","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":2154,"indexExpression":{"id":2153,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2082,"src":"9217:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"9209:16:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2155,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2080,"src":"9228:2:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9209:21:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2157,"nodeType":"ExpressionStatement","src":"9209:21:9"},{"eventCall":{"arguments":[{"id":2159,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2090,"src":"9255:4:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2160,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2080,"src":"9261:2:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2161,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2082,"src":"9265:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2158,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2585,"src":"9246:8:9","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":2162,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9246:27:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2163,"nodeType":"EmitStatement","src":"9241:32:9"},{"expression":{"id":2164,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2090,"src":"9291:4:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":2088,"id":2165,"nodeType":"Return","src":"9284:11:9"}]},"documentation":{"id":2078,"nodeType":"StructuredDocumentation","src":"7920:582:9","text":" @dev Transfers `tokenId` from its current owner to `to`, or alternatively mints (or burns) if the current owner\n (or `to`) is the zero address. Returns the owner of the `tokenId` before the update.\n The `auth` argument is optional. If the value passed is non 0, then this function will check that\n `auth` is either the owner of the token, or approved to operate on the token (by the owner).\n Emits a {Transfer} event.\n NOTE: If overriding this function in a way that tracks balances, see also {_increaseBalance}."},"id":2167,"implemented":true,"kind":"function","modifiers":[],"name":"_update","nameLocation":"8516:7:9","nodeType":"FunctionDefinition","parameters":{"id":2085,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2080,"mutability":"mutable","name":"to","nameLocation":"8532:2:9","nodeType":"VariableDeclaration","scope":2167,"src":"8524:10:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2079,"name":"address","nodeType":"ElementaryTypeName","src":"8524:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2082,"mutability":"mutable","name":"tokenId","nameLocation":"8544:7:9","nodeType":"VariableDeclaration","scope":2167,"src":"8536:15:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2081,"name":"uint256","nodeType":"ElementaryTypeName","src":"8536:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2084,"mutability":"mutable","name":"auth","nameLocation":"8561:4:9","nodeType":"VariableDeclaration","scope":2167,"src":"8553:12:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2083,"name":"address","nodeType":"ElementaryTypeName","src":"8553:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8523:43:9"},"returnParameters":{"id":2088,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2087,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2167,"src":"8593:7:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2086,"name":"address","nodeType":"ElementaryTypeName","src":"8593:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8592:9:9"},"scope":2569,"src":"8507:795:9","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":2216,"nodeType":"Block","src":"9677:274:9","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2180,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2175,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2170,"src":"9691:2:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":2178,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9705:1:9","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":2177,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9697:7:9","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2176,"name":"address","nodeType":"ElementaryTypeName","src":"9697:7:9","typeDescriptions":{}}},"id":2179,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9697:10:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9691:16:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2189,"nodeType":"IfStatement","src":"9687:87:9","trueBody":{"id":2188,"nodeType":"Block","src":"9709:65:9","statements":[{"errorCall":{"arguments":[{"arguments":[{"hexValue":"30","id":2184,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9760:1:9","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":2183,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9752:7:9","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2182,"name":"address","nodeType":"ElementaryTypeName","src":"9752:7:9","typeDescriptions":{}}},"id":2185,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9752:10:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2181,"name":"ERC721InvalidReceiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1532,"src":"9730:21:9","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":2186,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9730:33:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2187,"nodeType":"RevertStatement","src":"9723:40:9"}]}},{"assignments":[2191],"declarations":[{"constant":false,"id":2191,"mutability":"mutable","name":"previousOwner","nameLocation":"9791:13:9","nodeType":"VariableDeclaration","scope":2216,"src":"9783:21:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2190,"name":"address","nodeType":"ElementaryTypeName","src":"9783:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":2200,"initialValue":{"arguments":[{"id":2193,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2170,"src":"9815:2:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2194,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2172,"src":"9819:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"hexValue":"30","id":2197,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9836:1:9","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":2196,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9828:7:9","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2195,"name":"address","nodeType":"ElementaryTypeName","src":"9828:7:9","typeDescriptions":{}}},"id":2198,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9828:10:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":2192,"name":"_update","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2167,"src":"9807:7:9","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$returns$_t_address_$","typeString":"function (address,uint256,address) returns (address)"}},"id":2199,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9807:32:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"9783:56:9"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2206,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2201,"name":"previousOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2191,"src":"9853:13:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":2204,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9878:1:9","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":2203,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9870:7:9","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2202,"name":"address","nodeType":"ElementaryTypeName","src":"9870:7:9","typeDescriptions":{}}},"id":2205,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9870:10:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9853:27:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2215,"nodeType":"IfStatement","src":"9849:96:9","trueBody":{"id":2214,"nodeType":"Block","src":"9882:63:9","statements":[{"errorCall":{"arguments":[{"arguments":[{"hexValue":"30","id":2210,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9931:1:9","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":2209,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9923:7:9","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2208,"name":"address","nodeType":"ElementaryTypeName","src":"9923:7:9","typeDescriptions":{}}},"id":2211,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9923:10:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2207,"name":"ERC721InvalidSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1527,"src":"9903:19:9","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":2212,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9903:31:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2213,"nodeType":"RevertStatement","src":"9896:38:9"}]}}]},"documentation":{"id":2168,"nodeType":"StructuredDocumentation","src":"9308:311:9","text":" @dev Mints `tokenId` and transfers it to `to`.\n WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible\n Requirements:\n - `tokenId` must not exist.\n - `to` cannot be the zero address.\n Emits a {Transfer} event."},"id":2217,"implemented":true,"kind":"function","modifiers":[],"name":"_mint","nameLocation":"9633:5:9","nodeType":"FunctionDefinition","parameters":{"id":2173,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2170,"mutability":"mutable","name":"to","nameLocation":"9647:2:9","nodeType":"VariableDeclaration","scope":2217,"src":"9639:10:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2169,"name":"address","nodeType":"ElementaryTypeName","src":"9639:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2172,"mutability":"mutable","name":"tokenId","nameLocation":"9659:7:9","nodeType":"VariableDeclaration","scope":2217,"src":"9651:15:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2171,"name":"uint256","nodeType":"ElementaryTypeName","src":"9651:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9638:29:9"},"returnParameters":{"id":2174,"nodeType":"ParameterList","parameters":[],"src":"9677:0:9"},"scope":2569,"src":"9624:327:9","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":2231,"nodeType":"Block","src":"10359:43:9","statements":[{"expression":{"arguments":[{"id":2226,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2220,"src":"10379:2:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2227,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2222,"src":"10383:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"","id":2228,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"10392:2:9","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"id":2225,"name":"_safeMint","nodeType":"Identifier","overloadedDeclarations":[2232,2262],"referencedDeclaration":2262,"src":"10369:9:9","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,uint256,bytes memory)"}},"id":2229,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10369:26:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2230,"nodeType":"ExpressionStatement","src":"10369:26:9"}]},"documentation":{"id":2218,"nodeType":"StructuredDocumentation","src":"9957:340:9","text":" @dev Mints `tokenId`, transfers it to `to` and checks for `to` acceptance.\n Requirements:\n - `tokenId` must not exist.\n - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n Emits a {Transfer} event."},"id":2232,"implemented":true,"kind":"function","modifiers":[],"name":"_safeMint","nameLocation":"10311:9:9","nodeType":"FunctionDefinition","parameters":{"id":2223,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2220,"mutability":"mutable","name":"to","nameLocation":"10329:2:9","nodeType":"VariableDeclaration","scope":2232,"src":"10321:10:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2219,"name":"address","nodeType":"ElementaryTypeName","src":"10321:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2222,"mutability":"mutable","name":"tokenId","nameLocation":"10341:7:9","nodeType":"VariableDeclaration","scope":2232,"src":"10333:15:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2221,"name":"uint256","nodeType":"ElementaryTypeName","src":"10333:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10320:29:9"},"returnParameters":{"id":2224,"nodeType":"ParameterList","parameters":[],"src":"10359:0:9"},"scope":2569,"src":"10302:100:9","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":2261,"nodeType":"Block","src":"10707:123:9","statements":[{"expression":{"arguments":[{"id":2243,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2235,"src":"10723:2:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2244,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2237,"src":"10727:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2242,"name":"_mint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2217,"src":"10717:5:9","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":2245,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10717:18:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2246,"nodeType":"ExpressionStatement","src":"10717:18:9"},{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":2250,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3889,"src":"10779:10:9","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":2251,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10779:12:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"hexValue":"30","id":2254,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10801:1:9","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":2253,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10793:7:9","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2252,"name":"address","nodeType":"ElementaryTypeName","src":"10793:7:9","typeDescriptions":{}}},"id":2255,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10793:10:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2256,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2235,"src":"10805:2:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2257,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2237,"src":"10809:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2258,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2239,"src":"10818:4:9","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":2247,"name":"ERC721Utils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2809,"src":"10745:11:9","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ERC721Utils_$2809_$","typeString":"type(library ERC721Utils)"}},"id":2249,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10757:21:9","memberName":"checkOnERC721Received","nodeType":"MemberAccess","referencedDeclaration":2808,"src":"10745:33:9","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,address,address,uint256,bytes memory)"}},"id":2259,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10745:78:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2260,"nodeType":"ExpressionStatement","src":"10745:78:9"}]},"documentation":{"id":2233,"nodeType":"StructuredDocumentation","src":"10408:210:9","text":" @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is\n forwarded in {IERC721Receiver-onERC721Received} to contract recipients."},"id":2262,"implemented":true,"kind":"function","modifiers":[],"name":"_safeMint","nameLocation":"10632:9:9","nodeType":"FunctionDefinition","parameters":{"id":2240,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2235,"mutability":"mutable","name":"to","nameLocation":"10650:2:9","nodeType":"VariableDeclaration","scope":2262,"src":"10642:10:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2234,"name":"address","nodeType":"ElementaryTypeName","src":"10642:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2237,"mutability":"mutable","name":"tokenId","nameLocation":"10662:7:9","nodeType":"VariableDeclaration","scope":2262,"src":"10654:15:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2236,"name":"uint256","nodeType":"ElementaryTypeName","src":"10654:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2239,"mutability":"mutable","name":"data","nameLocation":"10684:4:9","nodeType":"VariableDeclaration","scope":2262,"src":"10671:17:9","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2238,"name":"bytes","nodeType":"ElementaryTypeName","src":"10671:5:9","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"10641:48:9"},"returnParameters":{"id":2241,"nodeType":"ParameterList","parameters":[],"src":"10707:0:9"},"scope":2569,"src":"10623:207:9","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":2294,"nodeType":"Block","src":"11197:186:9","statements":[{"assignments":[2269],"declarations":[{"constant":false,"id":2269,"mutability":"mutable","name":"previousOwner","nameLocation":"11215:13:9","nodeType":"VariableDeclaration","scope":2294,"src":"11207:21:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2268,"name":"address","nodeType":"ElementaryTypeName","src":"11207:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":2281,"initialValue":{"arguments":[{"arguments":[{"hexValue":"30","id":2273,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11247:1:9","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":2272,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11239:7:9","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2271,"name":"address","nodeType":"ElementaryTypeName","src":"11239:7:9","typeDescriptions":{}}},"id":2274,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11239:10:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2275,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2265,"src":"11251:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"hexValue":"30","id":2278,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11268:1:9","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":2277,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11260:7:9","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2276,"name":"address","nodeType":"ElementaryTypeName","src":"11260:7:9","typeDescriptions":{}}},"id":2279,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11260:10:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":2270,"name":"_update","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2167,"src":"11231:7:9","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$returns$_t_address_$","typeString":"function (address,uint256,address) returns (address)"}},"id":2280,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11231:40:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"11207:64:9"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2287,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2282,"name":"previousOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2269,"src":"11285:13:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":2285,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11310:1:9","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":2284,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11302:7:9","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2283,"name":"address","nodeType":"ElementaryTypeName","src":"11302:7:9","typeDescriptions":{}}},"id":2286,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11302:10:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"11285:27:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2293,"nodeType":"IfStatement","src":"11281:96:9","trueBody":{"id":2292,"nodeType":"Block","src":"11314:63:9","statements":[{"errorCall":{"arguments":[{"id":2289,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2265,"src":"11358:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2288,"name":"ERC721NonexistentToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1513,"src":"11335:22:9","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$returns$_t_error_$","typeString":"function (uint256) pure returns (error)"}},"id":2290,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11335:31:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2291,"nodeType":"RevertStatement","src":"11328:38:9"}]}}]},"documentation":{"id":2263,"nodeType":"StructuredDocumentation","src":"10836:315:9","text":" @dev Destroys `tokenId`.\n The approval is cleared when the token is burned.\n This is an internal function that does not check if the sender is authorized to operate on the token.\n Requirements:\n - `tokenId` must exist.\n Emits a {Transfer} event."},"id":2295,"implemented":true,"kind":"function","modifiers":[],"name":"_burn","nameLocation":"11165:5:9","nodeType":"FunctionDefinition","parameters":{"id":2266,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2265,"mutability":"mutable","name":"tokenId","nameLocation":"11179:7:9","nodeType":"VariableDeclaration","scope":2295,"src":"11171:15:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2264,"name":"uint256","nodeType":"ElementaryTypeName","src":"11171:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11170:17:9"},"returnParameters":{"id":2267,"nodeType":"ParameterList","parameters":[],"src":"11197:0:9"},"scope":2569,"src":"11156:227:9","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":2354,"nodeType":"Block","src":"11778:389:9","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2310,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2305,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2300,"src":"11792:2:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":2308,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11806:1:9","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":2307,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11798:7:9","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2306,"name":"address","nodeType":"ElementaryTypeName","src":"11798:7:9","typeDescriptions":{}}},"id":2309,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11798:10:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"11792:16:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2319,"nodeType":"IfStatement","src":"11788:87:9","trueBody":{"id":2318,"nodeType":"Block","src":"11810:65:9","statements":[{"errorCall":{"arguments":[{"arguments":[{"hexValue":"30","id":2314,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11861:1:9","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":2313,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11853:7:9","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2312,"name":"address","nodeType":"ElementaryTypeName","src":"11853:7:9","typeDescriptions":{}}},"id":2315,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11853:10:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2311,"name":"ERC721InvalidReceiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1532,"src":"11831:21:9","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":2316,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11831:33:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2317,"nodeType":"RevertStatement","src":"11824:40:9"}]}},{"assignments":[2321],"declarations":[{"constant":false,"id":2321,"mutability":"mutable","name":"previousOwner","nameLocation":"11892:13:9","nodeType":"VariableDeclaration","scope":2354,"src":"11884:21:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2320,"name":"address","nodeType":"ElementaryTypeName","src":"11884:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":2330,"initialValue":{"arguments":[{"id":2323,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2300,"src":"11916:2:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2324,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2302,"src":"11920:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"hexValue":"30","id":2327,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11937:1:9","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":2326,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11929:7:9","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2325,"name":"address","nodeType":"ElementaryTypeName","src":"11929:7:9","typeDescriptions":{}}},"id":2328,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11929:10:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":2322,"name":"_update","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2167,"src":"11908:7:9","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$returns$_t_address_$","typeString":"function (address,uint256,address) returns (address)"}},"id":2329,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11908:32:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"11884:56:9"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2336,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2331,"name":"previousOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2321,"src":"11954:13:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":2334,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11979:1:9","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":2333,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11971:7:9","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2332,"name":"address","nodeType":"ElementaryTypeName","src":"11971:7:9","typeDescriptions":{}}},"id":2335,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11971:10:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"11954:27:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2344,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2342,"name":"previousOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2321,"src":"12056:13:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":2343,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2298,"src":"12073:4:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"12056:21:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2352,"nodeType":"IfStatement","src":"12052:109:9","trueBody":{"id":2351,"nodeType":"Block","src":"12079:82:9","statements":[{"errorCall":{"arguments":[{"id":2346,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2298,"src":"12121:4:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2347,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2302,"src":"12127:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2348,"name":"previousOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2321,"src":"12136:13:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":2345,"name":"ERC721IncorrectOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1522,"src":"12100:20:9","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_uint256_$_t_address_$returns$_t_error_$","typeString":"function (address,uint256,address) pure returns (error)"}},"id":2349,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12100:50:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2350,"nodeType":"RevertStatement","src":"12093:57:9"}]}},"id":2353,"nodeType":"IfStatement","src":"11950:211:9","trueBody":{"id":2341,"nodeType":"Block","src":"11983:63:9","statements":[{"errorCall":{"arguments":[{"id":2338,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2302,"src":"12027:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2337,"name":"ERC721NonexistentToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1513,"src":"12004:22:9","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$returns$_t_error_$","typeString":"function (uint256) pure returns (error)"}},"id":2339,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12004:31:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2340,"nodeType":"RevertStatement","src":"11997:38:9"}]}}]},"documentation":{"id":2296,"nodeType":"StructuredDocumentation","src":"11389:313:9","text":" @dev Transfers `tokenId` from `from` to `to`.\n As opposed to {transferFrom}, this imposes no restrictions on msg.sender.\n Requirements:\n - `to` cannot be the zero address.\n - `tokenId` token must be owned by `from`.\n Emits a {Transfer} event."},"id":2355,"implemented":true,"kind":"function","modifiers":[],"name":"_transfer","nameLocation":"11716:9:9","nodeType":"FunctionDefinition","parameters":{"id":2303,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2298,"mutability":"mutable","name":"from","nameLocation":"11734:4:9","nodeType":"VariableDeclaration","scope":2355,"src":"11726:12:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2297,"name":"address","nodeType":"ElementaryTypeName","src":"11726:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2300,"mutability":"mutable","name":"to","nameLocation":"11748:2:9","nodeType":"VariableDeclaration","scope":2355,"src":"11740:10:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2299,"name":"address","nodeType":"ElementaryTypeName","src":"11740:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2302,"mutability":"mutable","name":"tokenId","nameLocation":"11760:7:9","nodeType":"VariableDeclaration","scope":2355,"src":"11752:15:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2301,"name":"uint256","nodeType":"ElementaryTypeName","src":"11752:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11725:43:9"},"returnParameters":{"id":2304,"nodeType":"ParameterList","parameters":[],"src":"11778:0:9"},"scope":2569,"src":"11707:460:9","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":2372,"nodeType":"Block","src":"13176:53:9","statements":[{"expression":{"arguments":[{"id":2366,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2358,"src":"13200:4:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2367,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2360,"src":"13206:2:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2368,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2362,"src":"13210:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"","id":2369,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"13219:2:9","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"id":2365,"name":"_safeTransfer","nodeType":"Identifier","overloadedDeclarations":[2373,2403],"referencedDeclaration":2403,"src":"13186:13:9","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,address,uint256,bytes memory)"}},"id":2370,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13186:36:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2371,"nodeType":"ExpressionStatement","src":"13186:36:9"}]},"documentation":{"id":2356,"nodeType":"StructuredDocumentation","src":"12173:923:9","text":" @dev Safely transfers `tokenId` token from `from` to `to`, checking that contract recipients\n are aware of the ERC-721 standard to prevent tokens from being forever locked.\n `data` is additional data, it has no specified format and it is sent in call to `to`.\n This internal function is like {safeTransferFrom} in the sense that it invokes\n {IERC721Receiver-onERC721Received} on the receiver, and can be used to e.g.\n implement alternative mechanisms to perform token transfer, such as signature-based.\n Requirements:\n - `tokenId` token must exist and be owned by `from`.\n - `to` cannot be the zero address.\n - `from` cannot be the zero address.\n - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n Emits a {Transfer} event."},"id":2373,"implemented":true,"kind":"function","modifiers":[],"name":"_safeTransfer","nameLocation":"13110:13:9","nodeType":"FunctionDefinition","parameters":{"id":2363,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2358,"mutability":"mutable","name":"from","nameLocation":"13132:4:9","nodeType":"VariableDeclaration","scope":2373,"src":"13124:12:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2357,"name":"address","nodeType":"ElementaryTypeName","src":"13124:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2360,"mutability":"mutable","name":"to","nameLocation":"13146:2:9","nodeType":"VariableDeclaration","scope":2373,"src":"13138:10:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2359,"name":"address","nodeType":"ElementaryTypeName","src":"13138:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2362,"mutability":"mutable","name":"tokenId","nameLocation":"13158:7:9","nodeType":"VariableDeclaration","scope":2373,"src":"13150:15:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2361,"name":"uint256","nodeType":"ElementaryTypeName","src":"13150:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13123:43:9"},"returnParameters":{"id":2364,"nodeType":"ParameterList","parameters":[],"src":"13176:0:9"},"scope":2569,"src":"13101:128:9","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":2402,"nodeType":"Block","src":"13568:127:9","statements":[{"expression":{"arguments":[{"id":2386,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2376,"src":"13588:4:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2387,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2378,"src":"13594:2:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2388,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2380,"src":"13598:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2385,"name":"_transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2355,"src":"13578:9:9","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":2389,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13578:28:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2390,"nodeType":"ExpressionStatement","src":"13578:28:9"},{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":2394,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3889,"src":"13650:10:9","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":2395,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13650:12:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2396,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2376,"src":"13664:4:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2397,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2378,"src":"13670:2:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2398,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2380,"src":"13674:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2399,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2382,"src":"13683:4:9","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":2391,"name":"ERC721Utils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2809,"src":"13616:11:9","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ERC721Utils_$2809_$","typeString":"type(library ERC721Utils)"}},"id":2393,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13628:21:9","memberName":"checkOnERC721Received","nodeType":"MemberAccess","referencedDeclaration":2808,"src":"13616:33:9","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,address,address,uint256,bytes memory)"}},"id":2400,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13616:72:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2401,"nodeType":"ExpressionStatement","src":"13616:72:9"}]},"documentation":{"id":2374,"nodeType":"StructuredDocumentation","src":"13235:226:9","text":" @dev Same as {xref-ERC721-_safeTransfer-address-address-uint256-}[`_safeTransfer`], with an additional `data` parameter which is\n forwarded in {IERC721Receiver-onERC721Received} to contract recipients."},"id":2403,"implemented":true,"kind":"function","modifiers":[],"name":"_safeTransfer","nameLocation":"13475:13:9","nodeType":"FunctionDefinition","parameters":{"id":2383,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2376,"mutability":"mutable","name":"from","nameLocation":"13497:4:9","nodeType":"VariableDeclaration","scope":2403,"src":"13489:12:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2375,"name":"address","nodeType":"ElementaryTypeName","src":"13489:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2378,"mutability":"mutable","name":"to","nameLocation":"13511:2:9","nodeType":"VariableDeclaration","scope":2403,"src":"13503:10:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2377,"name":"address","nodeType":"ElementaryTypeName","src":"13503:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2380,"mutability":"mutable","name":"tokenId","nameLocation":"13523:7:9","nodeType":"VariableDeclaration","scope":2403,"src":"13515:15:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2379,"name":"uint256","nodeType":"ElementaryTypeName","src":"13515:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2382,"mutability":"mutable","name":"data","nameLocation":"13545:4:9","nodeType":"VariableDeclaration","scope":2403,"src":"13532:17:9","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2381,"name":"bytes","nodeType":"ElementaryTypeName","src":"13532:5:9","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"13488:62:9"},"returnParameters":{"id":2384,"nodeType":"ParameterList","parameters":[],"src":"13568:0:9"},"scope":2569,"src":"13466:229:9","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":2420,"nodeType":"Block","src":"14208:50:9","statements":[{"expression":{"arguments":[{"id":2414,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2406,"src":"14227:2:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2415,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2408,"src":"14231:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2416,"name":"auth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2410,"src":"14240:4:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"74727565","id":2417,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"14246:4:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":2413,"name":"_approve","nodeType":"Identifier","overloadedDeclarations":[2421,2487],"referencedDeclaration":2487,"src":"14218:8:9","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_bool_$returns$__$","typeString":"function (address,uint256,address,bool)"}},"id":2418,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14218:33:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2419,"nodeType":"ExpressionStatement","src":"14218:33:9"}]},"documentation":{"id":2404,"nodeType":"StructuredDocumentation","src":"13701:432:9","text":" @dev Approve `to` to operate on `tokenId`\n The `auth` argument is optional. If the value passed is non 0, then this function will check that `auth` is\n either the owner of the token, or approved to operate on all tokens held by this owner.\n Emits an {Approval} event.\n Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument."},"id":2421,"implemented":true,"kind":"function","modifiers":[],"name":"_approve","nameLocation":"14147:8:9","nodeType":"FunctionDefinition","parameters":{"id":2411,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2406,"mutability":"mutable","name":"to","nameLocation":"14164:2:9","nodeType":"VariableDeclaration","scope":2421,"src":"14156:10:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2405,"name":"address","nodeType":"ElementaryTypeName","src":"14156:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2408,"mutability":"mutable","name":"tokenId","nameLocation":"14176:7:9","nodeType":"VariableDeclaration","scope":2421,"src":"14168:15:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2407,"name":"uint256","nodeType":"ElementaryTypeName","src":"14168:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2410,"mutability":"mutable","name":"auth","nameLocation":"14193:4:9","nodeType":"VariableDeclaration","scope":2421,"src":"14185:12:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2409,"name":"address","nodeType":"ElementaryTypeName","src":"14185:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14155:43:9"},"returnParameters":{"id":2412,"nodeType":"ParameterList","parameters":[],"src":"14208:0:9"},"scope":2569,"src":"14138:120:9","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":2486,"nodeType":"Block","src":"14534:568:9","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":2440,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2433,"name":"emitEvent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2430,"src":"14600:9:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2439,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2434,"name":"auth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2428,"src":"14613:4:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":2437,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14629:1:9","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":2436,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14621:7:9","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2435,"name":"address","nodeType":"ElementaryTypeName","src":"14621:7:9","typeDescriptions":{}}},"id":2438,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14621:10:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"14613:18:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"14600:31:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2479,"nodeType":"IfStatement","src":"14596:460:9","trueBody":{"id":2478,"nodeType":"Block","src":"14633:423:9","statements":[{"assignments":[2442],"declarations":[{"constant":false,"id":2442,"mutability":"mutable","name":"owner","nameLocation":"14655:5:9","nodeType":"VariableDeclaration","scope":2478,"src":"14647:13:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2441,"name":"address","nodeType":"ElementaryTypeName","src":"14647:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":2446,"initialValue":{"arguments":[{"id":2444,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2426,"src":"14677:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2443,"name":"_requireOwned","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2568,"src":"14663:13:9","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_address_$","typeString":"function (uint256) view returns (address)"}},"id":2445,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14663:22:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"14647:38:9"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":2462,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":2456,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2452,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2447,"name":"auth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2428,"src":"14813:4:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":2450,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14829:1:9","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":2449,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14821:7:9","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2448,"name":"address","nodeType":"ElementaryTypeName","src":"14821:7:9","typeDescriptions":{}}},"id":2451,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14821:10:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"14813:18:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2455,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2453,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2442,"src":"14835:5:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":2454,"name":"auth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2428,"src":"14844:4:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"14835:13:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"14813:35:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"id":2461,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"14852:30:9","subExpression":{"arguments":[{"id":2458,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2442,"src":"14870:5:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2459,"name":"auth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2428,"src":"14877:4:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":2457,"name":"isApprovedForAll","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1868,"src":"14853:16:9","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$returns$_t_bool_$","typeString":"function (address,address) view returns (bool)"}},"id":2460,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14853:29:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"14813:69:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2468,"nodeType":"IfStatement","src":"14809:142:9","trueBody":{"id":2467,"nodeType":"Block","src":"14884:67:9","statements":[{"errorCall":{"arguments":[{"id":2464,"name":"auth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2428,"src":"14931:4:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2463,"name":"ERC721InvalidApprover","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1544,"src":"14909:21:9","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":2465,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14909:27:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2466,"nodeType":"RevertStatement","src":"14902:34:9"}]}},{"condition":{"id":2469,"name":"emitEvent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2430,"src":"14969:9:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2477,"nodeType":"IfStatement","src":"14965:81:9","trueBody":{"id":2476,"nodeType":"Block","src":"14980:66:9","statements":[{"eventCall":{"arguments":[{"id":2471,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2442,"src":"15012:5:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2472,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2424,"src":"15019:2:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2473,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2426,"src":"15023:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2470,"name":"Approval","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2594,"src":"15003:8:9","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":2474,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15003:28:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2475,"nodeType":"EmitStatement","src":"14998:33:9"}]}}]}},{"expression":{"id":2484,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":2480,"name":"_tokenApprovals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1644,"src":"15066:15:9","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":2482,"indexExpression":{"id":2481,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2426,"src":"15082:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"15066:24:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2483,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2424,"src":"15093:2:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"15066:29:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2485,"nodeType":"ExpressionStatement","src":"15066:29:9"}]},"documentation":{"id":2422,"nodeType":"StructuredDocumentation","src":"14264:171:9","text":" @dev Variant of `_approve` with an optional flag to enable or disable the {Approval} event. The event is not\n emitted in the context of transfers."},"id":2487,"implemented":true,"kind":"function","modifiers":[],"name":"_approve","nameLocation":"14449:8:9","nodeType":"FunctionDefinition","parameters":{"id":2431,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2424,"mutability":"mutable","name":"to","nameLocation":"14466:2:9","nodeType":"VariableDeclaration","scope":2487,"src":"14458:10:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2423,"name":"address","nodeType":"ElementaryTypeName","src":"14458:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2426,"mutability":"mutable","name":"tokenId","nameLocation":"14478:7:9","nodeType":"VariableDeclaration","scope":2487,"src":"14470:15:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2425,"name":"uint256","nodeType":"ElementaryTypeName","src":"14470:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2428,"mutability":"mutable","name":"auth","nameLocation":"14495:4:9","nodeType":"VariableDeclaration","scope":2487,"src":"14487:12:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2427,"name":"address","nodeType":"ElementaryTypeName","src":"14487:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2430,"mutability":"mutable","name":"emitEvent","nameLocation":"14506:9:9","nodeType":"VariableDeclaration","scope":2487,"src":"14501:14:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2429,"name":"bool","nodeType":"ElementaryTypeName","src":"14501:4:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"14457:59:9"},"returnParameters":{"id":2432,"nodeType":"ParameterList","parameters":[],"src":"14534:0:9"},"scope":2569,"src":"14440:662:9","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":2538,"nodeType":"Block","src":"15404:318:9","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2502,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2497,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2490,"src":"15418:5:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":2500,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15435:1:9","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":2499,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15427:7:9","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2498,"name":"address","nodeType":"ElementaryTypeName","src":"15427:7:9","typeDescriptions":{}}},"id":2501,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15427:10:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"15418:19:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2511,"nodeType":"IfStatement","src":"15414:90:9","trueBody":{"id":2510,"nodeType":"Block","src":"15439:65:9","statements":[{"errorCall":{"arguments":[{"arguments":[{"hexValue":"30","id":2506,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15490:1:9","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":2505,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15482:7:9","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2504,"name":"address","nodeType":"ElementaryTypeName","src":"15482:7:9","typeDescriptions":{}}},"id":2507,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15482:10:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2503,"name":"ERC721InvalidApprover","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1544,"src":"15460:21:9","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":2508,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15460:33:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2509,"nodeType":"RevertStatement","src":"15453:40:9"}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2517,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2512,"name":"operator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2492,"src":"15517:8:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":2515,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15537:1:9","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":2514,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15529:7:9","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2513,"name":"address","nodeType":"ElementaryTypeName","src":"15529:7:9","typeDescriptions":{}}},"id":2516,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15529:10:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"15517:22:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2523,"nodeType":"IfStatement","src":"15513:91:9","trueBody":{"id":2522,"nodeType":"Block","src":"15541:63:9","statements":[{"errorCall":{"arguments":[{"id":2519,"name":"operator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2492,"src":"15584:8:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2518,"name":"ERC721InvalidOperator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1549,"src":"15562:21:9","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":2520,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15562:31:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2521,"nodeType":"RevertStatement","src":"15555:38:9"}]}},{"expression":{"id":2530,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":2524,"name":"_operatorApprovals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1650,"src":"15613:18:9","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$","typeString":"mapping(address => mapping(address => bool))"}},"id":2527,"indexExpression":{"id":2525,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2490,"src":"15632:5:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15613:25:9","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":2528,"indexExpression":{"id":2526,"name":"operator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2492,"src":"15639:8:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"15613:35:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2529,"name":"approved","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2494,"src":"15651:8:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"15613:46:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2531,"nodeType":"ExpressionStatement","src":"15613:46:9"},{"eventCall":{"arguments":[{"id":2533,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2490,"src":"15689:5:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2534,"name":"operator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2492,"src":"15696:8:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2535,"name":"approved","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2494,"src":"15706:8:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":2532,"name":"ApprovalForAll","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2603,"src":"15674:14:9","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_bool_$returns$__$","typeString":"function (address,address,bool)"}},"id":2536,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15674:41:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2537,"nodeType":"EmitStatement","src":"15669:46:9"}]},"documentation":{"id":2488,"nodeType":"StructuredDocumentation","src":"15108:198:9","text":" @dev Approve `operator` to operate on all of `owner` tokens\n Requirements:\n - operator can't be the address zero.\n Emits an {ApprovalForAll} event."},"id":2539,"implemented":true,"kind":"function","modifiers":[],"name":"_setApprovalForAll","nameLocation":"15320:18:9","nodeType":"FunctionDefinition","parameters":{"id":2495,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2490,"mutability":"mutable","name":"owner","nameLocation":"15347:5:9","nodeType":"VariableDeclaration","scope":2539,"src":"15339:13:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2489,"name":"address","nodeType":"ElementaryTypeName","src":"15339:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2492,"mutability":"mutable","name":"operator","nameLocation":"15362:8:9","nodeType":"VariableDeclaration","scope":2539,"src":"15354:16:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2491,"name":"address","nodeType":"ElementaryTypeName","src":"15354:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2494,"mutability":"mutable","name":"approved","nameLocation":"15377:8:9","nodeType":"VariableDeclaration","scope":2539,"src":"15372:13:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2493,"name":"bool","nodeType":"ElementaryTypeName","src":"15372:4:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"15338:48:9"},"returnParameters":{"id":2496,"nodeType":"ParameterList","parameters":[],"src":"15404:0:9"},"scope":2569,"src":"15311:411:9","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":2567,"nodeType":"Block","src":"16029:169:9","statements":[{"assignments":[2548],"declarations":[{"constant":false,"id":2548,"mutability":"mutable","name":"owner","nameLocation":"16047:5:9","nodeType":"VariableDeclaration","scope":2567,"src":"16039:13:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2547,"name":"address","nodeType":"ElementaryTypeName","src":"16039:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":2552,"initialValue":{"arguments":[{"id":2550,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2542,"src":"16064:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2549,"name":"_ownerOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1975,"src":"16055:8:9","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_address_$","typeString":"function (uint256) view returns (address)"}},"id":2551,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16055:17:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"16039:33:9"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2558,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2553,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2548,"src":"16086:5:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":2556,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16103:1:9","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":2555,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16095:7:9","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2554,"name":"address","nodeType":"ElementaryTypeName","src":"16095:7:9","typeDescriptions":{}}},"id":2557,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16095:10:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"16086:19:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2564,"nodeType":"IfStatement","src":"16082:88:9","trueBody":{"id":2563,"nodeType":"Block","src":"16107:63:9","statements":[{"errorCall":{"arguments":[{"id":2560,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2542,"src":"16151:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2559,"name":"ERC721NonexistentToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1513,"src":"16128:22:9","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$returns$_t_error_$","typeString":"function (uint256) pure returns (error)"}},"id":2561,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16128:31:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2562,"nodeType":"RevertStatement","src":"16121:38:9"}]}},{"expression":{"id":2565,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2548,"src":"16186:5:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":2546,"id":2566,"nodeType":"Return","src":"16179:12:9"}]},"documentation":{"id":2540,"nodeType":"StructuredDocumentation","src":"15728:224:9","text":" @dev Reverts if the `tokenId` doesn't have a current owner (it hasn't been minted, or it has been burned).\n Returns the owner.\n Overrides to ownership logic should be done to {_ownerOf}."},"id":2568,"implemented":true,"kind":"function","modifiers":[],"name":"_requireOwned","nameLocation":"15966:13:9","nodeType":"FunctionDefinition","parameters":{"id":2543,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2542,"mutability":"mutable","name":"tokenId","nameLocation":"15988:7:9","nodeType":"VariableDeclaration","scope":2568,"src":"15980:15:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2541,"name":"uint256","nodeType":"ElementaryTypeName","src":"15980:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15979:17:9"},"returnParameters":{"id":2546,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2545,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2568,"src":"16020:7:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2544,"name":"address","nodeType":"ElementaryTypeName","src":"16020:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"16019:9:9"},"scope":2569,"src":"15957:241:9","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":2570,"src":"775:15425:9","usedErrors":[1508,1513,1522,1527,1532,1539,1544,1549],"usedEvents":[2585,2594,2603]}],"src":"107:16094:9"},"id":9},"@openzeppelin/contracts/token/ERC721/IERC721.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/token/ERC721/IERC721.sol","exportedSymbols":{"IERC165":[5850],"IERC721":[2686]},"id":2687,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":2571,"literals":["solidity",">=","0.6",".2"],"nodeType":"PragmaDirective","src":"108:24:10"},{"absolutePath":"@openzeppelin/contracts/utils/introspection/IERC165.sol","file":"../../utils/introspection/IERC165.sol","id":2573,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2687,"sourceUnit":5851,"src":"134:62:10","symbolAliases":[{"foreign":{"id":2572,"name":"IERC165","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5850,"src":"142:7:10","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":2575,"name":"IERC165","nameLocations":["288:7:10"],"nodeType":"IdentifierPath","referencedDeclaration":5850,"src":"288:7:10"},"id":2576,"nodeType":"InheritanceSpecifier","src":"288:7:10"}],"canonicalName":"IERC721","contractDependencies":[],"contractKind":"interface","documentation":{"id":2574,"nodeType":"StructuredDocumentation","src":"198:68:10","text":" @dev Required interface of an ERC-721 compliant contract."},"fullyImplemented":false,"id":2686,"linearizedBaseContracts":[2686,5850],"name":"IERC721","nameLocation":"277:7:10","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":2577,"nodeType":"StructuredDocumentation","src":"302:88:10","text":" @dev Emitted when `tokenId` token is transferred from `from` to `to`."},"eventSelector":"ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef","id":2585,"name":"Transfer","nameLocation":"401:8:10","nodeType":"EventDefinition","parameters":{"id":2584,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2579,"indexed":true,"mutability":"mutable","name":"from","nameLocation":"426:4:10","nodeType":"VariableDeclaration","scope":2585,"src":"410:20:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2578,"name":"address","nodeType":"ElementaryTypeName","src":"410:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2581,"indexed":true,"mutability":"mutable","name":"to","nameLocation":"448:2:10","nodeType":"VariableDeclaration","scope":2585,"src":"432:18:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2580,"name":"address","nodeType":"ElementaryTypeName","src":"432:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2583,"indexed":true,"mutability":"mutable","name":"tokenId","nameLocation":"468:7:10","nodeType":"VariableDeclaration","scope":2585,"src":"452:23:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2582,"name":"uint256","nodeType":"ElementaryTypeName","src":"452:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"409:67:10"},"src":"395:82:10"},{"anonymous":false,"documentation":{"id":2586,"nodeType":"StructuredDocumentation","src":"483:94:10","text":" @dev Emitted when `owner` enables `approved` to manage the `tokenId` token."},"eventSelector":"8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925","id":2594,"name":"Approval","nameLocation":"588:8:10","nodeType":"EventDefinition","parameters":{"id":2593,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2588,"indexed":true,"mutability":"mutable","name":"owner","nameLocation":"613:5:10","nodeType":"VariableDeclaration","scope":2594,"src":"597:21:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2587,"name":"address","nodeType":"ElementaryTypeName","src":"597:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2590,"indexed":true,"mutability":"mutable","name":"approved","nameLocation":"636:8:10","nodeType":"VariableDeclaration","scope":2594,"src":"620:24:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2589,"name":"address","nodeType":"ElementaryTypeName","src":"620:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2592,"indexed":true,"mutability":"mutable","name":"tokenId","nameLocation":"662:7:10","nodeType":"VariableDeclaration","scope":2594,"src":"646:23:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2591,"name":"uint256","nodeType":"ElementaryTypeName","src":"646:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"596:74:10"},"src":"582:89:10"},{"anonymous":false,"documentation":{"id":2595,"nodeType":"StructuredDocumentation","src":"677:117:10","text":" @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets."},"eventSelector":"17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31","id":2603,"name":"ApprovalForAll","nameLocation":"805:14:10","nodeType":"EventDefinition","parameters":{"id":2602,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2597,"indexed":true,"mutability":"mutable","name":"owner","nameLocation":"836:5:10","nodeType":"VariableDeclaration","scope":2603,"src":"820:21:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2596,"name":"address","nodeType":"ElementaryTypeName","src":"820:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2599,"indexed":true,"mutability":"mutable","name":"operator","nameLocation":"859:8:10","nodeType":"VariableDeclaration","scope":2603,"src":"843:24:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2598,"name":"address","nodeType":"ElementaryTypeName","src":"843:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2601,"indexed":false,"mutability":"mutable","name":"approved","nameLocation":"874:8:10","nodeType":"VariableDeclaration","scope":2603,"src":"869:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2600,"name":"bool","nodeType":"ElementaryTypeName","src":"869:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"819:64:10"},"src":"799:85:10"},{"documentation":{"id":2604,"nodeType":"StructuredDocumentation","src":"890:76:10","text":" @dev Returns the number of tokens in ``owner``'s account."},"functionSelector":"70a08231","id":2611,"implemented":false,"kind":"function","modifiers":[],"name":"balanceOf","nameLocation":"980:9:10","nodeType":"FunctionDefinition","parameters":{"id":2607,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2606,"mutability":"mutable","name":"owner","nameLocation":"998:5:10","nodeType":"VariableDeclaration","scope":2611,"src":"990:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2605,"name":"address","nodeType":"ElementaryTypeName","src":"990:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"989:15:10"},"returnParameters":{"id":2610,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2609,"mutability":"mutable","name":"balance","nameLocation":"1036:7:10","nodeType":"VariableDeclaration","scope":2611,"src":"1028:15:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2608,"name":"uint256","nodeType":"ElementaryTypeName","src":"1028:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1027:17:10"},"scope":2686,"src":"971:74:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2612,"nodeType":"StructuredDocumentation","src":"1051:131:10","text":" @dev Returns the owner of the `tokenId` token.\n Requirements:\n - `tokenId` must exist."},"functionSelector":"6352211e","id":2619,"implemented":false,"kind":"function","modifiers":[],"name":"ownerOf","nameLocation":"1196:7:10","nodeType":"FunctionDefinition","parameters":{"id":2615,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2614,"mutability":"mutable","name":"tokenId","nameLocation":"1212:7:10","nodeType":"VariableDeclaration","scope":2619,"src":"1204:15:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2613,"name":"uint256","nodeType":"ElementaryTypeName","src":"1204:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1203:17:10"},"returnParameters":{"id":2618,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2617,"mutability":"mutable","name":"owner","nameLocation":"1252:5:10","nodeType":"VariableDeclaration","scope":2619,"src":"1244:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2616,"name":"address","nodeType":"ElementaryTypeName","src":"1244:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1243:15:10"},"scope":2686,"src":"1187:72:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2620,"nodeType":"StructuredDocumentation","src":"1265:565:10","text":" @dev Safely transfers `tokenId` token from `from` to `to`.\n Requirements:\n - `from` cannot be the zero address.\n - `to` cannot be the zero address.\n - `tokenId` token must exist and be owned by `from`.\n - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\n - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon\n a safe transfer.\n Emits a {Transfer} event."},"functionSelector":"b88d4fde","id":2631,"implemented":false,"kind":"function","modifiers":[],"name":"safeTransferFrom","nameLocation":"1844:16:10","nodeType":"FunctionDefinition","parameters":{"id":2629,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2622,"mutability":"mutable","name":"from","nameLocation":"1869:4:10","nodeType":"VariableDeclaration","scope":2631,"src":"1861:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2621,"name":"address","nodeType":"ElementaryTypeName","src":"1861:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2624,"mutability":"mutable","name":"to","nameLocation":"1883:2:10","nodeType":"VariableDeclaration","scope":2631,"src":"1875:10:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2623,"name":"address","nodeType":"ElementaryTypeName","src":"1875:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2626,"mutability":"mutable","name":"tokenId","nameLocation":"1895:7:10","nodeType":"VariableDeclaration","scope":2631,"src":"1887:15:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2625,"name":"uint256","nodeType":"ElementaryTypeName","src":"1887:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2628,"mutability":"mutable","name":"data","nameLocation":"1919:4:10","nodeType":"VariableDeclaration","scope":2631,"src":"1904:19:10","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2627,"name":"bytes","nodeType":"ElementaryTypeName","src":"1904:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1860:64:10"},"returnParameters":{"id":2630,"nodeType":"ParameterList","parameters":[],"src":"1933:0:10"},"scope":2686,"src":"1835:99:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2632,"nodeType":"StructuredDocumentation","src":"1940:706:10","text":" @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\n are aware of the ERC-721 protocol to prevent tokens from being forever locked.\n Requirements:\n - `from` cannot be the zero address.\n - `to` cannot be the zero address.\n - `tokenId` token must exist and be owned by `from`.\n - If the caller is not `from`, it must have been allowed to move this token by either {approve} or\n {setApprovalForAll}.\n - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon\n a safe transfer.\n Emits a {Transfer} event."},"functionSelector":"42842e0e","id":2641,"implemented":false,"kind":"function","modifiers":[],"name":"safeTransferFrom","nameLocation":"2660:16:10","nodeType":"FunctionDefinition","parameters":{"id":2639,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2634,"mutability":"mutable","name":"from","nameLocation":"2685:4:10","nodeType":"VariableDeclaration","scope":2641,"src":"2677:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2633,"name":"address","nodeType":"ElementaryTypeName","src":"2677:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2636,"mutability":"mutable","name":"to","nameLocation":"2699:2:10","nodeType":"VariableDeclaration","scope":2641,"src":"2691:10:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2635,"name":"address","nodeType":"ElementaryTypeName","src":"2691:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2638,"mutability":"mutable","name":"tokenId","nameLocation":"2711:7:10","nodeType":"VariableDeclaration","scope":2641,"src":"2703:15:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2637,"name":"uint256","nodeType":"ElementaryTypeName","src":"2703:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2676:43:10"},"returnParameters":{"id":2640,"nodeType":"ParameterList","parameters":[],"src":"2728:0:10"},"scope":2686,"src":"2651:78:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2642,"nodeType":"StructuredDocumentation","src":"2735:733:10","text":" @dev Transfers `tokenId` token from `from` to `to`.\n WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC-721\n or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must\n understand this adds an external call which potentially creates a reentrancy vulnerability.\n Requirements:\n - `from` cannot be the zero address.\n - `to` cannot be the zero address.\n - `tokenId` token must be owned by `from`.\n - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\n Emits a {Transfer} event."},"functionSelector":"23b872dd","id":2651,"implemented":false,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"3482:12:10","nodeType":"FunctionDefinition","parameters":{"id":2649,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2644,"mutability":"mutable","name":"from","nameLocation":"3503:4:10","nodeType":"VariableDeclaration","scope":2651,"src":"3495:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2643,"name":"address","nodeType":"ElementaryTypeName","src":"3495:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2646,"mutability":"mutable","name":"to","nameLocation":"3517:2:10","nodeType":"VariableDeclaration","scope":2651,"src":"3509:10:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2645,"name":"address","nodeType":"ElementaryTypeName","src":"3509:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2648,"mutability":"mutable","name":"tokenId","nameLocation":"3529:7:10","nodeType":"VariableDeclaration","scope":2651,"src":"3521:15:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2647,"name":"uint256","nodeType":"ElementaryTypeName","src":"3521:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3494:43:10"},"returnParameters":{"id":2650,"nodeType":"ParameterList","parameters":[],"src":"3546:0:10"},"scope":2686,"src":"3473:74:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2652,"nodeType":"StructuredDocumentation","src":"3553:452:10","text":" @dev Gives permission to `to` to transfer `tokenId` token to another account.\n The approval is cleared when the token is transferred.\n Only a single account can be approved at a time, so approving the zero address clears previous approvals.\n Requirements:\n - The caller must own the token or be an approved operator.\n - `tokenId` must exist.\n Emits an {Approval} event."},"functionSelector":"095ea7b3","id":2659,"implemented":false,"kind":"function","modifiers":[],"name":"approve","nameLocation":"4019:7:10","nodeType":"FunctionDefinition","parameters":{"id":2657,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2654,"mutability":"mutable","name":"to","nameLocation":"4035:2:10","nodeType":"VariableDeclaration","scope":2659,"src":"4027:10:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2653,"name":"address","nodeType":"ElementaryTypeName","src":"4027:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2656,"mutability":"mutable","name":"tokenId","nameLocation":"4047:7:10","nodeType":"VariableDeclaration","scope":2659,"src":"4039:15:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2655,"name":"uint256","nodeType":"ElementaryTypeName","src":"4039:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4026:29:10"},"returnParameters":{"id":2658,"nodeType":"ParameterList","parameters":[],"src":"4064:0:10"},"scope":2686,"src":"4010:55:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2660,"nodeType":"StructuredDocumentation","src":"4071:315:10","text":" @dev Approve or remove `operator` as an operator for the caller.\n Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\n Requirements:\n - The `operator` cannot be the address zero.\n Emits an {ApprovalForAll} event."},"functionSelector":"a22cb465","id":2667,"implemented":false,"kind":"function","modifiers":[],"name":"setApprovalForAll","nameLocation":"4400:17:10","nodeType":"FunctionDefinition","parameters":{"id":2665,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2662,"mutability":"mutable","name":"operator","nameLocation":"4426:8:10","nodeType":"VariableDeclaration","scope":2667,"src":"4418:16:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2661,"name":"address","nodeType":"ElementaryTypeName","src":"4418:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2664,"mutability":"mutable","name":"approved","nameLocation":"4441:8:10","nodeType":"VariableDeclaration","scope":2667,"src":"4436:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2663,"name":"bool","nodeType":"ElementaryTypeName","src":"4436:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4417:33:10"},"returnParameters":{"id":2666,"nodeType":"ParameterList","parameters":[],"src":"4459:0:10"},"scope":2686,"src":"4391:69:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2668,"nodeType":"StructuredDocumentation","src":"4466:139:10","text":" @dev Returns the account approved for `tokenId` token.\n Requirements:\n - `tokenId` must exist."},"functionSelector":"081812fc","id":2675,"implemented":false,"kind":"function","modifiers":[],"name":"getApproved","nameLocation":"4619:11:10","nodeType":"FunctionDefinition","parameters":{"id":2671,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2670,"mutability":"mutable","name":"tokenId","nameLocation":"4639:7:10","nodeType":"VariableDeclaration","scope":2675,"src":"4631:15:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2669,"name":"uint256","nodeType":"ElementaryTypeName","src":"4631:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4630:17:10"},"returnParameters":{"id":2674,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2673,"mutability":"mutable","name":"operator","nameLocation":"4679:8:10","nodeType":"VariableDeclaration","scope":2675,"src":"4671:16:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2672,"name":"address","nodeType":"ElementaryTypeName","src":"4671:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4670:18:10"},"scope":2686,"src":"4610:79:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2676,"nodeType":"StructuredDocumentation","src":"4695:138:10","text":" @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\n See {setApprovalForAll}"},"functionSelector":"e985e9c5","id":2685,"implemented":false,"kind":"function","modifiers":[],"name":"isApprovedForAll","nameLocation":"4847:16:10","nodeType":"FunctionDefinition","parameters":{"id":2681,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2678,"mutability":"mutable","name":"owner","nameLocation":"4872:5:10","nodeType":"VariableDeclaration","scope":2685,"src":"4864:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2677,"name":"address","nodeType":"ElementaryTypeName","src":"4864:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2680,"mutability":"mutable","name":"operator","nameLocation":"4887:8:10","nodeType":"VariableDeclaration","scope":2685,"src":"4879:16:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2679,"name":"address","nodeType":"ElementaryTypeName","src":"4879:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4863:33:10"},"returnParameters":{"id":2684,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2683,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2685,"src":"4920:4:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2682,"name":"bool","nodeType":"ElementaryTypeName","src":"4920:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4919:6:10"},"scope":2686,"src":"4838:88:10","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":2687,"src":"267:4661:10","usedErrors":[],"usedEvents":[2585,2594,2603]}],"src":"108:4821:10"},"id":10},"@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol","exportedSymbols":{"IERC721Receiver":[2704]},"id":2705,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":2688,"literals":["solidity",">=","0.5",".0"],"nodeType":"PragmaDirective","src":"116:24:11"},{"abstract":false,"baseContracts":[],"canonicalName":"IERC721Receiver","contractDependencies":[],"contractKind":"interface","documentation":{"id":2689,"nodeType":"StructuredDocumentation","src":"142:154:11","text":" @title ERC-721 token receiver interface\n @dev Interface for any contract that wants to support safeTransfers\n from ERC-721 asset contracts."},"fullyImplemented":false,"id":2704,"linearizedBaseContracts":[2704],"name":"IERC721Receiver","nameLocation":"307:15:11","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":2690,"nodeType":"StructuredDocumentation","src":"329:500:11","text":" @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}\n by `operator` from `from`, this function is called.\n It must return its Solidity selector to confirm the token transfer.\n If any other value is returned or the interface is not implemented by the recipient, the transfer will be\n reverted.\n The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`."},"functionSelector":"150b7a02","id":2703,"implemented":false,"kind":"function","modifiers":[],"name":"onERC721Received","nameLocation":"843:16:11","nodeType":"FunctionDefinition","parameters":{"id":2699,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2692,"mutability":"mutable","name":"operator","nameLocation":"877:8:11","nodeType":"VariableDeclaration","scope":2703,"src":"869:16:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2691,"name":"address","nodeType":"ElementaryTypeName","src":"869:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2694,"mutability":"mutable","name":"from","nameLocation":"903:4:11","nodeType":"VariableDeclaration","scope":2703,"src":"895:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2693,"name":"address","nodeType":"ElementaryTypeName","src":"895:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2696,"mutability":"mutable","name":"tokenId","nameLocation":"925:7:11","nodeType":"VariableDeclaration","scope":2703,"src":"917:15:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2695,"name":"uint256","nodeType":"ElementaryTypeName","src":"917:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2698,"mutability":"mutable","name":"data","nameLocation":"957:4:11","nodeType":"VariableDeclaration","scope":2703,"src":"942:19:11","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2697,"name":"bytes","nodeType":"ElementaryTypeName","src":"942:5:11","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"859:108:11"},"returnParameters":{"id":2702,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2701,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2703,"src":"986:6:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":2700,"name":"bytes4","nodeType":"ElementaryTypeName","src":"986:6:11","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"985:8:11"},"scope":2704,"src":"834:160:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":2705,"src":"297:699:11","usedErrors":[],"usedEvents":[]}],"src":"116:881:11"},"id":11},"@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol","exportedSymbols":{"IERC721":[2686],"IERC721Metadata":[2732]},"id":2733,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":2706,"literals":["solidity",">=","0.6",".2"],"nodeType":"PragmaDirective","src":"127:24:12"},{"absolutePath":"@openzeppelin/contracts/token/ERC721/IERC721.sol","file":"../IERC721.sol","id":2708,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2733,"sourceUnit":2687,"src":"153:39:12","symbolAliases":[{"foreign":{"id":2707,"name":"IERC721","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2686,"src":"161:7:12","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":2710,"name":"IERC721","nameLocations":["357:7:12"],"nodeType":"IdentifierPath","referencedDeclaration":2686,"src":"357:7:12"},"id":2711,"nodeType":"InheritanceSpecifier","src":"357:7:12"}],"canonicalName":"IERC721Metadata","contractDependencies":[],"contractKind":"interface","documentation":{"id":2709,"nodeType":"StructuredDocumentation","src":"194:133:12","text":" @title ERC-721 Non-Fungible Token Standard, optional metadata extension\n @dev See https://eips.ethereum.org/EIPS/eip-721"},"fullyImplemented":false,"id":2732,"linearizedBaseContracts":[2732,2686,5850],"name":"IERC721Metadata","nameLocation":"338:15:12","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":2712,"nodeType":"StructuredDocumentation","src":"371:58:12","text":" @dev Returns the token collection name."},"functionSelector":"06fdde03","id":2717,"implemented":false,"kind":"function","modifiers":[],"name":"name","nameLocation":"443:4:12","nodeType":"FunctionDefinition","parameters":{"id":2713,"nodeType":"ParameterList","parameters":[],"src":"447:2:12"},"returnParameters":{"id":2716,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2715,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2717,"src":"473:13:12","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":2714,"name":"string","nodeType":"ElementaryTypeName","src":"473:6:12","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"472:15:12"},"scope":2732,"src":"434:54:12","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2718,"nodeType":"StructuredDocumentation","src":"494:60:12","text":" @dev Returns the token collection symbol."},"functionSelector":"95d89b41","id":2723,"implemented":false,"kind":"function","modifiers":[],"name":"symbol","nameLocation":"568:6:12","nodeType":"FunctionDefinition","parameters":{"id":2719,"nodeType":"ParameterList","parameters":[],"src":"574:2:12"},"returnParameters":{"id":2722,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2721,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2723,"src":"600:13:12","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":2720,"name":"string","nodeType":"ElementaryTypeName","src":"600:6:12","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"599:15:12"},"scope":2732,"src":"559:56:12","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2724,"nodeType":"StructuredDocumentation","src":"621:90:12","text":" @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token."},"functionSelector":"c87b56dd","id":2731,"implemented":false,"kind":"function","modifiers":[],"name":"tokenURI","nameLocation":"725:8:12","nodeType":"FunctionDefinition","parameters":{"id":2727,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2726,"mutability":"mutable","name":"tokenId","nameLocation":"742:7:12","nodeType":"VariableDeclaration","scope":2731,"src":"734:15:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2725,"name":"uint256","nodeType":"ElementaryTypeName","src":"734:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"733:17:12"},"returnParameters":{"id":2730,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2729,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2731,"src":"774:13:12","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":2728,"name":"string","nodeType":"ElementaryTypeName","src":"774:6:12","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"773:15:12"},"scope":2732,"src":"716:73:12","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":2733,"src":"328:463:12","usedErrors":[],"usedEvents":[2585,2594,2603]}],"src":"127:665:12"},"id":12},"@openzeppelin/contracts/token/ERC721/utils/ERC721Utils.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/token/ERC721/utils/ERC721Utils.sol","exportedSymbols":{"ERC721Utils":[2809],"IERC721Errors":[1550],"IERC721Receiver":[2704]},"id":2810,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":2734,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"118:24:13"},{"absolutePath":"@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol","file":"../IERC721Receiver.sol","id":2736,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2810,"sourceUnit":2705,"src":"144:55:13","symbolAliases":[{"foreign":{"id":2735,"name":"IERC721Receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2704,"src":"152:15:13","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/interfaces/draft-IERC6093.sol","file":"../../../interfaces/draft-IERC6093.sol","id":2738,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2810,"sourceUnit":1598,"src":"200:69:13","symbolAliases":[{"foreign":{"id":2737,"name":"IERC721Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1550,"src":"208:13:13","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"ERC721Utils","contractDependencies":[],"contractKind":"library","documentation":{"id":2739,"nodeType":"StructuredDocumentation","src":"271:160:13","text":" @dev Library that provides common ERC-721 utility functions.\n See https://eips.ethereum.org/EIPS/eip-721[ERC-721].\n _Available since v5.1._"},"fullyImplemented":true,"id":2809,"linearizedBaseContracts":[2809],"name":"ERC721Utils","nameLocation":"440:11:13","nodeType":"ContractDefinition","nodes":[{"body":{"id":2807,"nodeType":"Block","src":"1160:760:13","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2757,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":2753,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2746,"src":"1174:2:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2754,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1177:4:13","memberName":"code","nodeType":"MemberAccess","src":"1174:7:13","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":2755,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1182:6:13","memberName":"length","nodeType":"MemberAccess","src":"1174:14:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":2756,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1191:1:13","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1174:18:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2806,"nodeType":"IfStatement","src":"1170:744:13","trueBody":{"id":2805,"nodeType":"Block","src":"1194:720:13","statements":[{"clauses":[{"block":{"id":2783,"nodeType":"Block","src":"1304:214:13","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":2774,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2770,"name":"retval","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2768,"src":"1326:6:13","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"expression":{"id":2771,"name":"IERC721Receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2704,"src":"1336:15:13","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC721Receiver_$2704_$","typeString":"type(contract IERC721Receiver)"}},"id":2772,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1352:16:13","memberName":"onERC721Received","nodeType":"MemberAccess","referencedDeclaration":2703,"src":"1336:32:13","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_calldata_ptr_$returns$_t_bytes4_$","typeString":"function IERC721Receiver.onERC721Received(address,address,uint256,bytes calldata) returns (bytes4)"}},"id":2773,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1369:8:13","memberName":"selector","nodeType":"MemberAccess","src":"1336:41:13","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"1326:51:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2782,"nodeType":"IfStatement","src":"1322:182:13","trueBody":{"id":2781,"nodeType":"Block","src":"1379:125:13","statements":[{"errorCall":{"arguments":[{"id":2778,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2746,"src":"1482:2:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":2775,"name":"IERC721Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1550,"src":"1446:13:13","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC721Errors_$1550_$","typeString":"type(contract IERC721Errors)"}},"id":2777,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1460:21:13","memberName":"ERC721InvalidReceiver","nodeType":"MemberAccess","referencedDeclaration":1532,"src":"1446:35:13","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":2779,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1446:39:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2780,"nodeType":"RevertStatement","src":"1439:46:13"}]}}]},"errorName":"","id":2784,"nodeType":"TryCatchClause","parameters":{"id":2769,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2768,"mutability":"mutable","name":"retval","nameLocation":"1296:6:13","nodeType":"VariableDeclaration","scope":2784,"src":"1289:13:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":2767,"name":"bytes4","nodeType":"ElementaryTypeName","src":"1289:6:13","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"1288:15:13"},"src":"1280:238:13"},{"block":{"id":2802,"nodeType":"Block","src":"1547:357:13","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2791,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2788,"name":"reason","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2786,"src":"1569:6:13","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":2789,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1576:6:13","memberName":"length","nodeType":"MemberAccess","src":"1569:13:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2790,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1586:1:13","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1569:18:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":2800,"nodeType":"Block","src":"1737:153:13","statements":[{"AST":{"nativeSrc":"1784:88:13","nodeType":"YulBlock","src":"1784:88:13","statements":[{"expression":{"arguments":[{"arguments":[{"name":"reason","nativeSrc":"1821:6:13","nodeType":"YulIdentifier","src":"1821:6:13"},{"kind":"number","nativeSrc":"1829:4:13","nodeType":"YulLiteral","src":"1829:4:13","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"1817:3:13","nodeType":"YulIdentifier","src":"1817:3:13"},"nativeSrc":"1817:17:13","nodeType":"YulFunctionCall","src":"1817:17:13"},{"arguments":[{"name":"reason","nativeSrc":"1842:6:13","nodeType":"YulIdentifier","src":"1842:6:13"}],"functionName":{"name":"mload","nativeSrc":"1836:5:13","nodeType":"YulIdentifier","src":"1836:5:13"},"nativeSrc":"1836:13:13","nodeType":"YulFunctionCall","src":"1836:13:13"}],"functionName":{"name":"revert","nativeSrc":"1810:6:13","nodeType":"YulIdentifier","src":"1810:6:13"},"nativeSrc":"1810:40:13","nodeType":"YulFunctionCall","src":"1810:40:13"},"nativeSrc":"1810:40:13","nodeType":"YulExpressionStatement","src":"1810:40:13"}]},"evmVersion":"cancun","externalReferences":[{"declaration":2786,"isOffset":false,"isSlot":false,"src":"1821:6:13","valueSize":1},{"declaration":2786,"isOffset":false,"isSlot":false,"src":"1842:6:13","valueSize":1}],"flags":["memory-safe"],"id":2799,"nodeType":"InlineAssembly","src":"1759:113:13"}]},"id":2801,"nodeType":"IfStatement","src":"1565:325:13","trueBody":{"id":2798,"nodeType":"Block","src":"1589:142:13","statements":[{"errorCall":{"arguments":[{"id":2795,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2746,"src":"1709:2:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":2792,"name":"IERC721Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1550,"src":"1673:13:13","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC721Errors_$1550_$","typeString":"type(contract IERC721Errors)"}},"id":2794,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1687:21:13","memberName":"ERC721InvalidReceiver","nodeType":"MemberAccess","referencedDeclaration":1532,"src":"1673:35:13","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":2796,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1673:39:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2797,"nodeType":"RevertStatement","src":"1666:46:13"}]}}]},"errorName":"","id":2803,"nodeType":"TryCatchClause","parameters":{"id":2787,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2786,"mutability":"mutable","name":"reason","nameLocation":"1539:6:13","nodeType":"VariableDeclaration","scope":2803,"src":"1526:19:13","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2785,"name":"bytes","nodeType":"ElementaryTypeName","src":"1526:5:13","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1525:21:13"},"src":"1519:385:13"}],"externalCall":{"arguments":[{"id":2762,"name":"operator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2742,"src":"1249:8:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2763,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2744,"src":"1259:4:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2764,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2748,"src":"1265:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2765,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2750,"src":"1274:4:13","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"arguments":[{"id":2759,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2746,"src":"1228:2:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2758,"name":"IERC721Receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2704,"src":"1212:15:13","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC721Receiver_$2704_$","typeString":"type(contract IERC721Receiver)"}},"id":2760,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1212:19:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC721Receiver_$2704","typeString":"contract IERC721Receiver"}},"id":2761,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1232:16:13","memberName":"onERC721Received","nodeType":"MemberAccess","referencedDeclaration":2703,"src":"1212:36:13","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bytes4_$","typeString":"function (address,address,uint256,bytes memory) external returns (bytes4)"}},"id":2766,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1212:67:13","tryCall":true,"typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"id":2804,"nodeType":"TryStatement","src":"1208:696:13"}]}}]},"documentation":{"id":2740,"nodeType":"StructuredDocumentation","src":"458:531:13","text":" @dev Performs an acceptance check for the provided `operator` by calling {IERC721Receiver-onERC721Received}\n on the `to` address. The `operator` is generally the address that initiated the token transfer (i.e. `msg.sender`).\n The acceptance call is not executed and treated as a no-op if the target address doesn't contain code (i.e. an EOA).\n Otherwise, the recipient must implement {IERC721Receiver-onERC721Received} and return the acceptance magic value to accept\n the transfer."},"id":2808,"implemented":true,"kind":"function","modifiers":[],"name":"checkOnERC721Received","nameLocation":"1003:21:13","nodeType":"FunctionDefinition","parameters":{"id":2751,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2742,"mutability":"mutable","name":"operator","nameLocation":"1042:8:13","nodeType":"VariableDeclaration","scope":2808,"src":"1034:16:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2741,"name":"address","nodeType":"ElementaryTypeName","src":"1034:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2744,"mutability":"mutable","name":"from","nameLocation":"1068:4:13","nodeType":"VariableDeclaration","scope":2808,"src":"1060:12:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2743,"name":"address","nodeType":"ElementaryTypeName","src":"1060:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2746,"mutability":"mutable","name":"to","nameLocation":"1090:2:13","nodeType":"VariableDeclaration","scope":2808,"src":"1082:10:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2745,"name":"address","nodeType":"ElementaryTypeName","src":"1082:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2748,"mutability":"mutable","name":"tokenId","nameLocation":"1110:7:13","nodeType":"VariableDeclaration","scope":2808,"src":"1102:15:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2747,"name":"uint256","nodeType":"ElementaryTypeName","src":"1102:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2750,"mutability":"mutable","name":"data","nameLocation":"1140:4:13","nodeType":"VariableDeclaration","scope":2808,"src":"1127:17:13","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2749,"name":"bytes","nodeType":"ElementaryTypeName","src":"1127:5:13","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1024:126:13"},"returnParameters":{"id":2752,"nodeType":"ParameterList","parameters":[],"src":"1160:0:13"},"scope":2809,"src":"994:926:13","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":2810,"src":"432:1490:13","usedErrors":[],"usedEvents":[]}],"src":"118:1805:13"},"id":13},"@openzeppelin/contracts/token/common/ERC2981.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/token/common/ERC2981.sol","exportedSymbols":{"ERC165":[5838],"ERC2981":[3076],"IERC165":[5850],"IERC2981":[1450]},"id":3077,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":2811,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"108:24:14"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC2981.sol","file":"../../interfaces/IERC2981.sol","id":2813,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3077,"sourceUnit":1451,"src":"134:55:14","symbolAliases":[{"foreign":{"id":2812,"name":"IERC2981","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1450,"src":"142:8:14","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/introspection/ERC165.sol","file":"../../utils/introspection/ERC165.sol","id":2816,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3077,"sourceUnit":5839,"src":"190:69:14","symbolAliases":[{"foreign":{"id":2814,"name":"IERC165","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5850,"src":"198:7:14","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":2815,"name":"ERC165","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5838,"src":"207:6:14","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":2818,"name":"IERC2981","nameLocations":["1135:8:14"],"nodeType":"IdentifierPath","referencedDeclaration":1450,"src":"1135:8:14"},"id":2819,"nodeType":"InheritanceSpecifier","src":"1135:8:14"},{"baseName":{"id":2820,"name":"ERC165","nameLocations":["1145:6:14"],"nodeType":"IdentifierPath","referencedDeclaration":5838,"src":"1145:6:14"},"id":2821,"nodeType":"InheritanceSpecifier","src":"1145:6:14"}],"canonicalName":"ERC2981","contractDependencies":[],"contractKind":"contract","documentation":{"id":2817,"nodeType":"StructuredDocumentation","src":"261:844:14","text":" @dev Implementation of the NFT Royalty Standard, a standardized way to retrieve royalty payment information.\n Royalty information can be specified globally for all token ids via {_setDefaultRoyalty}, and/or individually for\n specific token ids via {_setTokenRoyalty}. The latter takes precedence over the first.\n Royalty is specified as a fraction of sale price. {_feeDenominator} is overridable but defaults to 10000, meaning the\n fee is specified in basis points by default.\n IMPORTANT: ERC-2981 only specifies a way to signal royalty information and does not enforce its payment. See\n https://eips.ethereum.org/EIPS/eip-2981#optional-royalty-payments[Rationale] in the ERC. Marketplaces are expected to\n voluntarily pay royalties together with sales, but note that this standard is not yet widely supported."},"fullyImplemented":true,"id":3076,"linearizedBaseContracts":[3076,5838,1450,5850],"name":"ERC2981","nameLocation":"1124:7:14","nodeType":"ContractDefinition","nodes":[{"canonicalName":"ERC2981.RoyaltyInfo","id":2826,"members":[{"constant":false,"id":2823,"mutability":"mutable","name":"receiver","nameLocation":"1195:8:14","nodeType":"VariableDeclaration","scope":2826,"src":"1187:16:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2822,"name":"address","nodeType":"ElementaryTypeName","src":"1187:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2825,"mutability":"mutable","name":"royaltyFraction","nameLocation":"1220:15:14","nodeType":"VariableDeclaration","scope":2826,"src":"1213:22:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"},"typeName":{"id":2824,"name":"uint96","nodeType":"ElementaryTypeName","src":"1213:6:14","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"visibility":"internal"}],"name":"RoyaltyInfo","nameLocation":"1165:11:14","nodeType":"StructDefinition","scope":3076,"src":"1158:84:14","visibility":"public"},{"constant":false,"id":2829,"mutability":"mutable","name":"_defaultRoyaltyInfo","nameLocation":"1268:19:14","nodeType":"VariableDeclaration","scope":3076,"src":"1248:39:14","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_RoyaltyInfo_$2826_storage","typeString":"struct ERC2981.RoyaltyInfo"},"typeName":{"id":2828,"nodeType":"UserDefinedTypeName","pathNode":{"id":2827,"name":"RoyaltyInfo","nameLocations":["1248:11:14"],"nodeType":"IdentifierPath","referencedDeclaration":2826,"src":"1248:11:14"},"referencedDeclaration":2826,"src":"1248:11:14","typeDescriptions":{"typeIdentifier":"t_struct$_RoyaltyInfo_$2826_storage_ptr","typeString":"struct ERC2981.RoyaltyInfo"}},"visibility":"private"},{"constant":false,"id":2834,"mutability":"mutable","name":"_tokenRoyaltyInfo","nameLocation":"1341:17:14","nodeType":"VariableDeclaration","scope":3076,"src":"1293:65:14","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_RoyaltyInfo_$2826_storage_$","typeString":"mapping(uint256 => struct ERC2981.RoyaltyInfo)"},"typeName":{"id":2833,"keyName":"tokenId","keyNameLocation":"1309:7:14","keyType":{"id":2830,"name":"uint256","nodeType":"ElementaryTypeName","src":"1301:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"1293:39:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_RoyaltyInfo_$2826_storage_$","typeString":"mapping(uint256 => struct ERC2981.RoyaltyInfo)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":2832,"nodeType":"UserDefinedTypeName","pathNode":{"id":2831,"name":"RoyaltyInfo","nameLocations":["1320:11:14"],"nodeType":"IdentifierPath","referencedDeclaration":2826,"src":"1320:11:14"},"referencedDeclaration":2826,"src":"1320:11:14","typeDescriptions":{"typeIdentifier":"t_struct$_RoyaltyInfo_$2826_storage_ptr","typeString":"struct ERC2981.RoyaltyInfo"}}},"visibility":"private"},{"documentation":{"id":2835,"nodeType":"StructuredDocumentation","src":"1365:96:14","text":" @dev The default royalty set is invalid (eg. (numerator / denominator) >= 1)."},"errorSelector":"6f483d09","id":2841,"name":"ERC2981InvalidDefaultRoyalty","nameLocation":"1472:28:14","nodeType":"ErrorDefinition","parameters":{"id":2840,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2837,"mutability":"mutable","name":"numerator","nameLocation":"1509:9:14","nodeType":"VariableDeclaration","scope":2841,"src":"1501:17:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2836,"name":"uint256","nodeType":"ElementaryTypeName","src":"1501:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2839,"mutability":"mutable","name":"denominator","nameLocation":"1528:11:14","nodeType":"VariableDeclaration","scope":2841,"src":"1520:19:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2838,"name":"uint256","nodeType":"ElementaryTypeName","src":"1520:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1500:40:14"},"src":"1466:75:14"},{"documentation":{"id":2842,"nodeType":"StructuredDocumentation","src":"1547:64:14","text":" @dev The default royalty receiver is invalid."},"errorSelector":"b6d9900a","id":2846,"name":"ERC2981InvalidDefaultRoyaltyReceiver","nameLocation":"1622:36:14","nodeType":"ErrorDefinition","parameters":{"id":2845,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2844,"mutability":"mutable","name":"receiver","nameLocation":"1667:8:14","nodeType":"VariableDeclaration","scope":2846,"src":"1659:16:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2843,"name":"address","nodeType":"ElementaryTypeName","src":"1659:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1658:18:14"},"src":"1616:61:14"},{"documentation":{"id":2847,"nodeType":"StructuredDocumentation","src":"1683:113:14","text":" @dev The royalty set for a specific `tokenId` is invalid (eg. (numerator / denominator) >= 1)."},"errorSelector":"dfd1fc1b","id":2855,"name":"ERC2981InvalidTokenRoyalty","nameLocation":"1807:26:14","nodeType":"ErrorDefinition","parameters":{"id":2854,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2849,"mutability":"mutable","name":"tokenId","nameLocation":"1842:7:14","nodeType":"VariableDeclaration","scope":2855,"src":"1834:15:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2848,"name":"uint256","nodeType":"ElementaryTypeName","src":"1834:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2851,"mutability":"mutable","name":"numerator","nameLocation":"1859:9:14","nodeType":"VariableDeclaration","scope":2855,"src":"1851:17:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2850,"name":"uint256","nodeType":"ElementaryTypeName","src":"1851:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2853,"mutability":"mutable","name":"denominator","nameLocation":"1878:11:14","nodeType":"VariableDeclaration","scope":2855,"src":"1870:19:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2852,"name":"uint256","nodeType":"ElementaryTypeName","src":"1870:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1833:57:14"},"src":"1801:90:14"},{"documentation":{"id":2856,"nodeType":"StructuredDocumentation","src":"1897:70:14","text":" @dev The royalty receiver for `tokenId` is invalid."},"errorSelector":"969f0852","id":2862,"name":"ERC2981InvalidTokenRoyaltyReceiver","nameLocation":"1978:34:14","nodeType":"ErrorDefinition","parameters":{"id":2861,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2858,"mutability":"mutable","name":"tokenId","nameLocation":"2021:7:14","nodeType":"VariableDeclaration","scope":2862,"src":"2013:15:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2857,"name":"uint256","nodeType":"ElementaryTypeName","src":"2013:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2860,"mutability":"mutable","name":"receiver","nameLocation":"2038:8:14","nodeType":"VariableDeclaration","scope":2862,"src":"2030:16:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2859,"name":"address","nodeType":"ElementaryTypeName","src":"2030:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2012:35:14"},"src":"1972:76:14"},{"baseFunctions":[5837,5849],"body":{"id":2885,"nodeType":"Block","src":"2190:105:14","statements":[{"expression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":2883,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":2878,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2873,"name":"interfaceId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2865,"src":"2207:11:14","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"arguments":[{"id":2875,"name":"IERC2981","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1450,"src":"2227:8:14","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC2981_$1450_$","typeString":"type(contract IERC2981)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_contract$_IERC2981_$1450_$","typeString":"type(contract IERC2981)"}],"id":2874,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967269,"src":"2222:4:14","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":2876,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2222:14:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_contract$_IERC2981_$1450","typeString":"type(contract IERC2981)"}},"id":2877,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2237:11:14","memberName":"interfaceId","nodeType":"MemberAccess","src":"2222:26:14","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"2207:41:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"arguments":[{"id":2881,"name":"interfaceId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2865,"src":"2276:11:14","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"expression":{"id":2879,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967271,"src":"2252:5:14","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_ERC2981_$3076_$","typeString":"type(contract super ERC2981)"}},"id":2880,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2258:17:14","memberName":"supportsInterface","nodeType":"MemberAccess","referencedDeclaration":5837,"src":"2252:23:14","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes4_$returns$_t_bool_$","typeString":"function (bytes4) view returns (bool)"}},"id":2882,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2252:36:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2207:81:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":2872,"id":2884,"nodeType":"Return","src":"2200:88:14"}]},"documentation":{"id":2863,"nodeType":"StructuredDocumentation","src":"2054:23:14","text":"@inheritdoc IERC165"},"functionSelector":"01ffc9a7","id":2886,"implemented":true,"kind":"function","modifiers":[],"name":"supportsInterface","nameLocation":"2091:17:14","nodeType":"FunctionDefinition","overrides":{"id":2869,"nodeType":"OverrideSpecifier","overrides":[{"id":2867,"name":"IERC165","nameLocations":["2158:7:14"],"nodeType":"IdentifierPath","referencedDeclaration":5850,"src":"2158:7:14"},{"id":2868,"name":"ERC165","nameLocations":["2167:6:14"],"nodeType":"IdentifierPath","referencedDeclaration":5838,"src":"2167:6:14"}],"src":"2149:25:14"},"parameters":{"id":2866,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2865,"mutability":"mutable","name":"interfaceId","nameLocation":"2116:11:14","nodeType":"VariableDeclaration","scope":2886,"src":"2109:18:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":2864,"name":"bytes4","nodeType":"ElementaryTypeName","src":"2109:6:14","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"2108:20:14"},"returnParameters":{"id":2872,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2871,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2886,"src":"2184:4:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2870,"name":"bool","nodeType":"ElementaryTypeName","src":"2184:4:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2183:6:14"},"scope":3076,"src":"2082:213:14","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[1449],"body":{"id":2947,"nodeType":"Block","src":"2472:515:14","statements":[{"assignments":[2900],"declarations":[{"constant":false,"id":2900,"mutability":"mutable","name":"_royaltyInfo","nameLocation":"2502:12:14","nodeType":"VariableDeclaration","scope":2947,"src":"2482:32:14","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_RoyaltyInfo_$2826_storage_ptr","typeString":"struct ERC2981.RoyaltyInfo"},"typeName":{"id":2899,"nodeType":"UserDefinedTypeName","pathNode":{"id":2898,"name":"RoyaltyInfo","nameLocations":["2482:11:14"],"nodeType":"IdentifierPath","referencedDeclaration":2826,"src":"2482:11:14"},"referencedDeclaration":2826,"src":"2482:11:14","typeDescriptions":{"typeIdentifier":"t_struct$_RoyaltyInfo_$2826_storage_ptr","typeString":"struct ERC2981.RoyaltyInfo"}},"visibility":"internal"}],"id":2904,"initialValue":{"baseExpression":{"id":2901,"name":"_tokenRoyaltyInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2834,"src":"2517:17:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_RoyaltyInfo_$2826_storage_$","typeString":"mapping(uint256 => struct ERC2981.RoyaltyInfo storage ref)"}},"id":2903,"indexExpression":{"id":2902,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2889,"src":"2535:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2517:26:14","typeDescriptions":{"typeIdentifier":"t_struct$_RoyaltyInfo_$2826_storage","typeString":"struct ERC2981.RoyaltyInfo storage ref"}},"nodeType":"VariableDeclarationStatement","src":"2482:61:14"},{"assignments":[2906],"declarations":[{"constant":false,"id":2906,"mutability":"mutable","name":"royaltyReceiver","nameLocation":"2561:15:14","nodeType":"VariableDeclaration","scope":2947,"src":"2553:23:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2905,"name":"address","nodeType":"ElementaryTypeName","src":"2553:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":2909,"initialValue":{"expression":{"id":2907,"name":"_royaltyInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2900,"src":"2579:12:14","typeDescriptions":{"typeIdentifier":"t_struct$_RoyaltyInfo_$2826_storage_ptr","typeString":"struct ERC2981.RoyaltyInfo storage pointer"}},"id":2908,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2592:8:14","memberName":"receiver","nodeType":"MemberAccess","referencedDeclaration":2823,"src":"2579:21:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"2553:47:14"},{"assignments":[2911],"declarations":[{"constant":false,"id":2911,"mutability":"mutable","name":"royaltyFraction","nameLocation":"2617:15:14","nodeType":"VariableDeclaration","scope":2947,"src":"2610:22:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"},"typeName":{"id":2910,"name":"uint96","nodeType":"ElementaryTypeName","src":"2610:6:14","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"visibility":"internal"}],"id":2914,"initialValue":{"expression":{"id":2912,"name":"_royaltyInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2900,"src":"2635:12:14","typeDescriptions":{"typeIdentifier":"t_struct$_RoyaltyInfo_$2826_storage_ptr","typeString":"struct ERC2981.RoyaltyInfo storage pointer"}},"id":2913,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2648:15:14","memberName":"royaltyFraction","nodeType":"MemberAccess","referencedDeclaration":2825,"src":"2635:28:14","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"nodeType":"VariableDeclarationStatement","src":"2610:53:14"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2920,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2915,"name":"royaltyReceiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2906,"src":"2678:15:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":2918,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2705:1:14","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":2917,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2697:7:14","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2916,"name":"address","nodeType":"ElementaryTypeName","src":"2697:7:14","typeDescriptions":{}}},"id":2919,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2697:10:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2678:29:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2932,"nodeType":"IfStatement","src":"2674:173:14","trueBody":{"id":2931,"nodeType":"Block","src":"2709:138:14","statements":[{"expression":{"id":2924,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2921,"name":"royaltyReceiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2906,"src":"2723:15:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":2922,"name":"_defaultRoyaltyInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2829,"src":"2741:19:14","typeDescriptions":{"typeIdentifier":"t_struct$_RoyaltyInfo_$2826_storage","typeString":"struct ERC2981.RoyaltyInfo storage ref"}},"id":2923,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2761:8:14","memberName":"receiver","nodeType":"MemberAccess","referencedDeclaration":2823,"src":"2741:28:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2723:46:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2925,"nodeType":"ExpressionStatement","src":"2723:46:14"},{"expression":{"id":2929,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2926,"name":"royaltyFraction","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2911,"src":"2783:15:14","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":2927,"name":"_defaultRoyaltyInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2829,"src":"2801:19:14","typeDescriptions":{"typeIdentifier":"t_struct$_RoyaltyInfo_$2826_storage","typeString":"struct ERC2981.RoyaltyInfo storage ref"}},"id":2928,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2821:15:14","memberName":"royaltyFraction","nodeType":"MemberAccess","referencedDeclaration":2825,"src":"2801:35:14","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"src":"2783:53:14","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"id":2930,"nodeType":"ExpressionStatement","src":"2783:53:14"}]}},{"assignments":[2934],"declarations":[{"constant":false,"id":2934,"mutability":"mutable","name":"royaltyAmount","nameLocation":"2865:13:14","nodeType":"VariableDeclaration","scope":2947,"src":"2857:21:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2933,"name":"uint256","nodeType":"ElementaryTypeName","src":"2857:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2942,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2941,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2937,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2935,"name":"salePrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2891,"src":"2882:9:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":2936,"name":"royaltyFraction","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2911,"src":"2894:15:14","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"src":"2882:27:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":2938,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2881:29:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":2939,"name":"_feeDenominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2957,"src":"2913:15:14","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_uint96_$","typeString":"function () pure returns (uint96)"}},"id":2940,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2913:17:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"src":"2881:49:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2857:73:14"},{"expression":{"components":[{"id":2943,"name":"royaltyReceiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2906,"src":"2949:15:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2944,"name":"royaltyAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2934,"src":"2966:13:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":2945,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2948:32:14","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}},"functionReturnParameters":2897,"id":2946,"nodeType":"Return","src":"2941:39:14"}]},"documentation":{"id":2887,"nodeType":"StructuredDocumentation","src":"2301:24:14","text":"@inheritdoc IERC2981"},"functionSelector":"2a55205a","id":2948,"implemented":true,"kind":"function","modifiers":[],"name":"royaltyInfo","nameLocation":"2339:11:14","nodeType":"FunctionDefinition","parameters":{"id":2892,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2889,"mutability":"mutable","name":"tokenId","nameLocation":"2368:7:14","nodeType":"VariableDeclaration","scope":2948,"src":"2360:15:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2888,"name":"uint256","nodeType":"ElementaryTypeName","src":"2360:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2891,"mutability":"mutable","name":"salePrice","nameLocation":"2393:9:14","nodeType":"VariableDeclaration","scope":2948,"src":"2385:17:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2890,"name":"uint256","nodeType":"ElementaryTypeName","src":"2385:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2350:58:14"},"returnParameters":{"id":2897,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2894,"mutability":"mutable","name":"receiver","nameLocation":"2446:8:14","nodeType":"VariableDeclaration","scope":2948,"src":"2438:16:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2893,"name":"address","nodeType":"ElementaryTypeName","src":"2438:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2896,"mutability":"mutable","name":"amount","nameLocation":"2464:6:14","nodeType":"VariableDeclaration","scope":2948,"src":"2456:14:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2895,"name":"uint256","nodeType":"ElementaryTypeName","src":"2456:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2437:34:14"},"scope":3076,"src":"2330:657:14","stateMutability":"view","virtual":true,"visibility":"public"},{"body":{"id":2956,"nodeType":"Block","src":"3328:29:14","statements":[{"expression":{"hexValue":"3130303030","id":2954,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3345:5:14","typeDescriptions":{"typeIdentifier":"t_rational_10000_by_1","typeString":"int_const 10000"},"value":"10000"},"functionReturnParameters":2953,"id":2955,"nodeType":"Return","src":"3338:12:14"}]},"documentation":{"id":2949,"nodeType":"StructuredDocumentation","src":"2993:264:14","text":" @dev The denominator with which to interpret the fee set in {_setTokenRoyalty} and {_setDefaultRoyalty} as a\n fraction of the sale price. Defaults to 10000 so fees are expressed in basis points, but may be customized by an\n override."},"id":2957,"implemented":true,"kind":"function","modifiers":[],"name":"_feeDenominator","nameLocation":"3271:15:14","nodeType":"FunctionDefinition","parameters":{"id":2950,"nodeType":"ParameterList","parameters":[],"src":"3286:2:14"},"returnParameters":{"id":2953,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2952,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2957,"src":"3320:6:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"},"typeName":{"id":2951,"name":"uint96","nodeType":"ElementaryTypeName","src":"3320:6:14","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"visibility":"internal"}],"src":"3319:8:14"},"scope":3076,"src":"3262:95:14","stateMutability":"pure","virtual":true,"visibility":"internal"},{"body":{"id":3002,"nodeType":"Block","src":"3702:423:14","statements":[{"assignments":[2966],"declarations":[{"constant":false,"id":2966,"mutability":"mutable","name":"denominator","nameLocation":"3720:11:14","nodeType":"VariableDeclaration","scope":3002,"src":"3712:19:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2965,"name":"uint256","nodeType":"ElementaryTypeName","src":"3712:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2969,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":2967,"name":"_feeDenominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2957,"src":"3734:15:14","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_uint96_$","typeString":"function () pure returns (uint96)"}},"id":2968,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3734:17:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"nodeType":"VariableDeclarationStatement","src":"3712:39:14"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2972,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2970,"name":"feeNumerator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2962,"src":"3765:12:14","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":2971,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2966,"src":"3780:11:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3765:26:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2979,"nodeType":"IfStatement","src":"3761:173:14","trueBody":{"id":2978,"nodeType":"Block","src":"3793:141:14","statements":[{"errorCall":{"arguments":[{"id":2974,"name":"feeNumerator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2962,"src":"3897:12:14","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},{"id":2975,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2966,"src":"3911:11:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint96","typeString":"uint96"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2973,"name":"ERC2981InvalidDefaultRoyalty","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2841,"src":"3868:28:14","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (uint256,uint256) pure returns (error)"}},"id":2976,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3868:55:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2977,"nodeType":"RevertStatement","src":"3861:62:14"}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2985,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2980,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2960,"src":"3947:8:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":2983,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3967:1:14","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":2982,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3959:7:14","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2981,"name":"address","nodeType":"ElementaryTypeName","src":"3959:7:14","typeDescriptions":{}}},"id":2984,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3959:10:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3947:22:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2994,"nodeType":"IfStatement","src":"3943:108:14","trueBody":{"id":2993,"nodeType":"Block","src":"3971:80:14","statements":[{"errorCall":{"arguments":[{"arguments":[{"hexValue":"30","id":2989,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4037:1:14","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":2988,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4029:7:14","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2987,"name":"address","nodeType":"ElementaryTypeName","src":"4029:7:14","typeDescriptions":{}}},"id":2990,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4029:10:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2986,"name":"ERC2981InvalidDefaultRoyaltyReceiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2846,"src":"3992:36:14","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":2991,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3992:48:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2992,"nodeType":"RevertStatement","src":"3985:55:14"}]}},{"expression":{"id":3000,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2995,"name":"_defaultRoyaltyInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2829,"src":"4061:19:14","typeDescriptions":{"typeIdentifier":"t_struct$_RoyaltyInfo_$2826_storage","typeString":"struct ERC2981.RoyaltyInfo storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":2997,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2960,"src":"4095:8:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2998,"name":"feeNumerator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2962,"src":"4105:12:14","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint96","typeString":"uint96"}],"id":2996,"name":"RoyaltyInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2826,"src":"4083:11:14","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_RoyaltyInfo_$2826_storage_ptr_$","typeString":"type(struct ERC2981.RoyaltyInfo storage pointer)"}},"id":2999,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4083:35:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_RoyaltyInfo_$2826_memory_ptr","typeString":"struct ERC2981.RoyaltyInfo memory"}},"src":"4061:57:14","typeDescriptions":{"typeIdentifier":"t_struct$_RoyaltyInfo_$2826_storage","typeString":"struct ERC2981.RoyaltyInfo storage ref"}},"id":3001,"nodeType":"ExpressionStatement","src":"4061:57:14"}]},"documentation":{"id":2958,"nodeType":"StructuredDocumentation","src":"3363:250:14","text":" @dev Sets the royalty information that all ids in this contract will default to.\n Requirements:\n - `receiver` cannot be the zero address.\n - `feeNumerator` cannot be greater than the fee denominator."},"id":3003,"implemented":true,"kind":"function","modifiers":[],"name":"_setDefaultRoyalty","nameLocation":"3627:18:14","nodeType":"FunctionDefinition","parameters":{"id":2963,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2960,"mutability":"mutable","name":"receiver","nameLocation":"3654:8:14","nodeType":"VariableDeclaration","scope":3003,"src":"3646:16:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2959,"name":"address","nodeType":"ElementaryTypeName","src":"3646:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2962,"mutability":"mutable","name":"feeNumerator","nameLocation":"3671:12:14","nodeType":"VariableDeclaration","scope":3003,"src":"3664:19:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"},"typeName":{"id":2961,"name":"uint96","nodeType":"ElementaryTypeName","src":"3664:6:14","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"visibility":"internal"}],"src":"3645:39:14"},"returnParameters":{"id":2964,"nodeType":"ParameterList","parameters":[],"src":"3702:0:14"},"scope":3076,"src":"3618:507:14","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":3010,"nodeType":"Block","src":"4246:43:14","statements":[{"expression":{"id":3008,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"4256:26:14","subExpression":{"id":3007,"name":"_defaultRoyaltyInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2829,"src":"4263:19:14","typeDescriptions":{"typeIdentifier":"t_struct$_RoyaltyInfo_$2826_storage","typeString":"struct ERC2981.RoyaltyInfo storage ref"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3009,"nodeType":"ExpressionStatement","src":"4256:26:14"}]},"documentation":{"id":3004,"nodeType":"StructuredDocumentation","src":"4131:60:14","text":" @dev Removes default royalty information."},"id":3011,"implemented":true,"kind":"function","modifiers":[],"name":"_deleteDefaultRoyalty","nameLocation":"4205:21:14","nodeType":"FunctionDefinition","parameters":{"id":3005,"nodeType":"ParameterList","parameters":[],"src":"4226:2:14"},"returnParameters":{"id":3006,"nodeType":"ParameterList","parameters":[],"src":"4246:0:14"},"scope":3076,"src":"4196:93:14","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":3062,"nodeType":"Block","src":"4658:444:14","statements":[{"assignments":[3022],"declarations":[{"constant":false,"id":3022,"mutability":"mutable","name":"denominator","nameLocation":"4676:11:14","nodeType":"VariableDeclaration","scope":3062,"src":"4668:19:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3021,"name":"uint256","nodeType":"ElementaryTypeName","src":"4668:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3025,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":3023,"name":"_feeDenominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2957,"src":"4690:15:14","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_uint96_$","typeString":"function () pure returns (uint96)"}},"id":3024,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4690:17:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"nodeType":"VariableDeclarationStatement","src":"4668:39:14"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3028,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3026,"name":"feeNumerator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3018,"src":"4721:12:14","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":3027,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3022,"src":"4736:11:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4721:26:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3036,"nodeType":"IfStatement","src":"4717:180:14","trueBody":{"id":3035,"nodeType":"Block","src":"4749:148:14","statements":[{"errorCall":{"arguments":[{"id":3030,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3014,"src":"4851:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3031,"name":"feeNumerator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3018,"src":"4860:12:14","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},{"id":3032,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3022,"src":"4874:11:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint96","typeString":"uint96"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3029,"name":"ERC2981InvalidTokenRoyalty","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2855,"src":"4824:26:14","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (uint256,uint256,uint256) pure returns (error)"}},"id":3033,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4824:62:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3034,"nodeType":"RevertStatement","src":"4817:69:14"}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3042,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3037,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3016,"src":"4910:8:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":3040,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4930:1:14","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3039,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4922:7:14","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3038,"name":"address","nodeType":"ElementaryTypeName","src":"4922:7:14","typeDescriptions":{}}},"id":3041,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4922:10:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4910:22:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3052,"nodeType":"IfStatement","src":"4906:115:14","trueBody":{"id":3051,"nodeType":"Block","src":"4934:87:14","statements":[{"errorCall":{"arguments":[{"id":3044,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3014,"src":"4990:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"hexValue":"30","id":3047,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5007:1:14","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3046,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4999:7:14","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3045,"name":"address","nodeType":"ElementaryTypeName","src":"4999:7:14","typeDescriptions":{}}},"id":3048,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4999:10:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":3043,"name":"ERC2981InvalidTokenRoyaltyReceiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2862,"src":"4955:34:14","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$_t_address_$returns$_t_error_$","typeString":"function (uint256,address) pure returns (error)"}},"id":3049,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4955:55:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3050,"nodeType":"RevertStatement","src":"4948:62:14"}]}},{"expression":{"id":3060,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":3053,"name":"_tokenRoyaltyInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2834,"src":"5031:17:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_RoyaltyInfo_$2826_storage_$","typeString":"mapping(uint256 => struct ERC2981.RoyaltyInfo storage ref)"}},"id":3055,"indexExpression":{"id":3054,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3014,"src":"5049:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5031:26:14","typeDescriptions":{"typeIdentifier":"t_struct$_RoyaltyInfo_$2826_storage","typeString":"struct ERC2981.RoyaltyInfo storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":3057,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3016,"src":"5072:8:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3058,"name":"feeNumerator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3018,"src":"5082:12:14","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint96","typeString":"uint96"}],"id":3056,"name":"RoyaltyInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2826,"src":"5060:11:14","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_RoyaltyInfo_$2826_storage_ptr_$","typeString":"type(struct ERC2981.RoyaltyInfo storage pointer)"}},"id":3059,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5060:35:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_RoyaltyInfo_$2826_memory_ptr","typeString":"struct ERC2981.RoyaltyInfo memory"}},"src":"5031:64:14","typeDescriptions":{"typeIdentifier":"t_struct$_RoyaltyInfo_$2826_storage","typeString":"struct ERC2981.RoyaltyInfo storage ref"}},"id":3061,"nodeType":"ExpressionStatement","src":"5031:64:14"}]},"documentation":{"id":3012,"nodeType":"StructuredDocumentation","src":"4295:259:14","text":" @dev Sets the royalty information for a specific token id, overriding the global default.\n Requirements:\n - `receiver` cannot be the zero address.\n - `feeNumerator` cannot be greater than the fee denominator."},"id":3063,"implemented":true,"kind":"function","modifiers":[],"name":"_setTokenRoyalty","nameLocation":"4568:16:14","nodeType":"FunctionDefinition","parameters":{"id":3019,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3014,"mutability":"mutable","name":"tokenId","nameLocation":"4593:7:14","nodeType":"VariableDeclaration","scope":3063,"src":"4585:15:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3013,"name":"uint256","nodeType":"ElementaryTypeName","src":"4585:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3016,"mutability":"mutable","name":"receiver","nameLocation":"4610:8:14","nodeType":"VariableDeclaration","scope":3063,"src":"4602:16:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3015,"name":"address","nodeType":"ElementaryTypeName","src":"4602:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3018,"mutability":"mutable","name":"feeNumerator","nameLocation":"4627:12:14","nodeType":"VariableDeclaration","scope":3063,"src":"4620:19:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"},"typeName":{"id":3017,"name":"uint96","nodeType":"ElementaryTypeName","src":"4620:6:14","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"visibility":"internal"}],"src":"4584:56:14"},"returnParameters":{"id":3020,"nodeType":"ParameterList","parameters":[],"src":"4658:0:14"},"scope":3076,"src":"4559:543:14","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":3074,"nodeType":"Block","src":"5270:50:14","statements":[{"expression":{"id":3072,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"5280:33:14","subExpression":{"baseExpression":{"id":3069,"name":"_tokenRoyaltyInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2834,"src":"5287:17:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_RoyaltyInfo_$2826_storage_$","typeString":"mapping(uint256 => struct ERC2981.RoyaltyInfo storage ref)"}},"id":3071,"indexExpression":{"id":3070,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3066,"src":"5305:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5287:26:14","typeDescriptions":{"typeIdentifier":"t_struct$_RoyaltyInfo_$2826_storage","typeString":"struct ERC2981.RoyaltyInfo storage ref"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3073,"nodeType":"ExpressionStatement","src":"5280:33:14"}]},"documentation":{"id":3064,"nodeType":"StructuredDocumentation","src":"5108:95:14","text":" @dev Resets royalty information for the token id back to the global default."},"id":3075,"implemented":true,"kind":"function","modifiers":[],"name":"_resetTokenRoyalty","nameLocation":"5217:18:14","nodeType":"FunctionDefinition","parameters":{"id":3067,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3066,"mutability":"mutable","name":"tokenId","nameLocation":"5244:7:14","nodeType":"VariableDeclaration","scope":3075,"src":"5236:15:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3065,"name":"uint256","nodeType":"ElementaryTypeName","src":"5236:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5235:17:14"},"returnParameters":{"id":3068,"nodeType":"ParameterList","parameters":[],"src":"5270:0:14"},"scope":3076,"src":"5208:112:14","stateMutability":"nonpayable","virtual":true,"visibility":"internal"}],"scope":3077,"src":"1106:4216:14","usedErrors":[2841,2846,2855,2862],"usedEvents":[]}],"src":"108:5215:14"},"id":14},"@openzeppelin/contracts/utils/Bytes.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/Bytes.sol","exportedSymbols":{"Bytes":[3877],"Math":[7507]},"id":3878,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":3078,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"99:24:15"},{"absolutePath":"@openzeppelin/contracts/utils/math/Math.sol","file":"./math/Math.sol","id":3080,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3878,"sourceUnit":7508,"src":"125:37:15","symbolAliases":[{"foreign":{"id":3079,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7507,"src":"133:4:15","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"Bytes","contractDependencies":[],"contractKind":"library","documentation":{"id":3081,"nodeType":"StructuredDocumentation","src":"164:33:15","text":" @dev Bytes operations."},"fullyImplemented":true,"id":3877,"linearizedBaseContracts":[3877],"name":"Bytes","nameLocation":"206:5:15","nodeType":"ContractDefinition","nodes":[{"body":{"id":3097,"nodeType":"Block","src":"687:45:15","statements":[{"expression":{"arguments":[{"id":3092,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3084,"src":"712:6:15","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":3093,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3086,"src":"720:1:15","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},{"hexValue":"30","id":3094,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"723:1:15","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes1","typeString":"bytes1"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3091,"name":"indexOf","nodeType":"Identifier","overloadedDeclarations":[3098,3147],"referencedDeclaration":3147,"src":"704:7:15","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$_t_bytes1_$_t_uint256_$returns$_t_uint256_$","typeString":"function (bytes memory,bytes1,uint256) pure returns (uint256)"}},"id":3095,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"704:21:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":3090,"id":3096,"nodeType":"Return","src":"697:28:15"}]},"documentation":{"id":3082,"nodeType":"StructuredDocumentation","src":"218:384:15","text":" @dev Forward search for `s` in `buffer`\n * If `s` is present in the buffer, returns the index of the first instance\n * If `s` is not present in the buffer, returns type(uint256).max\n NOTE: replicates the behavior of https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf[Javascript's `Array.indexOf`]"},"id":3098,"implemented":true,"kind":"function","modifiers":[],"name":"indexOf","nameLocation":"616:7:15","nodeType":"FunctionDefinition","parameters":{"id":3087,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3084,"mutability":"mutable","name":"buffer","nameLocation":"637:6:15","nodeType":"VariableDeclaration","scope":3098,"src":"624:19:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3083,"name":"bytes","nodeType":"ElementaryTypeName","src":"624:5:15","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":3086,"mutability":"mutable","name":"s","nameLocation":"652:1:15","nodeType":"VariableDeclaration","scope":3098,"src":"645:8:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"},"typeName":{"id":3085,"name":"bytes1","nodeType":"ElementaryTypeName","src":"645:6:15","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"visibility":"internal"}],"src":"623:31:15"},"returnParameters":{"id":3090,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3089,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3098,"src":"678:7:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3088,"name":"uint256","nodeType":"ElementaryTypeName","src":"678:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"677:9:15"},"scope":3877,"src":"607:125:15","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":3146,"nodeType":"Block","src":"1286:246:15","statements":[{"assignments":[3111],"declarations":[{"constant":false,"id":3111,"mutability":"mutable","name":"length","nameLocation":"1304:6:15","nodeType":"VariableDeclaration","scope":3146,"src":"1296:14:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3110,"name":"uint256","nodeType":"ElementaryTypeName","src":"1296:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3114,"initialValue":{"expression":{"id":3112,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3101,"src":"1313:6:15","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":3113,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1320:6:15","memberName":"length","nodeType":"MemberAccess","src":"1313:13:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1296:30:15"},{"body":{"id":3138,"nodeType":"Block","src":"1375:117:15","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bytes1","typeString":"bytes1"},"id":3133,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":3128,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3101,"src":"1423:6:15","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":3129,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3116,"src":"1431:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3127,"name":"_unsafeReadBytesOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3876,"src":"1400:22:15","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bytes32_$","typeString":"function (bytes memory,uint256) pure returns (bytes32)"}},"id":3130,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1400:33:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":3126,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1393:6:15","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes1_$","typeString":"type(bytes1)"},"typeName":{"id":3125,"name":"bytes1","nodeType":"ElementaryTypeName","src":"1393:6:15","typeDescriptions":{}}},"id":3131,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1393:41:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":3132,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3103,"src":"1438:1:15","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"src":"1393:46:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3137,"nodeType":"IfStatement","src":"1389:93:15","trueBody":{"id":3136,"nodeType":"Block","src":"1441:41:15","statements":[{"expression":{"id":3134,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3116,"src":"1466:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":3109,"id":3135,"nodeType":"Return","src":"1459:8:15"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3121,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3119,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3116,"src":"1358:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":3120,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3111,"src":"1362:6:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1358:10:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3139,"initializationExpression":{"assignments":[3116],"declarations":[{"constant":false,"id":3116,"mutability":"mutable","name":"i","nameLocation":"1349:1:15","nodeType":"VariableDeclaration","scope":3139,"src":"1341:9:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3115,"name":"uint256","nodeType":"ElementaryTypeName","src":"1341:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3118,"initialValue":{"id":3117,"name":"pos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3105,"src":"1353:3:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1341:15:15"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":3123,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"1370:3:15","subExpression":{"id":3122,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3116,"src":"1372:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3124,"nodeType":"ExpressionStatement","src":"1370:3:15"},"nodeType":"ForStatement","src":"1336:156:15"},{"expression":{"expression":{"arguments":[{"id":3142,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1513:7:15","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":3141,"name":"uint256","nodeType":"ElementaryTypeName","src":"1513:7:15","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"id":3140,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967269,"src":"1508:4:15","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":3143,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1508:13:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint256","typeString":"type(uint256)"}},"id":3144,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1522:3:15","memberName":"max","nodeType":"MemberAccess","src":"1508:17:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":3109,"id":3145,"nodeType":"Return","src":"1501:24:15"}]},"documentation":{"id":3099,"nodeType":"StructuredDocumentation","src":"738:450:15","text":" @dev Forward search for `s` in `buffer` starting at position `pos`\n * If `s` is present in the buffer (at or after `pos`), returns the index of the next instance\n * If `s` is not present in the buffer (at or after `pos`), returns type(uint256).max\n NOTE: replicates the behavior of https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf[Javascript's `Array.indexOf`]"},"id":3147,"implemented":true,"kind":"function","modifiers":[],"name":"indexOf","nameLocation":"1202:7:15","nodeType":"FunctionDefinition","parameters":{"id":3106,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3101,"mutability":"mutable","name":"buffer","nameLocation":"1223:6:15","nodeType":"VariableDeclaration","scope":3147,"src":"1210:19:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3100,"name":"bytes","nodeType":"ElementaryTypeName","src":"1210:5:15","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":3103,"mutability":"mutable","name":"s","nameLocation":"1238:1:15","nodeType":"VariableDeclaration","scope":3147,"src":"1231:8:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"},"typeName":{"id":3102,"name":"bytes1","nodeType":"ElementaryTypeName","src":"1231:6:15","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"visibility":"internal"},{"constant":false,"id":3105,"mutability":"mutable","name":"pos","nameLocation":"1249:3:15","nodeType":"VariableDeclaration","scope":3147,"src":"1241:11:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3104,"name":"uint256","nodeType":"ElementaryTypeName","src":"1241:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1209:44:15"},"returnParameters":{"id":3109,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3108,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3147,"src":"1277:7:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3107,"name":"uint256","nodeType":"ElementaryTypeName","src":"1277:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1276:9:15"},"scope":3877,"src":"1193:339:15","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":3167,"nodeType":"Block","src":"2019:65:15","statements":[{"expression":{"arguments":[{"id":3158,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3150,"src":"2048:6:15","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":3159,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3152,"src":"2056:1:15","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},{"expression":{"arguments":[{"id":3162,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2064:7:15","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":3161,"name":"uint256","nodeType":"ElementaryTypeName","src":"2064:7:15","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"id":3160,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967269,"src":"2059:4:15","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":3163,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2059:13:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint256","typeString":"type(uint256)"}},"id":3164,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2073:3:15","memberName":"max","nodeType":"MemberAccess","src":"2059:17:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes1","typeString":"bytes1"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3157,"name":"lastIndexOf","nodeType":"Identifier","overloadedDeclarations":[3168,3230],"referencedDeclaration":3230,"src":"2036:11:15","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$_t_bytes1_$_t_uint256_$returns$_t_uint256_$","typeString":"function (bytes memory,bytes1,uint256) pure returns (uint256)"}},"id":3165,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2036:41:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":3156,"id":3166,"nodeType":"Return","src":"2029:48:15"}]},"documentation":{"id":3148,"nodeType":"StructuredDocumentation","src":"1538:392:15","text":" @dev Backward search for `s` in `buffer`\n * If `s` is present in the buffer, returns the index of the last instance\n * If `s` is not present in the buffer, returns type(uint256).max\n NOTE: replicates the behavior of https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/lastIndexOf[Javascript's `Array.lastIndexOf`]"},"id":3168,"implemented":true,"kind":"function","modifiers":[],"name":"lastIndexOf","nameLocation":"1944:11:15","nodeType":"FunctionDefinition","parameters":{"id":3153,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3150,"mutability":"mutable","name":"buffer","nameLocation":"1969:6:15","nodeType":"VariableDeclaration","scope":3168,"src":"1956:19:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3149,"name":"bytes","nodeType":"ElementaryTypeName","src":"1956:5:15","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":3152,"mutability":"mutable","name":"s","nameLocation":"1984:1:15","nodeType":"VariableDeclaration","scope":3168,"src":"1977:8:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"},"typeName":{"id":3151,"name":"bytes1","nodeType":"ElementaryTypeName","src":"1977:6:15","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"visibility":"internal"}],"src":"1955:31:15"},"returnParameters":{"id":3156,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3155,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3168,"src":"2010:7:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3154,"name":"uint256","nodeType":"ElementaryTypeName","src":"2010:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2009:9:15"},"scope":3877,"src":"1935:149:15","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":3229,"nodeType":"Block","src":"2657:348:15","statements":[{"id":3228,"nodeType":"UncheckedBlock","src":"2667:332:15","statements":[{"assignments":[3181],"declarations":[{"constant":false,"id":3181,"mutability":"mutable","name":"length","nameLocation":"2699:6:15","nodeType":"VariableDeclaration","scope":3228,"src":"2691:14:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3180,"name":"uint256","nodeType":"ElementaryTypeName","src":"2691:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3184,"initialValue":{"expression":{"id":3182,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3171,"src":"2708:6:15","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":3183,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2715:6:15","memberName":"length","nodeType":"MemberAccess","src":"2708:13:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2691:30:15"},{"body":{"id":3220,"nodeType":"Block","src":"2810:141:15","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bytes1","typeString":"bytes1"},"id":3213,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":3206,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3171,"src":"2862:6:15","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3209,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3207,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3186,"src":"2870:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":3208,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2874:1:15","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"2870:5:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3205,"name":"_unsafeReadBytesOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3876,"src":"2839:22:15","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bytes32_$","typeString":"function (bytes memory,uint256) pure returns (bytes32)"}},"id":3210,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2839:37:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":3204,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2832:6:15","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes1_$","typeString":"type(bytes1)"},"typeName":{"id":3203,"name":"bytes1","nodeType":"ElementaryTypeName","src":"2832:6:15","typeDescriptions":{}}},"id":3211,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2832:45:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":3212,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3173,"src":"2881:1:15","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"src":"2832:50:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3219,"nodeType":"IfStatement","src":"2828:109:15","trueBody":{"id":3218,"nodeType":"Block","src":"2884:53:15","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3216,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3214,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3186,"src":"2913:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":3215,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2917:1:15","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"2913:5:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":3179,"id":3217,"nodeType":"Return","src":"2906:12:15"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3199,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3197,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3186,"src":"2798:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":3198,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2802:1:15","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2798:5:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3221,"initializationExpression":{"assignments":[3186],"declarations":[{"constant":false,"id":3186,"mutability":"mutable","name":"i","nameLocation":"2748:1:15","nodeType":"VariableDeclaration","scope":3221,"src":"2740:9:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3185,"name":"uint256","nodeType":"ElementaryTypeName","src":"2740:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3196,"initialValue":{"arguments":[{"arguments":[{"id":3191,"name":"pos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3175,"src":"2780:3:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"31","id":3192,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2785:1:15","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"}],"expression":{"id":3189,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7507,"src":"2761:4:15","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$7507_$","typeString":"type(library Math)"}},"id":3190,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2766:13:15","memberName":"saturatingAdd","nodeType":"MemberAccess","referencedDeclaration":6062,"src":"2761:18:15","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":3193,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2761:26:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3194,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3181,"src":"2789:6:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":3187,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7507,"src":"2752:4:15","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$7507_$","typeString":"type(library Math)"}},"id":3188,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2757:3:15","memberName":"min","nodeType":"MemberAccess","referencedDeclaration":6177,"src":"2752:8:15","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":3195,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2752:44:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2740:56:15"},"isSimpleCounterLoop":false,"loopExpression":{"expression":{"id":3201,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"--","prefix":true,"src":"2805:3:15","subExpression":{"id":3200,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3186,"src":"2807:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3202,"nodeType":"ExpressionStatement","src":"2805:3:15"},"nodeType":"ForStatement","src":"2735:216:15"},{"expression":{"expression":{"arguments":[{"id":3224,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2976:7:15","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":3223,"name":"uint256","nodeType":"ElementaryTypeName","src":"2976:7:15","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"id":3222,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967269,"src":"2971:4:15","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":3225,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2971:13:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint256","typeString":"type(uint256)"}},"id":3226,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2985:3:15","memberName":"max","nodeType":"MemberAccess","src":"2971:17:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":3179,"id":3227,"nodeType":"Return","src":"2964:24:15"}]}]},"documentation":{"id":3169,"nodeType":"StructuredDocumentation","src":"2090:465:15","text":" @dev Backward search for `s` in `buffer` starting at position `pos`\n * If `s` is present in the buffer (at or before `pos`), returns the index of the previous instance\n * If `s` is not present in the buffer (at or before `pos`), returns type(uint256).max\n NOTE: replicates the behavior of https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/lastIndexOf[Javascript's `Array.lastIndexOf`]"},"id":3230,"implemented":true,"kind":"function","modifiers":[],"name":"lastIndexOf","nameLocation":"2569:11:15","nodeType":"FunctionDefinition","parameters":{"id":3176,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3171,"mutability":"mutable","name":"buffer","nameLocation":"2594:6:15","nodeType":"VariableDeclaration","scope":3230,"src":"2581:19:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3170,"name":"bytes","nodeType":"ElementaryTypeName","src":"2581:5:15","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":3173,"mutability":"mutable","name":"s","nameLocation":"2609:1:15","nodeType":"VariableDeclaration","scope":3230,"src":"2602:8:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"},"typeName":{"id":3172,"name":"bytes1","nodeType":"ElementaryTypeName","src":"2602:6:15","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"visibility":"internal"},{"constant":false,"id":3175,"mutability":"mutable","name":"pos","nameLocation":"2620:3:15","nodeType":"VariableDeclaration","scope":3230,"src":"2612:11:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3174,"name":"uint256","nodeType":"ElementaryTypeName","src":"2612:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2580:44:15"},"returnParameters":{"id":3179,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3178,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3230,"src":"2648:7:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3177,"name":"uint256","nodeType":"ElementaryTypeName","src":"2648:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2647:9:15"},"scope":3877,"src":"2560:445:15","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":3247,"nodeType":"Block","src":"3416:59:15","statements":[{"expression":{"arguments":[{"id":3241,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3233,"src":"3439:6:15","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":3242,"name":"start","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3235,"src":"3447:5:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":3243,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3233,"src":"3454:6:15","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":3244,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3461:6:15","memberName":"length","nodeType":"MemberAccess","src":"3454:13:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3240,"name":"slice","nodeType":"Identifier","overloadedDeclarations":[3248,3290],"referencedDeclaration":3290,"src":"3433:5:15","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes memory,uint256,uint256) pure returns (bytes memory)"}},"id":3245,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3433:35:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":3239,"id":3246,"nodeType":"Return","src":"3426:42:15"}]},"documentation":{"id":3231,"nodeType":"StructuredDocumentation","src":"3011:312:15","text":" @dev Copies the content of `buffer`, from `start` (included) to the end of `buffer` into a new bytes object in\n memory.\n NOTE: replicates the behavior of https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice[Javascript's `Array.slice`]"},"id":3248,"implemented":true,"kind":"function","modifiers":[],"name":"slice","nameLocation":"3337:5:15","nodeType":"FunctionDefinition","parameters":{"id":3236,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3233,"mutability":"mutable","name":"buffer","nameLocation":"3356:6:15","nodeType":"VariableDeclaration","scope":3248,"src":"3343:19:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3232,"name":"bytes","nodeType":"ElementaryTypeName","src":"3343:5:15","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":3235,"mutability":"mutable","name":"start","nameLocation":"3372:5:15","nodeType":"VariableDeclaration","scope":3248,"src":"3364:13:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3234,"name":"uint256","nodeType":"ElementaryTypeName","src":"3364:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3342:36:15"},"returnParameters":{"id":3239,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3238,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3248,"src":"3402:12:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3237,"name":"bytes","nodeType":"ElementaryTypeName","src":"3402:5:15","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3401:14:15"},"scope":3877,"src":"3328:147:15","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":3289,"nodeType":"Block","src":"3959:347:15","statements":[{"expression":{"id":3267,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3260,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3255,"src":"3989:3:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":3263,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3255,"src":"4004:3:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":3264,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3251,"src":"4009:6:15","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":3265,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4016:6:15","memberName":"length","nodeType":"MemberAccess","src":"4009:13:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":3261,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7507,"src":"3995:4:15","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$7507_$","typeString":"type(library Math)"}},"id":3262,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4000:3:15","memberName":"min","nodeType":"MemberAccess","referencedDeclaration":6177,"src":"3995:8:15","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":3266,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3995:28:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3989:34:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3268,"nodeType":"ExpressionStatement","src":"3989:34:15"},{"expression":{"id":3275,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3269,"name":"start","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3253,"src":"4033:5:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":3272,"name":"start","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3253,"src":"4050:5:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3273,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3255,"src":"4057:3:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":3270,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7507,"src":"4041:4:15","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$7507_$","typeString":"type(library Math)"}},"id":3271,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4046:3:15","memberName":"min","nodeType":"MemberAccess","referencedDeclaration":6177,"src":"4041:8:15","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":3274,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4041:20:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4033:28:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3276,"nodeType":"ExpressionStatement","src":"4033:28:15"},{"assignments":[3278],"declarations":[{"constant":false,"id":3278,"mutability":"mutable","name":"result","nameLocation":"4114:6:15","nodeType":"VariableDeclaration","scope":3289,"src":"4101:19:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3277,"name":"bytes","nodeType":"ElementaryTypeName","src":"4101:5:15","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":3285,"initialValue":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3283,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3281,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3255,"src":"4133:3:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":3282,"name":"start","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3253,"src":"4139:5:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4133:11:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3280,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"4123:9:15","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$","typeString":"function (uint256) pure returns (bytes memory)"},"typeName":{"id":3279,"name":"bytes","nodeType":"ElementaryTypeName","src":"4127:5:15","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}}},"id":3284,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4123:22:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"4101:44:15"},{"AST":{"nativeSrc":"4180:96:15","nodeType":"YulBlock","src":"4180:96:15","statements":[{"expression":{"arguments":[{"arguments":[{"name":"result","nativeSrc":"4204:6:15","nodeType":"YulIdentifier","src":"4204:6:15"},{"kind":"number","nativeSrc":"4212:4:15","nodeType":"YulLiteral","src":"4212:4:15","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"4200:3:15","nodeType":"YulIdentifier","src":"4200:3:15"},"nativeSrc":"4200:17:15","nodeType":"YulFunctionCall","src":"4200:17:15"},{"arguments":[{"arguments":[{"name":"buffer","nativeSrc":"4227:6:15","nodeType":"YulIdentifier","src":"4227:6:15"},{"kind":"number","nativeSrc":"4235:4:15","nodeType":"YulLiteral","src":"4235:4:15","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"4223:3:15","nodeType":"YulIdentifier","src":"4223:3:15"},"nativeSrc":"4223:17:15","nodeType":"YulFunctionCall","src":"4223:17:15"},{"name":"start","nativeSrc":"4242:5:15","nodeType":"YulIdentifier","src":"4242:5:15"}],"functionName":{"name":"add","nativeSrc":"4219:3:15","nodeType":"YulIdentifier","src":"4219:3:15"},"nativeSrc":"4219:29:15","nodeType":"YulFunctionCall","src":"4219:29:15"},{"arguments":[{"name":"end","nativeSrc":"4254:3:15","nodeType":"YulIdentifier","src":"4254:3:15"},{"name":"start","nativeSrc":"4259:5:15","nodeType":"YulIdentifier","src":"4259:5:15"}],"functionName":{"name":"sub","nativeSrc":"4250:3:15","nodeType":"YulIdentifier","src":"4250:3:15"},"nativeSrc":"4250:15:15","nodeType":"YulFunctionCall","src":"4250:15:15"}],"functionName":{"name":"mcopy","nativeSrc":"4194:5:15","nodeType":"YulIdentifier","src":"4194:5:15"},"nativeSrc":"4194:72:15","nodeType":"YulFunctionCall","src":"4194:72:15"},"nativeSrc":"4194:72:15","nodeType":"YulExpressionStatement","src":"4194:72:15"}]},"evmVersion":"cancun","externalReferences":[{"declaration":3251,"isOffset":false,"isSlot":false,"src":"4227:6:15","valueSize":1},{"declaration":3255,"isOffset":false,"isSlot":false,"src":"4254:3:15","valueSize":1},{"declaration":3278,"isOffset":false,"isSlot":false,"src":"4204:6:15","valueSize":1},{"declaration":3253,"isOffset":false,"isSlot":false,"src":"4242:5:15","valueSize":1},{"declaration":3253,"isOffset":false,"isSlot":false,"src":"4259:5:15","valueSize":1}],"flags":["memory-safe"],"id":3286,"nodeType":"InlineAssembly","src":"4155:121:15"},{"expression":{"id":3287,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3278,"src":"4293:6:15","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":3259,"id":3288,"nodeType":"Return","src":"4286:13:15"}]},"documentation":{"id":3249,"nodeType":"StructuredDocumentation","src":"3481:372:15","text":" @dev Copies the content of `buffer`, from `start` (included) to `end` (excluded) into a new bytes object in\n memory. The `end` argument is truncated to the length of the `buffer`.\n NOTE: replicates the behavior of https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice[Javascript's `Array.slice`]"},"id":3290,"implemented":true,"kind":"function","modifiers":[],"name":"slice","nameLocation":"3867:5:15","nodeType":"FunctionDefinition","parameters":{"id":3256,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3251,"mutability":"mutable","name":"buffer","nameLocation":"3886:6:15","nodeType":"VariableDeclaration","scope":3290,"src":"3873:19:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3250,"name":"bytes","nodeType":"ElementaryTypeName","src":"3873:5:15","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":3253,"mutability":"mutable","name":"start","nameLocation":"3902:5:15","nodeType":"VariableDeclaration","scope":3290,"src":"3894:13:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3252,"name":"uint256","nodeType":"ElementaryTypeName","src":"3894:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3255,"mutability":"mutable","name":"end","nameLocation":"3917:3:15","nodeType":"VariableDeclaration","scope":3290,"src":"3909:11:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3254,"name":"uint256","nodeType":"ElementaryTypeName","src":"3909:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3872:49:15"},"returnParameters":{"id":3259,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3258,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3290,"src":"3945:12:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3257,"name":"bytes","nodeType":"ElementaryTypeName","src":"3945:5:15","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3944:14:15"},"scope":3877,"src":"3858:448:15","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":3307,"nodeType":"Block","src":"4790:60:15","statements":[{"expression":{"arguments":[{"id":3301,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3293,"src":"4814:6:15","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":3302,"name":"start","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3295,"src":"4822:5:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":3303,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3293,"src":"4829:6:15","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":3304,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4836:6:15","memberName":"length","nodeType":"MemberAccess","src":"4829:13:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3300,"name":"splice","nodeType":"Identifier","overloadedDeclarations":[3308,3341],"referencedDeclaration":3341,"src":"4807:6:15","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes memory,uint256,uint256) pure returns (bytes memory)"}},"id":3305,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4807:36:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":3299,"id":3306,"nodeType":"Return","src":"4800:43:15"}]},"documentation":{"id":3291,"nodeType":"StructuredDocumentation","src":"4312:384:15","text":" @dev Moves the content of `buffer`, from `start` (included) to the end of `buffer` to the start of that buffer,\n and shrinks the buffer length accordingly, effectively overriding the content of buffer with buffer[start:].\n NOTE: This function modifies the provided buffer in place. If you need to preserve the original buffer, use {slice} instead"},"id":3308,"implemented":true,"kind":"function","modifiers":[],"name":"splice","nameLocation":"4710:6:15","nodeType":"FunctionDefinition","parameters":{"id":3296,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3293,"mutability":"mutable","name":"buffer","nameLocation":"4730:6:15","nodeType":"VariableDeclaration","scope":3308,"src":"4717:19:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3292,"name":"bytes","nodeType":"ElementaryTypeName","src":"4717:5:15","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":3295,"mutability":"mutable","name":"start","nameLocation":"4746:5:15","nodeType":"VariableDeclaration","scope":3308,"src":"4738:13:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3294,"name":"uint256","nodeType":"ElementaryTypeName","src":"4738:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4716:36:15"},"returnParameters":{"id":3299,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3298,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3308,"src":"4776:12:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3297,"name":"bytes","nodeType":"ElementaryTypeName","src":"4776:5:15","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4775:14:15"},"scope":3877,"src":"4701:149:15","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":3340,"nodeType":"Block","src":"5417:335:15","statements":[{"expression":{"id":3327,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3320,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3315,"src":"5447:3:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":3323,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3315,"src":"5462:3:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":3324,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3311,"src":"5467:6:15","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":3325,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5474:6:15","memberName":"length","nodeType":"MemberAccess","src":"5467:13:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":3321,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7507,"src":"5453:4:15","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$7507_$","typeString":"type(library Math)"}},"id":3322,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5458:3:15","memberName":"min","nodeType":"MemberAccess","referencedDeclaration":6177,"src":"5453:8:15","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":3326,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5453:28:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5447:34:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3328,"nodeType":"ExpressionStatement","src":"5447:34:15"},{"expression":{"id":3335,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3329,"name":"start","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3313,"src":"5491:5:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":3332,"name":"start","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3313,"src":"5508:5:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3333,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3315,"src":"5515:3:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":3330,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7507,"src":"5499:4:15","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$7507_$","typeString":"type(library Math)"}},"id":3331,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5504:3:15","memberName":"min","nodeType":"MemberAccess","referencedDeclaration":6177,"src":"5499:8:15","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":3334,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5499:20:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5491:28:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3336,"nodeType":"ExpressionStatement","src":"5491:28:15"},{"AST":{"nativeSrc":"5582:140:15","nodeType":"YulBlock","src":"5582:140:15","statements":[{"expression":{"arguments":[{"arguments":[{"name":"buffer","nativeSrc":"5606:6:15","nodeType":"YulIdentifier","src":"5606:6:15"},{"kind":"number","nativeSrc":"5614:4:15","nodeType":"YulLiteral","src":"5614:4:15","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"5602:3:15","nodeType":"YulIdentifier","src":"5602:3:15"},"nativeSrc":"5602:17:15","nodeType":"YulFunctionCall","src":"5602:17:15"},{"arguments":[{"arguments":[{"name":"buffer","nativeSrc":"5629:6:15","nodeType":"YulIdentifier","src":"5629:6:15"},{"kind":"number","nativeSrc":"5637:4:15","nodeType":"YulLiteral","src":"5637:4:15","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"5625:3:15","nodeType":"YulIdentifier","src":"5625:3:15"},"nativeSrc":"5625:17:15","nodeType":"YulFunctionCall","src":"5625:17:15"},{"name":"start","nativeSrc":"5644:5:15","nodeType":"YulIdentifier","src":"5644:5:15"}],"functionName":{"name":"add","nativeSrc":"5621:3:15","nodeType":"YulIdentifier","src":"5621:3:15"},"nativeSrc":"5621:29:15","nodeType":"YulFunctionCall","src":"5621:29:15"},{"arguments":[{"name":"end","nativeSrc":"5656:3:15","nodeType":"YulIdentifier","src":"5656:3:15"},{"name":"start","nativeSrc":"5661:5:15","nodeType":"YulIdentifier","src":"5661:5:15"}],"functionName":{"name":"sub","nativeSrc":"5652:3:15","nodeType":"YulIdentifier","src":"5652:3:15"},"nativeSrc":"5652:15:15","nodeType":"YulFunctionCall","src":"5652:15:15"}],"functionName":{"name":"mcopy","nativeSrc":"5596:5:15","nodeType":"YulIdentifier","src":"5596:5:15"},"nativeSrc":"5596:72:15","nodeType":"YulFunctionCall","src":"5596:72:15"},"nativeSrc":"5596:72:15","nodeType":"YulExpressionStatement","src":"5596:72:15"},{"expression":{"arguments":[{"name":"buffer","nativeSrc":"5688:6:15","nodeType":"YulIdentifier","src":"5688:6:15"},{"arguments":[{"name":"end","nativeSrc":"5700:3:15","nodeType":"YulIdentifier","src":"5700:3:15"},{"name":"start","nativeSrc":"5705:5:15","nodeType":"YulIdentifier","src":"5705:5:15"}],"functionName":{"name":"sub","nativeSrc":"5696:3:15","nodeType":"YulIdentifier","src":"5696:3:15"},"nativeSrc":"5696:15:15","nodeType":"YulFunctionCall","src":"5696:15:15"}],"functionName":{"name":"mstore","nativeSrc":"5681:6:15","nodeType":"YulIdentifier","src":"5681:6:15"},"nativeSrc":"5681:31:15","nodeType":"YulFunctionCall","src":"5681:31:15"},"nativeSrc":"5681:31:15","nodeType":"YulExpressionStatement","src":"5681:31:15"}]},"evmVersion":"cancun","externalReferences":[{"declaration":3311,"isOffset":false,"isSlot":false,"src":"5606:6:15","valueSize":1},{"declaration":3311,"isOffset":false,"isSlot":false,"src":"5629:6:15","valueSize":1},{"declaration":3311,"isOffset":false,"isSlot":false,"src":"5688:6:15","valueSize":1},{"declaration":3315,"isOffset":false,"isSlot":false,"src":"5656:3:15","valueSize":1},{"declaration":3315,"isOffset":false,"isSlot":false,"src":"5700:3:15","valueSize":1},{"declaration":3313,"isOffset":false,"isSlot":false,"src":"5644:5:15","valueSize":1},{"declaration":3313,"isOffset":false,"isSlot":false,"src":"5661:5:15","valueSize":1},{"declaration":3313,"isOffset":false,"isSlot":false,"src":"5705:5:15","valueSize":1}],"flags":["memory-safe"],"id":3337,"nodeType":"InlineAssembly","src":"5557:165:15"},{"expression":{"id":3338,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3311,"src":"5739:6:15","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":3319,"id":3339,"nodeType":"Return","src":"5732:13:15"}]},"documentation":{"id":3309,"nodeType":"StructuredDocumentation","src":"4856:454:15","text":" @dev Moves the content of `buffer`, from `start` (included) to `end` (excluded) to the start of that buffer,\n and shrinks the buffer length accordingly, effectively overriding the content of buffer with buffer[start:end].\n The `end` argument is truncated to the length of the `buffer`.\n NOTE: This function modifies the provided buffer in place. If you need to preserve the original buffer, use {slice} instead"},"id":3341,"implemented":true,"kind":"function","modifiers":[],"name":"splice","nameLocation":"5324:6:15","nodeType":"FunctionDefinition","parameters":{"id":3316,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3311,"mutability":"mutable","name":"buffer","nameLocation":"5344:6:15","nodeType":"VariableDeclaration","scope":3341,"src":"5331:19:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3310,"name":"bytes","nodeType":"ElementaryTypeName","src":"5331:5:15","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":3313,"mutability":"mutable","name":"start","nameLocation":"5360:5:15","nodeType":"VariableDeclaration","scope":3341,"src":"5352:13:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3312,"name":"uint256","nodeType":"ElementaryTypeName","src":"5352:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3315,"mutability":"mutable","name":"end","nameLocation":"5375:3:15","nodeType":"VariableDeclaration","scope":3341,"src":"5367:11:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3314,"name":"uint256","nodeType":"ElementaryTypeName","src":"5367:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5330:49:15"},"returnParameters":{"id":3319,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3318,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3341,"src":"5403:12:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3317,"name":"bytes","nodeType":"ElementaryTypeName","src":"5403:5:15","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5402:14:15"},"scope":3877,"src":"5315:437:15","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":3362,"nodeType":"Block","src":"6249:80:15","statements":[{"expression":{"arguments":[{"id":3354,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3344,"src":"6274:6:15","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":3355,"name":"pos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3346,"src":"6282:3:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3356,"name":"replacement","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3348,"src":"6287:11:15","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"30","id":3357,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6300:1:15","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"expression":{"id":3358,"name":"replacement","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3348,"src":"6303:11:15","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":3359,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6315:6:15","memberName":"length","nodeType":"MemberAccess","src":"6303:18:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3353,"name":"replace","nodeType":"Identifier","overloadedDeclarations":[3363,3419],"referencedDeclaration":3419,"src":"6266:7:15","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes memory,uint256,bytes memory,uint256,uint256) pure returns (bytes memory)"}},"id":3360,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6266:56:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":3352,"id":3361,"nodeType":"Return","src":"6259:63:15"}]},"documentation":{"id":3342,"nodeType":"StructuredDocumentation","src":"5758:372:15","text":" @dev Replaces bytes in `buffer` starting at `pos` with all bytes from `replacement`.\n Parameters are clamped to valid ranges (i.e. `pos` is clamped to `[0, buffer.length]`).\n If `pos >= buffer.length`, no replacement occurs and the buffer is returned unchanged.\n NOTE: This function modifies the provided buffer in place."},"id":3363,"implemented":true,"kind":"function","modifiers":[],"name":"replace","nameLocation":"6144:7:15","nodeType":"FunctionDefinition","parameters":{"id":3349,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3344,"mutability":"mutable","name":"buffer","nameLocation":"6165:6:15","nodeType":"VariableDeclaration","scope":3363,"src":"6152:19:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3343,"name":"bytes","nodeType":"ElementaryTypeName","src":"6152:5:15","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":3346,"mutability":"mutable","name":"pos","nameLocation":"6181:3:15","nodeType":"VariableDeclaration","scope":3363,"src":"6173:11:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3345,"name":"uint256","nodeType":"ElementaryTypeName","src":"6173:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3348,"mutability":"mutable","name":"replacement","nameLocation":"6199:11:15","nodeType":"VariableDeclaration","scope":3363,"src":"6186:24:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3347,"name":"bytes","nodeType":"ElementaryTypeName","src":"6186:5:15","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"6151:60:15"},"returnParameters":{"id":3352,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3351,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3363,"src":"6235:12:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3350,"name":"bytes","nodeType":"ElementaryTypeName","src":"6235:5:15","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"6234:14:15"},"scope":3877,"src":"6135:194:15","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":3418,"nodeType":"Block","src":"7180:402:15","statements":[{"expression":{"id":3386,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3379,"name":"pos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3368,"src":"7210:3:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":3382,"name":"pos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3368,"src":"7225:3:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":3383,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3366,"src":"7230:6:15","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":3384,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7237:6:15","memberName":"length","nodeType":"MemberAccess","src":"7230:13:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":3380,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7507,"src":"7216:4:15","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$7507_$","typeString":"type(library Math)"}},"id":3381,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7221:3:15","memberName":"min","nodeType":"MemberAccess","referencedDeclaration":6177,"src":"7216:8:15","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":3385,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7216:28:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7210:34:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3387,"nodeType":"ExpressionStatement","src":"7210:34:15"},{"expression":{"id":3395,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3388,"name":"offset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3372,"src":"7254:6:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":3391,"name":"offset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3372,"src":"7272:6:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":3392,"name":"replacement","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3370,"src":"7280:11:15","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":3393,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7292:6:15","memberName":"length","nodeType":"MemberAccess","src":"7280:18:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":3389,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7507,"src":"7263:4:15","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$7507_$","typeString":"type(library Math)"}},"id":3390,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7268:3:15","memberName":"min","nodeType":"MemberAccess","referencedDeclaration":6177,"src":"7263:8:15","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":3394,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7263:36:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7254:45:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3396,"nodeType":"ExpressionStatement","src":"7254:45:15"},{"expression":{"id":3413,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3397,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3374,"src":"7309:6:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":3400,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3374,"src":"7327:6:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3406,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":3403,"name":"replacement","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3370,"src":"7344:11:15","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":3404,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7356:6:15","memberName":"length","nodeType":"MemberAccess","src":"7344:18:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":3405,"name":"offset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3372,"src":"7365:6:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7344:27:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3410,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":3407,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3366,"src":"7373:6:15","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":3408,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7380:6:15","memberName":"length","nodeType":"MemberAccess","src":"7373:13:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":3409,"name":"pos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3368,"src":"7389:3:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7373:19:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":3401,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7507,"src":"7335:4:15","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$7507_$","typeString":"type(library Math)"}},"id":3402,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7340:3:15","memberName":"min","nodeType":"MemberAccess","referencedDeclaration":6177,"src":"7335:8:15","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":3411,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7335:58:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":3398,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7507,"src":"7318:4:15","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$7507_$","typeString":"type(library Math)"}},"id":3399,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7323:3:15","memberName":"min","nodeType":"MemberAccess","referencedDeclaration":6177,"src":"7318:8:15","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":3412,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7318:76:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7309:85:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3414,"nodeType":"ExpressionStatement","src":"7309:85:15"},{"AST":{"nativeSrc":"7449:103:15","nodeType":"YulBlock","src":"7449:103:15","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"buffer","nativeSrc":"7477:6:15","nodeType":"YulIdentifier","src":"7477:6:15"},{"kind":"number","nativeSrc":"7485:4:15","nodeType":"YulLiteral","src":"7485:4:15","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"7473:3:15","nodeType":"YulIdentifier","src":"7473:3:15"},"nativeSrc":"7473:17:15","nodeType":"YulFunctionCall","src":"7473:17:15"},{"name":"pos","nativeSrc":"7492:3:15","nodeType":"YulIdentifier","src":"7492:3:15"}],"functionName":{"name":"add","nativeSrc":"7469:3:15","nodeType":"YulIdentifier","src":"7469:3:15"},"nativeSrc":"7469:27:15","nodeType":"YulFunctionCall","src":"7469:27:15"},{"arguments":[{"arguments":[{"name":"replacement","nativeSrc":"7506:11:15","nodeType":"YulIdentifier","src":"7506:11:15"},{"kind":"number","nativeSrc":"7519:4:15","nodeType":"YulLiteral","src":"7519:4:15","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"7502:3:15","nodeType":"YulIdentifier","src":"7502:3:15"},"nativeSrc":"7502:22:15","nodeType":"YulFunctionCall","src":"7502:22:15"},{"name":"offset","nativeSrc":"7526:6:15","nodeType":"YulIdentifier","src":"7526:6:15"}],"functionName":{"name":"add","nativeSrc":"7498:3:15","nodeType":"YulIdentifier","src":"7498:3:15"},"nativeSrc":"7498:35:15","nodeType":"YulFunctionCall","src":"7498:35:15"},{"name":"length","nativeSrc":"7535:6:15","nodeType":"YulIdentifier","src":"7535:6:15"}],"functionName":{"name":"mcopy","nativeSrc":"7463:5:15","nodeType":"YulIdentifier","src":"7463:5:15"},"nativeSrc":"7463:79:15","nodeType":"YulFunctionCall","src":"7463:79:15"},"nativeSrc":"7463:79:15","nodeType":"YulExpressionStatement","src":"7463:79:15"}]},"evmVersion":"cancun","externalReferences":[{"declaration":3366,"isOffset":false,"isSlot":false,"src":"7477:6:15","valueSize":1},{"declaration":3374,"isOffset":false,"isSlot":false,"src":"7535:6:15","valueSize":1},{"declaration":3372,"isOffset":false,"isSlot":false,"src":"7526:6:15","valueSize":1},{"declaration":3368,"isOffset":false,"isSlot":false,"src":"7492:3:15","valueSize":1},{"declaration":3370,"isOffset":false,"isSlot":false,"src":"7506:11:15","valueSize":1}],"flags":["memory-safe"],"id":3415,"nodeType":"InlineAssembly","src":"7424:128:15"},{"expression":{"id":3416,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3366,"src":"7569:6:15","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":3378,"id":3417,"nodeType":"Return","src":"7562:13:15"}]},"documentation":{"id":3364,"nodeType":"StructuredDocumentation","src":"6335:648:15","text":" @dev Replaces bytes in `buffer` starting at `pos` with bytes from `replacement` starting at `offset`.\n Copies at most `length` bytes from `replacement` to `buffer`.\n Parameters are clamped to valid ranges (i.e. `pos` is clamped to `[0, buffer.length]`, `offset` is\n clamped to `[0, replacement.length]`, and `length` is clamped to `min(length, replacement.length - offset,\n buffer.length - pos))`. If `pos >= buffer.length` or `offset >= replacement.length`, no replacement occurs\n and the buffer is returned unchanged.\n NOTE: This function modifies the provided buffer in place."},"id":3419,"implemented":true,"kind":"function","modifiers":[],"name":"replace","nameLocation":"6997:7:15","nodeType":"FunctionDefinition","parameters":{"id":3375,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3366,"mutability":"mutable","name":"buffer","nameLocation":"7027:6:15","nodeType":"VariableDeclaration","scope":3419,"src":"7014:19:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3365,"name":"bytes","nodeType":"ElementaryTypeName","src":"7014:5:15","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":3368,"mutability":"mutable","name":"pos","nameLocation":"7051:3:15","nodeType":"VariableDeclaration","scope":3419,"src":"7043:11:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3367,"name":"uint256","nodeType":"ElementaryTypeName","src":"7043:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3370,"mutability":"mutable","name":"replacement","nameLocation":"7077:11:15","nodeType":"VariableDeclaration","scope":3419,"src":"7064:24:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3369,"name":"bytes","nodeType":"ElementaryTypeName","src":"7064:5:15","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":3372,"mutability":"mutable","name":"offset","nameLocation":"7106:6:15","nodeType":"VariableDeclaration","scope":3419,"src":"7098:14:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3371,"name":"uint256","nodeType":"ElementaryTypeName","src":"7098:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3374,"mutability":"mutable","name":"length","nameLocation":"7130:6:15","nodeType":"VariableDeclaration","scope":3419,"src":"7122:14:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3373,"name":"uint256","nodeType":"ElementaryTypeName","src":"7122:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7004:138:15"},"returnParameters":{"id":3378,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3377,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3419,"src":"7166:12:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3376,"name":"bytes","nodeType":"ElementaryTypeName","src":"7166:5:15","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"7165:14:15"},"scope":3877,"src":"6988:594:15","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":3491,"nodeType":"Block","src":"8119:563:15","statements":[{"assignments":[3429],"declarations":[{"constant":false,"id":3429,"mutability":"mutable","name":"length","nameLocation":"8137:6:15","nodeType":"VariableDeclaration","scope":3491,"src":"8129:14:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3428,"name":"uint256","nodeType":"ElementaryTypeName","src":"8129:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3431,"initialValue":{"hexValue":"30","id":3430,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8146:1:15","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"8129:18:15"},{"body":{"id":3450,"nodeType":"Block","src":"8202:52:15","statements":[{"expression":{"id":3448,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3443,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3429,"src":"8216:6:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"expression":{"baseExpression":{"id":3444,"name":"buffers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3423,"src":"8226:7:15","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_memory_ptr_$dyn_memory_ptr","typeString":"bytes memory[] memory"}},"id":3446,"indexExpression":{"id":3445,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3433,"src":"8234:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8226:10:15","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":3447,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8237:6:15","memberName":"length","nodeType":"MemberAccess","src":"8226:17:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8216:27:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3449,"nodeType":"ExpressionStatement","src":"8216:27:15"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3439,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3436,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3433,"src":"8177:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":3437,"name":"buffers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3423,"src":"8181:7:15","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_memory_ptr_$dyn_memory_ptr","typeString":"bytes memory[] memory"}},"id":3438,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8189:6:15","memberName":"length","nodeType":"MemberAccess","src":"8181:14:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8177:18:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3451,"initializationExpression":{"assignments":[3433],"declarations":[{"constant":false,"id":3433,"mutability":"mutable","name":"i","nameLocation":"8170:1:15","nodeType":"VariableDeclaration","scope":3451,"src":"8162:9:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3432,"name":"uint256","nodeType":"ElementaryTypeName","src":"8162:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3435,"initialValue":{"hexValue":"30","id":3434,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8174:1:15","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"8162:13:15"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":3441,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"8197:3:15","subExpression":{"id":3440,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3433,"src":"8199:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3442,"nodeType":"ExpressionStatement","src":"8197:3:15"},"nodeType":"ForStatement","src":"8157:97:15"},{"assignments":[3453],"declarations":[{"constant":false,"id":3453,"mutability":"mutable","name":"result","nameLocation":"8277:6:15","nodeType":"VariableDeclaration","scope":3491,"src":"8264:19:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3452,"name":"bytes","nodeType":"ElementaryTypeName","src":"8264:5:15","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":3458,"initialValue":{"arguments":[{"id":3456,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3429,"src":"8296:6:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3455,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"8286:9:15","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$","typeString":"function (uint256) pure returns (bytes memory)"},"typeName":{"id":3454,"name":"bytes","nodeType":"ElementaryTypeName","src":"8290:5:15","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}}},"id":3457,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8286:17:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"8264:39:15"},{"assignments":[3460],"declarations":[{"constant":false,"id":3460,"mutability":"mutable","name":"offset","nameLocation":"8322:6:15","nodeType":"VariableDeclaration","scope":3491,"src":"8314:14:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3459,"name":"uint256","nodeType":"ElementaryTypeName","src":"8314:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3462,"initialValue":{"hexValue":"30783230","id":3461,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8331:4:15","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"0x20"},"nodeType":"VariableDeclarationStatement","src":"8314:21:15"},{"body":{"id":3487,"nodeType":"Block","src":"8390:262:15","statements":[{"assignments":[3475],"declarations":[{"constant":false,"id":3475,"mutability":"mutable","name":"input","nameLocation":"8417:5:15","nodeType":"VariableDeclaration","scope":3487,"src":"8404:18:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3474,"name":"bytes","nodeType":"ElementaryTypeName","src":"8404:5:15","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":3479,"initialValue":{"baseExpression":{"id":3476,"name":"buffers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3423,"src":"8425:7:15","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_memory_ptr_$dyn_memory_ptr","typeString":"bytes memory[] memory"}},"id":3478,"indexExpression":{"id":3477,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3464,"src":"8433:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8425:10:15","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"8404:31:15"},{"AST":{"nativeSrc":"8474:90:15","nodeType":"YulBlock","src":"8474:90:15","statements":[{"expression":{"arguments":[{"arguments":[{"name":"result","nativeSrc":"8502:6:15","nodeType":"YulIdentifier","src":"8502:6:15"},{"name":"offset","nativeSrc":"8510:6:15","nodeType":"YulIdentifier","src":"8510:6:15"}],"functionName":{"name":"add","nativeSrc":"8498:3:15","nodeType":"YulIdentifier","src":"8498:3:15"},"nativeSrc":"8498:19:15","nodeType":"YulFunctionCall","src":"8498:19:15"},{"arguments":[{"name":"input","nativeSrc":"8523:5:15","nodeType":"YulIdentifier","src":"8523:5:15"},{"kind":"number","nativeSrc":"8530:4:15","nodeType":"YulLiteral","src":"8530:4:15","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"8519:3:15","nodeType":"YulIdentifier","src":"8519:3:15"},"nativeSrc":"8519:16:15","nodeType":"YulFunctionCall","src":"8519:16:15"},{"arguments":[{"name":"input","nativeSrc":"8543:5:15","nodeType":"YulIdentifier","src":"8543:5:15"}],"functionName":{"name":"mload","nativeSrc":"8537:5:15","nodeType":"YulIdentifier","src":"8537:5:15"},"nativeSrc":"8537:12:15","nodeType":"YulFunctionCall","src":"8537:12:15"}],"functionName":{"name":"mcopy","nativeSrc":"8492:5:15","nodeType":"YulIdentifier","src":"8492:5:15"},"nativeSrc":"8492:58:15","nodeType":"YulFunctionCall","src":"8492:58:15"},"nativeSrc":"8492:58:15","nodeType":"YulExpressionStatement","src":"8492:58:15"}]},"evmVersion":"cancun","externalReferences":[{"declaration":3475,"isOffset":false,"isSlot":false,"src":"8523:5:15","valueSize":1},{"declaration":3475,"isOffset":false,"isSlot":false,"src":"8543:5:15","valueSize":1},{"declaration":3460,"isOffset":false,"isSlot":false,"src":"8510:6:15","valueSize":1},{"declaration":3453,"isOffset":false,"isSlot":false,"src":"8502:6:15","valueSize":1}],"flags":["memory-safe"],"id":3480,"nodeType":"InlineAssembly","src":"8449:115:15"},{"id":3486,"nodeType":"UncheckedBlock","src":"8577:65:15","statements":[{"expression":{"id":3484,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3481,"name":"offset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3460,"src":"8605:6:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"expression":{"id":3482,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3475,"src":"8615:5:15","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":3483,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8621:6:15","memberName":"length","nodeType":"MemberAccess","src":"8615:12:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8605:22:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3485,"nodeType":"ExpressionStatement","src":"8605:22:15"}]}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3470,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3467,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3464,"src":"8365:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":3468,"name":"buffers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3423,"src":"8369:7:15","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_memory_ptr_$dyn_memory_ptr","typeString":"bytes memory[] memory"}},"id":3469,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8377:6:15","memberName":"length","nodeType":"MemberAccess","src":"8369:14:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8365:18:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3488,"initializationExpression":{"assignments":[3464],"declarations":[{"constant":false,"id":3464,"mutability":"mutable","name":"i","nameLocation":"8358:1:15","nodeType":"VariableDeclaration","scope":3488,"src":"8350:9:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3463,"name":"uint256","nodeType":"ElementaryTypeName","src":"8350:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3466,"initialValue":{"hexValue":"30","id":3465,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8362:1:15","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"8350:13:15"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":3472,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"8385:3:15","subExpression":{"id":3471,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3464,"src":"8387:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3473,"nodeType":"ExpressionStatement","src":"8385:3:15"},"nodeType":"ForStatement","src":"8345:307:15"},{"expression":{"id":3489,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3453,"src":"8669:6:15","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":3427,"id":3490,"nodeType":"Return","src":"8662:13:15"}]},"documentation":{"id":3420,"nodeType":"StructuredDocumentation","src":"7588:449:15","text":" @dev Concatenate an array of bytes into a single bytes object.\n For fixed bytes types, we recommend using the solidity built-in `bytes.concat` or (equivalent)\n `abi.encodePacked`.\n NOTE: this could be done in assembly with a single loop that expands starting at the FMP, but that would be\n significantly less readable. It might be worth benchmarking the savings of the full-assembly approach."},"id":3492,"implemented":true,"kind":"function","modifiers":[],"name":"concat","nameLocation":"8051:6:15","nodeType":"FunctionDefinition","parameters":{"id":3424,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3423,"mutability":"mutable","name":"buffers","nameLocation":"8073:7:15","nodeType":"VariableDeclaration","scope":3492,"src":"8058:22:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_memory_ptr_$dyn_memory_ptr","typeString":"bytes[]"},"typeName":{"baseType":{"id":3421,"name":"bytes","nodeType":"ElementaryTypeName","src":"8058:5:15","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":3422,"nodeType":"ArrayTypeName","src":"8058:7:15","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}},"visibility":"internal"}],"src":"8057:24:15"},"returnParameters":{"id":3427,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3426,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3492,"src":"8105:12:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3425,"name":"bytes","nodeType":"ElementaryTypeName","src":"8105:5:15","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"8104:14:15"},"scope":3877,"src":"8042:640:15","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":3501,"nodeType":"Block","src":"8920:1416:15","statements":[{"AST":{"nativeSrc":"8955:1375:15","nodeType":"YulBlock","src":"8955:1375:15","statements":[{"nativeSrc":"8969:26:15","nodeType":"YulVariableDeclaration","src":"8969:26:15","value":{"arguments":[{"name":"input","nativeSrc":"8989:5:15","nodeType":"YulIdentifier","src":"8989:5:15"}],"functionName":{"name":"mload","nativeSrc":"8983:5:15","nodeType":"YulIdentifier","src":"8983:5:15"},"nativeSrc":"8983:12:15","nodeType":"YulFunctionCall","src":"8983:12:15"},"variables":[{"name":"length","nativeSrc":"8973:6:15","nodeType":"YulTypedName","src":"8973:6:15","type":""}]},{"nativeSrc":"9008:21:15","nodeType":"YulAssignment","src":"9008:21:15","value":{"arguments":[{"kind":"number","nativeSrc":"9024:4:15","nodeType":"YulLiteral","src":"9024:4:15","type":"","value":"0x40"}],"functionName":{"name":"mload","nativeSrc":"9018:5:15","nodeType":"YulIdentifier","src":"9018:5:15"},"nativeSrc":"9018:11:15","nodeType":"YulFunctionCall","src":"9018:11:15"},"variableNames":[{"name":"output","nativeSrc":"9008:6:15","nodeType":"YulIdentifier","src":"9008:6:15"}]},{"expression":{"arguments":[{"kind":"number","nativeSrc":"9049:4:15","nodeType":"YulLiteral","src":"9049:4:15","type":"","value":"0x40"},{"arguments":[{"arguments":[{"name":"output","nativeSrc":"9063:6:15","nodeType":"YulIdentifier","src":"9063:6:15"},{"kind":"number","nativeSrc":"9071:4:15","nodeType":"YulLiteral","src":"9071:4:15","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"9059:3:15","nodeType":"YulIdentifier","src":"9059:3:15"},"nativeSrc":"9059:17:15","nodeType":"YulFunctionCall","src":"9059:17:15"},{"arguments":[{"name":"length","nativeSrc":"9082:6:15","nodeType":"YulIdentifier","src":"9082:6:15"},{"kind":"number","nativeSrc":"9090:1:15","nodeType":"YulLiteral","src":"9090:1:15","type":"","value":"2"}],"functionName":{"name":"mul","nativeSrc":"9078:3:15","nodeType":"YulIdentifier","src":"9078:3:15"},"nativeSrc":"9078:14:15","nodeType":"YulFunctionCall","src":"9078:14:15"}],"functionName":{"name":"add","nativeSrc":"9055:3:15","nodeType":"YulIdentifier","src":"9055:3:15"},"nativeSrc":"9055:38:15","nodeType":"YulFunctionCall","src":"9055:38:15"}],"functionName":{"name":"mstore","nativeSrc":"9042:6:15","nodeType":"YulIdentifier","src":"9042:6:15"},"nativeSrc":"9042:52:15","nodeType":"YulFunctionCall","src":"9042:52:15"},"nativeSrc":"9042:52:15","nodeType":"YulExpressionStatement","src":"9042:52:15"},{"expression":{"arguments":[{"name":"output","nativeSrc":"9114:6:15","nodeType":"YulIdentifier","src":"9114:6:15"},{"arguments":[{"name":"length","nativeSrc":"9126:6:15","nodeType":"YulIdentifier","src":"9126:6:15"},{"kind":"number","nativeSrc":"9134:1:15","nodeType":"YulLiteral","src":"9134:1:15","type":"","value":"2"}],"functionName":{"name":"mul","nativeSrc":"9122:3:15","nodeType":"YulIdentifier","src":"9122:3:15"},"nativeSrc":"9122:14:15","nodeType":"YulFunctionCall","src":"9122:14:15"}],"functionName":{"name":"mstore","nativeSrc":"9107:6:15","nodeType":"YulIdentifier","src":"9107:6:15"},"nativeSrc":"9107:30:15","nodeType":"YulFunctionCall","src":"9107:30:15"},"nativeSrc":"9107:30:15","nodeType":"YulExpressionStatement","src":"9107:30:15"},{"body":{"nativeSrc":"9261:1059:15","nodeType":"YulBlock","src":"9261:1059:15","statements":[{"nativeSrc":"9279:54:15","nodeType":"YulVariableDeclaration","src":"9279:54:15","value":{"arguments":[{"kind":"number","nativeSrc":"9296:3:15","nodeType":"YulLiteral","src":"9296:3:15","type":"","value":"128"},{"arguments":[{"arguments":[{"arguments":[{"name":"input","nativeSrc":"9315:5:15","nodeType":"YulIdentifier","src":"9315:5:15"},{"kind":"number","nativeSrc":"9322:4:15","nodeType":"YulLiteral","src":"9322:4:15","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"9311:3:15","nodeType":"YulIdentifier","src":"9311:3:15"},"nativeSrc":"9311:16:15","nodeType":"YulFunctionCall","src":"9311:16:15"},{"name":"i","nativeSrc":"9329:1:15","nodeType":"YulIdentifier","src":"9329:1:15"}],"functionName":{"name":"add","nativeSrc":"9307:3:15","nodeType":"YulIdentifier","src":"9307:3:15"},"nativeSrc":"9307:24:15","nodeType":"YulFunctionCall","src":"9307:24:15"}],"functionName":{"name":"mload","nativeSrc":"9301:5:15","nodeType":"YulIdentifier","src":"9301:5:15"},"nativeSrc":"9301:31:15","nodeType":"YulFunctionCall","src":"9301:31:15"}],"functionName":{"name":"shr","nativeSrc":"9292:3:15","nodeType":"YulIdentifier","src":"9292:3:15"},"nativeSrc":"9292:41:15","nodeType":"YulFunctionCall","src":"9292:41:15"},"variables":[{"name":"chunk","nativeSrc":"9283:5:15","nodeType":"YulTypedName","src":"9283:5:15","type":""}]},{"nativeSrc":"9350:165:15","nodeType":"YulAssignment","src":"9350:165:15","value":{"arguments":[{"kind":"number","nativeSrc":"9384:66:15","nodeType":"YulLiteral","src":"9384:66:15","type":"","value":"0x0000000000000000ffffffffffffffff0000000000000000ffffffffffffffff"},{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"9479:2:15","nodeType":"YulLiteral","src":"9479:2:15","type":"","value":"64"},{"name":"chunk","nativeSrc":"9483:5:15","nodeType":"YulIdentifier","src":"9483:5:15"}],"functionName":{"name":"shl","nativeSrc":"9475:3:15","nodeType":"YulIdentifier","src":"9475:3:15"},"nativeSrc":"9475:14:15","nodeType":"YulFunctionCall","src":"9475:14:15"},{"name":"chunk","nativeSrc":"9491:5:15","nodeType":"YulIdentifier","src":"9491:5:15"}],"functionName":{"name":"or","nativeSrc":"9472:2:15","nodeType":"YulIdentifier","src":"9472:2:15"},"nativeSrc":"9472:25:15","nodeType":"YulFunctionCall","src":"9472:25:15"}],"functionName":{"name":"and","nativeSrc":"9359:3:15","nodeType":"YulIdentifier","src":"9359:3:15"},"nativeSrc":"9359:156:15","nodeType":"YulFunctionCall","src":"9359:156:15"},"variableNames":[{"name":"chunk","nativeSrc":"9350:5:15","nodeType":"YulIdentifier","src":"9350:5:15"}]},{"nativeSrc":"9532:165:15","nodeType":"YulAssignment","src":"9532:165:15","value":{"arguments":[{"kind":"number","nativeSrc":"9566:66:15","nodeType":"YulLiteral","src":"9566:66:15","type":"","value":"0x00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff"},{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"9661:2:15","nodeType":"YulLiteral","src":"9661:2:15","type":"","value":"32"},{"name":"chunk","nativeSrc":"9665:5:15","nodeType":"YulIdentifier","src":"9665:5:15"}],"functionName":{"name":"shl","nativeSrc":"9657:3:15","nodeType":"YulIdentifier","src":"9657:3:15"},"nativeSrc":"9657:14:15","nodeType":"YulFunctionCall","src":"9657:14:15"},{"name":"chunk","nativeSrc":"9673:5:15","nodeType":"YulIdentifier","src":"9673:5:15"}],"functionName":{"name":"or","nativeSrc":"9654:2:15","nodeType":"YulIdentifier","src":"9654:2:15"},"nativeSrc":"9654:25:15","nodeType":"YulFunctionCall","src":"9654:25:15"}],"functionName":{"name":"and","nativeSrc":"9541:3:15","nodeType":"YulIdentifier","src":"9541:3:15"},"nativeSrc":"9541:156:15","nodeType":"YulFunctionCall","src":"9541:156:15"},"variableNames":[{"name":"chunk","nativeSrc":"9532:5:15","nodeType":"YulIdentifier","src":"9532:5:15"}]},{"nativeSrc":"9714:165:15","nodeType":"YulAssignment","src":"9714:165:15","value":{"arguments":[{"kind":"number","nativeSrc":"9748:66:15","nodeType":"YulLiteral","src":"9748:66:15","type":"","value":"0x0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff"},{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"9843:2:15","nodeType":"YulLiteral","src":"9843:2:15","type":"","value":"16"},{"name":"chunk","nativeSrc":"9847:5:15","nodeType":"YulIdentifier","src":"9847:5:15"}],"functionName":{"name":"shl","nativeSrc":"9839:3:15","nodeType":"YulIdentifier","src":"9839:3:15"},"nativeSrc":"9839:14:15","nodeType":"YulFunctionCall","src":"9839:14:15"},{"name":"chunk","nativeSrc":"9855:5:15","nodeType":"YulIdentifier","src":"9855:5:15"}],"functionName":{"name":"or","nativeSrc":"9836:2:15","nodeType":"YulIdentifier","src":"9836:2:15"},"nativeSrc":"9836:25:15","nodeType":"YulFunctionCall","src":"9836:25:15"}],"functionName":{"name":"and","nativeSrc":"9723:3:15","nodeType":"YulIdentifier","src":"9723:3:15"},"nativeSrc":"9723:156:15","nodeType":"YulFunctionCall","src":"9723:156:15"},"variableNames":[{"name":"chunk","nativeSrc":"9714:5:15","nodeType":"YulIdentifier","src":"9714:5:15"}]},{"nativeSrc":"9896:164:15","nodeType":"YulAssignment","src":"9896:164:15","value":{"arguments":[{"kind":"number","nativeSrc":"9930:66:15","nodeType":"YulLiteral","src":"9930:66:15","type":"","value":"0x00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff"},{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"10025:1:15","nodeType":"YulLiteral","src":"10025:1:15","type":"","value":"8"},{"name":"chunk","nativeSrc":"10028:5:15","nodeType":"YulIdentifier","src":"10028:5:15"}],"functionName":{"name":"shl","nativeSrc":"10021:3:15","nodeType":"YulIdentifier","src":"10021:3:15"},"nativeSrc":"10021:13:15","nodeType":"YulFunctionCall","src":"10021:13:15"},{"name":"chunk","nativeSrc":"10036:5:15","nodeType":"YulIdentifier","src":"10036:5:15"}],"functionName":{"name":"or","nativeSrc":"10018:2:15","nodeType":"YulIdentifier","src":"10018:2:15"},"nativeSrc":"10018:24:15","nodeType":"YulFunctionCall","src":"10018:24:15"}],"functionName":{"name":"and","nativeSrc":"9905:3:15","nodeType":"YulIdentifier","src":"9905:3:15"},"nativeSrc":"9905:155:15","nodeType":"YulFunctionCall","src":"9905:155:15"},"variableNames":[{"name":"chunk","nativeSrc":"9896:5:15","nodeType":"YulIdentifier","src":"9896:5:15"}]},{"nativeSrc":"10077:164:15","nodeType":"YulAssignment","src":"10077:164:15","value":{"arguments":[{"kind":"number","nativeSrc":"10111:66:15","nodeType":"YulLiteral","src":"10111:66:15","type":"","value":"0x0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f"},{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"10206:1:15","nodeType":"YulLiteral","src":"10206:1:15","type":"","value":"4"},{"name":"chunk","nativeSrc":"10209:5:15","nodeType":"YulIdentifier","src":"10209:5:15"}],"functionName":{"name":"shl","nativeSrc":"10202:3:15","nodeType":"YulIdentifier","src":"10202:3:15"},"nativeSrc":"10202:13:15","nodeType":"YulFunctionCall","src":"10202:13:15"},{"name":"chunk","nativeSrc":"10217:5:15","nodeType":"YulIdentifier","src":"10217:5:15"}],"functionName":{"name":"or","nativeSrc":"10199:2:15","nodeType":"YulIdentifier","src":"10199:2:15"},"nativeSrc":"10199:24:15","nodeType":"YulFunctionCall","src":"10199:24:15"}],"functionName":{"name":"and","nativeSrc":"10086:3:15","nodeType":"YulIdentifier","src":"10086:3:15"},"nativeSrc":"10086:155:15","nodeType":"YulFunctionCall","src":"10086:155:15"},"variableNames":[{"name":"chunk","nativeSrc":"10077:5:15","nodeType":"YulIdentifier","src":"10077:5:15"}]},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"output","nativeSrc":"10273:6:15","nodeType":"YulIdentifier","src":"10273:6:15"},{"kind":"number","nativeSrc":"10281:4:15","nodeType":"YulLiteral","src":"10281:4:15","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"10269:3:15","nodeType":"YulIdentifier","src":"10269:3:15"},"nativeSrc":"10269:17:15","nodeType":"YulFunctionCall","src":"10269:17:15"},{"arguments":[{"name":"i","nativeSrc":"10292:1:15","nodeType":"YulIdentifier","src":"10292:1:15"},{"kind":"number","nativeSrc":"10295:1:15","nodeType":"YulLiteral","src":"10295:1:15","type":"","value":"2"}],"functionName":{"name":"mul","nativeSrc":"10288:3:15","nodeType":"YulIdentifier","src":"10288:3:15"},"nativeSrc":"10288:9:15","nodeType":"YulFunctionCall","src":"10288:9:15"}],"functionName":{"name":"add","nativeSrc":"10265:3:15","nodeType":"YulIdentifier","src":"10265:3:15"},"nativeSrc":"10265:33:15","nodeType":"YulFunctionCall","src":"10265:33:15"},{"name":"chunk","nativeSrc":"10300:5:15","nodeType":"YulIdentifier","src":"10300:5:15"}],"functionName":{"name":"mstore","nativeSrc":"10258:6:15","nodeType":"YulIdentifier","src":"10258:6:15"},"nativeSrc":"10258:48:15","nodeType":"YulFunctionCall","src":"10258:48:15"},"nativeSrc":"10258:48:15","nodeType":"YulExpressionStatement","src":"10258:48:15"}]},"condition":{"arguments":[{"name":"i","nativeSrc":"9200:1:15","nodeType":"YulIdentifier","src":"9200:1:15"},{"name":"length","nativeSrc":"9203:6:15","nodeType":"YulIdentifier","src":"9203:6:15"}],"functionName":{"name":"lt","nativeSrc":"9197:2:15","nodeType":"YulIdentifier","src":"9197:2:15"},"nativeSrc":"9197:13:15","nodeType":"YulFunctionCall","src":"9197:13:15"},"nativeSrc":"9150:1170:15","nodeType":"YulForLoop","post":{"nativeSrc":"9211:49:15","nodeType":"YulBlock","src":"9211:49:15","statements":[{"nativeSrc":"9229:17:15","nodeType":"YulAssignment","src":"9229:17:15","value":{"arguments":[{"name":"i","nativeSrc":"9238:1:15","nodeType":"YulIdentifier","src":"9238:1:15"},{"kind":"number","nativeSrc":"9241:4:15","nodeType":"YulLiteral","src":"9241:4:15","type":"","value":"0x10"}],"functionName":{"name":"add","nativeSrc":"9234:3:15","nodeType":"YulIdentifier","src":"9234:3:15"},"nativeSrc":"9234:12:15","nodeType":"YulFunctionCall","src":"9234:12:15"},"variableNames":[{"name":"i","nativeSrc":"9229:1:15","nodeType":"YulIdentifier","src":"9229:1:15"}]}]},"pre":{"nativeSrc":"9154:42:15","nodeType":"YulBlock","src":"9154:42:15","statements":[{"nativeSrc":"9172:10:15","nodeType":"YulVariableDeclaration","src":"9172:10:15","value":{"kind":"number","nativeSrc":"9181:1:15","nodeType":"YulLiteral","src":"9181:1:15","type":"","value":"0"},"variables":[{"name":"i","nativeSrc":"9176:1:15","nodeType":"YulTypedName","src":"9176:1:15","type":""}]}]},"src":"9150:1170:15"}]},"evmVersion":"cancun","externalReferences":[{"declaration":3495,"isOffset":false,"isSlot":false,"src":"8989:5:15","valueSize":1},{"declaration":3495,"isOffset":false,"isSlot":false,"src":"9315:5:15","valueSize":1},{"declaration":3498,"isOffset":false,"isSlot":false,"src":"10273:6:15","valueSize":1},{"declaration":3498,"isOffset":false,"isSlot":false,"src":"9008:6:15","valueSize":1},{"declaration":3498,"isOffset":false,"isSlot":false,"src":"9063:6:15","valueSize":1},{"declaration":3498,"isOffset":false,"isSlot":false,"src":"9114:6:15","valueSize":1}],"flags":["memory-safe"],"id":3500,"nodeType":"InlineAssembly","src":"8930:1400:15"}]},"documentation":{"id":3493,"nodeType":"StructuredDocumentation","src":"8688:144:15","text":" @dev Split each byte in `input` into two nibbles (4 bits each)\n Example: hex\"01234567\" → hex\"0001020304050607\""},"id":3502,"implemented":true,"kind":"function","modifiers":[],"name":"toNibbles","nameLocation":"8846:9:15","nodeType":"FunctionDefinition","parameters":{"id":3496,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3495,"mutability":"mutable","name":"input","nameLocation":"8869:5:15","nodeType":"VariableDeclaration","scope":3502,"src":"8856:18:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3494,"name":"bytes","nodeType":"ElementaryTypeName","src":"8856:5:15","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"8855:20:15"},"returnParameters":{"id":3499,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3498,"mutability":"mutable","name":"output","nameLocation":"8912:6:15","nodeType":"VariableDeclaration","scope":3502,"src":"8899:19:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3497,"name":"bytes","nodeType":"ElementaryTypeName","src":"8899:5:15","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"8898:21:15"},"scope":3877,"src":"8837:1499:15","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":3526,"nodeType":"Block","src":"10494:76:15","statements":[{"expression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3524,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3516,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":3512,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3505,"src":"10511:1:15","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":3513,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10513:6:15","memberName":"length","nodeType":"MemberAccess","src":"10511:8:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":3514,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3507,"src":"10523:1:15","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":3515,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10525:6:15","memberName":"length","nodeType":"MemberAccess","src":"10523:8:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10511:20:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":3523,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":3518,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3505,"src":"10545:1:15","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":3517,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967288,"src":"10535:9:15","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":3519,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10535:12:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":3521,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3507,"src":"10561:1:15","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":3520,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967288,"src":"10551:9:15","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":3522,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10551:12:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"10535:28:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"10511:52:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":3511,"id":3525,"nodeType":"Return","src":"10504:59:15"}]},"documentation":{"id":3503,"nodeType":"StructuredDocumentation","src":"10342:71:15","text":" @dev Returns true if the two byte buffers are equal."},"id":3527,"implemented":true,"kind":"function","modifiers":[],"name":"equal","nameLocation":"10427:5:15","nodeType":"FunctionDefinition","parameters":{"id":3508,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3505,"mutability":"mutable","name":"a","nameLocation":"10446:1:15","nodeType":"VariableDeclaration","scope":3527,"src":"10433:14:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3504,"name":"bytes","nodeType":"ElementaryTypeName","src":"10433:5:15","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":3507,"mutability":"mutable","name":"b","nameLocation":"10462:1:15","nodeType":"VariableDeclaration","scope":3527,"src":"10449:14:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3506,"name":"bytes","nodeType":"ElementaryTypeName","src":"10449:5:15","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"10432:32:15"},"returnParameters":{"id":3511,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3510,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3527,"src":"10488:4:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3509,"name":"bool","nodeType":"ElementaryTypeName","src":"10488:4:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"10487:6:15"},"scope":3877,"src":"10418:152:15","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":3617,"nodeType":"Block","src":"10874:1024:15","statements":[{"expression":{"id":3551,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3535,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3530,"src":"10884:5:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":3550,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":3541,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":3538,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3536,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3530,"src":"10920:5:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"38","id":3537,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10929:1:15","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"10920:10:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":3539,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10919:12:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"307830304646303046463030464630304646303046463030464630304646303046463030464630304646303046463030464630304646303046463030464630304646","id":3540,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10934:66:15","typeDescriptions":{"typeIdentifier":"t_rational_450552876409790643671482431940419874915447411150352389258589821042463539455_by_1","typeString":"int_const 4505...(67 digits omitted)...9455"},"value":"0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF"},"src":"10919:81:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":3542,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10918:83:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"|","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":3548,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":3545,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3543,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3530,"src":"11018:5:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"307830304646303046463030464630304646303046463030464630304646303046463030464630304646303046463030464630304646303046463030464630304646","id":3544,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11026:66:15","typeDescriptions":{"typeIdentifier":"t_rational_450552876409790643671482431940419874915447411150352389258589821042463539455_by_1","typeString":"int_const 4505...(67 digits omitted)...9455"},"value":"0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF"},"src":"11018:74:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":3546,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11017:76:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"38","id":3547,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11097:1:15","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"11017:81:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":3549,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11016:83:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"10918:181:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"10884:215:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":3552,"nodeType":"ExpressionStatement","src":"10884:215:15"},{"expression":{"id":3569,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3553,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3530,"src":"11109:5:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":3568,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":3559,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":3556,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3554,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3530,"src":"11157:5:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"3136","id":3555,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11166:2:15","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"11157:11:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":3557,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11156:13:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"307830303030464646463030303046464646303030304646464630303030464646463030303046464646303030304646464630303030464646463030303046464646","id":3558,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11172:66:15","typeDescriptions":{"typeIdentifier":"t_rational_1766820105243087041267848467410591083712559083657179364930612997358944255_by_1","typeString":"int_const 1766...(65 digits omitted)...4255"},"value":"0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF"},"src":"11156:82:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":3560,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11155:84:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"|","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":3566,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":3563,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3561,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3530,"src":"11256:5:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"307830303030464646463030303046464646303030304646464630303030464646463030303046464646303030304646464630303030464646463030303046464646","id":3562,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11264:66:15","typeDescriptions":{"typeIdentifier":"t_rational_1766820105243087041267848467410591083712559083657179364930612997358944255_by_1","typeString":"int_const 1766...(65 digits omitted)...4255"},"value":"0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF"},"src":"11256:74:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":3564,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11255:76:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"3136","id":3565,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11335:2:15","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"11255:82:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":3567,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11254:84:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"11155:183:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"11109:229:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":3570,"nodeType":"ExpressionStatement","src":"11109:229:15"},{"expression":{"id":3587,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3571,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3530,"src":"11348:5:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":3586,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":3577,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":3574,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3572,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3530,"src":"11396:5:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"3332","id":3573,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11405:2:15","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"11396:11:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":3575,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11395:13:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"307830303030303030304646464646464646303030303030303046464646464646463030303030303030464646464646464630303030303030304646464646464646","id":3576,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11411:66:15","typeDescriptions":{"typeIdentifier":"t_rational_26959946660873538060741835960174461801791452538186943042387869433855_by_1","typeString":"int_const 2695...(60 digits omitted)...3855"},"value":"0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF"},"src":"11395:82:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":3578,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11394:84:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"|","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":3584,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":3581,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3579,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3530,"src":"11495:5:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"307830303030303030304646464646464646303030303030303046464646464646463030303030303030464646464646464630303030303030304646464646464646","id":3580,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11503:66:15","typeDescriptions":{"typeIdentifier":"t_rational_26959946660873538060741835960174461801791452538186943042387869433855_by_1","typeString":"int_const 2695...(60 digits omitted)...3855"},"value":"0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF"},"src":"11495:74:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":3582,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11494:76:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"3332","id":3583,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11574:2:15","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"11494:82:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":3585,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11493:84:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"11394:183:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"11348:229:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":3588,"nodeType":"ExpressionStatement","src":"11348:229:15"},{"expression":{"id":3605,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3589,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3530,"src":"11587:5:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":3604,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":3595,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":3592,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3590,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3530,"src":"11635:5:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"3634","id":3591,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11644:2:15","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"11635:11:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":3593,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11634:13:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"307830303030303030303030303030303030464646464646464646464646464646463030303030303030303030303030303046464646464646464646464646464646","id":3594,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11650:66:15","typeDescriptions":{"typeIdentifier":"t_rational_6277101735386680763495507056286727952657427581105975853055_by_1","typeString":"int_const 6277...(50 digits omitted)...3055"},"value":"0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF"},"src":"11634:82:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":3596,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11633:84:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"|","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":3602,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":3599,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3597,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3530,"src":"11734:5:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"307830303030303030303030303030303030464646464646464646464646464646463030303030303030303030303030303046464646464646464646464646464646","id":3598,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11742:66:15","typeDescriptions":{"typeIdentifier":"t_rational_6277101735386680763495507056286727952657427581105975853055_by_1","typeString":"int_const 6277...(50 digits omitted)...3055"},"value":"0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF"},"src":"11734:74:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":3600,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11733:76:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"3634","id":3601,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11813:2:15","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"11733:82:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":3603,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11732:84:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"11633:183:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"11587:229:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":3606,"nodeType":"ExpressionStatement","src":"11587:229:15"},{"expression":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":3615,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":3609,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3607,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3530,"src":"11834:5:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"313238","id":3608,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11843:3:15","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},"src":"11834:12:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":3610,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11833:14:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"|","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":3613,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3611,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3530,"src":"11851:5:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"313238","id":3612,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11860:3:15","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},"src":"11851:12:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":3614,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11850:14:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"11833:31:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":3534,"id":3616,"nodeType":"Return","src":"11826:38:15"}]},"documentation":{"id":3528,"nodeType":"StructuredDocumentation","src":"10576:222:15","text":" @dev Reverses the byte order of a bytes32 value, converting between little-endian and big-endian.\n Inspired by https://graphics.stanford.edu/~seander/bithacks.html#ReverseParallel[Reverse Parallel]"},"id":3618,"implemented":true,"kind":"function","modifiers":[],"name":"reverseBytes32","nameLocation":"10812:14:15","nodeType":"FunctionDefinition","parameters":{"id":3531,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3530,"mutability":"mutable","name":"value","nameLocation":"10835:5:15","nodeType":"VariableDeclaration","scope":3618,"src":"10827:13:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3529,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10827:7:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"10826:15:15"},"returnParameters":{"id":3534,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3533,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3618,"src":"10865:7:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3532,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10865:7:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"10864:9:15"},"scope":3877,"src":"10803:1095:15","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":3690,"nodeType":"Block","src":"12047:590:15","statements":[{"expression":{"id":3642,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3626,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3621,"src":"12057:5:15","typeDescriptions":{"typeIdentifier":"t_bytes16","typeString":"bytes16"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_bytes16","typeString":"bytes16"},"id":3641,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_bytes16","typeString":"bytes16"},"id":3632,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_bytes16","typeString":"bytes16"},"id":3629,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3627,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3621,"src":"12093:5:15","typeDescriptions":{"typeIdentifier":"t_bytes16","typeString":"bytes16"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"30784646303046463030464630304646303046463030464630304646303046463030","id":3628,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12101:34:15","typeDescriptions":{"typeIdentifier":"t_rational_338958311018522360492699998064329424640_by_1","typeString":"int_const 3389...(31 digits omitted)...4640"},"value":"0xFF00FF00FF00FF00FF00FF00FF00FF00"},"src":"12093:42:15","typeDescriptions":{"typeIdentifier":"t_bytes16","typeString":"bytes16"}}],"id":3630,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12092:44:15","typeDescriptions":{"typeIdentifier":"t_bytes16","typeString":"bytes16"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"38","id":3631,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12140:1:15","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"12092:49:15","typeDescriptions":{"typeIdentifier":"t_bytes16","typeString":"bytes16"}}],"id":3633,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12091:51:15","typeDescriptions":{"typeIdentifier":"t_bytes16","typeString":"bytes16"}},"nodeType":"BinaryOperation","operator":"|","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_bytes16","typeString":"bytes16"},"id":3639,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_bytes16","typeString":"bytes16"},"id":3636,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3634,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3621,"src":"12159:5:15","typeDescriptions":{"typeIdentifier":"t_bytes16","typeString":"bytes16"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"30783030464630304646303046463030464630304646303046463030464630304646","id":3635,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12167:34:15","typeDescriptions":{"typeIdentifier":"t_rational_1324055902416102970674609367438786815_by_1","typeString":"int_const 1324...(29 digits omitted)...6815"},"value":"0x00FF00FF00FF00FF00FF00FF00FF00FF"},"src":"12159:42:15","typeDescriptions":{"typeIdentifier":"t_bytes16","typeString":"bytes16"}}],"id":3637,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12158:44:15","typeDescriptions":{"typeIdentifier":"t_bytes16","typeString":"bytes16"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"38","id":3638,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12206:1:15","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"12158:49:15","typeDescriptions":{"typeIdentifier":"t_bytes16","typeString":"bytes16"}}],"id":3640,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12157:51:15","typeDescriptions":{"typeIdentifier":"t_bytes16","typeString":"bytes16"}},"src":"12091:117:15","typeDescriptions":{"typeIdentifier":"t_bytes16","typeString":"bytes16"}},"src":"12057:151:15","typeDescriptions":{"typeIdentifier":"t_bytes16","typeString":"bytes16"}},"id":3643,"nodeType":"ExpressionStatement","src":"12057:151:15"},{"expression":{"id":3660,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3644,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3621,"src":"12218:5:15","typeDescriptions":{"typeIdentifier":"t_bytes16","typeString":"bytes16"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_bytes16","typeString":"bytes16"},"id":3659,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_bytes16","typeString":"bytes16"},"id":3650,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_bytes16","typeString":"bytes16"},"id":3647,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3645,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3621,"src":"12266:5:15","typeDescriptions":{"typeIdentifier":"t_bytes16","typeString":"bytes16"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"30784646464630303030464646463030303046464646303030304646464630303030","id":3646,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12274:34:15","typeDescriptions":{"typeIdentifier":"t_rational_340277174703306882242637262502835978240_by_1","typeString":"int_const 3402...(31 digits omitted)...8240"},"value":"0xFFFF0000FFFF0000FFFF0000FFFF0000"},"src":"12266:42:15","typeDescriptions":{"typeIdentifier":"t_bytes16","typeString":"bytes16"}}],"id":3648,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12265:44:15","typeDescriptions":{"typeIdentifier":"t_bytes16","typeString":"bytes16"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"3136","id":3649,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12313:2:15","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"12265:50:15","typeDescriptions":{"typeIdentifier":"t_bytes16","typeString":"bytes16"}}],"id":3651,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12264:52:15","typeDescriptions":{"typeIdentifier":"t_bytes16","typeString":"bytes16"}},"nodeType":"BinaryOperation","operator":"|","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_bytes16","typeString":"bytes16"},"id":3657,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_bytes16","typeString":"bytes16"},"id":3654,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3652,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3621,"src":"12333:5:15","typeDescriptions":{"typeIdentifier":"t_bytes16","typeString":"bytes16"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"30783030303046464646303030304646464630303030464646463030303046464646","id":3653,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12341:34:15","typeDescriptions":{"typeIdentifier":"t_rational_5192217631581220737344928932233215_by_1","typeString":"int_const 5192...(26 digits omitted)...3215"},"value":"0x0000FFFF0000FFFF0000FFFF0000FFFF"},"src":"12333:42:15","typeDescriptions":{"typeIdentifier":"t_bytes16","typeString":"bytes16"}}],"id":3655,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12332:44:15","typeDescriptions":{"typeIdentifier":"t_bytes16","typeString":"bytes16"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"3136","id":3656,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12380:2:15","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"12332:50:15","typeDescriptions":{"typeIdentifier":"t_bytes16","typeString":"bytes16"}}],"id":3658,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12331:52:15","typeDescriptions":{"typeIdentifier":"t_bytes16","typeString":"bytes16"}},"src":"12264:119:15","typeDescriptions":{"typeIdentifier":"t_bytes16","typeString":"bytes16"}},"src":"12218:165:15","typeDescriptions":{"typeIdentifier":"t_bytes16","typeString":"bytes16"}},"id":3661,"nodeType":"ExpressionStatement","src":"12218:165:15"},{"expression":{"id":3678,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3662,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3621,"src":"12393:5:15","typeDescriptions":{"typeIdentifier":"t_bytes16","typeString":"bytes16"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_bytes16","typeString":"bytes16"},"id":3677,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_bytes16","typeString":"bytes16"},"id":3668,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_bytes16","typeString":"bytes16"},"id":3665,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3663,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3621,"src":"12441:5:15","typeDescriptions":{"typeIdentifier":"t_bytes16","typeString":"bytes16"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"30784646464646464646303030303030303046464646464646463030303030303030","id":3664,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12449:34:15","typeDescriptions":{"typeIdentifier":"t_rational_340282366841710300967557013907638845440_by_1","typeString":"int_const 3402...(31 digits omitted)...5440"},"value":"0xFFFFFFFF00000000FFFFFFFF00000000"},"src":"12441:42:15","typeDescriptions":{"typeIdentifier":"t_bytes16","typeString":"bytes16"}}],"id":3666,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12440:44:15","typeDescriptions":{"typeIdentifier":"t_bytes16","typeString":"bytes16"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"3332","id":3667,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12488:2:15","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"12440:50:15","typeDescriptions":{"typeIdentifier":"t_bytes16","typeString":"bytes16"}}],"id":3669,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12439:52:15","typeDescriptions":{"typeIdentifier":"t_bytes16","typeString":"bytes16"}},"nodeType":"BinaryOperation","operator":"|","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_bytes16","typeString":"bytes16"},"id":3675,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_bytes16","typeString":"bytes16"},"id":3672,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3670,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3621,"src":"12508:5:15","typeDescriptions":{"typeIdentifier":"t_bytes16","typeString":"bytes16"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"30783030303030303030464646464646464630303030303030304646464646464646","id":3671,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12516:34:15","typeDescriptions":{"typeIdentifier":"t_rational_79228162495817593524129366015_by_1","typeString":"int_const 79228162495817593524129366015"},"value":"0x00000000FFFFFFFF00000000FFFFFFFF"},"src":"12508:42:15","typeDescriptions":{"typeIdentifier":"t_bytes16","typeString":"bytes16"}}],"id":3673,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12507:44:15","typeDescriptions":{"typeIdentifier":"t_bytes16","typeString":"bytes16"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"3332","id":3674,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12555:2:15","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"12507:50:15","typeDescriptions":{"typeIdentifier":"t_bytes16","typeString":"bytes16"}}],"id":3676,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12506:52:15","typeDescriptions":{"typeIdentifier":"t_bytes16","typeString":"bytes16"}},"src":"12439:119:15","typeDescriptions":{"typeIdentifier":"t_bytes16","typeString":"bytes16"}},"src":"12393:165:15","typeDescriptions":{"typeIdentifier":"t_bytes16","typeString":"bytes16"}},"id":3679,"nodeType":"ExpressionStatement","src":"12393:165:15"},{"expression":{"commonType":{"typeIdentifier":"t_bytes16","typeString":"bytes16"},"id":3688,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_bytes16","typeString":"bytes16"},"id":3682,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3680,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3621,"src":"12576:5:15","typeDescriptions":{"typeIdentifier":"t_bytes16","typeString":"bytes16"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"3634","id":3681,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12585:2:15","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"12576:11:15","typeDescriptions":{"typeIdentifier":"t_bytes16","typeString":"bytes16"}}],"id":3683,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12575:13:15","typeDescriptions":{"typeIdentifier":"t_bytes16","typeString":"bytes16"}},"nodeType":"BinaryOperation","operator":"|","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_bytes16","typeString":"bytes16"},"id":3686,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3684,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3621,"src":"12592:5:15","typeDescriptions":{"typeIdentifier":"t_bytes16","typeString":"bytes16"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"3634","id":3685,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12601:2:15","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"12592:11:15","typeDescriptions":{"typeIdentifier":"t_bytes16","typeString":"bytes16"}}],"id":3687,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12591:13:15","typeDescriptions":{"typeIdentifier":"t_bytes16","typeString":"bytes16"}},"src":"12575:29:15","typeDescriptions":{"typeIdentifier":"t_bytes16","typeString":"bytes16"}},"functionReturnParameters":3625,"id":3689,"nodeType":"Return","src":"12568:36:15"}]},"documentation":{"id":3619,"nodeType":"StructuredDocumentation","src":"11904:67:15","text":"@dev Same as {reverseBytes32} but optimized for 128-bit values."},"id":3691,"implemented":true,"kind":"function","modifiers":[],"name":"reverseBytes16","nameLocation":"11985:14:15","nodeType":"FunctionDefinition","parameters":{"id":3622,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3621,"mutability":"mutable","name":"value","nameLocation":"12008:5:15","nodeType":"VariableDeclaration","scope":3691,"src":"12000:13:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes16","typeString":"bytes16"},"typeName":{"id":3620,"name":"bytes16","nodeType":"ElementaryTypeName","src":"12000:7:15","typeDescriptions":{"typeIdentifier":"t_bytes16","typeString":"bytes16"}},"visibility":"internal"}],"src":"11999:15:15"},"returnParameters":{"id":3625,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3624,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3691,"src":"12038:7:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes16","typeString":"bytes16"},"typeName":{"id":3623,"name":"bytes16","nodeType":"ElementaryTypeName","src":"12038:7:15","typeDescriptions":{"typeIdentifier":"t_bytes16","typeString":"bytes16"}},"visibility":"internal"}],"src":"12037:9:15"},"scope":3877,"src":"11976:661:15","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":3745,"nodeType":"Block","src":"12782:303:15","statements":[{"expression":{"id":3715,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3699,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3694,"src":"12792:5:15","typeDescriptions":{"typeIdentifier":"t_bytes8","typeString":"bytes8"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_bytes8","typeString":"bytes8"},"id":3714,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_bytes8","typeString":"bytes8"},"id":3705,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_bytes8","typeString":"bytes8"},"id":3702,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3700,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3694,"src":"12802:5:15","typeDescriptions":{"typeIdentifier":"t_bytes8","typeString":"bytes8"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"307846463030464630304646303046463030","id":3701,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12810:18:15","typeDescriptions":{"typeIdentifier":"t_rational_18374966859414961920_by_1","typeString":"int_const 18374966859414961920"},"value":"0xFF00FF00FF00FF00"},"src":"12802:26:15","typeDescriptions":{"typeIdentifier":"t_bytes8","typeString":"bytes8"}}],"id":3703,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12801:28:15","typeDescriptions":{"typeIdentifier":"t_bytes8","typeString":"bytes8"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"38","id":3704,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12833:1:15","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"12801:33:15","typeDescriptions":{"typeIdentifier":"t_bytes8","typeString":"bytes8"}}],"id":3706,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12800:35:15","typeDescriptions":{"typeIdentifier":"t_bytes8","typeString":"bytes8"}},"nodeType":"BinaryOperation","operator":"|","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_bytes8","typeString":"bytes8"},"id":3712,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_bytes8","typeString":"bytes8"},"id":3709,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3707,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3694,"src":"12840:5:15","typeDescriptions":{"typeIdentifier":"t_bytes8","typeString":"bytes8"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"307830304646303046463030464630304646","id":3708,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12848:18:15","typeDescriptions":{"typeIdentifier":"t_rational_71777214294589695_by_1","typeString":"int_const 71777214294589695"},"value":"0x00FF00FF00FF00FF"},"src":"12840:26:15","typeDescriptions":{"typeIdentifier":"t_bytes8","typeString":"bytes8"}}],"id":3710,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12839:28:15","typeDescriptions":{"typeIdentifier":"t_bytes8","typeString":"bytes8"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"38","id":3711,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12871:1:15","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"12839:33:15","typeDescriptions":{"typeIdentifier":"t_bytes8","typeString":"bytes8"}}],"id":3713,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12838:35:15","typeDescriptions":{"typeIdentifier":"t_bytes8","typeString":"bytes8"}},"src":"12800:73:15","typeDescriptions":{"typeIdentifier":"t_bytes8","typeString":"bytes8"}},"src":"12792:81:15","typeDescriptions":{"typeIdentifier":"t_bytes8","typeString":"bytes8"}},"id":3716,"nodeType":"ExpressionStatement","src":"12792:81:15"},{"expression":{"id":3733,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3717,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3694,"src":"12897:5:15","typeDescriptions":{"typeIdentifier":"t_bytes8","typeString":"bytes8"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_bytes8","typeString":"bytes8"},"id":3732,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_bytes8","typeString":"bytes8"},"id":3723,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_bytes8","typeString":"bytes8"},"id":3720,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3718,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3694,"src":"12907:5:15","typeDescriptions":{"typeIdentifier":"t_bytes8","typeString":"bytes8"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"307846464646303030304646464630303030","id":3719,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12915:18:15","typeDescriptions":{"typeIdentifier":"t_rational_18446462603027742720_by_1","typeString":"int_const 18446462603027742720"},"value":"0xFFFF0000FFFF0000"},"src":"12907:26:15","typeDescriptions":{"typeIdentifier":"t_bytes8","typeString":"bytes8"}}],"id":3721,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12906:28:15","typeDescriptions":{"typeIdentifier":"t_bytes8","typeString":"bytes8"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"3136","id":3722,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12938:2:15","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"12906:34:15","typeDescriptions":{"typeIdentifier":"t_bytes8","typeString":"bytes8"}}],"id":3724,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12905:36:15","typeDescriptions":{"typeIdentifier":"t_bytes8","typeString":"bytes8"}},"nodeType":"BinaryOperation","operator":"|","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_bytes8","typeString":"bytes8"},"id":3730,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_bytes8","typeString":"bytes8"},"id":3727,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3725,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3694,"src":"12946:5:15","typeDescriptions":{"typeIdentifier":"t_bytes8","typeString":"bytes8"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"307830303030464646463030303046464646","id":3726,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12954:18:15","typeDescriptions":{"typeIdentifier":"t_rational_281470681808895_by_1","typeString":"int_const 281470681808895"},"value":"0x0000FFFF0000FFFF"},"src":"12946:26:15","typeDescriptions":{"typeIdentifier":"t_bytes8","typeString":"bytes8"}}],"id":3728,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12945:28:15","typeDescriptions":{"typeIdentifier":"t_bytes8","typeString":"bytes8"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"3136","id":3729,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12977:2:15","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"12945:34:15","typeDescriptions":{"typeIdentifier":"t_bytes8","typeString":"bytes8"}}],"id":3731,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12944:36:15","typeDescriptions":{"typeIdentifier":"t_bytes8","typeString":"bytes8"}},"src":"12905:75:15","typeDescriptions":{"typeIdentifier":"t_bytes8","typeString":"bytes8"}},"src":"12897:83:15","typeDescriptions":{"typeIdentifier":"t_bytes8","typeString":"bytes8"}},"id":3734,"nodeType":"ExpressionStatement","src":"12897:83:15"},{"expression":{"commonType":{"typeIdentifier":"t_bytes8","typeString":"bytes8"},"id":3743,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_bytes8","typeString":"bytes8"},"id":3737,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3735,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3694,"src":"13024:5:15","typeDescriptions":{"typeIdentifier":"t_bytes8","typeString":"bytes8"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"3332","id":3736,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13033:2:15","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"13024:11:15","typeDescriptions":{"typeIdentifier":"t_bytes8","typeString":"bytes8"}}],"id":3738,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"13023:13:15","typeDescriptions":{"typeIdentifier":"t_bytes8","typeString":"bytes8"}},"nodeType":"BinaryOperation","operator":"|","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_bytes8","typeString":"bytes8"},"id":3741,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3739,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3694,"src":"13040:5:15","typeDescriptions":{"typeIdentifier":"t_bytes8","typeString":"bytes8"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"3332","id":3740,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13049:2:15","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"13040:11:15","typeDescriptions":{"typeIdentifier":"t_bytes8","typeString":"bytes8"}}],"id":3742,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"13039:13:15","typeDescriptions":{"typeIdentifier":"t_bytes8","typeString":"bytes8"}},"src":"13023:29:15","typeDescriptions":{"typeIdentifier":"t_bytes8","typeString":"bytes8"}},"functionReturnParameters":3698,"id":3744,"nodeType":"Return","src":"13016:36:15"}]},"documentation":{"id":3692,"nodeType":"StructuredDocumentation","src":"12643:66:15","text":"@dev Same as {reverseBytes32} but optimized for 64-bit values."},"id":3746,"implemented":true,"kind":"function","modifiers":[],"name":"reverseBytes8","nameLocation":"12723:13:15","nodeType":"FunctionDefinition","parameters":{"id":3695,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3694,"mutability":"mutable","name":"value","nameLocation":"12744:5:15","nodeType":"VariableDeclaration","scope":3746,"src":"12737:12:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes8","typeString":"bytes8"},"typeName":{"id":3693,"name":"bytes8","nodeType":"ElementaryTypeName","src":"12737:6:15","typeDescriptions":{"typeIdentifier":"t_bytes8","typeString":"bytes8"}},"visibility":"internal"}],"src":"12736:14:15"},"returnParameters":{"id":3698,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3697,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3746,"src":"12774:6:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes8","typeString":"bytes8"},"typeName":{"id":3696,"name":"bytes8","nodeType":"ElementaryTypeName","src":"12774:6:15","typeDescriptions":{"typeIdentifier":"t_bytes8","typeString":"bytes8"}},"visibility":"internal"}],"src":"12773:8:15"},"scope":3877,"src":"12714:371:15","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":3782,"nodeType":"Block","src":"13230:168:15","statements":[{"expression":{"id":3770,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3754,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3749,"src":"13240:5:15","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":3769,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":3760,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":3757,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3755,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3749,"src":"13250:5:15","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"30784646303046463030","id":3756,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13258:10:15","typeDescriptions":{"typeIdentifier":"t_rational_4278255360_by_1","typeString":"int_const 4278255360"},"value":"0xFF00FF00"},"src":"13250:18:15","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"id":3758,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"13249:20:15","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"38","id":3759,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13273:1:15","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"13249:25:15","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"id":3761,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"13248:27:15","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"|","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":3767,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":3764,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3762,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3749,"src":"13280:5:15","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"30783030464630304646","id":3763,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13288:10:15","typeDescriptions":{"typeIdentifier":"t_rational_16711935_by_1","typeString":"int_const 16711935"},"value":"0x00FF00FF"},"src":"13280:18:15","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"id":3765,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"13279:20:15","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"38","id":3766,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13303:1:15","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"13279:25:15","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"id":3768,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"13278:27:15","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"13248:57:15","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"13240:65:15","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"id":3771,"nodeType":"ExpressionStatement","src":"13240:65:15"},{"expression":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":3780,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":3774,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3772,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3749,"src":"13337:5:15","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"3136","id":3773,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13346:2:15","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"13337:11:15","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"id":3775,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"13336:13:15","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"|","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":3778,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3776,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3749,"src":"13353:5:15","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"3136","id":3777,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13362:2:15","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"13353:11:15","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"id":3779,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"13352:13:15","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"13336:29:15","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"functionReturnParameters":3753,"id":3781,"nodeType":"Return","src":"13329:36:15"}]},"documentation":{"id":3747,"nodeType":"StructuredDocumentation","src":"13091:66:15","text":"@dev Same as {reverseBytes32} but optimized for 32-bit values."},"id":3783,"implemented":true,"kind":"function","modifiers":[],"name":"reverseBytes4","nameLocation":"13171:13:15","nodeType":"FunctionDefinition","parameters":{"id":3750,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3749,"mutability":"mutable","name":"value","nameLocation":"13192:5:15","nodeType":"VariableDeclaration","scope":3783,"src":"13185:12:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":3748,"name":"bytes4","nodeType":"ElementaryTypeName","src":"13185:6:15","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"13184:14:15"},"returnParameters":{"id":3753,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3752,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3783,"src":"13222:6:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":3751,"name":"bytes4","nodeType":"ElementaryTypeName","src":"13222:6:15","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"13221:8:15"},"scope":3877,"src":"13162:236:15","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":3801,"nodeType":"Block","src":"13543:51:15","statements":[{"expression":{"commonType":{"typeIdentifier":"t_bytes2","typeString":"bytes2"},"id":3799,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_bytes2","typeString":"bytes2"},"id":3793,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3791,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3786,"src":"13561:5:15","typeDescriptions":{"typeIdentifier":"t_bytes2","typeString":"bytes2"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"38","id":3792,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13570:1:15","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"13561:10:15","typeDescriptions":{"typeIdentifier":"t_bytes2","typeString":"bytes2"}}],"id":3794,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"13560:12:15","typeDescriptions":{"typeIdentifier":"t_bytes2","typeString":"bytes2"}},"nodeType":"BinaryOperation","operator":"|","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_bytes2","typeString":"bytes2"},"id":3797,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3795,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3786,"src":"13576:5:15","typeDescriptions":{"typeIdentifier":"t_bytes2","typeString":"bytes2"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"38","id":3796,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13585:1:15","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"13576:10:15","typeDescriptions":{"typeIdentifier":"t_bytes2","typeString":"bytes2"}}],"id":3798,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"13575:12:15","typeDescriptions":{"typeIdentifier":"t_bytes2","typeString":"bytes2"}},"src":"13560:27:15","typeDescriptions":{"typeIdentifier":"t_bytes2","typeString":"bytes2"}},"functionReturnParameters":3790,"id":3800,"nodeType":"Return","src":"13553:34:15"}]},"documentation":{"id":3784,"nodeType":"StructuredDocumentation","src":"13404:66:15","text":"@dev Same as {reverseBytes32} but optimized for 16-bit values."},"id":3802,"implemented":true,"kind":"function","modifiers":[],"name":"reverseBytes2","nameLocation":"13484:13:15","nodeType":"FunctionDefinition","parameters":{"id":3787,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3786,"mutability":"mutable","name":"value","nameLocation":"13505:5:15","nodeType":"VariableDeclaration","scope":3802,"src":"13498:12:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes2","typeString":"bytes2"},"typeName":{"id":3785,"name":"bytes2","nodeType":"ElementaryTypeName","src":"13498:6:15","typeDescriptions":{"typeIdentifier":"t_bytes2","typeString":"bytes2"}},"visibility":"internal"}],"src":"13497:14:15"},"returnParameters":{"id":3790,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3789,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3802,"src":"13535:6:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes2","typeString":"bytes2"},"typeName":{"id":3788,"name":"bytes2","nodeType":"ElementaryTypeName","src":"13535:6:15","typeDescriptions":{"typeIdentifier":"t_bytes2","typeString":"bytes2"}},"visibility":"internal"}],"src":"13534:8:15"},"scope":3877,"src":"13475:119:15","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":3863,"nodeType":"Block","src":"13811:313:15","statements":[{"body":{"id":3856,"nodeType":"Block","src":"13871:213:15","statements":[{"assignments":[3823],"declarations":[{"constant":false,"id":3823,"mutability":"mutable","name":"chunk","nameLocation":"13893:5:15","nodeType":"VariableDeclaration","scope":3856,"src":"13885:13:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3822,"name":"bytes32","nodeType":"ElementaryTypeName","src":"13885:7:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":3828,"initialValue":{"arguments":[{"id":3825,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3805,"src":"13924:6:15","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":3826,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3811,"src":"13932:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3824,"name":"_unsafeReadBytesOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3876,"src":"13901:22:15","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bytes32_$","typeString":"function (bytes memory,uint256) pure returns (bytes32)"}},"id":3827,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13901:33:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"13885:49:15"},{"condition":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":3834,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3829,"name":"chunk","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3823,"src":"13952:5:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":3832,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13969:1:15","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3831,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13961:7:15","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":3830,"name":"bytes32","nodeType":"ElementaryTypeName","src":"13961:7:15","typeDescriptions":{}}},"id":3833,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13961:10:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"13952:19:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3855,"nodeType":"IfStatement","src":"13948:126:15","trueBody":{"id":3854,"nodeType":"Block","src":"13973:101:15","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3847,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3839,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"38","id":3837,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14007:1:15","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3838,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3811,"src":"14011:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14007:5:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[{"arguments":[{"id":3844,"name":"chunk","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3823,"src":"14032:5:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":3843,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14024:7:15","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":3842,"name":"uint256","nodeType":"ElementaryTypeName","src":"14024:7:15","typeDescriptions":{}}},"id":3845,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14024:14:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":3840,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7507,"src":"14015:4:15","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$7507_$","typeString":"type(library Math)"}},"id":3841,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14020:3:15","memberName":"clz","nodeType":"MemberAccess","referencedDeclaration":7506,"src":"14015:8:15","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":3846,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14015:24:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14007:32:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3851,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"38","id":3848,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14041:1:15","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":3849,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3805,"src":"14045:6:15","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":3850,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14052:6:15","memberName":"length","nodeType":"MemberAccess","src":"14045:13:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14041:17:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":3835,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7507,"src":"13998:4:15","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$7507_$","typeString":"type(library Math)"}},"id":3836,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14003:3:15","memberName":"min","nodeType":"MemberAccess","referencedDeclaration":6177,"src":"13998:8:15","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":3852,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13998:61:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":3809,"id":3853,"nodeType":"Return","src":"13991:68:15"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3817,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3814,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3811,"src":"13841:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":3815,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3805,"src":"13845:6:15","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":3816,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13852:6:15","memberName":"length","nodeType":"MemberAccess","src":"13845:13:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13841:17:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3857,"initializationExpression":{"assignments":[3811],"declarations":[{"constant":false,"id":3811,"mutability":"mutable","name":"i","nameLocation":"13834:1:15","nodeType":"VariableDeclaration","scope":3857,"src":"13826:9:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3810,"name":"uint256","nodeType":"ElementaryTypeName","src":"13826:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3813,"initialValue":{"hexValue":"30","id":3812,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13838:1:15","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"13826:13:15"},"isSimpleCounterLoop":false,"loopExpression":{"expression":{"id":3820,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3818,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3811,"src":"13860:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"30783230","id":3819,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13865:4:15","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"0x20"},"src":"13860:9:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3821,"nodeType":"ExpressionStatement","src":"13860:9:15"},"nodeType":"ForStatement","src":"13821:263:15"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3861,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"38","id":3858,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14100:1:15","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":3859,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3805,"src":"14104:6:15","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":3860,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14111:6:15","memberName":"length","nodeType":"MemberAccess","src":"14104:13:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14100:17:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":3809,"id":3862,"nodeType":"Return","src":"14093:24:15"}]},"documentation":{"id":3803,"nodeType":"StructuredDocumentation","src":"13600:140:15","text":" @dev Counts the number of leading zero bits a bytes array. Returns `8 * buffer.length`\n if the buffer is all zeros."},"id":3864,"implemented":true,"kind":"function","modifiers":[],"name":"clz","nameLocation":"13754:3:15","nodeType":"FunctionDefinition","parameters":{"id":3806,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3805,"mutability":"mutable","name":"buffer","nameLocation":"13771:6:15","nodeType":"VariableDeclaration","scope":3864,"src":"13758:19:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3804,"name":"bytes","nodeType":"ElementaryTypeName","src":"13758:5:15","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"13757:21:15"},"returnParameters":{"id":3809,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3808,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3864,"src":"13802:7:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3807,"name":"uint256","nodeType":"ElementaryTypeName","src":"13802:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13801:9:15"},"scope":3877,"src":"13745:379:15","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":3875,"nodeType":"Block","src":"14509:225:15","statements":[{"AST":{"nativeSrc":"14658:70:15","nodeType":"YulBlock","src":"14658:70:15","statements":[{"nativeSrc":"14672:46:15","nodeType":"YulAssignment","src":"14672:46:15","value":{"arguments":[{"arguments":[{"arguments":[{"name":"buffer","nativeSrc":"14695:6:15","nodeType":"YulIdentifier","src":"14695:6:15"},{"kind":"number","nativeSrc":"14703:4:15","nodeType":"YulLiteral","src":"14703:4:15","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"14691:3:15","nodeType":"YulIdentifier","src":"14691:3:15"},"nativeSrc":"14691:17:15","nodeType":"YulFunctionCall","src":"14691:17:15"},{"name":"offset","nativeSrc":"14710:6:15","nodeType":"YulIdentifier","src":"14710:6:15"}],"functionName":{"name":"add","nativeSrc":"14687:3:15","nodeType":"YulIdentifier","src":"14687:3:15"},"nativeSrc":"14687:30:15","nodeType":"YulFunctionCall","src":"14687:30:15"}],"functionName":{"name":"mload","nativeSrc":"14681:5:15","nodeType":"YulIdentifier","src":"14681:5:15"},"nativeSrc":"14681:37:15","nodeType":"YulFunctionCall","src":"14681:37:15"},"variableNames":[{"name":"value","nativeSrc":"14672:5:15","nodeType":"YulIdentifier","src":"14672:5:15"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":3867,"isOffset":false,"isSlot":false,"src":"14695:6:15","valueSize":1},{"declaration":3869,"isOffset":false,"isSlot":false,"src":"14710:6:15","valueSize":1},{"declaration":3872,"isOffset":false,"isSlot":false,"src":"14672:5:15","valueSize":1}],"flags":["memory-safe"],"id":3874,"nodeType":"InlineAssembly","src":"14633:95:15"}]},"documentation":{"id":3865,"nodeType":"StructuredDocumentation","src":"14130:268:15","text":" @dev Reads a bytes32 from a bytes array without bounds checking.\n NOTE: making this function internal would mean it could be used with memory unsafe offset, and marking the\n assembly block as such would prevent some optimizations."},"id":3876,"implemented":true,"kind":"function","modifiers":[],"name":"_unsafeReadBytesOffset","nameLocation":"14412:22:15","nodeType":"FunctionDefinition","parameters":{"id":3870,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3867,"mutability":"mutable","name":"buffer","nameLocation":"14448:6:15","nodeType":"VariableDeclaration","scope":3876,"src":"14435:19:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3866,"name":"bytes","nodeType":"ElementaryTypeName","src":"14435:5:15","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":3869,"mutability":"mutable","name":"offset","nameLocation":"14464:6:15","nodeType":"VariableDeclaration","scope":3876,"src":"14456:14:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3868,"name":"uint256","nodeType":"ElementaryTypeName","src":"14456:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14434:37:15"},"returnParameters":{"id":3873,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3872,"mutability":"mutable","name":"value","nameLocation":"14502:5:15","nodeType":"VariableDeclaration","scope":3876,"src":"14494:13:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3871,"name":"bytes32","nodeType":"ElementaryTypeName","src":"14494:7:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"14493:15:15"},"scope":3877,"src":"14403:331:15","stateMutability":"pure","virtual":false,"visibility":"private"}],"scope":3878,"src":"198:14538:15","usedErrors":[],"usedEvents":[]}],"src":"99:14638:15"},"id":15},"@openzeppelin/contracts/utils/Context.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/Context.sol","exportedSymbols":{"Context":[3907]},"id":3908,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":3879,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"101:24:16"},{"abstract":true,"baseContracts":[],"canonicalName":"Context","contractDependencies":[],"contractKind":"contract","documentation":{"id":3880,"nodeType":"StructuredDocumentation","src":"127:496:16","text":" @dev Provides information about the current execution context, including the\n sender of the transaction and its data. While these are generally available\n via msg.sender and msg.data, they should not be accessed in such a direct\n manner, since when dealing with meta-transactions the account sending and\n paying for execution may not be the actual sender (as far as an application\n is concerned).\n This contract is only required for intermediate, library-like contracts."},"fullyImplemented":true,"id":3907,"linearizedBaseContracts":[3907],"name":"Context","nameLocation":"642:7:16","nodeType":"ContractDefinition","nodes":[{"body":{"id":3888,"nodeType":"Block","src":"718:34:16","statements":[{"expression":{"expression":{"id":3885,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967281,"src":"735:3:16","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3886,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"739:6:16","memberName":"sender","nodeType":"MemberAccess","src":"735:10:16","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":3884,"id":3887,"nodeType":"Return","src":"728:17:16"}]},"id":3889,"implemented":true,"kind":"function","modifiers":[],"name":"_msgSender","nameLocation":"665:10:16","nodeType":"FunctionDefinition","parameters":{"id":3881,"nodeType":"ParameterList","parameters":[],"src":"675:2:16"},"returnParameters":{"id":3884,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3883,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3889,"src":"709:7:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3882,"name":"address","nodeType":"ElementaryTypeName","src":"709:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"708:9:16"},"scope":3907,"src":"656:96:16","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":3897,"nodeType":"Block","src":"825:32:16","statements":[{"expression":{"expression":{"id":3894,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967281,"src":"842:3:16","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3895,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"846:4:16","memberName":"data","nodeType":"MemberAccess","src":"842:8:16","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"functionReturnParameters":3893,"id":3896,"nodeType":"Return","src":"835:15:16"}]},"id":3898,"implemented":true,"kind":"function","modifiers":[],"name":"_msgData","nameLocation":"767:8:16","nodeType":"FunctionDefinition","parameters":{"id":3890,"nodeType":"ParameterList","parameters":[],"src":"775:2:16"},"returnParameters":{"id":3893,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3892,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3898,"src":"809:14:16","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":3891,"name":"bytes","nodeType":"ElementaryTypeName","src":"809:5:16","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"808:16:16"},"scope":3907,"src":"758:99:16","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":3905,"nodeType":"Block","src":"935:25:16","statements":[{"expression":{"hexValue":"30","id":3903,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"952:1:16","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":3902,"id":3904,"nodeType":"Return","src":"945:8:16"}]},"id":3906,"implemented":true,"kind":"function","modifiers":[],"name":"_contextSuffixLength","nameLocation":"872:20:16","nodeType":"FunctionDefinition","parameters":{"id":3899,"nodeType":"ParameterList","parameters":[],"src":"892:2:16"},"returnParameters":{"id":3902,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3901,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3906,"src":"926:7:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3900,"name":"uint256","nodeType":"ElementaryTypeName","src":"926:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"925:9:16"},"scope":3907,"src":"863:97:16","stateMutability":"view","virtual":true,"visibility":"internal"}],"scope":3908,"src":"624:338:16","usedErrors":[],"usedEvents":[]}],"src":"101:862:16"},"id":16},"@openzeppelin/contracts/utils/Panic.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/Panic.sol","exportedSymbols":{"Panic":[3959]},"id":3960,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":3909,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"99:24:17"},{"abstract":false,"baseContracts":[],"canonicalName":"Panic","contractDependencies":[],"contractKind":"library","documentation":{"id":3910,"nodeType":"StructuredDocumentation","src":"125:489:17","text":" @dev Helper library for emitting standardized panic codes.\n ```solidity\n contract Example {\n using Panic for uint256;\n // Use any of the declared internal constants\n function foo() { Panic.GENERIC.panic(); }\n // Alternatively\n function foo() { Panic.panic(Panic.GENERIC); }\n }\n ```\n Follows the list from https://github.com/ethereum/solidity/blob/v0.8.24/libsolutil/ErrorCodes.h[libsolutil].\n _Available since v5.1._"},"fullyImplemented":true,"id":3959,"linearizedBaseContracts":[3959],"name":"Panic","nameLocation":"665:5:17","nodeType":"ContractDefinition","nodes":[{"constant":true,"documentation":{"id":3911,"nodeType":"StructuredDocumentation","src":"677:36:17","text":"@dev generic / unspecified error"},"id":3914,"mutability":"constant","name":"GENERIC","nameLocation":"744:7:17","nodeType":"VariableDeclaration","scope":3959,"src":"718:40:17","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3912,"name":"uint256","nodeType":"ElementaryTypeName","src":"718:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"30783030","id":3913,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"754:4:17","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0x00"},"visibility":"internal"},{"constant":true,"documentation":{"id":3915,"nodeType":"StructuredDocumentation","src":"764:37:17","text":"@dev used by the assert() builtin"},"id":3918,"mutability":"constant","name":"ASSERT","nameLocation":"832:6:17","nodeType":"VariableDeclaration","scope":3959,"src":"806:39:17","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3916,"name":"uint256","nodeType":"ElementaryTypeName","src":"806:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"30783031","id":3917,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"841:4:17","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"0x01"},"visibility":"internal"},{"constant":true,"documentation":{"id":3919,"nodeType":"StructuredDocumentation","src":"851:41:17","text":"@dev arithmetic underflow or overflow"},"id":3922,"mutability":"constant","name":"UNDER_OVERFLOW","nameLocation":"923:14:17","nodeType":"VariableDeclaration","scope":3959,"src":"897:47:17","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3920,"name":"uint256","nodeType":"ElementaryTypeName","src":"897:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"30783131","id":3921,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"940:4:17","typeDescriptions":{"typeIdentifier":"t_rational_17_by_1","typeString":"int_const 17"},"value":"0x11"},"visibility":"internal"},{"constant":true,"documentation":{"id":3923,"nodeType":"StructuredDocumentation","src":"950:35:17","text":"@dev division or modulo by zero"},"id":3926,"mutability":"constant","name":"DIVISION_BY_ZERO","nameLocation":"1016:16:17","nodeType":"VariableDeclaration","scope":3959,"src":"990:49:17","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3924,"name":"uint256","nodeType":"ElementaryTypeName","src":"990:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"30783132","id":3925,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1035:4:17","typeDescriptions":{"typeIdentifier":"t_rational_18_by_1","typeString":"int_const 18"},"value":"0x12"},"visibility":"internal"},{"constant":true,"documentation":{"id":3927,"nodeType":"StructuredDocumentation","src":"1045:30:17","text":"@dev enum conversion error"},"id":3930,"mutability":"constant","name":"ENUM_CONVERSION_ERROR","nameLocation":"1106:21:17","nodeType":"VariableDeclaration","scope":3959,"src":"1080:54:17","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3928,"name":"uint256","nodeType":"ElementaryTypeName","src":"1080:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"30783231","id":3929,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1130:4:17","typeDescriptions":{"typeIdentifier":"t_rational_33_by_1","typeString":"int_const 33"},"value":"0x21"},"visibility":"internal"},{"constant":true,"documentation":{"id":3931,"nodeType":"StructuredDocumentation","src":"1140:36:17","text":"@dev invalid encoding in storage"},"id":3934,"mutability":"constant","name":"STORAGE_ENCODING_ERROR","nameLocation":"1207:22:17","nodeType":"VariableDeclaration","scope":3959,"src":"1181:55:17","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3932,"name":"uint256","nodeType":"ElementaryTypeName","src":"1181:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"30783232","id":3933,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1232:4:17","typeDescriptions":{"typeIdentifier":"t_rational_34_by_1","typeString":"int_const 34"},"value":"0x22"},"visibility":"internal"},{"constant":true,"documentation":{"id":3935,"nodeType":"StructuredDocumentation","src":"1242:24:17","text":"@dev empty array pop"},"id":3938,"mutability":"constant","name":"EMPTY_ARRAY_POP","nameLocation":"1297:15:17","nodeType":"VariableDeclaration","scope":3959,"src":"1271:48:17","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3936,"name":"uint256","nodeType":"ElementaryTypeName","src":"1271:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"30783331","id":3937,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1315:4:17","typeDescriptions":{"typeIdentifier":"t_rational_49_by_1","typeString":"int_const 49"},"value":"0x31"},"visibility":"internal"},{"constant":true,"documentation":{"id":3939,"nodeType":"StructuredDocumentation","src":"1325:35:17","text":"@dev array out of bounds access"},"id":3942,"mutability":"constant","name":"ARRAY_OUT_OF_BOUNDS","nameLocation":"1391:19:17","nodeType":"VariableDeclaration","scope":3959,"src":"1365:52:17","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3940,"name":"uint256","nodeType":"ElementaryTypeName","src":"1365:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"30783332","id":3941,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1413:4:17","typeDescriptions":{"typeIdentifier":"t_rational_50_by_1","typeString":"int_const 50"},"value":"0x32"},"visibility":"internal"},{"constant":true,"documentation":{"id":3943,"nodeType":"StructuredDocumentation","src":"1423:65:17","text":"@dev resource error (too large allocation or too large array)"},"id":3946,"mutability":"constant","name":"RESOURCE_ERROR","nameLocation":"1519:14:17","nodeType":"VariableDeclaration","scope":3959,"src":"1493:47:17","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3944,"name":"uint256","nodeType":"ElementaryTypeName","src":"1493:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"30783431","id":3945,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1536:4:17","typeDescriptions":{"typeIdentifier":"t_rational_65_by_1","typeString":"int_const 65"},"value":"0x41"},"visibility":"internal"},{"constant":true,"documentation":{"id":3947,"nodeType":"StructuredDocumentation","src":"1546:42:17","text":"@dev calling invalid internal function"},"id":3950,"mutability":"constant","name":"INVALID_INTERNAL_FUNCTION","nameLocation":"1619:25:17","nodeType":"VariableDeclaration","scope":3959,"src":"1593:58:17","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3948,"name":"uint256","nodeType":"ElementaryTypeName","src":"1593:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"30783531","id":3949,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1647:4:17","typeDescriptions":{"typeIdentifier":"t_rational_81_by_1","typeString":"int_const 81"},"value":"0x51"},"visibility":"internal"},{"body":{"id":3957,"nodeType":"Block","src":"1819:151:17","statements":[{"AST":{"nativeSrc":"1854:110:17","nodeType":"YulBlock","src":"1854:110:17","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"1875:4:17","nodeType":"YulLiteral","src":"1875:4:17","type":"","value":"0x00"},{"kind":"number","nativeSrc":"1881:10:17","nodeType":"YulLiteral","src":"1881:10:17","type":"","value":"0x4e487b71"}],"functionName":{"name":"mstore","nativeSrc":"1868:6:17","nodeType":"YulIdentifier","src":"1868:6:17"},"nativeSrc":"1868:24:17","nodeType":"YulFunctionCall","src":"1868:24:17"},"nativeSrc":"1868:24:17","nodeType":"YulExpressionStatement","src":"1868:24:17"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"1912:4:17","nodeType":"YulLiteral","src":"1912:4:17","type":"","value":"0x20"},{"name":"code","nativeSrc":"1918:4:17","nodeType":"YulIdentifier","src":"1918:4:17"}],"functionName":{"name":"mstore","nativeSrc":"1905:6:17","nodeType":"YulIdentifier","src":"1905:6:17"},"nativeSrc":"1905:18:17","nodeType":"YulFunctionCall","src":"1905:18:17"},"nativeSrc":"1905:18:17","nodeType":"YulExpressionStatement","src":"1905:18:17"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"1943:4:17","nodeType":"YulLiteral","src":"1943:4:17","type":"","value":"0x1c"},{"kind":"number","nativeSrc":"1949:4:17","nodeType":"YulLiteral","src":"1949:4:17","type":"","value":"0x24"}],"functionName":{"name":"revert","nativeSrc":"1936:6:17","nodeType":"YulIdentifier","src":"1936:6:17"},"nativeSrc":"1936:18:17","nodeType":"YulFunctionCall","src":"1936:18:17"},"nativeSrc":"1936:18:17","nodeType":"YulExpressionStatement","src":"1936:18:17"}]},"evmVersion":"cancun","externalReferences":[{"declaration":3953,"isOffset":false,"isSlot":false,"src":"1918:4:17","valueSize":1}],"flags":["memory-safe"],"id":3956,"nodeType":"InlineAssembly","src":"1829:135:17"}]},"documentation":{"id":3951,"nodeType":"StructuredDocumentation","src":"1658:113:17","text":"@dev Reverts with a panic code. Recommended to use with\n the internal constants with predefined codes."},"id":3958,"implemented":true,"kind":"function","modifiers":[],"name":"panic","nameLocation":"1785:5:17","nodeType":"FunctionDefinition","parameters":{"id":3954,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3953,"mutability":"mutable","name":"code","nameLocation":"1799:4:17","nodeType":"VariableDeclaration","scope":3958,"src":"1791:12:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3952,"name":"uint256","nodeType":"ElementaryTypeName","src":"1791:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1790:14:17"},"returnParameters":{"id":3955,"nodeType":"ParameterList","parameters":[],"src":"1819:0:17"},"scope":3959,"src":"1776:194:17","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":3960,"src":"657:1315:17","usedErrors":[],"usedEvents":[]}],"src":"99:1874:17"},"id":17},"@openzeppelin/contracts/utils/Pausable.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/Pausable.sol","exportedSymbols":{"Context":[3907],"Pausable":[4067]},"id":4068,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":3961,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"102:24:18"},{"absolutePath":"@openzeppelin/contracts/utils/Context.sol","file":"../utils/Context.sol","id":3963,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4068,"sourceUnit":3908,"src":"128:45:18","symbolAliases":[{"foreign":{"id":3962,"name":"Context","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3907,"src":"136:7:18","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":3965,"name":"Context","nameLocations":["645:7:18"],"nodeType":"IdentifierPath","referencedDeclaration":3907,"src":"645:7:18"},"id":3966,"nodeType":"InheritanceSpecifier","src":"645:7:18"}],"canonicalName":"Pausable","contractDependencies":[],"contractKind":"contract","documentation":{"id":3964,"nodeType":"StructuredDocumentation","src":"175:439:18","text":" @dev Contract module which allows children to implement an emergency stop\n mechanism that can be triggered by an authorized account.\n This module is used through inheritance. It will make available the\n modifiers `whenNotPaused` and `whenPaused`, which can be applied to\n the functions of your contract. Note that they will not be pausable by\n simply including this module, only once the modifiers are put in place."},"fullyImplemented":true,"id":4067,"linearizedBaseContracts":[4067,3907],"name":"Pausable","nameLocation":"633:8:18","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":3968,"mutability":"mutable","name":"_paused","nameLocation":"672:7:18","nodeType":"VariableDeclaration","scope":4067,"src":"659:20:18","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3967,"name":"bool","nodeType":"ElementaryTypeName","src":"659:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"private"},{"anonymous":false,"documentation":{"id":3969,"nodeType":"StructuredDocumentation","src":"686:73:18","text":" @dev Emitted when the pause is triggered by `account`."},"eventSelector":"62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258","id":3973,"name":"Paused","nameLocation":"770:6:18","nodeType":"EventDefinition","parameters":{"id":3972,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3971,"indexed":false,"mutability":"mutable","name":"account","nameLocation":"785:7:18","nodeType":"VariableDeclaration","scope":3973,"src":"777:15:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3970,"name":"address","nodeType":"ElementaryTypeName","src":"777:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"776:17:18"},"src":"764:30:18"},{"anonymous":false,"documentation":{"id":3974,"nodeType":"StructuredDocumentation","src":"800:70:18","text":" @dev Emitted when the pause is lifted by `account`."},"eventSelector":"5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa","id":3978,"name":"Unpaused","nameLocation":"881:8:18","nodeType":"EventDefinition","parameters":{"id":3977,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3976,"indexed":false,"mutability":"mutable","name":"account","nameLocation":"898:7:18","nodeType":"VariableDeclaration","scope":3978,"src":"890:15:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3975,"name":"address","nodeType":"ElementaryTypeName","src":"890:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"889:17:18"},"src":"875:32:18"},{"documentation":{"id":3979,"nodeType":"StructuredDocumentation","src":"913:76:18","text":" @dev The operation failed because the contract is paused."},"errorSelector":"d93c0665","id":3981,"name":"EnforcedPause","nameLocation":"1000:13:18","nodeType":"ErrorDefinition","parameters":{"id":3980,"nodeType":"ParameterList","parameters":[],"src":"1013:2:18"},"src":"994:22:18"},{"documentation":{"id":3982,"nodeType":"StructuredDocumentation","src":"1022:80:18","text":" @dev The operation failed because the contract is not paused."},"errorSelector":"8dfc202b","id":3984,"name":"ExpectedPause","nameLocation":"1113:13:18","nodeType":"ErrorDefinition","parameters":{"id":3983,"nodeType":"ParameterList","parameters":[],"src":"1126:2:18"},"src":"1107:22:18"},{"body":{"id":3991,"nodeType":"Block","src":"1340:47:18","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":3987,"name":"_requireNotPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4021,"src":"1350:17:18","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":3988,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1350:19:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3989,"nodeType":"ExpressionStatement","src":"1350:19:18"},{"id":3990,"nodeType":"PlaceholderStatement","src":"1379:1:18"}]},"documentation":{"id":3985,"nodeType":"StructuredDocumentation","src":"1135:175:18","text":" @dev Modifier to make a function callable only when the contract is not paused.\n Requirements:\n - The contract must not be paused."},"id":3992,"name":"whenNotPaused","nameLocation":"1324:13:18","nodeType":"ModifierDefinition","parameters":{"id":3986,"nodeType":"ParameterList","parameters":[],"src":"1337:2:18"},"src":"1315:72:18","virtual":false,"visibility":"internal"},{"body":{"id":3999,"nodeType":"Block","src":"1587:44:18","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":3995,"name":"_requirePaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4034,"src":"1597:14:18","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":3996,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1597:16:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3997,"nodeType":"ExpressionStatement","src":"1597:16:18"},{"id":3998,"nodeType":"PlaceholderStatement","src":"1623:1:18"}]},"documentation":{"id":3993,"nodeType":"StructuredDocumentation","src":"1393:167:18","text":" @dev Modifier to make a function callable only when the contract is paused.\n Requirements:\n - The contract must be paused."},"id":4000,"name":"whenPaused","nameLocation":"1574:10:18","nodeType":"ModifierDefinition","parameters":{"id":3994,"nodeType":"ParameterList","parameters":[],"src":"1584:2:18"},"src":"1565:66:18","virtual":false,"visibility":"internal"},{"body":{"id":4008,"nodeType":"Block","src":"1779:31:18","statements":[{"expression":{"id":4006,"name":"_paused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3968,"src":"1796:7:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":4005,"id":4007,"nodeType":"Return","src":"1789:14:18"}]},"documentation":{"id":4001,"nodeType":"StructuredDocumentation","src":"1637:84:18","text":" @dev Returns true if the contract is paused, and false otherwise."},"functionSelector":"5c975abb","id":4009,"implemented":true,"kind":"function","modifiers":[],"name":"paused","nameLocation":"1735:6:18","nodeType":"FunctionDefinition","parameters":{"id":4002,"nodeType":"ParameterList","parameters":[],"src":"1741:2:18"},"returnParameters":{"id":4005,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4004,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4009,"src":"1773:4:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4003,"name":"bool","nodeType":"ElementaryTypeName","src":"1773:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1772:6:18"},"scope":4067,"src":"1726:84:18","stateMutability":"view","virtual":true,"visibility":"public"},{"body":{"id":4020,"nodeType":"Block","src":"1929:77:18","statements":[{"condition":{"arguments":[],"expression":{"argumentTypes":[],"id":4013,"name":"paused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4009,"src":"1943:6:18","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bool_$","typeString":"function () view returns (bool)"}},"id":4014,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1943:8:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4019,"nodeType":"IfStatement","src":"1939:61:18","trueBody":{"id":4018,"nodeType":"Block","src":"1953:47:18","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4015,"name":"EnforcedPause","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3981,"src":"1974:13:18","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4016,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1974:15:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4017,"nodeType":"RevertStatement","src":"1967:22:18"}]}}]},"documentation":{"id":4010,"nodeType":"StructuredDocumentation","src":"1816:57:18","text":" @dev Throws if the contract is paused."},"id":4021,"implemented":true,"kind":"function","modifiers":[],"name":"_requireNotPaused","nameLocation":"1887:17:18","nodeType":"FunctionDefinition","parameters":{"id":4011,"nodeType":"ParameterList","parameters":[],"src":"1904:2:18"},"returnParameters":{"id":4012,"nodeType":"ParameterList","parameters":[],"src":"1929:0:18"},"scope":4067,"src":"1878:128:18","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":4033,"nodeType":"Block","src":"2126:78:18","statements":[{"condition":{"id":4027,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"2140:9:18","subExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":4025,"name":"paused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4009,"src":"2141:6:18","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bool_$","typeString":"function () view returns (bool)"}},"id":4026,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2141:8:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4032,"nodeType":"IfStatement","src":"2136:62:18","trueBody":{"id":4031,"nodeType":"Block","src":"2151:47:18","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4028,"name":"ExpectedPause","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3984,"src":"2172:13:18","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4029,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2172:15:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4030,"nodeType":"RevertStatement","src":"2165:22:18"}]}}]},"documentation":{"id":4022,"nodeType":"StructuredDocumentation","src":"2012:61:18","text":" @dev Throws if the contract is not paused."},"id":4034,"implemented":true,"kind":"function","modifiers":[],"name":"_requirePaused","nameLocation":"2087:14:18","nodeType":"FunctionDefinition","parameters":{"id":4023,"nodeType":"ParameterList","parameters":[],"src":"2101:2:18"},"returnParameters":{"id":4024,"nodeType":"ParameterList","parameters":[],"src":"2126:0:18"},"scope":4067,"src":"2078:126:18","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":4049,"nodeType":"Block","src":"2388:66:18","statements":[{"expression":{"id":4042,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4040,"name":"_paused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3968,"src":"2398:7:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":4041,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2408:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"2398:14:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4043,"nodeType":"ExpressionStatement","src":"2398:14:18"},{"eventCall":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":4045,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3889,"src":"2434:10:18","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":4046,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2434:12:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":4044,"name":"Paused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3973,"src":"2427:6:18","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":4047,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2427:20:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4048,"nodeType":"EmitStatement","src":"2422:25:18"}]},"documentation":{"id":4035,"nodeType":"StructuredDocumentation","src":"2210:124:18","text":" @dev Triggers stopped state.\n Requirements:\n - The contract must not be paused."},"id":4050,"implemented":true,"kind":"function","modifiers":[{"id":4038,"kind":"modifierInvocation","modifierName":{"id":4037,"name":"whenNotPaused","nameLocations":["2374:13:18"],"nodeType":"IdentifierPath","referencedDeclaration":3992,"src":"2374:13:18"},"nodeType":"ModifierInvocation","src":"2374:13:18"}],"name":"_pause","nameLocation":"2348:6:18","nodeType":"FunctionDefinition","parameters":{"id":4036,"nodeType":"ParameterList","parameters":[],"src":"2354:2:18"},"returnParameters":{"id":4039,"nodeType":"ParameterList","parameters":[],"src":"2388:0:18"},"scope":4067,"src":"2339:115:18","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":4065,"nodeType":"Block","src":"2634:69:18","statements":[{"expression":{"id":4058,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4056,"name":"_paused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3968,"src":"2644:7:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"66616c7365","id":4057,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2654:5:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"2644:15:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4059,"nodeType":"ExpressionStatement","src":"2644:15:18"},{"eventCall":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":4061,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3889,"src":"2683:10:18","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":4062,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2683:12:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":4060,"name":"Unpaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3978,"src":"2674:8:18","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":4063,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2674:22:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4064,"nodeType":"EmitStatement","src":"2669:27:18"}]},"documentation":{"id":4051,"nodeType":"StructuredDocumentation","src":"2460:121:18","text":" @dev Returns to normal state.\n Requirements:\n - The contract must be paused."},"id":4066,"implemented":true,"kind":"function","modifiers":[{"id":4054,"kind":"modifierInvocation","modifierName":{"id":4053,"name":"whenPaused","nameLocations":["2623:10:18"],"nodeType":"IdentifierPath","referencedDeclaration":4000,"src":"2623:10:18"},"nodeType":"ModifierInvocation","src":"2623:10:18"}],"name":"_unpause","nameLocation":"2595:8:18","nodeType":"FunctionDefinition","parameters":{"id":4052,"nodeType":"ParameterList","parameters":[],"src":"2603:2:18"},"returnParameters":{"id":4055,"nodeType":"ParameterList","parameters":[],"src":"2634:0:18"},"scope":4067,"src":"2586:117:18","stateMutability":"nonpayable","virtual":true,"visibility":"internal"}],"scope":4068,"src":"615:2090:18","usedErrors":[3981,3984],"usedEvents":[3973,3978]}],"src":"102:2604:18"},"id":18},"@openzeppelin/contracts/utils/ReentrancyGuard.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/ReentrancyGuard.sol","exportedSymbols":{"ReentrancyGuard":[4180],"StorageSlot":[4304]},"id":4181,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":4069,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"109:24:19"},{"absolutePath":"@openzeppelin/contracts/utils/StorageSlot.sol","file":"./StorageSlot.sol","id":4071,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4181,"sourceUnit":4305,"src":"135:46:19","symbolAliases":[{"foreign":{"id":4070,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4304,"src":"143:11:19","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[],"canonicalName":"ReentrancyGuard","contractDependencies":[],"contractKind":"contract","documentation":{"id":4072,"nodeType":"StructuredDocumentation","src":"183:1066:19","text":" @dev Contract module that helps prevent reentrant calls to a function.\n Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\n available, which can be applied to functions to make sure there are no nested\n (reentrant) calls to them.\n Note that because there is a single `nonReentrant` guard, functions marked as\n `nonReentrant` may not call one another. This can be worked around by making\n those functions `private`, and then adding `external` `nonReentrant` entry\n points to them.\n TIP: If EIP-1153 (transient storage) is available on the chain you're deploying at,\n consider using {ReentrancyGuardTransient} instead.\n TIP: If you would like to learn more about reentrancy and alternative ways\n to protect against it, check out our blog post\n https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\n IMPORTANT: Deprecated. This storage-based reentrancy guard will be removed and replaced\n by the {ReentrancyGuardTransient} variant in v6.0.\n @custom:stateless"},"fullyImplemented":true,"id":4180,"linearizedBaseContracts":[4180],"name":"ReentrancyGuard","nameLocation":"1268:15:19","nodeType":"ContractDefinition","nodes":[{"global":false,"id":4075,"libraryName":{"id":4073,"name":"StorageSlot","nameLocations":["1296:11:19"],"nodeType":"IdentifierPath","referencedDeclaration":4304,"src":"1296:11:19"},"nodeType":"UsingForDirective","src":"1290:30:19","typeName":{"id":4074,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1312:7:19","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"constant":true,"id":4078,"mutability":"constant","name":"REENTRANCY_GUARD_STORAGE","nameLocation":"1470:24:19","nodeType":"VariableDeclaration","scope":4180,"src":"1445:126:19","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4076,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1445:7:19","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"307839623737396231373432326430646639323232333031386233326234643166613436653037313732336436383137653234383664303033626563633535663030","id":4077,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1505:66:19","typeDescriptions":{"typeIdentifier":"t_rational_70319816728846589445362000750570655803700195216363692647688146666176345628416_by_1","typeString":"int_const 7031...(69 digits omitted)...8416"},"value":"0x9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00"},"visibility":"private"},{"constant":true,"id":4081,"mutability":"constant","name":"NOT_ENTERED","nameLocation":"2351:11:19","nodeType":"VariableDeclaration","scope":4180,"src":"2326:40:19","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4079,"name":"uint256","nodeType":"ElementaryTypeName","src":"2326:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"31","id":4080,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2365:1:19","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"visibility":"private"},{"constant":true,"id":4084,"mutability":"constant","name":"ENTERED","nameLocation":"2397:7:19","nodeType":"VariableDeclaration","scope":4180,"src":"2372:36:19","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4082,"name":"uint256","nodeType":"ElementaryTypeName","src":"2372:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"32","id":4083,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2407:1:19","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"visibility":"private"},{"documentation":{"id":4085,"nodeType":"StructuredDocumentation","src":"2415:52:19","text":" @dev Unauthorized reentrant call."},"errorSelector":"3ee5aeb5","id":4087,"name":"ReentrancyGuardReentrantCall","nameLocation":"2478:28:19","nodeType":"ErrorDefinition","parameters":{"id":4086,"nodeType":"ParameterList","parameters":[],"src":"2506:2:19"},"src":"2472:37:19"},{"body":{"id":4098,"nodeType":"Block","src":"2529:83:19","statements":[{"expression":{"id":4096,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":4090,"name":"_reentrancyGuardStorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4179,"src":"2539:27:19","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_bytes32_$","typeString":"function () pure returns (bytes32)"}},"id":4091,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2539:29:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":4092,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2569:14:19","memberName":"getUint256Slot","nodeType":"MemberAccess","referencedDeclaration":4248,"src":"2539:44:19","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_Uint256Slot_$4195_storage_ptr_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (struct StorageSlot.Uint256Slot storage pointer)"}},"id":4093,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2539:46:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Uint256Slot_$4195_storage_ptr","typeString":"struct StorageSlot.Uint256Slot storage pointer"}},"id":4094,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"2586:5:19","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":4194,"src":"2539:52:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":4095,"name":"NOT_ENTERED","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4081,"src":"2594:11:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2539:66:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4097,"nodeType":"ExpressionStatement","src":"2539:66:19"}]},"id":4099,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":4088,"nodeType":"ParameterList","parameters":[],"src":"2526:2:19"},"returnParameters":{"id":4089,"nodeType":"ParameterList","parameters":[],"src":"2529:0:19"},"scope":4180,"src":"2515:97:19","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":4109,"nodeType":"Block","src":"3013:79:19","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":4102,"name":"_nonReentrantBefore","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4144,"src":"3023:19:19","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":4103,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3023:21:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4104,"nodeType":"ExpressionStatement","src":"3023:21:19"},{"id":4105,"nodeType":"PlaceholderStatement","src":"3054:1:19"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":4106,"name":"_nonReentrantAfter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4156,"src":"3065:18:19","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":4107,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3065:20:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4108,"nodeType":"ExpressionStatement","src":"3065:20:19"}]},"documentation":{"id":4100,"nodeType":"StructuredDocumentation","src":"2618:366:19","text":" @dev Prevents a contract from calling itself, directly or indirectly.\n Calling a `nonReentrant` function from another `nonReentrant`\n function is not supported. It is possible to prevent this from happening\n by making the `nonReentrant` function external, and making it call a\n `private` function that does the actual work."},"id":4110,"name":"nonReentrant","nameLocation":"2998:12:19","nodeType":"ModifierDefinition","parameters":{"id":4101,"nodeType":"ParameterList","parameters":[],"src":"3010:2:19"},"src":"2989:103:19","virtual":false,"visibility":"internal"},{"body":{"id":4117,"nodeType":"Block","src":"3527:53:19","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":4113,"name":"_nonReentrantBeforeView","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4129,"src":"3537:23:19","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":4114,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3537:25:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4115,"nodeType":"ExpressionStatement","src":"3537:25:19"},{"id":4116,"nodeType":"PlaceholderStatement","src":"3572:1:19"}]},"documentation":{"id":4111,"nodeType":"StructuredDocumentation","src":"3098:396:19","text":" @dev A `view` only version of {nonReentrant}. Use to block view functions\n from being called, preventing reading from inconsistent contract state.\n CAUTION: This is a \"view\" modifier and does not change the reentrancy\n status. Use it only on view functions. For payable or non-payable functions,\n use the standard {nonReentrant} modifier instead."},"id":4118,"name":"nonReentrantView","nameLocation":"3508:16:19","nodeType":"ModifierDefinition","parameters":{"id":4112,"nodeType":"ParameterList","parameters":[],"src":"3524:2:19"},"src":"3499:81:19","virtual":false,"visibility":"internal"},{"body":{"id":4128,"nodeType":"Block","src":"3634:109:19","statements":[{"condition":{"arguments":[],"expression":{"argumentTypes":[],"id":4121,"name":"_reentrancyGuardEntered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4171,"src":"3648:23:19","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bool_$","typeString":"function () view returns (bool)"}},"id":4122,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3648:25:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4127,"nodeType":"IfStatement","src":"3644:93:19","trueBody":{"id":4126,"nodeType":"Block","src":"3675:62:19","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4123,"name":"ReentrancyGuardReentrantCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4087,"src":"3696:28:19","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4124,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3696:30:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4125,"nodeType":"RevertStatement","src":"3689:37:19"}]}}]},"id":4129,"implemented":true,"kind":"function","modifiers":[],"name":"_nonReentrantBeforeView","nameLocation":"3595:23:19","nodeType":"FunctionDefinition","parameters":{"id":4119,"nodeType":"ParameterList","parameters":[],"src":"3618:2:19"},"returnParameters":{"id":4120,"nodeType":"ParameterList","parameters":[],"src":"3634:0:19"},"scope":4180,"src":"3586:157:19","stateMutability":"view","virtual":false,"visibility":"private"},{"body":{"id":4143,"nodeType":"Block","src":"3788:253:19","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":4132,"name":"_nonReentrantBeforeView","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4129,"src":"3872:23:19","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":4133,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3872:25:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4134,"nodeType":"ExpressionStatement","src":"3872:25:19"},{"expression":{"id":4141,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":4135,"name":"_reentrancyGuardStorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4179,"src":"3972:27:19","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_bytes32_$","typeString":"function () pure returns (bytes32)"}},"id":4136,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3972:29:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":4137,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4002:14:19","memberName":"getUint256Slot","nodeType":"MemberAccess","referencedDeclaration":4248,"src":"3972:44:19","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_Uint256Slot_$4195_storage_ptr_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (struct StorageSlot.Uint256Slot storage pointer)"}},"id":4138,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3972:46:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Uint256Slot_$4195_storage_ptr","typeString":"struct StorageSlot.Uint256Slot storage pointer"}},"id":4139,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"4019:5:19","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":4194,"src":"3972:52:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":4140,"name":"ENTERED","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4084,"src":"4027:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3972:62:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4142,"nodeType":"ExpressionStatement","src":"3972:62:19"}]},"id":4144,"implemented":true,"kind":"function","modifiers":[],"name":"_nonReentrantBefore","nameLocation":"3758:19:19","nodeType":"FunctionDefinition","parameters":{"id":4130,"nodeType":"ParameterList","parameters":[],"src":"3777:2:19"},"returnParameters":{"id":4131,"nodeType":"ParameterList","parameters":[],"src":"3788:0:19"},"scope":4180,"src":"3749:292:19","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":4155,"nodeType":"Block","src":"4085:215:19","statements":[{"expression":{"id":4153,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":4147,"name":"_reentrancyGuardStorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4179,"src":"4227:27:19","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_bytes32_$","typeString":"function () pure returns (bytes32)"}},"id":4148,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4227:29:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":4149,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4257:14:19","memberName":"getUint256Slot","nodeType":"MemberAccess","referencedDeclaration":4248,"src":"4227:44:19","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_Uint256Slot_$4195_storage_ptr_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (struct StorageSlot.Uint256Slot storage pointer)"}},"id":4150,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4227:46:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Uint256Slot_$4195_storage_ptr","typeString":"struct StorageSlot.Uint256Slot storage pointer"}},"id":4151,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"4274:5:19","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":4194,"src":"4227:52:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":4152,"name":"NOT_ENTERED","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4081,"src":"4282:11:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4227:66:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4154,"nodeType":"ExpressionStatement","src":"4227:66:19"}]},"id":4156,"implemented":true,"kind":"function","modifiers":[],"name":"_nonReentrantAfter","nameLocation":"4056:18:19","nodeType":"FunctionDefinition","parameters":{"id":4145,"nodeType":"ParameterList","parameters":[],"src":"4074:2:19"},"returnParameters":{"id":4146,"nodeType":"ParameterList","parameters":[],"src":"4085:0:19"},"scope":4180,"src":"4047:253:19","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":4170,"nodeType":"Block","src":"4543:87:19","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4168,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":4162,"name":"_reentrancyGuardStorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4179,"src":"4560:27:19","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_bytes32_$","typeString":"function () pure returns (bytes32)"}},"id":4163,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4560:29:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":4164,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4590:14:19","memberName":"getUint256Slot","nodeType":"MemberAccess","referencedDeclaration":4248,"src":"4560:44:19","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_Uint256Slot_$4195_storage_ptr_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (struct StorageSlot.Uint256Slot storage pointer)"}},"id":4165,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4560:46:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Uint256Slot_$4195_storage_ptr","typeString":"struct StorageSlot.Uint256Slot storage pointer"}},"id":4166,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4607:5:19","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":4194,"src":"4560:52:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":4167,"name":"ENTERED","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4084,"src":"4616:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4560:63:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":4161,"id":4169,"nodeType":"Return","src":"4553:70:19"}]},"documentation":{"id":4157,"nodeType":"StructuredDocumentation","src":"4306:168:19","text":" @dev Returns true if the reentrancy guard is currently set to \"entered\", which indicates there is a\n `nonReentrant` function in the call stack."},"id":4171,"implemented":true,"kind":"function","modifiers":[],"name":"_reentrancyGuardEntered","nameLocation":"4488:23:19","nodeType":"FunctionDefinition","parameters":{"id":4158,"nodeType":"ParameterList","parameters":[],"src":"4511:2:19"},"returnParameters":{"id":4161,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4160,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4171,"src":"4537:4:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4159,"name":"bool","nodeType":"ElementaryTypeName","src":"4537:4:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4536:6:19"},"scope":4180,"src":"4479:151:19","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":4178,"nodeType":"Block","src":"4715:48:19","statements":[{"expression":{"id":4176,"name":"REENTRANCY_GUARD_STORAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4078,"src":"4732:24:19","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":4175,"id":4177,"nodeType":"Return","src":"4725:31:19"}]},"id":4179,"implemented":true,"kind":"function","modifiers":[],"name":"_reentrancyGuardStorageSlot","nameLocation":"4645:27:19","nodeType":"FunctionDefinition","parameters":{"id":4172,"nodeType":"ParameterList","parameters":[],"src":"4672:2:19"},"returnParameters":{"id":4175,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4174,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4179,"src":"4706:7:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4173,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4706:7:19","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4705:9:19"},"scope":4180,"src":"4636:127:19","stateMutability":"pure","virtual":true,"visibility":"internal"}],"scope":4181,"src":"1250:3515:19","usedErrors":[4087],"usedEvents":[]}],"src":"109:4657:19"},"id":19},"@openzeppelin/contracts/utils/StorageSlot.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/StorageSlot.sol","exportedSymbols":{"StorageSlot":[4304]},"id":4305,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":4182,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"193:24:20"},{"abstract":false,"baseContracts":[],"canonicalName":"StorageSlot","contractDependencies":[],"contractKind":"library","documentation":{"id":4183,"nodeType":"StructuredDocumentation","src":"219:1187:20","text":" @dev Library for reading and writing primitive types to specific storage slots.\n Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\n This library helps with reading and writing to such slots without the need for inline assembly.\n The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\n Example usage to set ERC-1967 implementation slot:\n ```solidity\n contract ERC1967 {\n // Define the slot. Alternatively, use the SlotDerivation library to derive the slot.\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n function _getImplementation() internal view returns (address) {\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n }\n function _setImplementation(address newImplementation) internal {\n require(newImplementation.code.length > 0);\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n }\n }\n ```\n TIP: Consider using this library along with {SlotDerivation}."},"fullyImplemented":true,"id":4304,"linearizedBaseContracts":[4304],"name":"StorageSlot","nameLocation":"1415:11:20","nodeType":"ContractDefinition","nodes":[{"canonicalName":"StorageSlot.AddressSlot","id":4186,"members":[{"constant":false,"id":4185,"mutability":"mutable","name":"value","nameLocation":"1470:5:20","nodeType":"VariableDeclaration","scope":4186,"src":"1462:13:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4184,"name":"address","nodeType":"ElementaryTypeName","src":"1462:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"name":"AddressSlot","nameLocation":"1440:11:20","nodeType":"StructDefinition","scope":4304,"src":"1433:49:20","visibility":"public"},{"canonicalName":"StorageSlot.BooleanSlot","id":4189,"members":[{"constant":false,"id":4188,"mutability":"mutable","name":"value","nameLocation":"1522:5:20","nodeType":"VariableDeclaration","scope":4189,"src":"1517:10:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4187,"name":"bool","nodeType":"ElementaryTypeName","src":"1517:4:20","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"BooleanSlot","nameLocation":"1495:11:20","nodeType":"StructDefinition","scope":4304,"src":"1488:46:20","visibility":"public"},{"canonicalName":"StorageSlot.Bytes32Slot","id":4192,"members":[{"constant":false,"id":4191,"mutability":"mutable","name":"value","nameLocation":"1577:5:20","nodeType":"VariableDeclaration","scope":4192,"src":"1569:13:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4190,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1569:7:20","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"name":"Bytes32Slot","nameLocation":"1547:11:20","nodeType":"StructDefinition","scope":4304,"src":"1540:49:20","visibility":"public"},{"canonicalName":"StorageSlot.Uint256Slot","id":4195,"members":[{"constant":false,"id":4194,"mutability":"mutable","name":"value","nameLocation":"1632:5:20","nodeType":"VariableDeclaration","scope":4195,"src":"1624:13:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4193,"name":"uint256","nodeType":"ElementaryTypeName","src":"1624:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"Uint256Slot","nameLocation":"1602:11:20","nodeType":"StructDefinition","scope":4304,"src":"1595:49:20","visibility":"public"},{"canonicalName":"StorageSlot.Int256Slot","id":4198,"members":[{"constant":false,"id":4197,"mutability":"mutable","name":"value","nameLocation":"1685:5:20","nodeType":"VariableDeclaration","scope":4198,"src":"1678:12:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4196,"name":"int256","nodeType":"ElementaryTypeName","src":"1678:6:20","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"name":"Int256Slot","nameLocation":"1657:10:20","nodeType":"StructDefinition","scope":4304,"src":"1650:47:20","visibility":"public"},{"canonicalName":"StorageSlot.StringSlot","id":4201,"members":[{"constant":false,"id":4200,"mutability":"mutable","name":"value","nameLocation":"1738:5:20","nodeType":"VariableDeclaration","scope":4201,"src":"1731:12:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"},"typeName":{"id":4199,"name":"string","nodeType":"ElementaryTypeName","src":"1731:6:20","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"name":"StringSlot","nameLocation":"1710:10:20","nodeType":"StructDefinition","scope":4304,"src":"1703:47:20","visibility":"public"},{"canonicalName":"StorageSlot.BytesSlot","id":4204,"members":[{"constant":false,"id":4203,"mutability":"mutable","name":"value","nameLocation":"1789:5:20","nodeType":"VariableDeclaration","scope":4204,"src":"1783:11:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":4202,"name":"bytes","nodeType":"ElementaryTypeName","src":"1783:5:20","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"BytesSlot","nameLocation":"1763:9:20","nodeType":"StructDefinition","scope":4304,"src":"1756:45:20","visibility":"public"},{"body":{"id":4214,"nodeType":"Block","src":"1983:79:20","statements":[{"AST":{"nativeSrc":"2018:38:20","nodeType":"YulBlock","src":"2018:38:20","statements":[{"nativeSrc":"2032:14:20","nodeType":"YulAssignment","src":"2032:14:20","value":{"name":"slot","nativeSrc":"2042:4:20","nodeType":"YulIdentifier","src":"2042:4:20"},"variableNames":[{"name":"r.slot","nativeSrc":"2032:6:20","nodeType":"YulIdentifier","src":"2032:6:20"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":4211,"isOffset":false,"isSlot":true,"src":"2032:6:20","suffix":"slot","valueSize":1},{"declaration":4207,"isOffset":false,"isSlot":false,"src":"2042:4:20","valueSize":1}],"flags":["memory-safe"],"id":4213,"nodeType":"InlineAssembly","src":"1993:63:20"}]},"documentation":{"id":4205,"nodeType":"StructuredDocumentation","src":"1807:87:20","text":" @dev Returns an `AddressSlot` with member `value` located at `slot`."},"id":4215,"implemented":true,"kind":"function","modifiers":[],"name":"getAddressSlot","nameLocation":"1908:14:20","nodeType":"FunctionDefinition","parameters":{"id":4208,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4207,"mutability":"mutable","name":"slot","nameLocation":"1931:4:20","nodeType":"VariableDeclaration","scope":4215,"src":"1923:12:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4206,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1923:7:20","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1922:14:20"},"returnParameters":{"id":4212,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4211,"mutability":"mutable","name":"r","nameLocation":"1980:1:20","nodeType":"VariableDeclaration","scope":4215,"src":"1960:21:20","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$4186_storage_ptr","typeString":"struct StorageSlot.AddressSlot"},"typeName":{"id":4210,"nodeType":"UserDefinedTypeName","pathNode":{"id":4209,"name":"AddressSlot","nameLocations":["1960:11:20"],"nodeType":"IdentifierPath","referencedDeclaration":4186,"src":"1960:11:20"},"referencedDeclaration":4186,"src":"1960:11:20","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$4186_storage_ptr","typeString":"struct StorageSlot.AddressSlot"}},"visibility":"internal"}],"src":"1959:23:20"},"scope":4304,"src":"1899:163:20","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4225,"nodeType":"Block","src":"2243:79:20","statements":[{"AST":{"nativeSrc":"2278:38:20","nodeType":"YulBlock","src":"2278:38:20","statements":[{"nativeSrc":"2292:14:20","nodeType":"YulAssignment","src":"2292:14:20","value":{"name":"slot","nativeSrc":"2302:4:20","nodeType":"YulIdentifier","src":"2302:4:20"},"variableNames":[{"name":"r.slot","nativeSrc":"2292:6:20","nodeType":"YulIdentifier","src":"2292:6:20"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":4222,"isOffset":false,"isSlot":true,"src":"2292:6:20","suffix":"slot","valueSize":1},{"declaration":4218,"isOffset":false,"isSlot":false,"src":"2302:4:20","valueSize":1}],"flags":["memory-safe"],"id":4224,"nodeType":"InlineAssembly","src":"2253:63:20"}]},"documentation":{"id":4216,"nodeType":"StructuredDocumentation","src":"2068:86:20","text":" @dev Returns a `BooleanSlot` with member `value` located at `slot`."},"id":4226,"implemented":true,"kind":"function","modifiers":[],"name":"getBooleanSlot","nameLocation":"2168:14:20","nodeType":"FunctionDefinition","parameters":{"id":4219,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4218,"mutability":"mutable","name":"slot","nameLocation":"2191:4:20","nodeType":"VariableDeclaration","scope":4226,"src":"2183:12:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4217,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2183:7:20","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2182:14:20"},"returnParameters":{"id":4223,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4222,"mutability":"mutable","name":"r","nameLocation":"2240:1:20","nodeType":"VariableDeclaration","scope":4226,"src":"2220:21:20","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_BooleanSlot_$4189_storage_ptr","typeString":"struct StorageSlot.BooleanSlot"},"typeName":{"id":4221,"nodeType":"UserDefinedTypeName","pathNode":{"id":4220,"name":"BooleanSlot","nameLocations":["2220:11:20"],"nodeType":"IdentifierPath","referencedDeclaration":4189,"src":"2220:11:20"},"referencedDeclaration":4189,"src":"2220:11:20","typeDescriptions":{"typeIdentifier":"t_struct$_BooleanSlot_$4189_storage_ptr","typeString":"struct StorageSlot.BooleanSlot"}},"visibility":"internal"}],"src":"2219:23:20"},"scope":4304,"src":"2159:163:20","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4236,"nodeType":"Block","src":"2503:79:20","statements":[{"AST":{"nativeSrc":"2538:38:20","nodeType":"YulBlock","src":"2538:38:20","statements":[{"nativeSrc":"2552:14:20","nodeType":"YulAssignment","src":"2552:14:20","value":{"name":"slot","nativeSrc":"2562:4:20","nodeType":"YulIdentifier","src":"2562:4:20"},"variableNames":[{"name":"r.slot","nativeSrc":"2552:6:20","nodeType":"YulIdentifier","src":"2552:6:20"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":4233,"isOffset":false,"isSlot":true,"src":"2552:6:20","suffix":"slot","valueSize":1},{"declaration":4229,"isOffset":false,"isSlot":false,"src":"2562:4:20","valueSize":1}],"flags":["memory-safe"],"id":4235,"nodeType":"InlineAssembly","src":"2513:63:20"}]},"documentation":{"id":4227,"nodeType":"StructuredDocumentation","src":"2328:86:20","text":" @dev Returns a `Bytes32Slot` with member `value` located at `slot`."},"id":4237,"implemented":true,"kind":"function","modifiers":[],"name":"getBytes32Slot","nameLocation":"2428:14:20","nodeType":"FunctionDefinition","parameters":{"id":4230,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4229,"mutability":"mutable","name":"slot","nameLocation":"2451:4:20","nodeType":"VariableDeclaration","scope":4237,"src":"2443:12:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4228,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2443:7:20","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2442:14:20"},"returnParameters":{"id":4234,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4233,"mutability":"mutable","name":"r","nameLocation":"2500:1:20","nodeType":"VariableDeclaration","scope":4237,"src":"2480:21:20","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Slot_$4192_storage_ptr","typeString":"struct StorageSlot.Bytes32Slot"},"typeName":{"id":4232,"nodeType":"UserDefinedTypeName","pathNode":{"id":4231,"name":"Bytes32Slot","nameLocations":["2480:11:20"],"nodeType":"IdentifierPath","referencedDeclaration":4192,"src":"2480:11:20"},"referencedDeclaration":4192,"src":"2480:11:20","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Slot_$4192_storage_ptr","typeString":"struct StorageSlot.Bytes32Slot"}},"visibility":"internal"}],"src":"2479:23:20"},"scope":4304,"src":"2419:163:20","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4247,"nodeType":"Block","src":"2763:79:20","statements":[{"AST":{"nativeSrc":"2798:38:20","nodeType":"YulBlock","src":"2798:38:20","statements":[{"nativeSrc":"2812:14:20","nodeType":"YulAssignment","src":"2812:14:20","value":{"name":"slot","nativeSrc":"2822:4:20","nodeType":"YulIdentifier","src":"2822:4:20"},"variableNames":[{"name":"r.slot","nativeSrc":"2812:6:20","nodeType":"YulIdentifier","src":"2812:6:20"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":4244,"isOffset":false,"isSlot":true,"src":"2812:6:20","suffix":"slot","valueSize":1},{"declaration":4240,"isOffset":false,"isSlot":false,"src":"2822:4:20","valueSize":1}],"flags":["memory-safe"],"id":4246,"nodeType":"InlineAssembly","src":"2773:63:20"}]},"documentation":{"id":4238,"nodeType":"StructuredDocumentation","src":"2588:86:20","text":" @dev Returns a `Uint256Slot` with member `value` located at `slot`."},"id":4248,"implemented":true,"kind":"function","modifiers":[],"name":"getUint256Slot","nameLocation":"2688:14:20","nodeType":"FunctionDefinition","parameters":{"id":4241,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4240,"mutability":"mutable","name":"slot","nameLocation":"2711:4:20","nodeType":"VariableDeclaration","scope":4248,"src":"2703:12:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4239,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2703:7:20","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2702:14:20"},"returnParameters":{"id":4245,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4244,"mutability":"mutable","name":"r","nameLocation":"2760:1:20","nodeType":"VariableDeclaration","scope":4248,"src":"2740:21:20","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Uint256Slot_$4195_storage_ptr","typeString":"struct StorageSlot.Uint256Slot"},"typeName":{"id":4243,"nodeType":"UserDefinedTypeName","pathNode":{"id":4242,"name":"Uint256Slot","nameLocations":["2740:11:20"],"nodeType":"IdentifierPath","referencedDeclaration":4195,"src":"2740:11:20"},"referencedDeclaration":4195,"src":"2740:11:20","typeDescriptions":{"typeIdentifier":"t_struct$_Uint256Slot_$4195_storage_ptr","typeString":"struct StorageSlot.Uint256Slot"}},"visibility":"internal"}],"src":"2739:23:20"},"scope":4304,"src":"2679:163:20","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4258,"nodeType":"Block","src":"3020:79:20","statements":[{"AST":{"nativeSrc":"3055:38:20","nodeType":"YulBlock","src":"3055:38:20","statements":[{"nativeSrc":"3069:14:20","nodeType":"YulAssignment","src":"3069:14:20","value":{"name":"slot","nativeSrc":"3079:4:20","nodeType":"YulIdentifier","src":"3079:4:20"},"variableNames":[{"name":"r.slot","nativeSrc":"3069:6:20","nodeType":"YulIdentifier","src":"3069:6:20"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":4255,"isOffset":false,"isSlot":true,"src":"3069:6:20","suffix":"slot","valueSize":1},{"declaration":4251,"isOffset":false,"isSlot":false,"src":"3079:4:20","valueSize":1}],"flags":["memory-safe"],"id":4257,"nodeType":"InlineAssembly","src":"3030:63:20"}]},"documentation":{"id":4249,"nodeType":"StructuredDocumentation","src":"2848:85:20","text":" @dev Returns a `Int256Slot` with member `value` located at `slot`."},"id":4259,"implemented":true,"kind":"function","modifiers":[],"name":"getInt256Slot","nameLocation":"2947:13:20","nodeType":"FunctionDefinition","parameters":{"id":4252,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4251,"mutability":"mutable","name":"slot","nameLocation":"2969:4:20","nodeType":"VariableDeclaration","scope":4259,"src":"2961:12:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4250,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2961:7:20","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2960:14:20"},"returnParameters":{"id":4256,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4255,"mutability":"mutable","name":"r","nameLocation":"3017:1:20","nodeType":"VariableDeclaration","scope":4259,"src":"2998:20:20","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Int256Slot_$4198_storage_ptr","typeString":"struct StorageSlot.Int256Slot"},"typeName":{"id":4254,"nodeType":"UserDefinedTypeName","pathNode":{"id":4253,"name":"Int256Slot","nameLocations":["2998:10:20"],"nodeType":"IdentifierPath","referencedDeclaration":4198,"src":"2998:10:20"},"referencedDeclaration":4198,"src":"2998:10:20","typeDescriptions":{"typeIdentifier":"t_struct$_Int256Slot_$4198_storage_ptr","typeString":"struct StorageSlot.Int256Slot"}},"visibility":"internal"}],"src":"2997:22:20"},"scope":4304,"src":"2938:161:20","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4269,"nodeType":"Block","src":"3277:79:20","statements":[{"AST":{"nativeSrc":"3312:38:20","nodeType":"YulBlock","src":"3312:38:20","statements":[{"nativeSrc":"3326:14:20","nodeType":"YulAssignment","src":"3326:14:20","value":{"name":"slot","nativeSrc":"3336:4:20","nodeType":"YulIdentifier","src":"3336:4:20"},"variableNames":[{"name":"r.slot","nativeSrc":"3326:6:20","nodeType":"YulIdentifier","src":"3326:6:20"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":4266,"isOffset":false,"isSlot":true,"src":"3326:6:20","suffix":"slot","valueSize":1},{"declaration":4262,"isOffset":false,"isSlot":false,"src":"3336:4:20","valueSize":1}],"flags":["memory-safe"],"id":4268,"nodeType":"InlineAssembly","src":"3287:63:20"}]},"documentation":{"id":4260,"nodeType":"StructuredDocumentation","src":"3105:85:20","text":" @dev Returns a `StringSlot` with member `value` located at `slot`."},"id":4270,"implemented":true,"kind":"function","modifiers":[],"name":"getStringSlot","nameLocation":"3204:13:20","nodeType":"FunctionDefinition","parameters":{"id":4263,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4262,"mutability":"mutable","name":"slot","nameLocation":"3226:4:20","nodeType":"VariableDeclaration","scope":4270,"src":"3218:12:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4261,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3218:7:20","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3217:14:20"},"returnParameters":{"id":4267,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4266,"mutability":"mutable","name":"r","nameLocation":"3274:1:20","nodeType":"VariableDeclaration","scope":4270,"src":"3255:20:20","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_StringSlot_$4201_storage_ptr","typeString":"struct StorageSlot.StringSlot"},"typeName":{"id":4265,"nodeType":"UserDefinedTypeName","pathNode":{"id":4264,"name":"StringSlot","nameLocations":["3255:10:20"],"nodeType":"IdentifierPath","referencedDeclaration":4201,"src":"3255:10:20"},"referencedDeclaration":4201,"src":"3255:10:20","typeDescriptions":{"typeIdentifier":"t_struct$_StringSlot_$4201_storage_ptr","typeString":"struct StorageSlot.StringSlot"}},"visibility":"internal"}],"src":"3254:22:20"},"scope":4304,"src":"3195:161:20","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4280,"nodeType":"Block","src":"3558:85:20","statements":[{"AST":{"nativeSrc":"3593:44:20","nodeType":"YulBlock","src":"3593:44:20","statements":[{"nativeSrc":"3607:20:20","nodeType":"YulAssignment","src":"3607:20:20","value":{"name":"store.slot","nativeSrc":"3617:10:20","nodeType":"YulIdentifier","src":"3617:10:20"},"variableNames":[{"name":"r.slot","nativeSrc":"3607:6:20","nodeType":"YulIdentifier","src":"3607:6:20"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":4277,"isOffset":false,"isSlot":true,"src":"3607:6:20","suffix":"slot","valueSize":1},{"declaration":4273,"isOffset":false,"isSlot":true,"src":"3617:10:20","suffix":"slot","valueSize":1}],"flags":["memory-safe"],"id":4279,"nodeType":"InlineAssembly","src":"3568:69:20"}]},"documentation":{"id":4271,"nodeType":"StructuredDocumentation","src":"3362:101:20","text":" @dev Returns an `StringSlot` representation of the string storage pointer `store`."},"id":4281,"implemented":true,"kind":"function","modifiers":[],"name":"getStringSlot","nameLocation":"3477:13:20","nodeType":"FunctionDefinition","parameters":{"id":4274,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4273,"mutability":"mutable","name":"store","nameLocation":"3506:5:20","nodeType":"VariableDeclaration","scope":4281,"src":"3491:20:20","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"},"typeName":{"id":4272,"name":"string","nodeType":"ElementaryTypeName","src":"3491:6:20","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3490:22:20"},"returnParameters":{"id":4278,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4277,"mutability":"mutable","name":"r","nameLocation":"3555:1:20","nodeType":"VariableDeclaration","scope":4281,"src":"3536:20:20","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_StringSlot_$4201_storage_ptr","typeString":"struct StorageSlot.StringSlot"},"typeName":{"id":4276,"nodeType":"UserDefinedTypeName","pathNode":{"id":4275,"name":"StringSlot","nameLocations":["3536:10:20"],"nodeType":"IdentifierPath","referencedDeclaration":4201,"src":"3536:10:20"},"referencedDeclaration":4201,"src":"3536:10:20","typeDescriptions":{"typeIdentifier":"t_struct$_StringSlot_$4201_storage_ptr","typeString":"struct StorageSlot.StringSlot"}},"visibility":"internal"}],"src":"3535:22:20"},"scope":4304,"src":"3468:175:20","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4291,"nodeType":"Block","src":"3818:79:20","statements":[{"AST":{"nativeSrc":"3853:38:20","nodeType":"YulBlock","src":"3853:38:20","statements":[{"nativeSrc":"3867:14:20","nodeType":"YulAssignment","src":"3867:14:20","value":{"name":"slot","nativeSrc":"3877:4:20","nodeType":"YulIdentifier","src":"3877:4:20"},"variableNames":[{"name":"r.slot","nativeSrc":"3867:6:20","nodeType":"YulIdentifier","src":"3867:6:20"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":4288,"isOffset":false,"isSlot":true,"src":"3867:6:20","suffix":"slot","valueSize":1},{"declaration":4284,"isOffset":false,"isSlot":false,"src":"3877:4:20","valueSize":1}],"flags":["memory-safe"],"id":4290,"nodeType":"InlineAssembly","src":"3828:63:20"}]},"documentation":{"id":4282,"nodeType":"StructuredDocumentation","src":"3649:84:20","text":" @dev Returns a `BytesSlot` with member `value` located at `slot`."},"id":4292,"implemented":true,"kind":"function","modifiers":[],"name":"getBytesSlot","nameLocation":"3747:12:20","nodeType":"FunctionDefinition","parameters":{"id":4285,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4284,"mutability":"mutable","name":"slot","nameLocation":"3768:4:20","nodeType":"VariableDeclaration","scope":4292,"src":"3760:12:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4283,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3760:7:20","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3759:14:20"},"returnParameters":{"id":4289,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4288,"mutability":"mutable","name":"r","nameLocation":"3815:1:20","nodeType":"VariableDeclaration","scope":4292,"src":"3797:19:20","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSlot_$4204_storage_ptr","typeString":"struct StorageSlot.BytesSlot"},"typeName":{"id":4287,"nodeType":"UserDefinedTypeName","pathNode":{"id":4286,"name":"BytesSlot","nameLocations":["3797:9:20"],"nodeType":"IdentifierPath","referencedDeclaration":4204,"src":"3797:9:20"},"referencedDeclaration":4204,"src":"3797:9:20","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSlot_$4204_storage_ptr","typeString":"struct StorageSlot.BytesSlot"}},"visibility":"internal"}],"src":"3796:21:20"},"scope":4304,"src":"3738:159:20","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4302,"nodeType":"Block","src":"4094:85:20","statements":[{"AST":{"nativeSrc":"4129:44:20","nodeType":"YulBlock","src":"4129:44:20","statements":[{"nativeSrc":"4143:20:20","nodeType":"YulAssignment","src":"4143:20:20","value":{"name":"store.slot","nativeSrc":"4153:10:20","nodeType":"YulIdentifier","src":"4153:10:20"},"variableNames":[{"name":"r.slot","nativeSrc":"4143:6:20","nodeType":"YulIdentifier","src":"4143:6:20"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":4299,"isOffset":false,"isSlot":true,"src":"4143:6:20","suffix":"slot","valueSize":1},{"declaration":4295,"isOffset":false,"isSlot":true,"src":"4153:10:20","suffix":"slot","valueSize":1}],"flags":["memory-safe"],"id":4301,"nodeType":"InlineAssembly","src":"4104:69:20"}]},"documentation":{"id":4293,"nodeType":"StructuredDocumentation","src":"3903:99:20","text":" @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`."},"id":4303,"implemented":true,"kind":"function","modifiers":[],"name":"getBytesSlot","nameLocation":"4016:12:20","nodeType":"FunctionDefinition","parameters":{"id":4296,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4295,"mutability":"mutable","name":"store","nameLocation":"4043:5:20","nodeType":"VariableDeclaration","scope":4303,"src":"4029:19:20","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":4294,"name":"bytes","nodeType":"ElementaryTypeName","src":"4029:5:20","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4028:21:20"},"returnParameters":{"id":4300,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4299,"mutability":"mutable","name":"r","nameLocation":"4091:1:20","nodeType":"VariableDeclaration","scope":4303,"src":"4073:19:20","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSlot_$4204_storage_ptr","typeString":"struct StorageSlot.BytesSlot"},"typeName":{"id":4298,"nodeType":"UserDefinedTypeName","pathNode":{"id":4297,"name":"BytesSlot","nameLocations":["4073:9:20"],"nodeType":"IdentifierPath","referencedDeclaration":4204,"src":"4073:9:20"},"referencedDeclaration":4204,"src":"4073:9:20","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSlot_$4204_storage_ptr","typeString":"struct StorageSlot.BytesSlot"}},"visibility":"internal"}],"src":"4072:21:20"},"scope":4304,"src":"4007:172:20","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":4305,"src":"1407:2774:20","usedErrors":[],"usedEvents":[]}],"src":"193:3989:20"},"id":20},"@openzeppelin/contracts/utils/Strings.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/Strings.sol","exportedSymbols":{"Bytes":[3877],"Math":[7507],"SafeCast":[9272],"SignedMath":[9416],"Strings":[5814]},"id":5815,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":4306,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"101:24:21"},{"absolutePath":"@openzeppelin/contracts/utils/math/Math.sol","file":"./math/Math.sol","id":4308,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":5815,"sourceUnit":7508,"src":"127:37:21","symbolAliases":[{"foreign":{"id":4307,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7507,"src":"135:4:21","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/math/SafeCast.sol","file":"./math/SafeCast.sol","id":4310,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":5815,"sourceUnit":9273,"src":"165:45:21","symbolAliases":[{"foreign":{"id":4309,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9272,"src":"173:8:21","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/math/SignedMath.sol","file":"./math/SignedMath.sol","id":4312,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":5815,"sourceUnit":9417,"src":"211:49:21","symbolAliases":[{"foreign":{"id":4311,"name":"SignedMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9416,"src":"219:10:21","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/Bytes.sol","file":"./Bytes.sol","id":4314,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":5815,"sourceUnit":3878,"src":"261:34:21","symbolAliases":[{"foreign":{"id":4313,"name":"Bytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3877,"src":"269:5:21","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"Strings","contractDependencies":[],"contractKind":"library","documentation":{"id":4315,"nodeType":"StructuredDocumentation","src":"297:34:21","text":" @dev String operations."},"fullyImplemented":true,"id":5814,"linearizedBaseContracts":[5814],"name":"Strings","nameLocation":"340:7:21","nodeType":"ContractDefinition","nodes":[{"global":false,"id":4317,"libraryName":{"id":4316,"name":"SafeCast","nameLocations":["360:8:21"],"nodeType":"IdentifierPath","referencedDeclaration":9272,"src":"360:8:21"},"nodeType":"UsingForDirective","src":"354:21:21"},{"constant":true,"id":4320,"mutability":"constant","name":"HEX_DIGITS","nameLocation":"406:10:21","nodeType":"VariableDeclaration","scope":5814,"src":"381:56:21","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes16","typeString":"bytes16"},"typeName":{"id":4318,"name":"bytes16","nodeType":"ElementaryTypeName","src":"381:7:21","typeDescriptions":{"typeIdentifier":"t_bytes16","typeString":"bytes16"}},"value":{"hexValue":"30313233343536373839616263646566","id":4319,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"419:18:21","typeDescriptions":{"typeIdentifier":"t_stringliteral_cb29997ed99ead0db59ce4d12b7d3723198c827273e5796737c926d78019c39f","typeString":"literal_string \"0123456789abcdef\""},"value":"0123456789abcdef"},"visibility":"private"},{"constant":true,"id":4323,"mutability":"constant","name":"ADDRESS_LENGTH","nameLocation":"466:14:21","nodeType":"VariableDeclaration","scope":5814,"src":"443:42:21","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":4321,"name":"uint8","nodeType":"ElementaryTypeName","src":"443:5:21","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":{"hexValue":"3230","id":4322,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"483:2:21","typeDescriptions":{"typeIdentifier":"t_rational_20_by_1","typeString":"int_const 20"},"value":"20"},"visibility":"private"},{"constant":true,"id":4336,"mutability":"constant","name":"SPECIAL_CHARS_LOOKUP","nameLocation":"516:20:21","nodeType":"VariableDeclaration","scope":5814,"src":"491:210:21","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4324,"name":"uint256","nodeType":"ElementaryTypeName","src":"491:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"commonType":{"typeIdentifier":"t_rational_4951760157141521121071333375_by_1","typeString":"int_const 4951760157141521121071333375"},"id":4335,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_rational_21474836479_by_1","typeString":"int_const 21474836479"},"id":4330,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"30786666666666666666","id":4325,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"547:10:21","typeDescriptions":{"typeIdentifier":"t_rational_4294967295_by_1","typeString":"int_const 4294967295"},"value":"0xffffffff"},"nodeType":"BinaryOperation","operator":"|","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_rational_17179869184_by_1","typeString":"int_const 17179869184"},"id":4328,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":4326,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"649:1:21","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"30783232","id":4327,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"654:4:21","typeDescriptions":{"typeIdentifier":"t_rational_34_by_1","typeString":"int_const 34"},"value":"0x22"},"src":"649:9:21","typeDescriptions":{"typeIdentifier":"t_rational_17179869184_by_1","typeString":"int_const 17179869184"}}],"id":4329,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"648:11:21","typeDescriptions":{"typeIdentifier":"t_rational_17179869184_by_1","typeString":"int_const 17179869184"}},"src":"547:112:21","typeDescriptions":{"typeIdentifier":"t_rational_21474836479_by_1","typeString":"int_const 21474836479"}},"nodeType":"BinaryOperation","operator":"|","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_rational_4951760157141521099596496896_by_1","typeString":"int_const 4951760157141521099596496896"},"id":4333,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":4331,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"691:1:21","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"30783563","id":4332,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"696:4:21","typeDescriptions":{"typeIdentifier":"t_rational_92_by_1","typeString":"int_const 92"},"value":"0x5c"},"src":"691:9:21","typeDescriptions":{"typeIdentifier":"t_rational_4951760157141521099596496896_by_1","typeString":"int_const 4951760157141521099596496896"}}],"id":4334,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"690:11:21","typeDescriptions":{"typeIdentifier":"t_rational_4951760157141521099596496896_by_1","typeString":"int_const 4951760157141521099596496896"}},"src":"547:154:21","typeDescriptions":{"typeIdentifier":"t_rational_4951760157141521121071333375_by_1","typeString":"int_const 4951760157141521121071333375"}},"visibility":"private"},{"documentation":{"id":4337,"nodeType":"StructuredDocumentation","src":"721:81:21","text":" @dev The `value` string doesn't fit in the specified `length`."},"errorSelector":"e22e27eb","id":4343,"name":"StringsInsufficientHexLength","nameLocation":"813:28:21","nodeType":"ErrorDefinition","parameters":{"id":4342,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4339,"mutability":"mutable","name":"value","nameLocation":"850:5:21","nodeType":"VariableDeclaration","scope":4343,"src":"842:13:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4338,"name":"uint256","nodeType":"ElementaryTypeName","src":"842:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4341,"mutability":"mutable","name":"length","nameLocation":"865:6:21","nodeType":"VariableDeclaration","scope":4343,"src":"857:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4340,"name":"uint256","nodeType":"ElementaryTypeName","src":"857:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"841:31:21"},"src":"807:66:21"},{"documentation":{"id":4344,"nodeType":"StructuredDocumentation","src":"879:108:21","text":" @dev The string being parsed contains characters that are not in scope of the given base."},"errorSelector":"94e2737e","id":4346,"name":"StringsInvalidChar","nameLocation":"998:18:21","nodeType":"ErrorDefinition","parameters":{"id":4345,"nodeType":"ParameterList","parameters":[],"src":"1016:2:21"},"src":"992:27:21"},{"documentation":{"id":4347,"nodeType":"StructuredDocumentation","src":"1025:84:21","text":" @dev The string being parsed is not a properly formatted address."},"errorSelector":"1d15ae44","id":4349,"name":"StringsInvalidAddressFormat","nameLocation":"1120:27:21","nodeType":"ErrorDefinition","parameters":{"id":4348,"nodeType":"ParameterList","parameters":[],"src":"1147:2:21"},"src":"1114:36:21"},{"body":{"id":4396,"nodeType":"Block","src":"1322:563:21","statements":[{"id":4395,"nodeType":"UncheckedBlock","src":"1332:547:21","statements":[{"assignments":[4358],"declarations":[{"constant":false,"id":4358,"mutability":"mutable","name":"length","nameLocation":"1364:6:21","nodeType":"VariableDeclaration","scope":4395,"src":"1356:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4357,"name":"uint256","nodeType":"ElementaryTypeName","src":"1356:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4365,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4364,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":4361,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4352,"src":"1384:5:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":4359,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7507,"src":"1373:4:21","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$7507_$","typeString":"type(library Math)"}},"id":4360,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1378:5:21","memberName":"log10","nodeType":"MemberAccess","referencedDeclaration":7318,"src":"1373:10:21","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":4362,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1373:17:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":4363,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1393:1:21","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1373:21:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1356:38:21"},{"assignments":[4367],"declarations":[{"constant":false,"id":4367,"mutability":"mutable","name":"buffer","nameLocation":"1422:6:21","nodeType":"VariableDeclaration","scope":4395,"src":"1408:20:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":4366,"name":"string","nodeType":"ElementaryTypeName","src":"1408:6:21","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"id":4372,"initialValue":{"arguments":[{"id":4370,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4358,"src":"1442:6:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4369,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"1431:10:21","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_string_memory_ptr_$","typeString":"function (uint256) pure returns (string memory)"},"typeName":{"id":4368,"name":"string","nodeType":"ElementaryTypeName","src":"1435:6:21","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}}},"id":4371,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1431:18:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"nodeType":"VariableDeclarationStatement","src":"1408:41:21"},{"assignments":[4374],"declarations":[{"constant":false,"id":4374,"mutability":"mutable","name":"ptr","nameLocation":"1471:3:21","nodeType":"VariableDeclaration","scope":4395,"src":"1463:11:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4373,"name":"uint256","nodeType":"ElementaryTypeName","src":"1463:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4375,"nodeType":"VariableDeclarationStatement","src":"1463:11:21"},{"AST":{"nativeSrc":"1513:69:21","nodeType":"YulBlock","src":"1513:69:21","statements":[{"nativeSrc":"1531:37:21","nodeType":"YulAssignment","src":"1531:37:21","value":{"arguments":[{"arguments":[{"name":"buffer","nativeSrc":"1546:6:21","nodeType":"YulIdentifier","src":"1546:6:21"},{"kind":"number","nativeSrc":"1554:4:21","nodeType":"YulLiteral","src":"1554:4:21","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"1542:3:21","nodeType":"YulIdentifier","src":"1542:3:21"},"nativeSrc":"1542:17:21","nodeType":"YulFunctionCall","src":"1542:17:21"},{"name":"length","nativeSrc":"1561:6:21","nodeType":"YulIdentifier","src":"1561:6:21"}],"functionName":{"name":"add","nativeSrc":"1538:3:21","nodeType":"YulIdentifier","src":"1538:3:21"},"nativeSrc":"1538:30:21","nodeType":"YulFunctionCall","src":"1538:30:21"},"variableNames":[{"name":"ptr","nativeSrc":"1531:3:21","nodeType":"YulIdentifier","src":"1531:3:21"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":4367,"isOffset":false,"isSlot":false,"src":"1546:6:21","valueSize":1},{"declaration":4358,"isOffset":false,"isSlot":false,"src":"1561:6:21","valueSize":1},{"declaration":4374,"isOffset":false,"isSlot":false,"src":"1531:3:21","valueSize":1}],"flags":["memory-safe"],"id":4376,"nodeType":"InlineAssembly","src":"1488:94:21"},{"body":{"id":4391,"nodeType":"Block","src":"1608:234:21","statements":[{"expression":{"id":4379,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"--","prefix":false,"src":"1626:5:21","subExpression":{"id":4378,"name":"ptr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4374,"src":"1626:3:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4380,"nodeType":"ExpressionStatement","src":"1626:5:21"},{"AST":{"nativeSrc":"1674:86:21","nodeType":"YulBlock","src":"1674:86:21","statements":[{"expression":{"arguments":[{"name":"ptr","nativeSrc":"1704:3:21","nodeType":"YulIdentifier","src":"1704:3:21"},{"arguments":[{"arguments":[{"name":"value","nativeSrc":"1718:5:21","nodeType":"YulIdentifier","src":"1718:5:21"},{"kind":"number","nativeSrc":"1725:2:21","nodeType":"YulLiteral","src":"1725:2:21","type":"","value":"10"}],"functionName":{"name":"mod","nativeSrc":"1714:3:21","nodeType":"YulIdentifier","src":"1714:3:21"},"nativeSrc":"1714:14:21","nodeType":"YulFunctionCall","src":"1714:14:21"},{"name":"HEX_DIGITS","nativeSrc":"1730:10:21","nodeType":"YulIdentifier","src":"1730:10:21"}],"functionName":{"name":"byte","nativeSrc":"1709:4:21","nodeType":"YulIdentifier","src":"1709:4:21"},"nativeSrc":"1709:32:21","nodeType":"YulFunctionCall","src":"1709:32:21"}],"functionName":{"name":"mstore8","nativeSrc":"1696:7:21","nodeType":"YulIdentifier","src":"1696:7:21"},"nativeSrc":"1696:46:21","nodeType":"YulFunctionCall","src":"1696:46:21"},"nativeSrc":"1696:46:21","nodeType":"YulExpressionStatement","src":"1696:46:21"}]},"evmVersion":"cancun","externalReferences":[{"declaration":4320,"isOffset":false,"isSlot":false,"src":"1730:10:21","valueSize":1},{"declaration":4374,"isOffset":false,"isSlot":false,"src":"1704:3:21","valueSize":1},{"declaration":4352,"isOffset":false,"isSlot":false,"src":"1718:5:21","valueSize":1}],"flags":["memory-safe"],"id":4381,"nodeType":"InlineAssembly","src":"1649:111:21"},{"expression":{"id":4384,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4382,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4352,"src":"1777:5:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"hexValue":"3130","id":4383,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1786:2:21","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"src":"1777:11:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4385,"nodeType":"ExpressionStatement","src":"1777:11:21"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4388,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4386,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4352,"src":"1810:5:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":4387,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1819:1:21","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1810:10:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4390,"nodeType":"IfStatement","src":"1806:21:21","trueBody":{"id":4389,"nodeType":"Break","src":"1822:5:21"}}]},"condition":{"hexValue":"74727565","id":4377,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1602:4:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"id":4392,"nodeType":"WhileStatement","src":"1595:247:21"},{"expression":{"id":4393,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4367,"src":"1862:6:21","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"functionReturnParameters":4356,"id":4394,"nodeType":"Return","src":"1855:13:21"}]}]},"documentation":{"id":4350,"nodeType":"StructuredDocumentation","src":"1156:90:21","text":" @dev Converts a `uint256` to its ASCII `string` decimal representation."},"id":4397,"implemented":true,"kind":"function","modifiers":[],"name":"toString","nameLocation":"1260:8:21","nodeType":"FunctionDefinition","parameters":{"id":4353,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4352,"mutability":"mutable","name":"value","nameLocation":"1277:5:21","nodeType":"VariableDeclaration","scope":4397,"src":"1269:13:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4351,"name":"uint256","nodeType":"ElementaryTypeName","src":"1269:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1268:15:21"},"returnParameters":{"id":4356,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4355,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4397,"src":"1307:13:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":4354,"name":"string","nodeType":"ElementaryTypeName","src":"1307:6:21","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1306:15:21"},"scope":5814,"src":"1251:634:21","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4422,"nodeType":"Block","src":"2061:92:21","statements":[{"expression":{"arguments":[{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4410,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4408,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4400,"src":"2092:5:21","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"30","id":4409,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2100:1:21","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2092:9:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"hexValue":"","id":4412,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2110:2:21","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""},"id":4413,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"2092:20:21","trueExpression":{"hexValue":"2d","id":4411,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2104:3:21","typeDescriptions":{"typeIdentifier":"t_stringliteral_d3b8281179950f98149eefdb158d0e1acb56f56e8e343aa9fefafa7e36959561","typeString":"literal_string \"-\""},"value":"-"},"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"arguments":[{"arguments":[{"id":4417,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4400,"src":"2138:5:21","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"expression":{"id":4415,"name":"SignedMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9416,"src":"2123:10:21","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SignedMath_$9416_$","typeString":"type(library SignedMath)"}},"id":4416,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2134:3:21","memberName":"abs","nodeType":"MemberAccess","referencedDeclaration":9415,"src":"2123:14:21","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_uint256_$","typeString":"function (int256) pure returns (uint256)"}},"id":4418,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2123:21:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4414,"name":"toString","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4397,"src":"2114:8:21","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_string_memory_ptr_$","typeString":"function (uint256) pure returns (string memory)"}},"id":4419,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2114:31:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"expression":{"id":4406,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2078:6:21","typeDescriptions":{"typeIdentifier":"t_type$_t_string_storage_ptr_$","typeString":"type(string storage pointer)"},"typeName":{"id":4405,"name":"string","nodeType":"ElementaryTypeName","src":"2078:6:21","typeDescriptions":{}}},"id":4407,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2085:6:21","memberName":"concat","nodeType":"MemberAccess","src":"2078:13:21","typeDescriptions":{"typeIdentifier":"t_function_stringconcat_pure$__$returns$_t_string_memory_ptr_$","typeString":"function () pure returns (string memory)"}},"id":4420,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2078:68:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"functionReturnParameters":4404,"id":4421,"nodeType":"Return","src":"2071:75:21"}]},"documentation":{"id":4398,"nodeType":"StructuredDocumentation","src":"1891:89:21","text":" @dev Converts a `int256` to its ASCII `string` decimal representation."},"id":4423,"implemented":true,"kind":"function","modifiers":[],"name":"toStringSigned","nameLocation":"1994:14:21","nodeType":"FunctionDefinition","parameters":{"id":4401,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4400,"mutability":"mutable","name":"value","nameLocation":"2016:5:21","nodeType":"VariableDeclaration","scope":4423,"src":"2009:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4399,"name":"int256","nodeType":"ElementaryTypeName","src":"2009:6:21","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"2008:14:21"},"returnParameters":{"id":4404,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4403,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4423,"src":"2046:13:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":4402,"name":"string","nodeType":"ElementaryTypeName","src":"2046:6:21","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2045:15:21"},"scope":5814,"src":"1985:168:21","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4442,"nodeType":"Block","src":"2332:100:21","statements":[{"id":4441,"nodeType":"UncheckedBlock","src":"2342:84:21","statements":[{"expression":{"arguments":[{"id":4432,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4426,"src":"2385:5:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4438,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":4435,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4426,"src":"2404:5:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":4433,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7507,"src":"2392:4:21","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$7507_$","typeString":"type(library Math)"}},"id":4434,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2397:6:21","memberName":"log256","nodeType":"MemberAccess","referencedDeclaration":7429,"src":"2392:11:21","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":4436,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2392:18:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":4437,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2413:1:21","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"2392:22:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4431,"name":"toHexString","nodeType":"Identifier","overloadedDeclarations":[4443,4526,4546,4700],"referencedDeclaration":4526,"src":"2373:11:21","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_string_memory_ptr_$","typeString":"function (uint256,uint256) pure returns (string memory)"}},"id":4439,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2373:42:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"functionReturnParameters":4430,"id":4440,"nodeType":"Return","src":"2366:49:21"}]}]},"documentation":{"id":4424,"nodeType":"StructuredDocumentation","src":"2159:94:21","text":" @dev Converts a `uint256` to its ASCII `string` hexadecimal representation."},"id":4443,"implemented":true,"kind":"function","modifiers":[],"name":"toHexString","nameLocation":"2267:11:21","nodeType":"FunctionDefinition","parameters":{"id":4427,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4426,"mutability":"mutable","name":"value","nameLocation":"2287:5:21","nodeType":"VariableDeclaration","scope":4443,"src":"2279:13:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4425,"name":"uint256","nodeType":"ElementaryTypeName","src":"2279:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2278:15:21"},"returnParameters":{"id":4430,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4429,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4443,"src":"2317:13:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":4428,"name":"string","nodeType":"ElementaryTypeName","src":"2317:6:21","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2316:15:21"},"scope":5814,"src":"2258:174:21","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4525,"nodeType":"Block","src":"2645:435:21","statements":[{"assignments":[4454],"declarations":[{"constant":false,"id":4454,"mutability":"mutable","name":"localValue","nameLocation":"2663:10:21","nodeType":"VariableDeclaration","scope":4525,"src":"2655:18:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4453,"name":"uint256","nodeType":"ElementaryTypeName","src":"2655:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4456,"initialValue":{"id":4455,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4446,"src":"2676:5:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2655:26:21"},{"assignments":[4458],"declarations":[{"constant":false,"id":4458,"mutability":"mutable","name":"buffer","nameLocation":"2704:6:21","nodeType":"VariableDeclaration","scope":4525,"src":"2691:19:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4457,"name":"bytes","nodeType":"ElementaryTypeName","src":"2691:5:21","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":4467,"initialValue":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4465,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4463,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":4461,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2723:1:21","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4462,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4448,"src":"2727:6:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2723:10:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"32","id":4464,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2736:1:21","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"2723:14:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4460,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"2713:9:21","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$","typeString":"function (uint256) pure returns (bytes memory)"},"typeName":{"id":4459,"name":"bytes","nodeType":"ElementaryTypeName","src":"2717:5:21","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}}},"id":4466,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2713:25:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"2691:47:21"},{"expression":{"id":4472,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":4468,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4458,"src":"2748:6:21","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":4470,"indexExpression":{"hexValue":"30","id":4469,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2755:1:21","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2748:9:21","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":4471,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2760:3:21","typeDescriptions":{"typeIdentifier":"t_stringliteral_044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d","typeString":"literal_string \"0\""},"value":"0"},"src":"2748:15:21","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"id":4473,"nodeType":"ExpressionStatement","src":"2748:15:21"},{"expression":{"id":4478,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":4474,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4458,"src":"2773:6:21","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":4476,"indexExpression":{"hexValue":"31","id":4475,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2780:1:21","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2773:9:21","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"78","id":4477,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2785:3:21","typeDescriptions":{"typeIdentifier":"t_stringliteral_7521d1cadbcfa91eec65aa16715b94ffc1c9654ba57ea2ef1a2127bca1127a83","typeString":"literal_string \"x\""},"value":"x"},"src":"2773:15:21","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"id":4479,"nodeType":"ExpressionStatement","src":"2773:15:21"},{"body":{"id":4508,"nodeType":"Block","src":"2843:95:21","statements":[{"expression":{"id":4502,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":4494,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4458,"src":"2857:6:21","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":4496,"indexExpression":{"id":4495,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4481,"src":"2864:1:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2857:9:21","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":4497,"name":"HEX_DIGITS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4320,"src":"2869:10:21","typeDescriptions":{"typeIdentifier":"t_bytes16","typeString":"bytes16"}},"id":4501,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4500,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4498,"name":"localValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4454,"src":"2880:10:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"307866","id":4499,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2893:3:21","typeDescriptions":{"typeIdentifier":"t_rational_15_by_1","typeString":"int_const 15"},"value":"0xf"},"src":"2880:16:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2869:28:21","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"src":"2857:40:21","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"id":4503,"nodeType":"ExpressionStatement","src":"2857:40:21"},{"expression":{"id":4506,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4504,"name":"localValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4454,"src":"2911:10:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"34","id":4505,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2926:1:21","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"2911:16:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4507,"nodeType":"ExpressionStatement","src":"2911:16:21"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4490,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4488,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4481,"src":"2831:1:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"31","id":4489,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2835:1:21","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"2831:5:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4509,"initializationExpression":{"assignments":[4481],"declarations":[{"constant":false,"id":4481,"mutability":"mutable","name":"i","nameLocation":"2811:1:21","nodeType":"VariableDeclaration","scope":4509,"src":"2803:9:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4480,"name":"uint256","nodeType":"ElementaryTypeName","src":"2803:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4487,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4486,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4484,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":4482,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2815:1:21","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4483,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4448,"src":"2819:6:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2815:10:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":4485,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2828:1:21","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"2815:14:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2803:26:21"},"isSimpleCounterLoop":false,"loopExpression":{"expression":{"id":4492,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"--","prefix":true,"src":"2838:3:21","subExpression":{"id":4491,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4481,"src":"2840:1:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4493,"nodeType":"ExpressionStatement","src":"2838:3:21"},"nodeType":"ForStatement","src":"2798:140:21"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4512,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4510,"name":"localValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4454,"src":"2951:10:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":4511,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2965:1:21","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2951:15:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4519,"nodeType":"IfStatement","src":"2947:96:21","trueBody":{"id":4518,"nodeType":"Block","src":"2968:75:21","statements":[{"errorCall":{"arguments":[{"id":4514,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4446,"src":"3018:5:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":4515,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4448,"src":"3025:6:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4513,"name":"StringsInsufficientHexLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4343,"src":"2989:28:21","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (uint256,uint256) pure returns (error)"}},"id":4516,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2989:43:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4517,"nodeType":"RevertStatement","src":"2982:50:21"}]}},{"expression":{"arguments":[{"id":4522,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4458,"src":"3066:6:21","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":4521,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3059:6:21","typeDescriptions":{"typeIdentifier":"t_type$_t_string_storage_ptr_$","typeString":"type(string storage pointer)"},"typeName":{"id":4520,"name":"string","nodeType":"ElementaryTypeName","src":"3059:6:21","typeDescriptions":{}}},"id":4523,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3059:14:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"functionReturnParameters":4452,"id":4524,"nodeType":"Return","src":"3052:21:21"}]},"documentation":{"id":4444,"nodeType":"StructuredDocumentation","src":"2438:112:21","text":" @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length."},"id":4526,"implemented":true,"kind":"function","modifiers":[],"name":"toHexString","nameLocation":"2564:11:21","nodeType":"FunctionDefinition","parameters":{"id":4449,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4446,"mutability":"mutable","name":"value","nameLocation":"2584:5:21","nodeType":"VariableDeclaration","scope":4526,"src":"2576:13:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4445,"name":"uint256","nodeType":"ElementaryTypeName","src":"2576:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4448,"mutability":"mutable","name":"length","nameLocation":"2599:6:21","nodeType":"VariableDeclaration","scope":4526,"src":"2591:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4447,"name":"uint256","nodeType":"ElementaryTypeName","src":"2591:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2575:31:21"},"returnParameters":{"id":4452,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4451,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4526,"src":"2630:13:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":4450,"name":"string","nodeType":"ElementaryTypeName","src":"2630:6:21","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2629:15:21"},"scope":5814,"src":"2555:525:21","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4545,"nodeType":"Block","src":"3312:75:21","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"id":4539,"name":"addr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4529,"src":"3357:4:21","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":4538,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3349:7:21","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":4537,"name":"uint160","nodeType":"ElementaryTypeName","src":"3349:7:21","typeDescriptions":{}}},"id":4540,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3349:13:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint160","typeString":"uint160"}],"id":4536,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3341:7:21","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":4535,"name":"uint256","nodeType":"ElementaryTypeName","src":"3341:7:21","typeDescriptions":{}}},"id":4541,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3341:22:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":4542,"name":"ADDRESS_LENGTH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4323,"src":"3365:14:21","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":4534,"name":"toHexString","nodeType":"Identifier","overloadedDeclarations":[4443,4526,4546,4700],"referencedDeclaration":4526,"src":"3329:11:21","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_string_memory_ptr_$","typeString":"function (uint256,uint256) pure returns (string memory)"}},"id":4543,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3329:51:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"functionReturnParameters":4533,"id":4544,"nodeType":"Return","src":"3322:58:21"}]},"documentation":{"id":4527,"nodeType":"StructuredDocumentation","src":"3086:148:21","text":" @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal\n representation."},"id":4546,"implemented":true,"kind":"function","modifiers":[],"name":"toHexString","nameLocation":"3248:11:21","nodeType":"FunctionDefinition","parameters":{"id":4530,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4529,"mutability":"mutable","name":"addr","nameLocation":"3268:4:21","nodeType":"VariableDeclaration","scope":4546,"src":"3260:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4528,"name":"address","nodeType":"ElementaryTypeName","src":"3260:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3259:14:21"},"returnParameters":{"id":4533,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4532,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4546,"src":"3297:13:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":4531,"name":"string","nodeType":"ElementaryTypeName","src":"3297:6:21","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3296:15:21"},"scope":5814,"src":"3239:148:21","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4610,"nodeType":"Block","src":"3644:642:21","statements":[{"assignments":[4555],"declarations":[{"constant":false,"id":4555,"mutability":"mutable","name":"buffer","nameLocation":"3667:6:21","nodeType":"VariableDeclaration","scope":4610,"src":"3654:19:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4554,"name":"bytes","nodeType":"ElementaryTypeName","src":"3654:5:21","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":4562,"initialValue":{"arguments":[{"arguments":[{"id":4559,"name":"addr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4549,"src":"3694:4:21","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":4558,"name":"toHexString","nodeType":"Identifier","overloadedDeclarations":[4443,4526,4546,4700],"referencedDeclaration":4546,"src":"3682:11:21","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$returns$_t_string_memory_ptr_$","typeString":"function (address) pure returns (string memory)"}},"id":4560,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3682:17:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":4557,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3676:5:21","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":4556,"name":"bytes","nodeType":"ElementaryTypeName","src":"3676:5:21","typeDescriptions":{}}},"id":4561,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3676:24:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"3654:46:21"},{"assignments":[4564],"declarations":[{"constant":false,"id":4564,"mutability":"mutable","name":"hashValue","nameLocation":"3793:9:21","nodeType":"VariableDeclaration","scope":4610,"src":"3785:17:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4563,"name":"uint256","nodeType":"ElementaryTypeName","src":"3785:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4565,"nodeType":"VariableDeclarationStatement","src":"3785:17:21"},{"AST":{"nativeSrc":"3837:78:21","nodeType":"YulBlock","src":"3837:78:21","statements":[{"nativeSrc":"3851:54:21","nodeType":"YulAssignment","src":"3851:54:21","value":{"arguments":[{"kind":"number","nativeSrc":"3868:2:21","nodeType":"YulLiteral","src":"3868:2:21","type":"","value":"96"},{"arguments":[{"arguments":[{"name":"buffer","nativeSrc":"3886:6:21","nodeType":"YulIdentifier","src":"3886:6:21"},{"kind":"number","nativeSrc":"3894:4:21","nodeType":"YulLiteral","src":"3894:4:21","type":"","value":"0x22"}],"functionName":{"name":"add","nativeSrc":"3882:3:21","nodeType":"YulIdentifier","src":"3882:3:21"},"nativeSrc":"3882:17:21","nodeType":"YulFunctionCall","src":"3882:17:21"},{"kind":"number","nativeSrc":"3901:2:21","nodeType":"YulLiteral","src":"3901:2:21","type":"","value":"40"}],"functionName":{"name":"keccak256","nativeSrc":"3872:9:21","nodeType":"YulIdentifier","src":"3872:9:21"},"nativeSrc":"3872:32:21","nodeType":"YulFunctionCall","src":"3872:32:21"}],"functionName":{"name":"shr","nativeSrc":"3864:3:21","nodeType":"YulIdentifier","src":"3864:3:21"},"nativeSrc":"3864:41:21","nodeType":"YulFunctionCall","src":"3864:41:21"},"variableNames":[{"name":"hashValue","nativeSrc":"3851:9:21","nodeType":"YulIdentifier","src":"3851:9:21"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":4555,"isOffset":false,"isSlot":false,"src":"3886:6:21","valueSize":1},{"declaration":4564,"isOffset":false,"isSlot":false,"src":"3851:9:21","valueSize":1}],"flags":["memory-safe"],"id":4566,"nodeType":"InlineAssembly","src":"3812:103:21"},{"body":{"id":4603,"nodeType":"Block","src":"3958:291:21","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":4590,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4581,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4579,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4577,"name":"hashValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4564,"src":"4064:9:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"307866","id":4578,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4076:3:21","typeDescriptions":{"typeIdentifier":"t_rational_15_by_1","typeString":"int_const 15"},"value":"0xf"},"src":"4064:15:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"37","id":4580,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4082:1:21","typeDescriptions":{"typeIdentifier":"t_rational_7_by_1","typeString":"int_const 7"},"value":"7"},"src":"4064:19:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":4589,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"baseExpression":{"id":4584,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4555,"src":"4093:6:21","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":4586,"indexExpression":{"id":4585,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4568,"src":"4100:1:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4093:9:21","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes1","typeString":"bytes1"}],"id":4583,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4087:5:21","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":4582,"name":"uint8","nodeType":"ElementaryTypeName","src":"4087:5:21","typeDescriptions":{}}},"id":4587,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4087:16:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"3936","id":4588,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4106:2:21","typeDescriptions":{"typeIdentifier":"t_rational_96_by_1","typeString":"int_const 96"},"value":"96"},"src":"4087:21:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"4064:44:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4598,"nodeType":"IfStatement","src":"4060:150:21","trueBody":{"id":4597,"nodeType":"Block","src":"4110:100:21","statements":[{"expression":{"id":4595,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":4591,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4555,"src":"4178:6:21","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":4593,"indexExpression":{"id":4592,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4568,"src":"4185:1:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4178:9:21","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"nodeType":"Assignment","operator":"^=","rightHandSide":{"hexValue":"30783230","id":4594,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4191:4:21","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"0x20"},"src":"4178:17:21","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"id":4596,"nodeType":"ExpressionStatement","src":"4178:17:21"}]}},{"expression":{"id":4601,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4599,"name":"hashValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4564,"src":"4223:9:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"34","id":4600,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4237:1:21","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"4223:15:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4602,"nodeType":"ExpressionStatement","src":"4223:15:21"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4573,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4571,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4568,"src":"3946:1:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"31","id":4572,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3950:1:21","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3946:5:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4604,"initializationExpression":{"assignments":[4568],"declarations":[{"constant":false,"id":4568,"mutability":"mutable","name":"i","nameLocation":"3938:1:21","nodeType":"VariableDeclaration","scope":4604,"src":"3930:9:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4567,"name":"uint256","nodeType":"ElementaryTypeName","src":"3930:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4570,"initialValue":{"hexValue":"3431","id":4569,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3942:2:21","typeDescriptions":{"typeIdentifier":"t_rational_41_by_1","typeString":"int_const 41"},"value":"41"},"nodeType":"VariableDeclarationStatement","src":"3930:14:21"},"isSimpleCounterLoop":false,"loopExpression":{"expression":{"id":4575,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"--","prefix":true,"src":"3953:3:21","subExpression":{"id":4574,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4568,"src":"3955:1:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4576,"nodeType":"ExpressionStatement","src":"3953:3:21"},"nodeType":"ForStatement","src":"3925:324:21"},{"expression":{"arguments":[{"id":4607,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4555,"src":"4272:6:21","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":4606,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4265:6:21","typeDescriptions":{"typeIdentifier":"t_type$_t_string_storage_ptr_$","typeString":"type(string storage pointer)"},"typeName":{"id":4605,"name":"string","nodeType":"ElementaryTypeName","src":"4265:6:21","typeDescriptions":{}}},"id":4608,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4265:14:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"functionReturnParameters":4553,"id":4609,"nodeType":"Return","src":"4258:21:21"}]},"documentation":{"id":4547,"nodeType":"StructuredDocumentation","src":"3393:165:21","text":" @dev Converts an `address` with fixed length of 20 bytes to its checksummed ASCII `string` hexadecimal\n representation, according to EIP-55."},"id":4611,"implemented":true,"kind":"function","modifiers":[],"name":"toChecksumHexString","nameLocation":"3572:19:21","nodeType":"FunctionDefinition","parameters":{"id":4550,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4549,"mutability":"mutable","name":"addr","nameLocation":"3600:4:21","nodeType":"VariableDeclaration","scope":4611,"src":"3592:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4548,"name":"address","nodeType":"ElementaryTypeName","src":"3592:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3591:14:21"},"returnParameters":{"id":4553,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4552,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4611,"src":"3629:13:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":4551,"name":"string","nodeType":"ElementaryTypeName","src":"3629:6:21","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3628:15:21"},"scope":5814,"src":"3563:723:21","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4699,"nodeType":"Block","src":"4475:424:21","statements":[{"id":4698,"nodeType":"UncheckedBlock","src":"4485:408:21","statements":[{"assignments":[4620],"declarations":[{"constant":false,"id":4620,"mutability":"mutable","name":"buffer","nameLocation":"4522:6:21","nodeType":"VariableDeclaration","scope":4698,"src":"4509:19:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4619,"name":"bytes","nodeType":"ElementaryTypeName","src":"4509:5:21","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":4630,"initialValue":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4628,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4626,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":4623,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4541:1:21","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":4624,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4614,"src":"4545:5:21","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":4625,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4551:6:21","memberName":"length","nodeType":"MemberAccess","src":"4545:12:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4541:16:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"32","id":4627,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4560:1:21","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"4541:20:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4622,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"4531:9:21","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$","typeString":"function (uint256) pure returns (bytes memory)"},"typeName":{"id":4621,"name":"bytes","nodeType":"ElementaryTypeName","src":"4535:5:21","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}}},"id":4629,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4531:31:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"4509:53:21"},{"expression":{"id":4635,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":4631,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4620,"src":"4576:6:21","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":4633,"indexExpression":{"hexValue":"30","id":4632,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4583:1:21","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4576:9:21","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":4634,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4588:3:21","typeDescriptions":{"typeIdentifier":"t_stringliteral_044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d","typeString":"literal_string \"0\""},"value":"0"},"src":"4576:15:21","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"id":4636,"nodeType":"ExpressionStatement","src":"4576:15:21"},{"expression":{"id":4641,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":4637,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4620,"src":"4605:6:21","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":4639,"indexExpression":{"hexValue":"31","id":4638,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4612:1:21","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4605:9:21","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"78","id":4640,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4617:3:21","typeDescriptions":{"typeIdentifier":"t_stringliteral_7521d1cadbcfa91eec65aa16715b94ffc1c9654ba57ea2ef1a2127bca1127a83","typeString":"literal_string \"x\""},"value":"x"},"src":"4605:15:21","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"id":4642,"nodeType":"ExpressionStatement","src":"4605:15:21"},{"body":{"id":4691,"nodeType":"Block","src":"4677:171:21","statements":[{"assignments":[4655],"declarations":[{"constant":false,"id":4655,"mutability":"mutable","name":"v","nameLocation":"4701:1:21","nodeType":"VariableDeclaration","scope":4691,"src":"4695:7:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":4654,"name":"uint8","nodeType":"ElementaryTypeName","src":"4695:5:21","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"id":4662,"initialValue":{"arguments":[{"baseExpression":{"id":4658,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4614,"src":"4711:5:21","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":4660,"indexExpression":{"id":4659,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4644,"src":"4717:1:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4711:8:21","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes1","typeString":"bytes1"}],"id":4657,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4705:5:21","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":4656,"name":"uint8","nodeType":"ElementaryTypeName","src":"4705:5:21","typeDescriptions":{}}},"id":4661,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4705:15:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"VariableDeclarationStatement","src":"4695:25:21"},{"expression":{"id":4675,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":4663,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4620,"src":"4738:6:21","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":4669,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4668,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4666,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":4664,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4745:1:21","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4665,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4644,"src":"4749:1:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4745:5:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"32","id":4667,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4753:1:21","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"4745:9:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4738:17:21","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":4670,"name":"HEX_DIGITS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4320,"src":"4758:10:21","typeDescriptions":{"typeIdentifier":"t_bytes16","typeString":"bytes16"}},"id":4674,"indexExpression":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":4673,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4671,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4655,"src":"4769:1:21","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"34","id":4672,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4774:1:21","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"4769:6:21","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4758:18:21","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"src":"4738:38:21","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"id":4676,"nodeType":"ExpressionStatement","src":"4738:38:21"},{"expression":{"id":4689,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":4677,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4620,"src":"4794:6:21","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":4683,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4682,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4680,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":4678,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4801:1:21","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4679,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4644,"src":"4805:1:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4801:5:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"33","id":4681,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4809:1:21","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"src":"4801:9:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4794:17:21","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":4684,"name":"HEX_DIGITS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4320,"src":"4814:10:21","typeDescriptions":{"typeIdentifier":"t_bytes16","typeString":"bytes16"}},"id":4688,"indexExpression":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":4687,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4685,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4655,"src":"4825:1:21","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"307866","id":4686,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4829:3:21","typeDescriptions":{"typeIdentifier":"t_rational_15_by_1","typeString":"int_const 15"},"value":"0xf"},"src":"4825:7:21","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4814:19:21","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"src":"4794:39:21","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"id":4690,"nodeType":"ExpressionStatement","src":"4794:39:21"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4650,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4647,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4644,"src":"4654:1:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":4648,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4614,"src":"4658:5:21","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":4649,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4664:6:21","memberName":"length","nodeType":"MemberAccess","src":"4658:12:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4654:16:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4692,"initializationExpression":{"assignments":[4644],"declarations":[{"constant":false,"id":4644,"mutability":"mutable","name":"i","nameLocation":"4647:1:21","nodeType":"VariableDeclaration","scope":4692,"src":"4639:9:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4643,"name":"uint256","nodeType":"ElementaryTypeName","src":"4639:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4646,"initialValue":{"hexValue":"30","id":4645,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4651:1:21","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"4639:13:21"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":4652,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"4672:3:21","subExpression":{"id":4651,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4644,"src":"4674:1:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4653,"nodeType":"ExpressionStatement","src":"4672:3:21"},"nodeType":"ForStatement","src":"4634:214:21"},{"expression":{"arguments":[{"id":4695,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4620,"src":"4875:6:21","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":4694,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4868:6:21","typeDescriptions":{"typeIdentifier":"t_type$_t_string_storage_ptr_$","typeString":"type(string storage pointer)"},"typeName":{"id":4693,"name":"string","nodeType":"ElementaryTypeName","src":"4868:6:21","typeDescriptions":{}}},"id":4696,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4868:14:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"functionReturnParameters":4618,"id":4697,"nodeType":"Return","src":"4861:21:21"}]}]},"documentation":{"id":4612,"nodeType":"StructuredDocumentation","src":"4292:99:21","text":" @dev Converts a `bytes` buffer to its ASCII `string` hexadecimal representation."},"id":4700,"implemented":true,"kind":"function","modifiers":[],"name":"toHexString","nameLocation":"4405:11:21","nodeType":"FunctionDefinition","parameters":{"id":4615,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4614,"mutability":"mutable","name":"input","nameLocation":"4430:5:21","nodeType":"VariableDeclaration","scope":4700,"src":"4417:18:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4613,"name":"bytes","nodeType":"ElementaryTypeName","src":"4417:5:21","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4416:20:21"},"returnParameters":{"id":4618,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4617,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4700,"src":"4460:13:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":4616,"name":"string","nodeType":"ElementaryTypeName","src":"4460:6:21","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"4459:15:21"},"scope":5814,"src":"4396:503:21","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4722,"nodeType":"Block","src":"5054:55:21","statements":[{"expression":{"arguments":[{"arguments":[{"id":4714,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4703,"src":"5089:1:21","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":4713,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5083:5:21","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":4712,"name":"bytes","nodeType":"ElementaryTypeName","src":"5083:5:21","typeDescriptions":{}}},"id":4715,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5083:8:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"arguments":[{"id":4718,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4705,"src":"5099:1:21","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":4717,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5093:5:21","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":4716,"name":"bytes","nodeType":"ElementaryTypeName","src":"5093:5:21","typeDescriptions":{}}},"id":4719,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5093:8:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":4710,"name":"Bytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3877,"src":"5071:5:21","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Bytes_$3877_$","typeString":"type(library Bytes)"}},"id":4711,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5077:5:21","memberName":"equal","nodeType":"MemberAccess","referencedDeclaration":3527,"src":"5071:11:21","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bool_$","typeString":"function (bytes memory,bytes memory) pure returns (bool)"}},"id":4720,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5071:31:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":4709,"id":4721,"nodeType":"Return","src":"5064:38:21"}]},"documentation":{"id":4701,"nodeType":"StructuredDocumentation","src":"4905:66:21","text":" @dev Returns true if the two strings are equal."},"id":4723,"implemented":true,"kind":"function","modifiers":[],"name":"equal","nameLocation":"4985:5:21","nodeType":"FunctionDefinition","parameters":{"id":4706,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4703,"mutability":"mutable","name":"a","nameLocation":"5005:1:21","nodeType":"VariableDeclaration","scope":4723,"src":"4991:15:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":4702,"name":"string","nodeType":"ElementaryTypeName","src":"4991:6:21","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":4705,"mutability":"mutable","name":"b","nameLocation":"5022:1:21","nodeType":"VariableDeclaration","scope":4723,"src":"5008:15:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":4704,"name":"string","nodeType":"ElementaryTypeName","src":"5008:6:21","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"4990:34:21"},"returnParameters":{"id":4709,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4708,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4723,"src":"5048:4:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4707,"name":"bool","nodeType":"ElementaryTypeName","src":"5048:4:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5047:6:21"},"scope":5814,"src":"4976:133:21","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4741,"nodeType":"Block","src":"5406:64:21","statements":[{"expression":{"arguments":[{"id":4732,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4726,"src":"5433:5:21","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"hexValue":"30","id":4733,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5440:1:21","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"expression":{"arguments":[{"id":4736,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4726,"src":"5449:5:21","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":4735,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5443:5:21","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":4734,"name":"bytes","nodeType":"ElementaryTypeName","src":"5443:5:21","typeDescriptions":{}}},"id":4737,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5443:12:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":4738,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5456:6:21","memberName":"length","nodeType":"MemberAccess","src":"5443:19:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4731,"name":"parseUint","nodeType":"Identifier","overloadedDeclarations":[4742,4773],"referencedDeclaration":4773,"src":"5423:9:21","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (string memory,uint256,uint256) pure returns (uint256)"}},"id":4739,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5423:40:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":4730,"id":4740,"nodeType":"Return","src":"5416:47:21"}]},"documentation":{"id":4724,"nodeType":"StructuredDocumentation","src":"5115:214:21","text":" @dev Parse a decimal string and returns the value as a `uint256`.\n Requirements:\n - The string must be formatted as `[0-9]*`\n - The result must fit into an `uint256` type"},"id":4742,"implemented":true,"kind":"function","modifiers":[],"name":"parseUint","nameLocation":"5343:9:21","nodeType":"FunctionDefinition","parameters":{"id":4727,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4726,"mutability":"mutable","name":"input","nameLocation":"5367:5:21","nodeType":"VariableDeclaration","scope":4742,"src":"5353:19:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":4725,"name":"string","nodeType":"ElementaryTypeName","src":"5353:6:21","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"5352:21:21"},"returnParameters":{"id":4730,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4729,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4742,"src":"5397:7:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4728,"name":"uint256","nodeType":"ElementaryTypeName","src":"5397:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5396:9:21"},"scope":5814,"src":"5334:136:21","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4772,"nodeType":"Block","src":"5875:153:21","statements":[{"assignments":[4755,4757],"declarations":[{"constant":false,"id":4755,"mutability":"mutable","name":"success","nameLocation":"5891:7:21","nodeType":"VariableDeclaration","scope":4772,"src":"5886:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4754,"name":"bool","nodeType":"ElementaryTypeName","src":"5886:4:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4757,"mutability":"mutable","name":"value","nameLocation":"5908:5:21","nodeType":"VariableDeclaration","scope":4772,"src":"5900:13:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4756,"name":"uint256","nodeType":"ElementaryTypeName","src":"5900:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4763,"initialValue":{"arguments":[{"id":4759,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4745,"src":"5930:5:21","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":4760,"name":"begin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4747,"src":"5937:5:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":4761,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4749,"src":"5944:3:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4758,"name":"tryParseUint","nodeType":"Identifier","overloadedDeclarations":[4794,4831],"referencedDeclaration":4831,"src":"5917:12:21","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_uint256_$","typeString":"function (string memory,uint256,uint256) pure returns (bool,uint256)"}},"id":4762,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5917:31:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$","typeString":"tuple(bool,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"5885:63:21"},{"condition":{"id":4765,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"5962:8:21","subExpression":{"id":4764,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4755,"src":"5963:7:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4769,"nodeType":"IfStatement","src":"5958:41:21","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4766,"name":"StringsInvalidChar","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4346,"src":"5979:18:21","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4767,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5979:20:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4768,"nodeType":"RevertStatement","src":"5972:27:21"}},{"expression":{"id":4770,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4757,"src":"6016:5:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":4753,"id":4771,"nodeType":"Return","src":"6009:12:21"}]},"documentation":{"id":4743,"nodeType":"StructuredDocumentation","src":"5476:294:21","text":" @dev Variant of {parseUint-string} that parses a substring of `input` located between position `begin` (included) and\n `end` (excluded).\n Requirements:\n - The substring must be formatted as `[0-9]*`\n - The result must fit into an `uint256` type"},"id":4773,"implemented":true,"kind":"function","modifiers":[],"name":"parseUint","nameLocation":"5784:9:21","nodeType":"FunctionDefinition","parameters":{"id":4750,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4745,"mutability":"mutable","name":"input","nameLocation":"5808:5:21","nodeType":"VariableDeclaration","scope":4773,"src":"5794:19:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":4744,"name":"string","nodeType":"ElementaryTypeName","src":"5794:6:21","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":4747,"mutability":"mutable","name":"begin","nameLocation":"5823:5:21","nodeType":"VariableDeclaration","scope":4773,"src":"5815:13:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4746,"name":"uint256","nodeType":"ElementaryTypeName","src":"5815:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4749,"mutability":"mutable","name":"end","nameLocation":"5838:3:21","nodeType":"VariableDeclaration","scope":4773,"src":"5830:11:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4748,"name":"uint256","nodeType":"ElementaryTypeName","src":"5830:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5793:49:21"},"returnParameters":{"id":4753,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4752,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4773,"src":"5866:7:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4751,"name":"uint256","nodeType":"ElementaryTypeName","src":"5866:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5865:9:21"},"scope":5814,"src":"5775:253:21","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4793,"nodeType":"Block","src":"6349:83:21","statements":[{"expression":{"arguments":[{"id":4784,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4776,"src":"6395:5:21","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"hexValue":"30","id":4785,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6402:1:21","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"expression":{"arguments":[{"id":4788,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4776,"src":"6411:5:21","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":4787,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6405:5:21","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":4786,"name":"bytes","nodeType":"ElementaryTypeName","src":"6405:5:21","typeDescriptions":{}}},"id":4789,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6405:12:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":4790,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6418:6:21","memberName":"length","nodeType":"MemberAccess","src":"6405:19:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4783,"name":"_tryParseUintUncheckedBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4901,"src":"6366:28:21","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_uint256_$","typeString":"function (string memory,uint256,uint256) pure returns (bool,uint256)"}},"id":4791,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6366:59:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$","typeString":"tuple(bool,uint256)"}},"functionReturnParameters":4782,"id":4792,"nodeType":"Return","src":"6359:66:21"}]},"documentation":{"id":4774,"nodeType":"StructuredDocumentation","src":"6034:215:21","text":" @dev Variant of {parseUint-string} that returns false if the parsing fails because of an invalid character.\n NOTE: This function will revert if the result does not fit in a `uint256`."},"id":4794,"implemented":true,"kind":"function","modifiers":[],"name":"tryParseUint","nameLocation":"6263:12:21","nodeType":"FunctionDefinition","parameters":{"id":4777,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4776,"mutability":"mutable","name":"input","nameLocation":"6290:5:21","nodeType":"VariableDeclaration","scope":4794,"src":"6276:19:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":4775,"name":"string","nodeType":"ElementaryTypeName","src":"6276:6:21","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"6275:21:21"},"returnParameters":{"id":4782,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4779,"mutability":"mutable","name":"success","nameLocation":"6325:7:21","nodeType":"VariableDeclaration","scope":4794,"src":"6320:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4778,"name":"bool","nodeType":"ElementaryTypeName","src":"6320:4:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4781,"mutability":"mutable","name":"value","nameLocation":"6342:5:21","nodeType":"VariableDeclaration","scope":4794,"src":"6334:13:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4780,"name":"uint256","nodeType":"ElementaryTypeName","src":"6334:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6319:29:21"},"scope":5814,"src":"6254:178:21","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4830,"nodeType":"Block","src":"6834:144:21","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":4818,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4814,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4808,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4801,"src":"6848:3:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":4811,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4797,"src":"6860:5:21","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":4810,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6854:5:21","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":4809,"name":"bytes","nodeType":"ElementaryTypeName","src":"6854:5:21","typeDescriptions":{}}},"id":4812,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6854:12:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":4813,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6867:6:21","memberName":"length","nodeType":"MemberAccess","src":"6854:19:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6848:25:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4817,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4815,"name":"begin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4799,"src":"6877:5:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":4816,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4801,"src":"6885:3:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6877:11:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"6848:40:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4823,"nodeType":"IfStatement","src":"6844:63:21","trueBody":{"expression":{"components":[{"hexValue":"66616c7365","id":4819,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"6898:5:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"hexValue":"30","id":4820,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6905:1:21","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":4821,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"6897:10:21","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_rational_0_by_1_$","typeString":"tuple(bool,int_const 0)"}},"functionReturnParameters":4807,"id":4822,"nodeType":"Return","src":"6890:17:21"}},{"expression":{"arguments":[{"id":4825,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4797,"src":"6953:5:21","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":4826,"name":"begin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4799,"src":"6960:5:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":4827,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4801,"src":"6967:3:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4824,"name":"_tryParseUintUncheckedBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4901,"src":"6924:28:21","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_uint256_$","typeString":"function (string memory,uint256,uint256) pure returns (bool,uint256)"}},"id":4828,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6924:47:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$","typeString":"tuple(bool,uint256)"}},"functionReturnParameters":4807,"id":4829,"nodeType":"Return","src":"6917:54:21"}]},"documentation":{"id":4795,"nodeType":"StructuredDocumentation","src":"6438:238:21","text":" @dev Variant of {parseUint-string-uint256-uint256} that returns false if the parsing fails because of an invalid\n character.\n NOTE: This function will revert if the result does not fit in a `uint256`."},"id":4831,"implemented":true,"kind":"function","modifiers":[],"name":"tryParseUint","nameLocation":"6690:12:21","nodeType":"FunctionDefinition","parameters":{"id":4802,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4797,"mutability":"mutable","name":"input","nameLocation":"6726:5:21","nodeType":"VariableDeclaration","scope":4831,"src":"6712:19:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":4796,"name":"string","nodeType":"ElementaryTypeName","src":"6712:6:21","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":4799,"mutability":"mutable","name":"begin","nameLocation":"6749:5:21","nodeType":"VariableDeclaration","scope":4831,"src":"6741:13:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4798,"name":"uint256","nodeType":"ElementaryTypeName","src":"6741:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4801,"mutability":"mutable","name":"end","nameLocation":"6772:3:21","nodeType":"VariableDeclaration","scope":4831,"src":"6764:11:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4800,"name":"uint256","nodeType":"ElementaryTypeName","src":"6764:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6702:79:21"},"returnParameters":{"id":4807,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4804,"mutability":"mutable","name":"success","nameLocation":"6810:7:21","nodeType":"VariableDeclaration","scope":4831,"src":"6805:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4803,"name":"bool","nodeType":"ElementaryTypeName","src":"6805:4:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4806,"mutability":"mutable","name":"value","nameLocation":"6827:5:21","nodeType":"VariableDeclaration","scope":4831,"src":"6819:13:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4805,"name":"uint256","nodeType":"ElementaryTypeName","src":"6819:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6804:29:21"},"scope":5814,"src":"6681:297:21","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4900,"nodeType":"Block","src":"7381:347:21","statements":[{"assignments":[4846],"declarations":[{"constant":false,"id":4846,"mutability":"mutable","name":"buffer","nameLocation":"7404:6:21","nodeType":"VariableDeclaration","scope":4900,"src":"7391:19:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4845,"name":"bytes","nodeType":"ElementaryTypeName","src":"7391:5:21","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":4851,"initialValue":{"arguments":[{"id":4849,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4834,"src":"7419:5:21","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":4848,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7413:5:21","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":4847,"name":"bytes","nodeType":"ElementaryTypeName","src":"7413:5:21","typeDescriptions":{}}},"id":4850,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7413:12:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"7391:34:21"},{"assignments":[4853],"declarations":[{"constant":false,"id":4853,"mutability":"mutable","name":"result","nameLocation":"7444:6:21","nodeType":"VariableDeclaration","scope":4900,"src":"7436:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4852,"name":"uint256","nodeType":"ElementaryTypeName","src":"7436:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4855,"initialValue":{"hexValue":"30","id":4854,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7453:1:21","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"7436:18:21"},{"body":{"id":4894,"nodeType":"Block","src":"7502:189:21","statements":[{"assignments":[4867],"declarations":[{"constant":false,"id":4867,"mutability":"mutable","name":"chr","nameLocation":"7522:3:21","nodeType":"VariableDeclaration","scope":4894,"src":"7516:9:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":4866,"name":"uint8","nodeType":"ElementaryTypeName","src":"7516:5:21","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"id":4877,"initialValue":{"arguments":[{"arguments":[{"arguments":[{"id":4872,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4846,"src":"7571:6:21","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":4873,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4857,"src":"7579:1:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4871,"name":"_unsafeReadBytesOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5801,"src":"7548:22:21","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bytes32_$","typeString":"function (bytes memory,uint256) pure returns (bytes32)"}},"id":4874,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7548:33:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":4870,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7541:6:21","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes1_$","typeString":"type(bytes1)"},"typeName":{"id":4869,"name":"bytes1","nodeType":"ElementaryTypeName","src":"7541:6:21","typeDescriptions":{}}},"id":4875,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7541:41:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes1","typeString":"bytes1"}],"id":4868,"name":"_tryParseChr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5581,"src":"7528:12:21","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes1_$returns$_t_uint8_$","typeString":"function (bytes1) pure returns (uint8)"}},"id":4876,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7528:55:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"VariableDeclarationStatement","src":"7516:67:21"},{"condition":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":4880,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4878,"name":"chr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4867,"src":"7601:3:21","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"39","id":4879,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7607:1:21","typeDescriptions":{"typeIdentifier":"t_rational_9_by_1","typeString":"int_const 9"},"value":"9"},"src":"7601:7:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4885,"nodeType":"IfStatement","src":"7597:30:21","trueBody":{"expression":{"components":[{"hexValue":"66616c7365","id":4881,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"7618:5:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"hexValue":"30","id":4882,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7625:1:21","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":4883,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"7617:10:21","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_rational_0_by_1_$","typeString":"tuple(bool,int_const 0)"}},"functionReturnParameters":4844,"id":4884,"nodeType":"Return","src":"7610:17:21"}},{"expression":{"id":4888,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4886,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4853,"src":"7641:6:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"hexValue":"3130","id":4887,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7651:2:21","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"src":"7641:12:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4889,"nodeType":"ExpressionStatement","src":"7641:12:21"},{"expression":{"id":4892,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4890,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4853,"src":"7667:6:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":4891,"name":"chr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4867,"src":"7677:3:21","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"7667:13:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4893,"nodeType":"ExpressionStatement","src":"7667:13:21"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4862,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4860,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4857,"src":"7488:1:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":4861,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4838,"src":"7492:3:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7488:7:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4895,"initializationExpression":{"assignments":[4857],"declarations":[{"constant":false,"id":4857,"mutability":"mutable","name":"i","nameLocation":"7477:1:21","nodeType":"VariableDeclaration","scope":4895,"src":"7469:9:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4856,"name":"uint256","nodeType":"ElementaryTypeName","src":"7469:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4859,"initialValue":{"id":4858,"name":"begin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4836,"src":"7481:5:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"7469:17:21"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":4864,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"7497:3:21","subExpression":{"id":4863,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4857,"src":"7499:1:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4865,"nodeType":"ExpressionStatement","src":"7497:3:21"},"nodeType":"ForStatement","src":"7464:227:21"},{"expression":{"components":[{"hexValue":"74727565","id":4896,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"7708:4:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},{"id":4897,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4853,"src":"7714:6:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":4898,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7707:14:21","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$","typeString":"tuple(bool,uint256)"}},"functionReturnParameters":4844,"id":4899,"nodeType":"Return","src":"7700:21:21"}]},"documentation":{"id":4832,"nodeType":"StructuredDocumentation","src":"6984:224:21","text":" @dev Implementation of {tryParseUint-string-uint256-uint256} that does not check bounds. Caller should make sure that\n `begin <= end <= input.length`. Other inputs would result in undefined behavior."},"id":4901,"implemented":true,"kind":"function","modifiers":[],"name":"_tryParseUintUncheckedBounds","nameLocation":"7222:28:21","nodeType":"FunctionDefinition","parameters":{"id":4839,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4834,"mutability":"mutable","name":"input","nameLocation":"7274:5:21","nodeType":"VariableDeclaration","scope":4901,"src":"7260:19:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":4833,"name":"string","nodeType":"ElementaryTypeName","src":"7260:6:21","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":4836,"mutability":"mutable","name":"begin","nameLocation":"7297:5:21","nodeType":"VariableDeclaration","scope":4901,"src":"7289:13:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4835,"name":"uint256","nodeType":"ElementaryTypeName","src":"7289:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4838,"mutability":"mutable","name":"end","nameLocation":"7320:3:21","nodeType":"VariableDeclaration","scope":4901,"src":"7312:11:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4837,"name":"uint256","nodeType":"ElementaryTypeName","src":"7312:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7250:79:21"},"returnParameters":{"id":4844,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4841,"mutability":"mutable","name":"success","nameLocation":"7357:7:21","nodeType":"VariableDeclaration","scope":4901,"src":"7352:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4840,"name":"bool","nodeType":"ElementaryTypeName","src":"7352:4:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4843,"mutability":"mutable","name":"value","nameLocation":"7374:5:21","nodeType":"VariableDeclaration","scope":4901,"src":"7366:13:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4842,"name":"uint256","nodeType":"ElementaryTypeName","src":"7366:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7351:29:21"},"scope":5814,"src":"7213:515:21","stateMutability":"pure","virtual":false,"visibility":"private"},{"body":{"id":4919,"nodeType":"Block","src":"8025:63:21","statements":[{"expression":{"arguments":[{"id":4910,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4904,"src":"8051:5:21","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"hexValue":"30","id":4911,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8058:1:21","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"expression":{"arguments":[{"id":4914,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4904,"src":"8067:5:21","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":4913,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8061:5:21","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":4912,"name":"bytes","nodeType":"ElementaryTypeName","src":"8061:5:21","typeDescriptions":{}}},"id":4915,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8061:12:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":4916,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8074:6:21","memberName":"length","nodeType":"MemberAccess","src":"8061:19:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4909,"name":"parseInt","nodeType":"Identifier","overloadedDeclarations":[4920,4951],"referencedDeclaration":4951,"src":"8042:8:21","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_int256_$","typeString":"function (string memory,uint256,uint256) pure returns (int256)"}},"id":4917,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8042:39:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":4908,"id":4918,"nodeType":"Return","src":"8035:46:21"}]},"documentation":{"id":4902,"nodeType":"StructuredDocumentation","src":"7734:216:21","text":" @dev Parse a decimal string and returns the value as a `int256`.\n Requirements:\n - The string must be formatted as `[-+]?[0-9]*`\n - The result must fit in an `int256` type."},"id":4920,"implemented":true,"kind":"function","modifiers":[],"name":"parseInt","nameLocation":"7964:8:21","nodeType":"FunctionDefinition","parameters":{"id":4905,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4904,"mutability":"mutable","name":"input","nameLocation":"7987:5:21","nodeType":"VariableDeclaration","scope":4920,"src":"7973:19:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":4903,"name":"string","nodeType":"ElementaryTypeName","src":"7973:6:21","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"7972:21:21"},"returnParameters":{"id":4908,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4907,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4920,"src":"8017:6:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4906,"name":"int256","nodeType":"ElementaryTypeName","src":"8017:6:21","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"8016:8:21"},"scope":5814,"src":"7955:133:21","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4950,"nodeType":"Block","src":"8493:151:21","statements":[{"assignments":[4933,4935],"declarations":[{"constant":false,"id":4933,"mutability":"mutable","name":"success","nameLocation":"8509:7:21","nodeType":"VariableDeclaration","scope":4950,"src":"8504:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4932,"name":"bool","nodeType":"ElementaryTypeName","src":"8504:4:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4935,"mutability":"mutable","name":"value","nameLocation":"8525:5:21","nodeType":"VariableDeclaration","scope":4950,"src":"8518:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4934,"name":"int256","nodeType":"ElementaryTypeName","src":"8518:6:21","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":4941,"initialValue":{"arguments":[{"id":4937,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4923,"src":"8546:5:21","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":4938,"name":"begin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4925,"src":"8553:5:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":4939,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4927,"src":"8560:3:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4936,"name":"tryParseInt","nodeType":"Identifier","overloadedDeclarations":[4972,5014],"referencedDeclaration":5014,"src":"8534:11:21","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_int256_$","typeString":"function (string memory,uint256,uint256) pure returns (bool,int256)"}},"id":4940,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8534:30:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_int256_$","typeString":"tuple(bool,int256)"}},"nodeType":"VariableDeclarationStatement","src":"8503:61:21"},{"condition":{"id":4943,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"8578:8:21","subExpression":{"id":4942,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4933,"src":"8579:7:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4947,"nodeType":"IfStatement","src":"8574:41:21","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4944,"name":"StringsInvalidChar","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4346,"src":"8595:18:21","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4945,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8595:20:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4946,"nodeType":"RevertStatement","src":"8588:27:21"}},{"expression":{"id":4948,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4935,"src":"8632:5:21","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":4931,"id":4949,"nodeType":"Return","src":"8625:12:21"}]},"documentation":{"id":4921,"nodeType":"StructuredDocumentation","src":"8094:296:21","text":" @dev Variant of {parseInt-string} that parses a substring of `input` located between position `begin` (included) and\n `end` (excluded).\n Requirements:\n - The substring must be formatted as `[-+]?[0-9]*`\n - The result must fit in an `int256` type."},"id":4951,"implemented":true,"kind":"function","modifiers":[],"name":"parseInt","nameLocation":"8404:8:21","nodeType":"FunctionDefinition","parameters":{"id":4928,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4923,"mutability":"mutable","name":"input","nameLocation":"8427:5:21","nodeType":"VariableDeclaration","scope":4951,"src":"8413:19:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":4922,"name":"string","nodeType":"ElementaryTypeName","src":"8413:6:21","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":4925,"mutability":"mutable","name":"begin","nameLocation":"8442:5:21","nodeType":"VariableDeclaration","scope":4951,"src":"8434:13:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4924,"name":"uint256","nodeType":"ElementaryTypeName","src":"8434:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4927,"mutability":"mutable","name":"end","nameLocation":"8457:3:21","nodeType":"VariableDeclaration","scope":4951,"src":"8449:11:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4926,"name":"uint256","nodeType":"ElementaryTypeName","src":"8449:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8412:49:21"},"returnParameters":{"id":4931,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4930,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4951,"src":"8485:6:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4929,"name":"int256","nodeType":"ElementaryTypeName","src":"8485:6:21","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"8484:8:21"},"scope":5814,"src":"8395:249:21","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4971,"nodeType":"Block","src":"9035:82:21","statements":[{"expression":{"arguments":[{"id":4962,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4954,"src":"9080:5:21","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"hexValue":"30","id":4963,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9087:1:21","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"expression":{"arguments":[{"id":4966,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4954,"src":"9096:5:21","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":4965,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9090:5:21","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":4964,"name":"bytes","nodeType":"ElementaryTypeName","src":"9090:5:21","typeDescriptions":{}}},"id":4967,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9090:12:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":4968,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9103:6:21","memberName":"length","nodeType":"MemberAccess","src":"9090:19:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4961,"name":"_tryParseIntUncheckedBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5135,"src":"9052:27:21","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_int256_$","typeString":"function (string memory,uint256,uint256) pure returns (bool,int256)"}},"id":4969,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9052:58:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_int256_$","typeString":"tuple(bool,int256)"}},"functionReturnParameters":4960,"id":4970,"nodeType":"Return","src":"9045:65:21"}]},"documentation":{"id":4952,"nodeType":"StructuredDocumentation","src":"8650:287:21","text":" @dev Variant of {parseInt-string} that returns false if the parsing fails because of an invalid character or if\n the result does not fit in a `int256`.\n NOTE: This function will revert if the absolute value of the result does not fit in a `uint256`."},"id":4972,"implemented":true,"kind":"function","modifiers":[],"name":"tryParseInt","nameLocation":"8951:11:21","nodeType":"FunctionDefinition","parameters":{"id":4955,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4954,"mutability":"mutable","name":"input","nameLocation":"8977:5:21","nodeType":"VariableDeclaration","scope":4972,"src":"8963:19:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":4953,"name":"string","nodeType":"ElementaryTypeName","src":"8963:6:21","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"8962:21:21"},"returnParameters":{"id":4960,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4957,"mutability":"mutable","name":"success","nameLocation":"9012:7:21","nodeType":"VariableDeclaration","scope":4972,"src":"9007:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4956,"name":"bool","nodeType":"ElementaryTypeName","src":"9007:4:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4959,"mutability":"mutable","name":"value","nameLocation":"9028:5:21","nodeType":"VariableDeclaration","scope":4972,"src":"9021:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4958,"name":"int256","nodeType":"ElementaryTypeName","src":"9021:6:21","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"9006:28:21"},"scope":5814,"src":"8942:175:21","stateMutability":"pure","virtual":false,"visibility":"internal"},{"constant":true,"id":4977,"mutability":"constant","name":"ABS_MIN_INT256","nameLocation":"9148:14:21","nodeType":"VariableDeclaration","scope":5814,"src":"9123:50:21","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4973,"name":"uint256","nodeType":"ElementaryTypeName","src":"9123:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"commonType":{"typeIdentifier":"t_rational_57896044618658097711785492504343953926634992332820282019728792003956564819968_by_1","typeString":"int_const 5789...(69 digits omitted)...9968"},"id":4976,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":4974,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9165:1:21","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"323535","id":4975,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9170:3:21","typeDescriptions":{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"},"value":"255"},"src":"9165:8:21","typeDescriptions":{"typeIdentifier":"t_rational_57896044618658097711785492504343953926634992332820282019728792003956564819968_by_1","typeString":"int_const 5789...(69 digits omitted)...9968"}},"visibility":"private"},{"body":{"id":5013,"nodeType":"Block","src":"9639:143:21","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":5001,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4997,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4991,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4984,"src":"9653:3:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":4994,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4980,"src":"9665:5:21","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":4993,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9659:5:21","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":4992,"name":"bytes","nodeType":"ElementaryTypeName","src":"9659:5:21","typeDescriptions":{}}},"id":4995,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9659:12:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":4996,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9672:6:21","memberName":"length","nodeType":"MemberAccess","src":"9659:19:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9653:25:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5000,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4998,"name":"begin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4982,"src":"9682:5:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":4999,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4984,"src":"9690:3:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9682:11:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"9653:40:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5006,"nodeType":"IfStatement","src":"9649:63:21","trueBody":{"expression":{"components":[{"hexValue":"66616c7365","id":5002,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"9703:5:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"hexValue":"30","id":5003,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9710:1:21","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":5004,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"9702:10:21","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_rational_0_by_1_$","typeString":"tuple(bool,int_const 0)"}},"functionReturnParameters":4990,"id":5005,"nodeType":"Return","src":"9695:17:21"}},{"expression":{"arguments":[{"id":5008,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4980,"src":"9757:5:21","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":5009,"name":"begin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4982,"src":"9764:5:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":5010,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4984,"src":"9771:3:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5007,"name":"_tryParseIntUncheckedBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5135,"src":"9729:27:21","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_int256_$","typeString":"function (string memory,uint256,uint256) pure returns (bool,int256)"}},"id":5011,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9729:46:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_int256_$","typeString":"tuple(bool,int256)"}},"functionReturnParameters":4990,"id":5012,"nodeType":"Return","src":"9722:53:21"}]},"documentation":{"id":4978,"nodeType":"StructuredDocumentation","src":"9180:303:21","text":" @dev Variant of {parseInt-string-uint256-uint256} that returns false if the parsing fails because of an invalid\n character or if the result does not fit in a `int256`.\n NOTE: This function will revert if the absolute value of the result does not fit in a `uint256`."},"id":5014,"implemented":true,"kind":"function","modifiers":[],"name":"tryParseInt","nameLocation":"9497:11:21","nodeType":"FunctionDefinition","parameters":{"id":4985,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4980,"mutability":"mutable","name":"input","nameLocation":"9532:5:21","nodeType":"VariableDeclaration","scope":5014,"src":"9518:19:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":4979,"name":"string","nodeType":"ElementaryTypeName","src":"9518:6:21","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":4982,"mutability":"mutable","name":"begin","nameLocation":"9555:5:21","nodeType":"VariableDeclaration","scope":5014,"src":"9547:13:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4981,"name":"uint256","nodeType":"ElementaryTypeName","src":"9547:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4984,"mutability":"mutable","name":"end","nameLocation":"9578:3:21","nodeType":"VariableDeclaration","scope":5014,"src":"9570:11:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4983,"name":"uint256","nodeType":"ElementaryTypeName","src":"9570:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9508:79:21"},"returnParameters":{"id":4990,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4987,"mutability":"mutable","name":"success","nameLocation":"9616:7:21","nodeType":"VariableDeclaration","scope":5014,"src":"9611:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4986,"name":"bool","nodeType":"ElementaryTypeName","src":"9611:4:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4989,"mutability":"mutable","name":"value","nameLocation":"9632:5:21","nodeType":"VariableDeclaration","scope":5014,"src":"9625:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4988,"name":"int256","nodeType":"ElementaryTypeName","src":"9625:6:21","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"9610:28:21"},"scope":5814,"src":"9488:294:21","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":5134,"nodeType":"Block","src":"10182:812:21","statements":[{"assignments":[5029],"declarations":[{"constant":false,"id":5029,"mutability":"mutable","name":"buffer","nameLocation":"10205:6:21","nodeType":"VariableDeclaration","scope":5134,"src":"10192:19:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":5028,"name":"bytes","nodeType":"ElementaryTypeName","src":"10192:5:21","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":5034,"initialValue":{"arguments":[{"id":5032,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5017,"src":"10220:5:21","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":5031,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10214:5:21","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":5030,"name":"bytes","nodeType":"ElementaryTypeName","src":"10214:5:21","typeDescriptions":{}}},"id":5033,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10214:12:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"10192:34:21"},{"assignments":[5036],"declarations":[{"constant":false,"id":5036,"mutability":"mutable","name":"sign","nameLocation":"10290:4:21","nodeType":"VariableDeclaration","scope":5134,"src":"10283:11:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"},"typeName":{"id":5035,"name":"bytes1","nodeType":"ElementaryTypeName","src":"10283:6:21","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"visibility":"internal"}],"id":5052,"initialValue":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5039,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5037,"name":"begin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5019,"src":"10297:5:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":5038,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5021,"src":"10306:3:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10297:12:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"arguments":[{"arguments":[{"id":5047,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5029,"src":"10354:6:21","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":5048,"name":"begin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5019,"src":"10362:5:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5046,"name":"_unsafeReadBytesOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5801,"src":"10331:22:21","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bytes32_$","typeString":"function (bytes memory,uint256) pure returns (bytes32)"}},"id":5049,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10331:37:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":5045,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10324:6:21","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes1_$","typeString":"type(bytes1)"},"typeName":{"id":5044,"name":"bytes1","nodeType":"ElementaryTypeName","src":"10324:6:21","typeDescriptions":{}}},"id":5050,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10324:45:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"id":5051,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"10297:72:21","trueExpression":{"arguments":[{"hexValue":"30","id":5042,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10319:1:21","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":5041,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10312:6:21","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes1_$","typeString":"type(bytes1)"},"typeName":{"id":5040,"name":"bytes1","nodeType":"ElementaryTypeName","src":"10312:6:21","typeDescriptions":{}}},"id":5043,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10312:9:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"nodeType":"VariableDeclarationStatement","src":"10283:86:21"},{"assignments":[5054],"declarations":[{"constant":false,"id":5054,"mutability":"mutable","name":"positiveSign","nameLocation":"10455:12:21","nodeType":"VariableDeclaration","scope":5134,"src":"10450:17:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5053,"name":"bool","nodeType":"ElementaryTypeName","src":"10450:4:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":5061,"initialValue":{"commonType":{"typeIdentifier":"t_bytes1","typeString":"bytes1"},"id":5060,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5055,"name":"sign","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5036,"src":"10470:4:21","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"2b","id":5058,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"10485:3:21","typeDescriptions":{"typeIdentifier":"t_stringliteral_728b8dbbe730d9acd55e30e768e6a28a04bea0c61b88108287c2c87d79c98bb8","typeString":"literal_string \"+\""},"value":"+"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_728b8dbbe730d9acd55e30e768e6a28a04bea0c61b88108287c2c87d79c98bb8","typeString":"literal_string \"+\""}],"id":5057,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10478:6:21","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes1_$","typeString":"type(bytes1)"},"typeName":{"id":5056,"name":"bytes1","nodeType":"ElementaryTypeName","src":"10478:6:21","typeDescriptions":{}}},"id":5059,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10478:11:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"src":"10470:19:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"10450:39:21"},{"assignments":[5063],"declarations":[{"constant":false,"id":5063,"mutability":"mutable","name":"negativeSign","nameLocation":"10504:12:21","nodeType":"VariableDeclaration","scope":5134,"src":"10499:17:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5062,"name":"bool","nodeType":"ElementaryTypeName","src":"10499:4:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":5070,"initialValue":{"commonType":{"typeIdentifier":"t_bytes1","typeString":"bytes1"},"id":5069,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5064,"name":"sign","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5036,"src":"10519:4:21","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"2d","id":5067,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"10534:3:21","typeDescriptions":{"typeIdentifier":"t_stringliteral_d3b8281179950f98149eefdb158d0e1acb56f56e8e343aa9fefafa7e36959561","typeString":"literal_string \"-\""},"value":"-"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_d3b8281179950f98149eefdb158d0e1acb56f56e8e343aa9fefafa7e36959561","typeString":"literal_string \"-\""}],"id":5066,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10527:6:21","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes1_$","typeString":"type(bytes1)"},"typeName":{"id":5065,"name":"bytes1","nodeType":"ElementaryTypeName","src":"10527:6:21","typeDescriptions":{}}},"id":5068,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10527:11:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"src":"10519:19:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"10499:39:21"},{"assignments":[5072],"declarations":[{"constant":false,"id":5072,"mutability":"mutable","name":"offset","nameLocation":"10556:6:21","nodeType":"VariableDeclaration","scope":5134,"src":"10548:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5071,"name":"uint256","nodeType":"ElementaryTypeName","src":"10548:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5079,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"components":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":5075,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5073,"name":"positiveSign","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5054,"src":"10566:12:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"id":5074,"name":"negativeSign","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5063,"src":"10582:12:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"10566:28:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":5076,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10565:30:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5077,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10596:6:21","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":9271,"src":"10565:37:21","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$attached_to$_t_bool_$","typeString":"function (bool) pure returns (uint256)"}},"id":5078,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10565:39:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"10548:56:21"},{"assignments":[5081,5083],"declarations":[{"constant":false,"id":5081,"mutability":"mutable","name":"absSuccess","nameLocation":"10621:10:21","nodeType":"VariableDeclaration","scope":5134,"src":"10616:15:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5080,"name":"bool","nodeType":"ElementaryTypeName","src":"10616:4:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":5083,"mutability":"mutable","name":"absValue","nameLocation":"10641:8:21","nodeType":"VariableDeclaration","scope":5134,"src":"10633:16:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5082,"name":"uint256","nodeType":"ElementaryTypeName","src":"10633:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5091,"initialValue":{"arguments":[{"id":5085,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5017,"src":"10666:5:21","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5088,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5086,"name":"begin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5019,"src":"10673:5:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":5087,"name":"offset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5072,"src":"10681:6:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10673:14:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":5089,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5021,"src":"10689:3:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5084,"name":"tryParseUint","nodeType":"Identifier","overloadedDeclarations":[4794,4831],"referencedDeclaration":4831,"src":"10653:12:21","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_uint256_$","typeString":"function (string memory,uint256,uint256) pure returns (bool,uint256)"}},"id":5090,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10653:40:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$","typeString":"tuple(bool,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"10615:78:21"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":5096,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5092,"name":"absSuccess","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5081,"src":"10708:10:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5095,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5093,"name":"absValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5083,"src":"10722:8:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":5094,"name":"ABS_MIN_INT256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4977,"src":"10733:14:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10722:25:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"10708:39:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":5118,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":5114,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5112,"name":"absSuccess","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5081,"src":"10850:10:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"id":5113,"name":"negativeSign","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5063,"src":"10864:12:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"10850:26:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5117,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5115,"name":"absValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5083,"src":"10880:8:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":5116,"name":"ABS_MIN_INT256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4977,"src":"10892:14:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10880:26:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"10850:56:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"expression":{"components":[{"hexValue":"66616c7365","id":5128,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"10978:5:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"hexValue":"30","id":5129,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10985:1:21","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":5130,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"10977:10:21","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_rational_0_by_1_$","typeString":"tuple(bool,int_const 0)"}},"functionReturnParameters":5027,"id":5131,"nodeType":"Return","src":"10970:17:21"},"id":5132,"nodeType":"IfStatement","src":"10846:141:21","trueBody":{"id":5127,"nodeType":"Block","src":"10908:56:21","statements":[{"expression":{"components":[{"hexValue":"74727565","id":5119,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"10930:4:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},{"expression":{"arguments":[{"id":5122,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10941:6:21","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":5121,"name":"int256","nodeType":"ElementaryTypeName","src":"10941:6:21","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"}],"id":5120,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967269,"src":"10936:4:21","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":5123,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10936:12:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_int256","typeString":"type(int256)"}},"id":5124,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10949:3:21","memberName":"min","nodeType":"MemberAccess","src":"10936:16:21","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5125,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"10929:24:21","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_int256_$","typeString":"tuple(bool,int256)"}},"functionReturnParameters":5027,"id":5126,"nodeType":"Return","src":"10922:31:21"}]}},"id":5133,"nodeType":"IfStatement","src":"10704:283:21","trueBody":{"id":5111,"nodeType":"Block","src":"10749:91:21","statements":[{"expression":{"components":[{"hexValue":"74727565","id":5097,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"10771:4:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},{"condition":{"id":5098,"name":"negativeSign","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5063,"src":"10777:12:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"arguments":[{"id":5106,"name":"absValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5083,"src":"10819:8:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5105,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10812:6:21","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":5104,"name":"int256","nodeType":"ElementaryTypeName","src":"10812:6:21","typeDescriptions":{}}},"id":5107,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10812:16:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5108,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"10777:51:21","trueExpression":{"id":5103,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"-","prefix":true,"src":"10792:17:21","subExpression":{"arguments":[{"id":5101,"name":"absValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5083,"src":"10800:8:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5100,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10793:6:21","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":5099,"name":"int256","nodeType":"ElementaryTypeName","src":"10793:6:21","typeDescriptions":{}}},"id":5102,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10793:16:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5109,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10770:59:21","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_int256_$","typeString":"tuple(bool,int256)"}},"functionReturnParameters":5027,"id":5110,"nodeType":"Return","src":"10763:66:21"}]}}]},"documentation":{"id":5015,"nodeType":"StructuredDocumentation","src":"9788:223:21","text":" @dev Implementation of {tryParseInt-string-uint256-uint256} that does not check bounds. Caller should make sure that\n `begin <= end <= input.length`. Other inputs would result in undefined behavior."},"id":5135,"implemented":true,"kind":"function","modifiers":[],"name":"_tryParseIntUncheckedBounds","nameLocation":"10025:27:21","nodeType":"FunctionDefinition","parameters":{"id":5022,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5017,"mutability":"mutable","name":"input","nameLocation":"10076:5:21","nodeType":"VariableDeclaration","scope":5135,"src":"10062:19:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":5016,"name":"string","nodeType":"ElementaryTypeName","src":"10062:6:21","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":5019,"mutability":"mutable","name":"begin","nameLocation":"10099:5:21","nodeType":"VariableDeclaration","scope":5135,"src":"10091:13:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5018,"name":"uint256","nodeType":"ElementaryTypeName","src":"10091:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5021,"mutability":"mutable","name":"end","nameLocation":"10122:3:21","nodeType":"VariableDeclaration","scope":5135,"src":"10114:11:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5020,"name":"uint256","nodeType":"ElementaryTypeName","src":"10114:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10052:79:21"},"returnParameters":{"id":5027,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5024,"mutability":"mutable","name":"success","nameLocation":"10159:7:21","nodeType":"VariableDeclaration","scope":5135,"src":"10154:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5023,"name":"bool","nodeType":"ElementaryTypeName","src":"10154:4:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":5026,"mutability":"mutable","name":"value","nameLocation":"10175:5:21","nodeType":"VariableDeclaration","scope":5135,"src":"10168:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5025,"name":"int256","nodeType":"ElementaryTypeName","src":"10168:6:21","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"10153:28:21"},"scope":5814,"src":"10016:978:21","stateMutability":"pure","virtual":false,"visibility":"private"},{"body":{"id":5153,"nodeType":"Block","src":"11339:67:21","statements":[{"expression":{"arguments":[{"id":5144,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5138,"src":"11369:5:21","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"hexValue":"30","id":5145,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11376:1:21","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"expression":{"arguments":[{"id":5148,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5138,"src":"11385:5:21","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":5147,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11379:5:21","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":5146,"name":"bytes","nodeType":"ElementaryTypeName","src":"11379:5:21","typeDescriptions":{}}},"id":5149,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11379:12:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":5150,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11392:6:21","memberName":"length","nodeType":"MemberAccess","src":"11379:19:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5143,"name":"parseHexUint","nodeType":"Identifier","overloadedDeclarations":[5154,5185],"referencedDeclaration":5185,"src":"11356:12:21","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (string memory,uint256,uint256) pure returns (uint256)"}},"id":5151,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11356:43:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":5142,"id":5152,"nodeType":"Return","src":"11349:50:21"}]},"documentation":{"id":5136,"nodeType":"StructuredDocumentation","src":"11000:259:21","text":" @dev Parse a hexadecimal string (with or without \"0x\" prefix), and returns the value as a `uint256`.\n Requirements:\n - The string must be formatted as `(0x)?[0-9a-fA-F]*`\n - The result must fit in an `uint256` type."},"id":5154,"implemented":true,"kind":"function","modifiers":[],"name":"parseHexUint","nameLocation":"11273:12:21","nodeType":"FunctionDefinition","parameters":{"id":5139,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5138,"mutability":"mutable","name":"input","nameLocation":"11300:5:21","nodeType":"VariableDeclaration","scope":5154,"src":"11286:19:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":5137,"name":"string","nodeType":"ElementaryTypeName","src":"11286:6:21","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"11285:21:21"},"returnParameters":{"id":5142,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5141,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5154,"src":"11330:7:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5140,"name":"uint256","nodeType":"ElementaryTypeName","src":"11330:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11329:9:21"},"scope":5814,"src":"11264:142:21","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":5184,"nodeType":"Block","src":"11827:156:21","statements":[{"assignments":[5167,5169],"declarations":[{"constant":false,"id":5167,"mutability":"mutable","name":"success","nameLocation":"11843:7:21","nodeType":"VariableDeclaration","scope":5184,"src":"11838:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5166,"name":"bool","nodeType":"ElementaryTypeName","src":"11838:4:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":5169,"mutability":"mutable","name":"value","nameLocation":"11860:5:21","nodeType":"VariableDeclaration","scope":5184,"src":"11852:13:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5168,"name":"uint256","nodeType":"ElementaryTypeName","src":"11852:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5175,"initialValue":{"arguments":[{"id":5171,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5157,"src":"11885:5:21","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":5172,"name":"begin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5159,"src":"11892:5:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":5173,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5161,"src":"11899:3:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5170,"name":"tryParseHexUint","nodeType":"Identifier","overloadedDeclarations":[5206,5243],"referencedDeclaration":5243,"src":"11869:15:21","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_uint256_$","typeString":"function (string memory,uint256,uint256) pure returns (bool,uint256)"}},"id":5174,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11869:34:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$","typeString":"tuple(bool,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"11837:66:21"},{"condition":{"id":5177,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"11917:8:21","subExpression":{"id":5176,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5167,"src":"11918:7:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5181,"nodeType":"IfStatement","src":"11913:41:21","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":5178,"name":"StringsInvalidChar","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4346,"src":"11934:18:21","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":5179,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11934:20:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":5180,"nodeType":"RevertStatement","src":"11927:27:21"}},{"expression":{"id":5182,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5169,"src":"11971:5:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":5165,"id":5183,"nodeType":"Return","src":"11964:12:21"}]},"documentation":{"id":5155,"nodeType":"StructuredDocumentation","src":"11412:307:21","text":" @dev Variant of {parseHexUint-string} that parses a substring of `input` located between position `begin` (included) and\n `end` (excluded).\n Requirements:\n - The substring must be formatted as `(0x)?[0-9a-fA-F]*`\n - The result must fit in an `uint256` type."},"id":5185,"implemented":true,"kind":"function","modifiers":[],"name":"parseHexUint","nameLocation":"11733:12:21","nodeType":"FunctionDefinition","parameters":{"id":5162,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5157,"mutability":"mutable","name":"input","nameLocation":"11760:5:21","nodeType":"VariableDeclaration","scope":5185,"src":"11746:19:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":5156,"name":"string","nodeType":"ElementaryTypeName","src":"11746:6:21","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":5159,"mutability":"mutable","name":"begin","nameLocation":"11775:5:21","nodeType":"VariableDeclaration","scope":5185,"src":"11767:13:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5158,"name":"uint256","nodeType":"ElementaryTypeName","src":"11767:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5161,"mutability":"mutable","name":"end","nameLocation":"11790:3:21","nodeType":"VariableDeclaration","scope":5185,"src":"11782:11:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5160,"name":"uint256","nodeType":"ElementaryTypeName","src":"11782:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11745:49:21"},"returnParameters":{"id":5165,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5164,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5185,"src":"11818:7:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5163,"name":"uint256","nodeType":"ElementaryTypeName","src":"11818:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11817:9:21"},"scope":5814,"src":"11724:259:21","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":5205,"nodeType":"Block","src":"12310:86:21","statements":[{"expression":{"arguments":[{"id":5196,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5188,"src":"12359:5:21","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"hexValue":"30","id":5197,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12366:1:21","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"expression":{"arguments":[{"id":5200,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5188,"src":"12375:5:21","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":5199,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12369:5:21","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":5198,"name":"bytes","nodeType":"ElementaryTypeName","src":"12369:5:21","typeDescriptions":{}}},"id":5201,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12369:12:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":5202,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12382:6:21","memberName":"length","nodeType":"MemberAccess","src":"12369:19:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5195,"name":"_tryParseHexUintUncheckedBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5346,"src":"12327:31:21","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_uint256_$","typeString":"function (string memory,uint256,uint256) pure returns (bool,uint256)"}},"id":5203,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12327:62:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$","typeString":"tuple(bool,uint256)"}},"functionReturnParameters":5194,"id":5204,"nodeType":"Return","src":"12320:69:21"}]},"documentation":{"id":5186,"nodeType":"StructuredDocumentation","src":"11989:218:21","text":" @dev Variant of {parseHexUint-string} that returns false if the parsing fails because of an invalid character.\n NOTE: This function will revert if the result does not fit in a `uint256`."},"id":5206,"implemented":true,"kind":"function","modifiers":[],"name":"tryParseHexUint","nameLocation":"12221:15:21","nodeType":"FunctionDefinition","parameters":{"id":5189,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5188,"mutability":"mutable","name":"input","nameLocation":"12251:5:21","nodeType":"VariableDeclaration","scope":5206,"src":"12237:19:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":5187,"name":"string","nodeType":"ElementaryTypeName","src":"12237:6:21","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"12236:21:21"},"returnParameters":{"id":5194,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5191,"mutability":"mutable","name":"success","nameLocation":"12286:7:21","nodeType":"VariableDeclaration","scope":5206,"src":"12281:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5190,"name":"bool","nodeType":"ElementaryTypeName","src":"12281:4:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":5193,"mutability":"mutable","name":"value","nameLocation":"12303:5:21","nodeType":"VariableDeclaration","scope":5206,"src":"12295:13:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5192,"name":"uint256","nodeType":"ElementaryTypeName","src":"12295:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12280:29:21"},"scope":5814,"src":"12212:184:21","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":5242,"nodeType":"Block","src":"12804:147:21","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":5230,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5226,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5220,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5213,"src":"12818:3:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":5223,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5209,"src":"12830:5:21","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":5222,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12824:5:21","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":5221,"name":"bytes","nodeType":"ElementaryTypeName","src":"12824:5:21","typeDescriptions":{}}},"id":5224,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12824:12:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":5225,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12837:6:21","memberName":"length","nodeType":"MemberAccess","src":"12824:19:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12818:25:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5229,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5227,"name":"begin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5211,"src":"12847:5:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":5228,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5213,"src":"12855:3:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12847:11:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"12818:40:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5235,"nodeType":"IfStatement","src":"12814:63:21","trueBody":{"expression":{"components":[{"hexValue":"66616c7365","id":5231,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"12868:5:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"hexValue":"30","id":5232,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12875:1:21","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":5233,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"12867:10:21","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_rational_0_by_1_$","typeString":"tuple(bool,int_const 0)"}},"functionReturnParameters":5219,"id":5234,"nodeType":"Return","src":"12860:17:21"}},{"expression":{"arguments":[{"id":5237,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5209,"src":"12926:5:21","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":5238,"name":"begin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5211,"src":"12933:5:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":5239,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5213,"src":"12940:3:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5236,"name":"_tryParseHexUintUncheckedBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5346,"src":"12894:31:21","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_uint256_$","typeString":"function (string memory,uint256,uint256) pure returns (bool,uint256)"}},"id":5240,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12894:50:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$","typeString":"tuple(bool,uint256)"}},"functionReturnParameters":5219,"id":5241,"nodeType":"Return","src":"12887:57:21"}]},"documentation":{"id":5207,"nodeType":"StructuredDocumentation","src":"12402:241:21","text":" @dev Variant of {parseHexUint-string-uint256-uint256} that returns false if the parsing fails because of an\n invalid character.\n NOTE: This function will revert if the result does not fit in a `uint256`."},"id":5243,"implemented":true,"kind":"function","modifiers":[],"name":"tryParseHexUint","nameLocation":"12657:15:21","nodeType":"FunctionDefinition","parameters":{"id":5214,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5209,"mutability":"mutable","name":"input","nameLocation":"12696:5:21","nodeType":"VariableDeclaration","scope":5243,"src":"12682:19:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":5208,"name":"string","nodeType":"ElementaryTypeName","src":"12682:6:21","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":5211,"mutability":"mutable","name":"begin","nameLocation":"12719:5:21","nodeType":"VariableDeclaration","scope":5243,"src":"12711:13:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5210,"name":"uint256","nodeType":"ElementaryTypeName","src":"12711:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5213,"mutability":"mutable","name":"end","nameLocation":"12742:3:21","nodeType":"VariableDeclaration","scope":5243,"src":"12734:11:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5212,"name":"uint256","nodeType":"ElementaryTypeName","src":"12734:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12672:79:21"},"returnParameters":{"id":5219,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5216,"mutability":"mutable","name":"success","nameLocation":"12780:7:21","nodeType":"VariableDeclaration","scope":5243,"src":"12775:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5215,"name":"bool","nodeType":"ElementaryTypeName","src":"12775:4:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":5218,"mutability":"mutable","name":"value","nameLocation":"12797:5:21","nodeType":"VariableDeclaration","scope":5243,"src":"12789:13:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5217,"name":"uint256","nodeType":"ElementaryTypeName","src":"12789:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12774:29:21"},"scope":5814,"src":"12648:303:21","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":5345,"nodeType":"Block","src":"13360:881:21","statements":[{"assignments":[5258],"declarations":[{"constant":false,"id":5258,"mutability":"mutable","name":"buffer","nameLocation":"13383:6:21","nodeType":"VariableDeclaration","scope":5345,"src":"13370:19:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":5257,"name":"bytes","nodeType":"ElementaryTypeName","src":"13370:5:21","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":5263,"initialValue":{"arguments":[{"id":5261,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5246,"src":"13398:5:21","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":5260,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13392:5:21","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":5259,"name":"bytes","nodeType":"ElementaryTypeName","src":"13392:5:21","typeDescriptions":{}}},"id":5262,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13392:12:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"13370:34:21"},{"assignments":[5265],"declarations":[{"constant":false,"id":5265,"mutability":"mutable","name":"hasPrefix","nameLocation":"13457:9:21","nodeType":"VariableDeclaration","scope":5345,"src":"13452:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5264,"name":"bool","nodeType":"ElementaryTypeName","src":"13452:4:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":5285,"initialValue":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":5284,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5270,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5266,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5250,"src":"13470:3:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5269,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5267,"name":"begin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5248,"src":"13476:5:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":5268,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13484:1:21","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"13476:9:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13470:15:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":5271,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"13469:17:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_bytes2","typeString":"bytes2"},"id":5283,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":5275,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5258,"src":"13520:6:21","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":5276,"name":"begin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5248,"src":"13528:5:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5274,"name":"_unsafeReadBytesOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5801,"src":"13497:22:21","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bytes32_$","typeString":"function (bytes memory,uint256) pure returns (bytes32)"}},"id":5277,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13497:37:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":5273,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13490:6:21","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes2_$","typeString":"type(bytes2)"},"typeName":{"id":5272,"name":"bytes2","nodeType":"ElementaryTypeName","src":"13490:6:21","typeDescriptions":{}}},"id":5278,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13490:45:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes2","typeString":"bytes2"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"3078","id":5281,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"13546:4:21","typeDescriptions":{"typeIdentifier":"t_stringliteral_39bef1777deb3dfb14f64b9f81ced092c501fee72f90e93d03bb95ee89df9837","typeString":"literal_string \"0x\""},"value":"0x"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_39bef1777deb3dfb14f64b9f81ced092c501fee72f90e93d03bb95ee89df9837","typeString":"literal_string \"0x\""}],"id":5280,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13539:6:21","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes2_$","typeString":"type(bytes2)"},"typeName":{"id":5279,"name":"bytes2","nodeType":"ElementaryTypeName","src":"13539:6:21","typeDescriptions":{}}},"id":5282,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13539:12:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes2","typeString":"bytes2"}},"src":"13490:61:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"13469:82:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"13452:99:21"},{"assignments":[5287],"declarations":[{"constant":false,"id":5287,"mutability":"mutable","name":"offset","nameLocation":"13640:6:21","nodeType":"VariableDeclaration","scope":5345,"src":"13632:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5286,"name":"uint256","nodeType":"ElementaryTypeName","src":"13632:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5293,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5292,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":5288,"name":"hasPrefix","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5265,"src":"13649:9:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5289,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13659:6:21","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":9271,"src":"13649:16:21","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$attached_to$_t_bool_$","typeString":"function (bool) pure returns (uint256)"}},"id":5290,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13649:18:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"32","id":5291,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13670:1:21","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"13649:22:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"13632:39:21"},{"assignments":[5295],"declarations":[{"constant":false,"id":5295,"mutability":"mutable","name":"result","nameLocation":"13690:6:21","nodeType":"VariableDeclaration","scope":5345,"src":"13682:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5294,"name":"uint256","nodeType":"ElementaryTypeName","src":"13682:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5297,"initialValue":{"hexValue":"30","id":5296,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13699:1:21","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"13682:18:21"},{"body":{"id":5339,"nodeType":"Block","src":"13757:447:21","statements":[{"assignments":[5311],"declarations":[{"constant":false,"id":5311,"mutability":"mutable","name":"chr","nameLocation":"13777:3:21","nodeType":"VariableDeclaration","scope":5339,"src":"13771:9:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":5310,"name":"uint8","nodeType":"ElementaryTypeName","src":"13771:5:21","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"id":5321,"initialValue":{"arguments":[{"arguments":[{"arguments":[{"id":5316,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5258,"src":"13826:6:21","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":5317,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5299,"src":"13834:1:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5315,"name":"_unsafeReadBytesOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5801,"src":"13803:22:21","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bytes32_$","typeString":"function (bytes memory,uint256) pure returns (bytes32)"}},"id":5318,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13803:33:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":5314,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13796:6:21","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes1_$","typeString":"type(bytes1)"},"typeName":{"id":5313,"name":"bytes1","nodeType":"ElementaryTypeName","src":"13796:6:21","typeDescriptions":{}}},"id":5319,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13796:41:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes1","typeString":"bytes1"}],"id":5312,"name":"_tryParseChr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5581,"src":"13783:12:21","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes1_$returns$_t_uint8_$","typeString":"function (bytes1) pure returns (uint8)"}},"id":5320,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13783:55:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"VariableDeclarationStatement","src":"13771:67:21"},{"condition":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":5324,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5322,"name":"chr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5311,"src":"13856:3:21","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"3135","id":5323,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13862:2:21","typeDescriptions":{"typeIdentifier":"t_rational_15_by_1","typeString":"int_const 15"},"value":"15"},"src":"13856:8:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5329,"nodeType":"IfStatement","src":"13852:31:21","trueBody":{"expression":{"components":[{"hexValue":"66616c7365","id":5325,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"13874:5:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"hexValue":"30","id":5326,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13881:1:21","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":5327,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"13873:10:21","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_rational_0_by_1_$","typeString":"tuple(bool,int_const 0)"}},"functionReturnParameters":5256,"id":5328,"nodeType":"Return","src":"13866:17:21"}},{"expression":{"id":5332,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5330,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5295,"src":"13897:6:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"hexValue":"3136","id":5331,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13907:2:21","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"13897:12:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5333,"nodeType":"ExpressionStatement","src":"13897:12:21"},{"id":5338,"nodeType":"UncheckedBlock","src":"13923:271:21","statements":[{"expression":{"id":5336,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5334,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5295,"src":"14166:6:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5335,"name":"chr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5311,"src":"14176:3:21","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"14166:13:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5337,"nodeType":"ExpressionStatement","src":"14166:13:21"}]}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5306,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5304,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5299,"src":"13743:1:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":5305,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5250,"src":"13747:3:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13743:7:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5340,"initializationExpression":{"assignments":[5299],"declarations":[{"constant":false,"id":5299,"mutability":"mutable","name":"i","nameLocation":"13723:1:21","nodeType":"VariableDeclaration","scope":5340,"src":"13715:9:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5298,"name":"uint256","nodeType":"ElementaryTypeName","src":"13715:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5303,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5302,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5300,"name":"begin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5248,"src":"13727:5:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":5301,"name":"offset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5287,"src":"13735:6:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13727:14:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"13715:26:21"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":5308,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"13752:3:21","subExpression":{"id":5307,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5299,"src":"13754:1:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5309,"nodeType":"ExpressionStatement","src":"13752:3:21"},"nodeType":"ForStatement","src":"13710:494:21"},{"expression":{"components":[{"hexValue":"74727565","id":5341,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"14221:4:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},{"id":5342,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5295,"src":"14227:6:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":5343,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"14220:14:21","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$","typeString":"tuple(bool,uint256)"}},"functionReturnParameters":5256,"id":5344,"nodeType":"Return","src":"14213:21:21"}]},"documentation":{"id":5244,"nodeType":"StructuredDocumentation","src":"12957:227:21","text":" @dev Implementation of {tryParseHexUint-string-uint256-uint256} that does not check bounds. Caller should make sure that\n `begin <= end <= input.length`. Other inputs would result in undefined behavior."},"id":5346,"implemented":true,"kind":"function","modifiers":[],"name":"_tryParseHexUintUncheckedBounds","nameLocation":"13198:31:21","nodeType":"FunctionDefinition","parameters":{"id":5251,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5246,"mutability":"mutable","name":"input","nameLocation":"13253:5:21","nodeType":"VariableDeclaration","scope":5346,"src":"13239:19:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":5245,"name":"string","nodeType":"ElementaryTypeName","src":"13239:6:21","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":5248,"mutability":"mutable","name":"begin","nameLocation":"13276:5:21","nodeType":"VariableDeclaration","scope":5346,"src":"13268:13:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5247,"name":"uint256","nodeType":"ElementaryTypeName","src":"13268:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5250,"mutability":"mutable","name":"end","nameLocation":"13299:3:21","nodeType":"VariableDeclaration","scope":5346,"src":"13291:11:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5249,"name":"uint256","nodeType":"ElementaryTypeName","src":"13291:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13229:79:21"},"returnParameters":{"id":5256,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5253,"mutability":"mutable","name":"success","nameLocation":"13336:7:21","nodeType":"VariableDeclaration","scope":5346,"src":"13331:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5252,"name":"bool","nodeType":"ElementaryTypeName","src":"13331:4:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":5255,"mutability":"mutable","name":"value","nameLocation":"13353:5:21","nodeType":"VariableDeclaration","scope":5346,"src":"13345:13:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5254,"name":"uint256","nodeType":"ElementaryTypeName","src":"13345:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13330:29:21"},"scope":5814,"src":"13189:1052:21","stateMutability":"pure","virtual":false,"visibility":"private"},{"body":{"id":5364,"nodeType":"Block","src":"14539:67:21","statements":[{"expression":{"arguments":[{"id":5355,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5349,"src":"14569:5:21","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"hexValue":"30","id":5356,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14576:1:21","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"expression":{"arguments":[{"id":5359,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5349,"src":"14585:5:21","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":5358,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14579:5:21","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":5357,"name":"bytes","nodeType":"ElementaryTypeName","src":"14579:5:21","typeDescriptions":{}}},"id":5360,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14579:12:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":5361,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14592:6:21","memberName":"length","nodeType":"MemberAccess","src":"14579:19:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5354,"name":"parseAddress","nodeType":"Identifier","overloadedDeclarations":[5365,5396],"referencedDeclaration":5396,"src":"14556:12:21","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_address_$","typeString":"function (string memory,uint256,uint256) pure returns (address)"}},"id":5362,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14556:43:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":5353,"id":5363,"nodeType":"Return","src":"14549:50:21"}]},"documentation":{"id":5347,"nodeType":"StructuredDocumentation","src":"14247:212:21","text":" @dev Parse a hexadecimal string (with or without \"0x\" prefix), and returns the value as an `address`.\n Requirements:\n - The string must be formatted as `(0x)?[0-9a-fA-F]{40}`"},"id":5365,"implemented":true,"kind":"function","modifiers":[],"name":"parseAddress","nameLocation":"14473:12:21","nodeType":"FunctionDefinition","parameters":{"id":5350,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5349,"mutability":"mutable","name":"input","nameLocation":"14500:5:21","nodeType":"VariableDeclaration","scope":5365,"src":"14486:19:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":5348,"name":"string","nodeType":"ElementaryTypeName","src":"14486:6:21","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"14485:21:21"},"returnParameters":{"id":5353,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5352,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5365,"src":"14530:7:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5351,"name":"address","nodeType":"ElementaryTypeName","src":"14530:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14529:9:21"},"scope":5814,"src":"14464:142:21","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":5395,"nodeType":"Block","src":"14979:165:21","statements":[{"assignments":[5378,5380],"declarations":[{"constant":false,"id":5378,"mutability":"mutable","name":"success","nameLocation":"14995:7:21","nodeType":"VariableDeclaration","scope":5395,"src":"14990:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5377,"name":"bool","nodeType":"ElementaryTypeName","src":"14990:4:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":5380,"mutability":"mutable","name":"value","nameLocation":"15012:5:21","nodeType":"VariableDeclaration","scope":5395,"src":"15004:13:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5379,"name":"address","nodeType":"ElementaryTypeName","src":"15004:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":5386,"initialValue":{"arguments":[{"id":5382,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5368,"src":"15037:5:21","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":5383,"name":"begin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5370,"src":"15044:5:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":5384,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5372,"src":"15051:3:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5381,"name":"tryParseAddress","nodeType":"Identifier","overloadedDeclarations":[5417,5521],"referencedDeclaration":5521,"src":"15021:15:21","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_address_$","typeString":"function (string memory,uint256,uint256) pure returns (bool,address)"}},"id":5385,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15021:34:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_address_$","typeString":"tuple(bool,address)"}},"nodeType":"VariableDeclarationStatement","src":"14989:66:21"},{"condition":{"id":5388,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"15069:8:21","subExpression":{"id":5387,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5378,"src":"15070:7:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5392,"nodeType":"IfStatement","src":"15065:50:21","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":5389,"name":"StringsInvalidAddressFormat","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4349,"src":"15086:27:21","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":5390,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15086:29:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":5391,"nodeType":"RevertStatement","src":"15079:36:21"}},{"expression":{"id":5393,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5380,"src":"15132:5:21","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":5376,"id":5394,"nodeType":"Return","src":"15125:12:21"}]},"documentation":{"id":5366,"nodeType":"StructuredDocumentation","src":"14612:259:21","text":" @dev Variant of {parseAddress-string} that parses a substring of `input` located between position `begin` (included) and\n `end` (excluded).\n Requirements:\n - The substring must be formatted as `(0x)?[0-9a-fA-F]{40}`"},"id":5396,"implemented":true,"kind":"function","modifiers":[],"name":"parseAddress","nameLocation":"14885:12:21","nodeType":"FunctionDefinition","parameters":{"id":5373,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5368,"mutability":"mutable","name":"input","nameLocation":"14912:5:21","nodeType":"VariableDeclaration","scope":5396,"src":"14898:19:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":5367,"name":"string","nodeType":"ElementaryTypeName","src":"14898:6:21","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":5370,"mutability":"mutable","name":"begin","nameLocation":"14927:5:21","nodeType":"VariableDeclaration","scope":5396,"src":"14919:13:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5369,"name":"uint256","nodeType":"ElementaryTypeName","src":"14919:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5372,"mutability":"mutable","name":"end","nameLocation":"14942:3:21","nodeType":"VariableDeclaration","scope":5396,"src":"14934:11:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5371,"name":"uint256","nodeType":"ElementaryTypeName","src":"14934:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14897:49:21"},"returnParameters":{"id":5376,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5375,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5396,"src":"14970:7:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5374,"name":"address","nodeType":"ElementaryTypeName","src":"14970:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14969:9:21"},"scope":5814,"src":"14876:268:21","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":5416,"nodeType":"Block","src":"15451:70:21","statements":[{"expression":{"arguments":[{"id":5407,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5399,"src":"15484:5:21","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"hexValue":"30","id":5408,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15491:1:21","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"expression":{"arguments":[{"id":5411,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5399,"src":"15500:5:21","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":5410,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15494:5:21","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":5409,"name":"bytes","nodeType":"ElementaryTypeName","src":"15494:5:21","typeDescriptions":{}}},"id":5412,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15494:12:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":5413,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15507:6:21","memberName":"length","nodeType":"MemberAccess","src":"15494:19:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5406,"name":"tryParseAddress","nodeType":"Identifier","overloadedDeclarations":[5417,5521],"referencedDeclaration":5521,"src":"15468:15:21","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_address_$","typeString":"function (string memory,uint256,uint256) pure returns (bool,address)"}},"id":5414,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15468:46:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_address_$","typeString":"tuple(bool,address)"}},"functionReturnParameters":5405,"id":5415,"nodeType":"Return","src":"15461:53:21"}]},"documentation":{"id":5397,"nodeType":"StructuredDocumentation","src":"15150:198:21","text":" @dev Variant of {parseAddress-string} that returns false if the parsing fails because the input is not a properly\n formatted address. See {parseAddress-string} requirements."},"id":5417,"implemented":true,"kind":"function","modifiers":[],"name":"tryParseAddress","nameLocation":"15362:15:21","nodeType":"FunctionDefinition","parameters":{"id":5400,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5399,"mutability":"mutable","name":"input","nameLocation":"15392:5:21","nodeType":"VariableDeclaration","scope":5417,"src":"15378:19:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":5398,"name":"string","nodeType":"ElementaryTypeName","src":"15378:6:21","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"15377:21:21"},"returnParameters":{"id":5405,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5402,"mutability":"mutable","name":"success","nameLocation":"15427:7:21","nodeType":"VariableDeclaration","scope":5417,"src":"15422:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5401,"name":"bool","nodeType":"ElementaryTypeName","src":"15422:4:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":5404,"mutability":"mutable","name":"value","nameLocation":"15444:5:21","nodeType":"VariableDeclaration","scope":5417,"src":"15436:13:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5403,"name":"address","nodeType":"ElementaryTypeName","src":"15436:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"15421:29:21"},"scope":5814,"src":"15353:168:21","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":5520,"nodeType":"Block","src":"15914:733:21","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":5441,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5437,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5431,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5424,"src":"15928:3:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":5434,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5420,"src":"15940:5:21","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":5433,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15934:5:21","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":5432,"name":"bytes","nodeType":"ElementaryTypeName","src":"15934:5:21","typeDescriptions":{}}},"id":5435,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15934:12:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":5436,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15947:6:21","memberName":"length","nodeType":"MemberAccess","src":"15934:19:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15928:25:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5440,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5438,"name":"begin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5422,"src":"15957:5:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":5439,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5424,"src":"15965:3:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15957:11:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"15928:40:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5449,"nodeType":"IfStatement","src":"15924:72:21","trueBody":{"expression":{"components":[{"hexValue":"66616c7365","id":5442,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"15978:5:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"arguments":[{"hexValue":"30","id":5445,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15993:1:21","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":5444,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15985:7:21","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":5443,"name":"address","nodeType":"ElementaryTypeName","src":"15985:7:21","typeDescriptions":{}}},"id":5446,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15985:10:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":5447,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"15977:19:21","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_address_$","typeString":"tuple(bool,address)"}},"functionReturnParameters":5430,"id":5448,"nodeType":"Return","src":"15970:26:21"}},{"assignments":[5451],"declarations":[{"constant":false,"id":5451,"mutability":"mutable","name":"hasPrefix","nameLocation":"16012:9:21","nodeType":"VariableDeclaration","scope":5520,"src":"16007:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5450,"name":"bool","nodeType":"ElementaryTypeName","src":"16007:4:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":5474,"initialValue":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":5473,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5456,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5452,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5424,"src":"16025:3:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5455,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5453,"name":"begin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5422,"src":"16031:5:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":5454,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16039:1:21","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"16031:9:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16025:15:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":5457,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"16024:17:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_bytes2","typeString":"bytes2"},"id":5472,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"arguments":[{"id":5463,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5420,"src":"16081:5:21","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":5462,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16075:5:21","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":5461,"name":"bytes","nodeType":"ElementaryTypeName","src":"16075:5:21","typeDescriptions":{}}},"id":5464,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16075:12:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":5465,"name":"begin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5422,"src":"16089:5:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5460,"name":"_unsafeReadBytesOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5801,"src":"16052:22:21","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bytes32_$","typeString":"function (bytes memory,uint256) pure returns (bytes32)"}},"id":5466,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16052:43:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":5459,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16045:6:21","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes2_$","typeString":"type(bytes2)"},"typeName":{"id":5458,"name":"bytes2","nodeType":"ElementaryTypeName","src":"16045:6:21","typeDescriptions":{}}},"id":5467,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16045:51:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes2","typeString":"bytes2"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"3078","id":5470,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"16107:4:21","typeDescriptions":{"typeIdentifier":"t_stringliteral_39bef1777deb3dfb14f64b9f81ced092c501fee72f90e93d03bb95ee89df9837","typeString":"literal_string \"0x\""},"value":"0x"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_39bef1777deb3dfb14f64b9f81ced092c501fee72f90e93d03bb95ee89df9837","typeString":"literal_string \"0x\""}],"id":5469,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16100:6:21","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes2_$","typeString":"type(bytes2)"},"typeName":{"id":5468,"name":"bytes2","nodeType":"ElementaryTypeName","src":"16100:6:21","typeDescriptions":{}}},"id":5471,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16100:12:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes2","typeString":"bytes2"}},"src":"16045:67:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"16024:88:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"16007:105:21"},{"assignments":[5476],"declarations":[{"constant":false,"id":5476,"mutability":"mutable","name":"expectedLength","nameLocation":"16201:14:21","nodeType":"VariableDeclaration","scope":5520,"src":"16193:22:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5475,"name":"uint256","nodeType":"ElementaryTypeName","src":"16193:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5484,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5483,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3430","id":5477,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16218:2:21","typeDescriptions":{"typeIdentifier":"t_rational_40_by_1","typeString":"int_const 40"},"value":"40"},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5482,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":5478,"name":"hasPrefix","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5451,"src":"16223:9:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5479,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16233:6:21","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":9271,"src":"16223:16:21","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$attached_to$_t_bool_$","typeString":"function (bool) pure returns (uint256)"}},"id":5480,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16223:18:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"32","id":5481,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16244:1:21","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"16223:22:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16218:27:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"16193:52:21"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5489,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5487,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5485,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5424,"src":"16310:3:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":5486,"name":"begin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5422,"src":"16316:5:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16310:11:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":5488,"name":"expectedLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5476,"src":"16325:14:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16310:29:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":5518,"nodeType":"Block","src":"16590:51:21","statements":[{"expression":{"components":[{"hexValue":"66616c7365","id":5511,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"16612:5:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"arguments":[{"hexValue":"30","id":5514,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16627:1:21","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":5513,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16619:7:21","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":5512,"name":"address","nodeType":"ElementaryTypeName","src":"16619:7:21","typeDescriptions":{}}},"id":5515,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16619:10:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":5516,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"16611:19:21","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_address_$","typeString":"tuple(bool,address)"}},"functionReturnParameters":5430,"id":5517,"nodeType":"Return","src":"16604:26:21"}]},"id":5519,"nodeType":"IfStatement","src":"16306:335:21","trueBody":{"id":5510,"nodeType":"Block","src":"16341:243:21","statements":[{"assignments":[5491,5493],"declarations":[{"constant":false,"id":5491,"mutability":"mutable","name":"s","nameLocation":"16462:1:21","nodeType":"VariableDeclaration","scope":5510,"src":"16457:6:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5490,"name":"bool","nodeType":"ElementaryTypeName","src":"16457:4:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":5493,"mutability":"mutable","name":"v","nameLocation":"16473:1:21","nodeType":"VariableDeclaration","scope":5510,"src":"16465:9:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5492,"name":"uint256","nodeType":"ElementaryTypeName","src":"16465:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5499,"initialValue":{"arguments":[{"id":5495,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5420,"src":"16510:5:21","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":5496,"name":"begin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5422,"src":"16517:5:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":5497,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5424,"src":"16524:3:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5494,"name":"_tryParseHexUintUncheckedBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5346,"src":"16478:31:21","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_uint256_$","typeString":"function (string memory,uint256,uint256) pure returns (bool,uint256)"}},"id":5498,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16478:50:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$","typeString":"tuple(bool,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"16456:72:21"},{"expression":{"components":[{"id":5500,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5491,"src":"16550:1:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"arguments":[{"arguments":[{"id":5505,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5493,"src":"16569:1:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5504,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16561:7:21","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":5503,"name":"uint160","nodeType":"ElementaryTypeName","src":"16561:7:21","typeDescriptions":{}}},"id":5506,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16561:10:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint160","typeString":"uint160"}],"id":5502,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16553:7:21","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":5501,"name":"address","nodeType":"ElementaryTypeName","src":"16553:7:21","typeDescriptions":{}}},"id":5507,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16553:19:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":5508,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"16549:24:21","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_address_$","typeString":"tuple(bool,address)"}},"functionReturnParameters":5430,"id":5509,"nodeType":"Return","src":"16542:31:21"}]}}]},"documentation":{"id":5418,"nodeType":"StructuredDocumentation","src":"15527:226:21","text":" @dev Variant of {parseAddress-string-uint256-uint256} that returns false if the parsing fails because input is not a properly\n formatted address. See {parseAddress-string-uint256-uint256} requirements."},"id":5521,"implemented":true,"kind":"function","modifiers":[],"name":"tryParseAddress","nameLocation":"15767:15:21","nodeType":"FunctionDefinition","parameters":{"id":5425,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5420,"mutability":"mutable","name":"input","nameLocation":"15806:5:21","nodeType":"VariableDeclaration","scope":5521,"src":"15792:19:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":5419,"name":"string","nodeType":"ElementaryTypeName","src":"15792:6:21","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":5422,"mutability":"mutable","name":"begin","nameLocation":"15829:5:21","nodeType":"VariableDeclaration","scope":5521,"src":"15821:13:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5421,"name":"uint256","nodeType":"ElementaryTypeName","src":"15821:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5424,"mutability":"mutable","name":"end","nameLocation":"15852:3:21","nodeType":"VariableDeclaration","scope":5521,"src":"15844:11:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5423,"name":"uint256","nodeType":"ElementaryTypeName","src":"15844:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15782:79:21"},"returnParameters":{"id":5430,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5427,"mutability":"mutable","name":"success","nameLocation":"15890:7:21","nodeType":"VariableDeclaration","scope":5521,"src":"15885:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5426,"name":"bool","nodeType":"ElementaryTypeName","src":"15885:4:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":5429,"mutability":"mutable","name":"value","nameLocation":"15907:5:21","nodeType":"VariableDeclaration","scope":5521,"src":"15899:13:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5428,"name":"address","nodeType":"ElementaryTypeName","src":"15899:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"15884:29:21"},"scope":5814,"src":"15758:889:21","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":5580,"nodeType":"Block","src":"16716:461:21","statements":[{"assignments":[5529],"declarations":[{"constant":false,"id":5529,"mutability":"mutable","name":"value","nameLocation":"16732:5:21","nodeType":"VariableDeclaration","scope":5580,"src":"16726:11:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":5528,"name":"uint8","nodeType":"ElementaryTypeName","src":"16726:5:21","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"id":5534,"initialValue":{"arguments":[{"id":5532,"name":"chr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5523,"src":"16746:3:21","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes1","typeString":"bytes1"}],"id":5531,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16740:5:21","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":5530,"name":"uint8","nodeType":"ElementaryTypeName","src":"16740:5:21","typeDescriptions":{}}},"id":5533,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16740:10:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"VariableDeclarationStatement","src":"16726:24:21"},{"id":5577,"nodeType":"UncheckedBlock","src":"16910:238:21","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":5541,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":5537,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5535,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5529,"src":"16938:5:21","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"3437","id":5536,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16946:2:21","typeDescriptions":{"typeIdentifier":"t_rational_47_by_1","typeString":"int_const 47"},"value":"47"},"src":"16938:10:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":5540,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5538,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5529,"src":"16952:5:21","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"3538","id":5539,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16960:2:21","typeDescriptions":{"typeIdentifier":"t_rational_58_by_1","typeString":"int_const 58"},"value":"58"},"src":"16952:10:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"16938:24:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":5552,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":5548,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5546,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5529,"src":"16998:5:21","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"3936","id":5547,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17006:2:21","typeDescriptions":{"typeIdentifier":"t_rational_96_by_1","typeString":"int_const 96"},"value":"96"},"src":"16998:10:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":5551,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5549,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5529,"src":"17012:5:21","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"313033","id":5550,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17020:3:21","typeDescriptions":{"typeIdentifier":"t_rational_103_by_1","typeString":"int_const 103"},"value":"103"},"src":"17012:11:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"16998:25:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":5563,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":5559,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5557,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5529,"src":"17059:5:21","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"3634","id":5558,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17067:2:21","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"17059:10:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":5562,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5560,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5529,"src":"17073:5:21","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"3731","id":5561,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17081:2:21","typeDescriptions":{"typeIdentifier":"t_rational_71_by_1","typeString":"int_const 71"},"value":"71"},"src":"17073:10:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"17059:24:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"expression":{"expression":{"arguments":[{"id":5570,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"17127:5:21","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":5569,"name":"uint8","nodeType":"ElementaryTypeName","src":"17127:5:21","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"}],"id":5568,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967269,"src":"17122:4:21","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":5571,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17122:11:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint8","typeString":"type(uint8)"}},"id":5572,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"17134:3:21","memberName":"max","nodeType":"MemberAccess","src":"17122:15:21","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"functionReturnParameters":5527,"id":5573,"nodeType":"Return","src":"17115:22:21"},"id":5574,"nodeType":"IfStatement","src":"17055:82:21","trueBody":{"expression":{"id":5566,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5564,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5529,"src":"17085:5:21","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"hexValue":"3535","id":5565,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17094:2:21","typeDescriptions":{"typeIdentifier":"t_rational_55_by_1","typeString":"int_const 55"},"value":"55"},"src":"17085:11:21","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":5567,"nodeType":"ExpressionStatement","src":"17085:11:21"}},"id":5575,"nodeType":"IfStatement","src":"16994:143:21","trueBody":{"expression":{"id":5555,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5553,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5529,"src":"17025:5:21","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"hexValue":"3837","id":5554,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17034:2:21","typeDescriptions":{"typeIdentifier":"t_rational_87_by_1","typeString":"int_const 87"},"value":"87"},"src":"17025:11:21","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":5556,"nodeType":"ExpressionStatement","src":"17025:11:21"}},"id":5576,"nodeType":"IfStatement","src":"16934:203:21","trueBody":{"expression":{"id":5544,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5542,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5529,"src":"16964:5:21","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"hexValue":"3438","id":5543,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16973:2:21","typeDescriptions":{"typeIdentifier":"t_rational_48_by_1","typeString":"int_const 48"},"value":"48"},"src":"16964:11:21","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":5545,"nodeType":"ExpressionStatement","src":"16964:11:21"}}]},{"expression":{"id":5578,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5529,"src":"17165:5:21","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"functionReturnParameters":5527,"id":5579,"nodeType":"Return","src":"17158:12:21"}]},"id":5581,"implemented":true,"kind":"function","modifiers":[],"name":"_tryParseChr","nameLocation":"16662:12:21","nodeType":"FunctionDefinition","parameters":{"id":5524,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5523,"mutability":"mutable","name":"chr","nameLocation":"16682:3:21","nodeType":"VariableDeclaration","scope":5581,"src":"16675:10:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"},"typeName":{"id":5522,"name":"bytes1","nodeType":"ElementaryTypeName","src":"16675:6:21","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"visibility":"internal"}],"src":"16674:12:21"},"returnParameters":{"id":5527,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5526,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5581,"src":"16709:5:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":5525,"name":"uint8","nodeType":"ElementaryTypeName","src":"16709:5:21","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"16708:7:21"},"scope":5814,"src":"16653:524:21","stateMutability":"pure","virtual":false,"visibility":"private"},{"body":{"id":5788,"nodeType":"Block","src":"17984:2333:21","statements":[{"assignments":[5590],"declarations":[{"constant":false,"id":5590,"mutability":"mutable","name":"buffer","nameLocation":"18007:6:21","nodeType":"VariableDeclaration","scope":5788,"src":"17994:19:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":5589,"name":"bytes","nodeType":"ElementaryTypeName","src":"17994:5:21","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":5595,"initialValue":{"arguments":[{"id":5593,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5584,"src":"18022:5:21","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":5592,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"18016:5:21","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":5591,"name":"bytes","nodeType":"ElementaryTypeName","src":"18016:5:21","typeDescriptions":{}}},"id":5594,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18016:12:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"17994:34:21"},{"assignments":[5597],"declarations":[{"constant":false,"id":5597,"mutability":"mutable","name":"output","nameLocation":"18318:6:21","nodeType":"VariableDeclaration","scope":5788,"src":"18305:19:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":5596,"name":"bytes","nodeType":"ElementaryTypeName","src":"18305:5:21","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":5598,"nodeType":"VariableDeclarationStatement","src":"18305:19:21"},{"AST":{"nativeSrc":"18359:45:21","nodeType":"YulBlock","src":"18359:45:21","statements":[{"nativeSrc":"18373:21:21","nodeType":"YulAssignment","src":"18373:21:21","value":{"arguments":[{"kind":"number","nativeSrc":"18389:4:21","nodeType":"YulLiteral","src":"18389:4:21","type":"","value":"0x40"}],"functionName":{"name":"mload","nativeSrc":"18383:5:21","nodeType":"YulIdentifier","src":"18383:5:21"},"nativeSrc":"18383:11:21","nodeType":"YulFunctionCall","src":"18383:11:21"},"variableNames":[{"name":"output","nativeSrc":"18373:6:21","nodeType":"YulIdentifier","src":"18373:6:21"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":5597,"isOffset":false,"isSlot":false,"src":"18373:6:21","valueSize":1}],"flags":["memory-safe"],"id":5599,"nodeType":"InlineAssembly","src":"18334:70:21"},{"assignments":[5601],"declarations":[{"constant":false,"id":5601,"mutability":"mutable","name":"outputLength","nameLocation":"18421:12:21","nodeType":"VariableDeclaration","scope":5788,"src":"18413:20:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5600,"name":"uint256","nodeType":"ElementaryTypeName","src":"18413:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5603,"initialValue":{"hexValue":"30","id":5602,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18436:1:21","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"18413:24:21"},{"body":{"id":5780,"nodeType":"Block","src":"18492:1584:21","statements":[{"assignments":[5616],"declarations":[{"constant":false,"id":5616,"mutability":"mutable","name":"char","nameLocation":"18512:4:21","nodeType":"VariableDeclaration","scope":5780,"src":"18506:10:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":5615,"name":"uint8","nodeType":"ElementaryTypeName","src":"18506:5:21","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"id":5627,"initialValue":{"arguments":[{"arguments":[{"arguments":[{"id":5622,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5590,"src":"18555:6:21","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":5623,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5605,"src":"18563:1:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5621,"name":"_unsafeReadBytesOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5801,"src":"18532:22:21","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bytes32_$","typeString":"function (bytes memory,uint256) pure returns (bytes32)"}},"id":5624,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18532:33:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":5620,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"18525:6:21","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes1_$","typeString":"type(bytes1)"},"typeName":{"id":5619,"name":"bytes1","nodeType":"ElementaryTypeName","src":"18525:6:21","typeDescriptions":{}}},"id":5625,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18525:41:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes1","typeString":"bytes1"}],"id":5618,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"18519:5:21","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":5617,"name":"uint8","nodeType":"ElementaryTypeName","src":"18519:5:21","typeDescriptions":{}}},"id":5626,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18519:48:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"VariableDeclarationStatement","src":"18506:61:21"},{"condition":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5636,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5633,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5628,"name":"SPECIAL_CHARS_LOOKUP","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4336,"src":"18587:20:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5631,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":5629,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18611:1:21","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"id":5630,"name":"char","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5616,"src":"18616:4:21","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"18611:9:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":5632,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18610:11:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18587:34:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":5634,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18586:36:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":5635,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18626:1:21","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"18586:41:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":5637,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18585:43:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":5778,"nodeType":"Block","src":"19972:94:21","statements":[{"expression":{"arguments":[{"id":5769,"name":"output","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5597,"src":"20014:6:21","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":5771,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"20022:14:21","subExpression":{"id":5770,"name":"outputLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5601,"src":"20022:12:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":5774,"name":"char","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5616,"src":"20045:4:21","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":5773,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"20038:6:21","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes1_$","typeString":"type(bytes1)"},"typeName":{"id":5772,"name":"bytes1","nodeType":"ElementaryTypeName","src":"20038:6:21","typeDescriptions":{}}},"id":5775,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20038:12:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes1","typeString":"bytes1"}],"id":5768,"name":"_unsafeWriteBytesOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5813,"src":"19990:23:21","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_bytes1_$returns$__$","typeString":"function (bytes memory,uint256,bytes1) pure"}},"id":5776,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19990:61:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5777,"nodeType":"ExpressionStatement","src":"19990:61:21"}]},"id":5779,"nodeType":"IfStatement","src":"18581:1485:21","trueBody":{"id":5767,"nodeType":"Block","src":"18630:1336:21","statements":[{"expression":{"arguments":[{"id":5639,"name":"output","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5597,"src":"18672:6:21","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":5641,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"18680:14:21","subExpression":{"id":5640,"name":"outputLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5601,"src":"18680:12:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"5c","id":5642,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"18696:4:21","typeDescriptions":{"typeIdentifier":"t_stringliteral_731553fa98541ade8b78284229adfe09a819380dee9244baac20dd1e0aa24095","typeString":"literal_string \"\\\""},"value":"\\"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_stringliteral_731553fa98541ade8b78284229adfe09a819380dee9244baac20dd1e0aa24095","typeString":"literal_string \"\\\""}],"id":5638,"name":"_unsafeWriteBytesOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5813,"src":"18648:23:21","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_bytes1_$returns$__$","typeString":"function (bytes memory,uint256,bytes1) pure"}},"id":5643,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18648:53:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5644,"nodeType":"ExpressionStatement","src":"18648:53:21"},{"condition":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":5647,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5645,"name":"char","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5616,"src":"18723:4:21","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30783038","id":5646,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18731:4:21","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"0x08"},"src":"18723:12:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":5657,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5655,"name":"char","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5616,"src":"18816:4:21","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30783039","id":5656,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18824:4:21","typeDescriptions":{"typeIdentifier":"t_rational_9_by_1","typeString":"int_const 9"},"value":"0x09"},"src":"18816:12:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":5667,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5665,"name":"char","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5616,"src":"18909:4:21","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30783061","id":5666,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18917:4:21","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"0x0a"},"src":"18909:12:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":5677,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5675,"name":"char","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5616,"src":"19002:4:21","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30783063","id":5676,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19010:4:21","typeDescriptions":{"typeIdentifier":"t_rational_12_by_1","typeString":"int_const 12"},"value":"0x0c"},"src":"19002:12:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":5687,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5685,"name":"char","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5616,"src":"19095:4:21","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30783064","id":5686,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19103:4:21","typeDescriptions":{"typeIdentifier":"t_rational_13_by_1","typeString":"int_const 13"},"value":"0x0d"},"src":"19095:12:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":5697,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5695,"name":"char","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5616,"src":"19188:4:21","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30783563","id":5696,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19196:4:21","typeDescriptions":{"typeIdentifier":"t_rational_92_by_1","typeString":"int_const 92"},"value":"0x5c"},"src":"19188:12:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":5707,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5705,"name":"char","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5616,"src":"19282:4:21","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30783232","id":5706,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19290:4:21","typeDescriptions":{"typeIdentifier":"t_rational_34_by_1","typeString":"int_const 34"},"value":"0x22"},"src":"19282:12:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":5759,"nodeType":"Block","src":"19451:501:21","statements":[{"expression":{"arguments":[{"id":5717,"name":"output","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5597,"src":"19571:6:21","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":5719,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"19579:14:21","subExpression":{"id":5718,"name":"outputLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5601,"src":"19579:12:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"75","id":5720,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"19595:3:21","typeDescriptions":{"typeIdentifier":"t_stringliteral_32cefdcd8e794145c9af8dd1f4b1fbd92d6e547ae855553080fc8bd19c4883a0","typeString":"literal_string \"u\""},"value":"u"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_stringliteral_32cefdcd8e794145c9af8dd1f4b1fbd92d6e547ae855553080fc8bd19c4883a0","typeString":"literal_string \"u\""}],"id":5716,"name":"_unsafeWriteBytesOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5813,"src":"19547:23:21","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_bytes1_$returns$__$","typeString":"function (bytes memory,uint256,bytes1) pure"}},"id":5721,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19547:52:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5722,"nodeType":"ExpressionStatement","src":"19547:52:21"},{"expression":{"arguments":[{"id":5724,"name":"output","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5597,"src":"19645:6:21","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":5726,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"19653:14:21","subExpression":{"id":5725,"name":"outputLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5601,"src":"19653:12:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"30","id":5727,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"19669:3:21","typeDescriptions":{"typeIdentifier":"t_stringliteral_044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d","typeString":"literal_string \"0\""},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_stringliteral_044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d","typeString":"literal_string \"0\""}],"id":5723,"name":"_unsafeWriteBytesOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5813,"src":"19621:23:21","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_bytes1_$returns$__$","typeString":"function (bytes memory,uint256,bytes1) pure"}},"id":5728,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19621:52:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5729,"nodeType":"ExpressionStatement","src":"19621:52:21"},{"expression":{"arguments":[{"id":5731,"name":"output","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5597,"src":"19719:6:21","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":5733,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"19727:14:21","subExpression":{"id":5732,"name":"outputLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5601,"src":"19727:12:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"30","id":5734,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"19743:3:21","typeDescriptions":{"typeIdentifier":"t_stringliteral_044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d","typeString":"literal_string \"0\""},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_stringliteral_044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d","typeString":"literal_string \"0\""}],"id":5730,"name":"_unsafeWriteBytesOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5813,"src":"19695:23:21","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_bytes1_$returns$__$","typeString":"function (bytes memory,uint256,bytes1) pure"}},"id":5735,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19695:52:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5736,"nodeType":"ExpressionStatement","src":"19695:52:21"},{"expression":{"arguments":[{"id":5738,"name":"output","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5597,"src":"19793:6:21","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":5740,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"19801:14:21","subExpression":{"id":5739,"name":"outputLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5601,"src":"19801:12:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":5741,"name":"HEX_DIGITS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4320,"src":"19817:10:21","typeDescriptions":{"typeIdentifier":"t_bytes16","typeString":"bytes16"}},"id":5745,"indexExpression":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":5744,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5742,"name":"char","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5616,"src":"19828:4:21","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"34","id":5743,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19836:1:21","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"19828:9:21","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"19817:21:21","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes1","typeString":"bytes1"}],"id":5737,"name":"_unsafeWriteBytesOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5813,"src":"19769:23:21","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_bytes1_$returns$__$","typeString":"function (bytes memory,uint256,bytes1) pure"}},"id":5746,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19769:70:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5747,"nodeType":"ExpressionStatement","src":"19769:70:21"},{"expression":{"arguments":[{"id":5749,"name":"output","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5597,"src":"19885:6:21","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":5751,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"19893:14:21","subExpression":{"id":5750,"name":"outputLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5601,"src":"19893:12:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":5752,"name":"HEX_DIGITS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4320,"src":"19909:10:21","typeDescriptions":{"typeIdentifier":"t_bytes16","typeString":"bytes16"}},"id":5756,"indexExpression":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":5755,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5753,"name":"char","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5616,"src":"19920:4:21","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"30783066","id":5754,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19927:4:21","typeDescriptions":{"typeIdentifier":"t_rational_15_by_1","typeString":"int_const 15"},"value":"0x0f"},"src":"19920:11:21","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"19909:23:21","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes1","typeString":"bytes1"}],"id":5748,"name":"_unsafeWriteBytesOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5813,"src":"19861:23:21","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_bytes1_$returns$__$","typeString":"function (bytes memory,uint256,bytes1) pure"}},"id":5757,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19861:72:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5758,"nodeType":"ExpressionStatement","src":"19861:72:21"}]},"id":5760,"nodeType":"IfStatement","src":"19278:674:21","trueBody":{"id":5715,"nodeType":"Block","src":"19296:149:21","statements":[{"expression":{"arguments":[{"id":5709,"name":"output","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5597,"src":"19398:6:21","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":5711,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"19406:14:21","subExpression":{"id":5710,"name":"outputLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5601,"src":"19406:12:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"22","id":5712,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"19422:3:21","typeDescriptions":{"typeIdentifier":"t_stringliteral_6e9f33448a4153023cdaf3eb759f1afdc24aba433a3e18b683f8c04a6eaa69f0","typeString":"literal_string \"\"\""},"value":"\""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_stringliteral_6e9f33448a4153023cdaf3eb759f1afdc24aba433a3e18b683f8c04a6eaa69f0","typeString":"literal_string \"\"\""}],"id":5708,"name":"_unsafeWriteBytesOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5813,"src":"19374:23:21","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_bytes1_$returns$__$","typeString":"function (bytes memory,uint256,bytes1) pure"}},"id":5713,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19374:52:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5714,"nodeType":"ExpressionStatement","src":"19374:52:21"}]}},"id":5761,"nodeType":"IfStatement","src":"19184:768:21","trueBody":{"expression":{"arguments":[{"id":5699,"name":"output","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5597,"src":"19226:6:21","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":5701,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"19234:14:21","subExpression":{"id":5700,"name":"outputLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5601,"src":"19234:12:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"5c","id":5702,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"19250:4:21","typeDescriptions":{"typeIdentifier":"t_stringliteral_731553fa98541ade8b78284229adfe09a819380dee9244baac20dd1e0aa24095","typeString":"literal_string \"\\\""},"value":"\\"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_stringliteral_731553fa98541ade8b78284229adfe09a819380dee9244baac20dd1e0aa24095","typeString":"literal_string \"\\\""}],"id":5698,"name":"_unsafeWriteBytesOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5813,"src":"19202:23:21","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_bytes1_$returns$__$","typeString":"function (bytes memory,uint256,bytes1) pure"}},"id":5703,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19202:53:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5704,"nodeType":"ExpressionStatement","src":"19202:53:21"}},"id":5762,"nodeType":"IfStatement","src":"19091:861:21","trueBody":{"expression":{"arguments":[{"id":5689,"name":"output","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5597,"src":"19133:6:21","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":5691,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"19141:14:21","subExpression":{"id":5690,"name":"outputLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5601,"src":"19141:12:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"72","id":5692,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"19157:3:21","typeDescriptions":{"typeIdentifier":"t_stringliteral_414f72a4d550cad29f17d9d99a4af64b3776ec5538cd440cef0f03fef2e9e010","typeString":"literal_string \"r\""},"value":"r"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_stringliteral_414f72a4d550cad29f17d9d99a4af64b3776ec5538cd440cef0f03fef2e9e010","typeString":"literal_string \"r\""}],"id":5688,"name":"_unsafeWriteBytesOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5813,"src":"19109:23:21","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_bytes1_$returns$__$","typeString":"function (bytes memory,uint256,bytes1) pure"}},"id":5693,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19109:52:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5694,"nodeType":"ExpressionStatement","src":"19109:52:21"}},"id":5763,"nodeType":"IfStatement","src":"18998:954:21","trueBody":{"expression":{"arguments":[{"id":5679,"name":"output","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5597,"src":"19040:6:21","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":5681,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"19048:14:21","subExpression":{"id":5680,"name":"outputLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5601,"src":"19048:12:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"66","id":5682,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"19064:3:21","typeDescriptions":{"typeIdentifier":"t_stringliteral_d1e8aeb79500496ef3dc2e57ba746a8315d048b7a664a2bf948db4fa91960483","typeString":"literal_string \"f\""},"value":"f"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_stringliteral_d1e8aeb79500496ef3dc2e57ba746a8315d048b7a664a2bf948db4fa91960483","typeString":"literal_string \"f\""}],"id":5678,"name":"_unsafeWriteBytesOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5813,"src":"19016:23:21","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_bytes1_$returns$__$","typeString":"function (bytes memory,uint256,bytes1) pure"}},"id":5683,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19016:52:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5684,"nodeType":"ExpressionStatement","src":"19016:52:21"}},"id":5764,"nodeType":"IfStatement","src":"18905:1047:21","trueBody":{"expression":{"arguments":[{"id":5669,"name":"output","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5597,"src":"18947:6:21","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":5671,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"18955:14:21","subExpression":{"id":5670,"name":"outputLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5601,"src":"18955:12:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"6e","id":5672,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"18971:3:21","typeDescriptions":{"typeIdentifier":"t_stringliteral_4b4ecedb4964a40fe416b16c7bd8b46092040ec42ef0aa69e59f09872f105cf3","typeString":"literal_string \"n\""},"value":"n"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_stringliteral_4b4ecedb4964a40fe416b16c7bd8b46092040ec42ef0aa69e59f09872f105cf3","typeString":"literal_string \"n\""}],"id":5668,"name":"_unsafeWriteBytesOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5813,"src":"18923:23:21","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_bytes1_$returns$__$","typeString":"function (bytes memory,uint256,bytes1) pure"}},"id":5673,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18923:52:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5674,"nodeType":"ExpressionStatement","src":"18923:52:21"}},"id":5765,"nodeType":"IfStatement","src":"18812:1140:21","trueBody":{"expression":{"arguments":[{"id":5659,"name":"output","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5597,"src":"18854:6:21","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":5661,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"18862:14:21","subExpression":{"id":5660,"name":"outputLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5601,"src":"18862:12:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"74","id":5662,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"18878:3:21","typeDescriptions":{"typeIdentifier":"t_stringliteral_cac1bb71f0a97c8ac94ca9546b43178a9ad254c7b757ac07433aa6df35cd8089","typeString":"literal_string \"t\""},"value":"t"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_stringliteral_cac1bb71f0a97c8ac94ca9546b43178a9ad254c7b757ac07433aa6df35cd8089","typeString":"literal_string \"t\""}],"id":5658,"name":"_unsafeWriteBytesOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5813,"src":"18830:23:21","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_bytes1_$returns$__$","typeString":"function (bytes memory,uint256,bytes1) pure"}},"id":5663,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18830:52:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5664,"nodeType":"ExpressionStatement","src":"18830:52:21"}},"id":5766,"nodeType":"IfStatement","src":"18719:1233:21","trueBody":{"expression":{"arguments":[{"id":5649,"name":"output","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5597,"src":"18761:6:21","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":5651,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"18769:14:21","subExpression":{"id":5650,"name":"outputLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5601,"src":"18769:12:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"62","id":5652,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"18785:3:21","typeDescriptions":{"typeIdentifier":"t_stringliteral_b5553de315e0edf504d9150af82dafa5c4667fa618ed0a6f19c69b41166c5510","typeString":"literal_string \"b\""},"value":"b"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_stringliteral_b5553de315e0edf504d9150af82dafa5c4667fa618ed0a6f19c69b41166c5510","typeString":"literal_string \"b\""}],"id":5648,"name":"_unsafeWriteBytesOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5813,"src":"18737:23:21","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_bytes1_$returns$__$","typeString":"function (bytes memory,uint256,bytes1) pure"}},"id":5653,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18737:52:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5654,"nodeType":"ExpressionStatement","src":"18737:52:21"}}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5611,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5608,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5605,"src":"18468:1:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":5609,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5590,"src":"18472:6:21","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":5610,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18479:6:21","memberName":"length","nodeType":"MemberAccess","src":"18472:13:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18468:17:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5781,"initializationExpression":{"assignments":[5605],"declarations":[{"constant":false,"id":5605,"mutability":"mutable","name":"i","nameLocation":"18461:1:21","nodeType":"VariableDeclaration","scope":5781,"src":"18453:9:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5604,"name":"uint256","nodeType":"ElementaryTypeName","src":"18453:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5607,"initialValue":{"hexValue":"30","id":5606,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18465:1:21","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"18453:13:21"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":5613,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"18487:3:21","subExpression":{"id":5612,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5605,"src":"18489:1:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5614,"nodeType":"ExpressionStatement","src":"18487:3:21"},"nodeType":"ForStatement","src":"18448:1628:21"},{"AST":{"nativeSrc":"20164:115:21","nodeType":"YulBlock","src":"20164:115:21","statements":[{"expression":{"arguments":[{"name":"output","nativeSrc":"20185:6:21","nodeType":"YulIdentifier","src":"20185:6:21"},{"name":"outputLength","nativeSrc":"20193:12:21","nodeType":"YulIdentifier","src":"20193:12:21"}],"functionName":{"name":"mstore","nativeSrc":"20178:6:21","nodeType":"YulIdentifier","src":"20178:6:21"},"nativeSrc":"20178:28:21","nodeType":"YulFunctionCall","src":"20178:28:21"},"nativeSrc":"20178:28:21","nodeType":"YulExpressionStatement","src":"20178:28:21"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"20226:4:21","nodeType":"YulLiteral","src":"20226:4:21","type":"","value":"0x40"},{"arguments":[{"name":"output","nativeSrc":"20236:6:21","nodeType":"YulIdentifier","src":"20236:6:21"},{"arguments":[{"name":"outputLength","nativeSrc":"20248:12:21","nodeType":"YulIdentifier","src":"20248:12:21"},{"kind":"number","nativeSrc":"20262:4:21","nodeType":"YulLiteral","src":"20262:4:21","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"20244:3:21","nodeType":"YulIdentifier","src":"20244:3:21"},"nativeSrc":"20244:23:21","nodeType":"YulFunctionCall","src":"20244:23:21"}],"functionName":{"name":"add","nativeSrc":"20232:3:21","nodeType":"YulIdentifier","src":"20232:3:21"},"nativeSrc":"20232:36:21","nodeType":"YulFunctionCall","src":"20232:36:21"}],"functionName":{"name":"mstore","nativeSrc":"20219:6:21","nodeType":"YulIdentifier","src":"20219:6:21"},"nativeSrc":"20219:50:21","nodeType":"YulFunctionCall","src":"20219:50:21"},"nativeSrc":"20219:50:21","nodeType":"YulExpressionStatement","src":"20219:50:21"}]},"evmVersion":"cancun","externalReferences":[{"declaration":5597,"isOffset":false,"isSlot":false,"src":"20185:6:21","valueSize":1},{"declaration":5597,"isOffset":false,"isSlot":false,"src":"20236:6:21","valueSize":1},{"declaration":5601,"isOffset":false,"isSlot":false,"src":"20193:12:21","valueSize":1},{"declaration":5601,"isOffset":false,"isSlot":false,"src":"20248:12:21","valueSize":1}],"flags":["memory-safe"],"id":5782,"nodeType":"InlineAssembly","src":"20139:140:21"},{"expression":{"arguments":[{"id":5785,"name":"output","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5597,"src":"20303:6:21","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":5784,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"20296:6:21","typeDescriptions":{"typeIdentifier":"t_type$_t_string_storage_ptr_$","typeString":"type(string storage pointer)"},"typeName":{"id":5783,"name":"string","nodeType":"ElementaryTypeName","src":"20296:6:21","typeDescriptions":{}}},"id":5786,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20296:14:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"functionReturnParameters":5588,"id":5787,"nodeType":"Return","src":"20289:21:21"}]},"documentation":{"id":5582,"nodeType":"StructuredDocumentation","src":"17183:717:21","text":" @dev Escape special characters in JSON strings. This can be useful to prevent JSON injection in NFT metadata.\n WARNING: This function should only be used in double quoted JSON strings. Single quotes are not escaped.\n NOTE: This function escapes backslashes (including those in \\uXXXX sequences) and the characters in ranges\n defined in section 2.5 of RFC-4627 (U+0000 to U+001F, U+0022 and U+005C). All control characters in U+0000\n to U+001F are escaped (\\b, \\t, \\n, \\f, \\r use short form; others use \\u00XX). ECMAScript's `JSON.parse` does\n recover escaped unicode characters that are not in this range, but other tooling may provide different results."},"id":5789,"implemented":true,"kind":"function","modifiers":[],"name":"escapeJSON","nameLocation":"17914:10:21","nodeType":"FunctionDefinition","parameters":{"id":5585,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5584,"mutability":"mutable","name":"input","nameLocation":"17939:5:21","nodeType":"VariableDeclaration","scope":5789,"src":"17925:19:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":5583,"name":"string","nodeType":"ElementaryTypeName","src":"17925:6:21","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"17924:21:21"},"returnParameters":{"id":5588,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5587,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5789,"src":"17969:13:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":5586,"name":"string","nodeType":"ElementaryTypeName","src":"17969:6:21","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"17968:15:21"},"scope":5814,"src":"17905:2412:21","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":5800,"nodeType":"Block","src":"20702:225:21","statements":[{"AST":{"nativeSrc":"20851:70:21","nodeType":"YulBlock","src":"20851:70:21","statements":[{"nativeSrc":"20865:46:21","nodeType":"YulAssignment","src":"20865:46:21","value":{"arguments":[{"arguments":[{"arguments":[{"name":"buffer","nativeSrc":"20888:6:21","nodeType":"YulIdentifier","src":"20888:6:21"},{"kind":"number","nativeSrc":"20896:4:21","nodeType":"YulLiteral","src":"20896:4:21","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"20884:3:21","nodeType":"YulIdentifier","src":"20884:3:21"},"nativeSrc":"20884:17:21","nodeType":"YulFunctionCall","src":"20884:17:21"},{"name":"offset","nativeSrc":"20903:6:21","nodeType":"YulIdentifier","src":"20903:6:21"}],"functionName":{"name":"add","nativeSrc":"20880:3:21","nodeType":"YulIdentifier","src":"20880:3:21"},"nativeSrc":"20880:30:21","nodeType":"YulFunctionCall","src":"20880:30:21"}],"functionName":{"name":"mload","nativeSrc":"20874:5:21","nodeType":"YulIdentifier","src":"20874:5:21"},"nativeSrc":"20874:37:21","nodeType":"YulFunctionCall","src":"20874:37:21"},"variableNames":[{"name":"value","nativeSrc":"20865:5:21","nodeType":"YulIdentifier","src":"20865:5:21"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":5792,"isOffset":false,"isSlot":false,"src":"20888:6:21","valueSize":1},{"declaration":5794,"isOffset":false,"isSlot":false,"src":"20903:6:21","valueSize":1},{"declaration":5797,"isOffset":false,"isSlot":false,"src":"20865:5:21","valueSize":1}],"flags":["memory-safe"],"id":5799,"nodeType":"InlineAssembly","src":"20826:95:21"}]},"documentation":{"id":5790,"nodeType":"StructuredDocumentation","src":"20323:268:21","text":" @dev Reads a bytes32 from a bytes array without bounds checking.\n NOTE: making this function internal would mean it could be used with memory unsafe offset, and marking the\n assembly block as such would prevent some optimizations."},"id":5801,"implemented":true,"kind":"function","modifiers":[],"name":"_unsafeReadBytesOffset","nameLocation":"20605:22:21","nodeType":"FunctionDefinition","parameters":{"id":5795,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5792,"mutability":"mutable","name":"buffer","nameLocation":"20641:6:21","nodeType":"VariableDeclaration","scope":5801,"src":"20628:19:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":5791,"name":"bytes","nodeType":"ElementaryTypeName","src":"20628:5:21","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":5794,"mutability":"mutable","name":"offset","nameLocation":"20657:6:21","nodeType":"VariableDeclaration","scope":5801,"src":"20649:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5793,"name":"uint256","nodeType":"ElementaryTypeName","src":"20649:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"20627:37:21"},"returnParameters":{"id":5798,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5797,"mutability":"mutable","name":"value","nameLocation":"20695:5:21","nodeType":"VariableDeclaration","scope":5801,"src":"20687:13:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5796,"name":"bytes32","nodeType":"ElementaryTypeName","src":"20687:7:21","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"20686:15:21"},"scope":5814,"src":"20596:331:21","stateMutability":"pure","virtual":false,"visibility":"private"},{"body":{"id":5812,"nodeType":"Block","src":"21300:235:21","statements":[{"AST":{"nativeSrc":"21449:80:21","nodeType":"YulBlock","src":"21449:80:21","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"buffer","nativeSrc":"21479:6:21","nodeType":"YulIdentifier","src":"21479:6:21"},{"kind":"number","nativeSrc":"21487:4:21","nodeType":"YulLiteral","src":"21487:4:21","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"21475:3:21","nodeType":"YulIdentifier","src":"21475:3:21"},"nativeSrc":"21475:17:21","nodeType":"YulFunctionCall","src":"21475:17:21"},{"name":"offset","nativeSrc":"21494:6:21","nodeType":"YulIdentifier","src":"21494:6:21"}],"functionName":{"name":"add","nativeSrc":"21471:3:21","nodeType":"YulIdentifier","src":"21471:3:21"},"nativeSrc":"21471:30:21","nodeType":"YulFunctionCall","src":"21471:30:21"},{"arguments":[{"kind":"number","nativeSrc":"21507:3:21","nodeType":"YulLiteral","src":"21507:3:21","type":"","value":"248"},{"name":"value","nativeSrc":"21512:5:21","nodeType":"YulIdentifier","src":"21512:5:21"}],"functionName":{"name":"shr","nativeSrc":"21503:3:21","nodeType":"YulIdentifier","src":"21503:3:21"},"nativeSrc":"21503:15:21","nodeType":"YulFunctionCall","src":"21503:15:21"}],"functionName":{"name":"mstore8","nativeSrc":"21463:7:21","nodeType":"YulIdentifier","src":"21463:7:21"},"nativeSrc":"21463:56:21","nodeType":"YulFunctionCall","src":"21463:56:21"},"nativeSrc":"21463:56:21","nodeType":"YulExpressionStatement","src":"21463:56:21"}]},"evmVersion":"cancun","externalReferences":[{"declaration":5804,"isOffset":false,"isSlot":false,"src":"21479:6:21","valueSize":1},{"declaration":5806,"isOffset":false,"isSlot":false,"src":"21494:6:21","valueSize":1},{"declaration":5808,"isOffset":false,"isSlot":false,"src":"21512:5:21","valueSize":1}],"flags":["memory-safe"],"id":5811,"nodeType":"InlineAssembly","src":"21424:105:21"}]},"documentation":{"id":5802,"nodeType":"StructuredDocumentation","src":"20933:265:21","text":" @dev Write a bytes1 to a bytes array without bounds checking.\n NOTE: making this function internal would mean it could be used with memory unsafe offset, and marking the\n assembly block as such would prevent some optimizations."},"id":5813,"implemented":true,"kind":"function","modifiers":[],"name":"_unsafeWriteBytesOffset","nameLocation":"21212:23:21","nodeType":"FunctionDefinition","parameters":{"id":5809,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5804,"mutability":"mutable","name":"buffer","nameLocation":"21249:6:21","nodeType":"VariableDeclaration","scope":5813,"src":"21236:19:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":5803,"name":"bytes","nodeType":"ElementaryTypeName","src":"21236:5:21","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":5806,"mutability":"mutable","name":"offset","nameLocation":"21265:6:21","nodeType":"VariableDeclaration","scope":5813,"src":"21257:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5805,"name":"uint256","nodeType":"ElementaryTypeName","src":"21257:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5808,"mutability":"mutable","name":"value","nameLocation":"21280:5:21","nodeType":"VariableDeclaration","scope":5813,"src":"21273:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"},"typeName":{"id":5807,"name":"bytes1","nodeType":"ElementaryTypeName","src":"21273:6:21","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"visibility":"internal"}],"src":"21235:51:21"},"returnParameters":{"id":5810,"nodeType":"ParameterList","parameters":[],"src":"21300:0:21"},"scope":5814,"src":"21203:332:21","stateMutability":"pure","virtual":false,"visibility":"private"}],"scope":5815,"src":"332:21205:21","usedErrors":[4343,4346,4349],"usedEvents":[]}],"src":"101:21437:21"},"id":21},"@openzeppelin/contracts/utils/introspection/ERC165.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/introspection/ERC165.sol","exportedSymbols":{"ERC165":[5838],"IERC165":[5850]},"id":5839,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":5816,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"114:24:22"},{"absolutePath":"@openzeppelin/contracts/utils/introspection/IERC165.sol","file":"./IERC165.sol","id":5818,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":5839,"sourceUnit":5851,"src":"140:38:22","symbolAliases":[{"foreign":{"id":5817,"name":"IERC165","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5850,"src":"148:7:22","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":5820,"name":"IERC165","nameLocations":["688:7:22"],"nodeType":"IdentifierPath","referencedDeclaration":5850,"src":"688:7:22"},"id":5821,"nodeType":"InheritanceSpecifier","src":"688:7:22"}],"canonicalName":"ERC165","contractDependencies":[],"contractKind":"contract","documentation":{"id":5819,"nodeType":"StructuredDocumentation","src":"180:479:22","text":" @dev Implementation of the {IERC165} interface.\n Contracts that want to implement ERC-165 should inherit from this contract and override {supportsInterface} to check\n for the additional interface id that will be supported. For example:\n ```solidity\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\n }\n ```"},"fullyImplemented":true,"id":5838,"linearizedBaseContracts":[5838,5850],"name":"ERC165","nameLocation":"678:6:22","nodeType":"ContractDefinition","nodes":[{"baseFunctions":[5849],"body":{"id":5836,"nodeType":"Block","src":"812:64:22","statements":[{"expression":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":5834,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5829,"name":"interfaceId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5824,"src":"829:11:22","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"arguments":[{"id":5831,"name":"IERC165","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5850,"src":"849:7:22","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC165_$5850_$","typeString":"type(contract IERC165)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_contract$_IERC165_$5850_$","typeString":"type(contract IERC165)"}],"id":5830,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967269,"src":"844:4:22","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":5832,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"844:13:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_contract$_IERC165_$5850","typeString":"type(contract IERC165)"}},"id":5833,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"858:11:22","memberName":"interfaceId","nodeType":"MemberAccess","src":"844:25:22","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"829:40:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":5828,"id":5835,"nodeType":"Return","src":"822:47:22"}]},"documentation":{"id":5822,"nodeType":"StructuredDocumentation","src":"702:23:22","text":"@inheritdoc IERC165"},"functionSelector":"01ffc9a7","id":5837,"implemented":true,"kind":"function","modifiers":[],"name":"supportsInterface","nameLocation":"739:17:22","nodeType":"FunctionDefinition","parameters":{"id":5825,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5824,"mutability":"mutable","name":"interfaceId","nameLocation":"764:11:22","nodeType":"VariableDeclaration","scope":5837,"src":"757:18:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":5823,"name":"bytes4","nodeType":"ElementaryTypeName","src":"757:6:22","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"756:20:22"},"returnParameters":{"id":5828,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5827,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5837,"src":"806:4:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5826,"name":"bool","nodeType":"ElementaryTypeName","src":"806:4:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"805:6:22"},"scope":5838,"src":"730:146:22","stateMutability":"view","virtual":true,"visibility":"public"}],"scope":5839,"src":"660:218:22","usedErrors":[],"usedEvents":[]}],"src":"114:765:22"},"id":22},"@openzeppelin/contracts/utils/introspection/IERC165.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/introspection/IERC165.sol","exportedSymbols":{"IERC165":[5850]},"id":5851,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":5840,"literals":["solidity",">=","0.4",".16"],"nodeType":"PragmaDirective","src":"115:25:23"},{"abstract":false,"baseContracts":[],"canonicalName":"IERC165","contractDependencies":[],"contractKind":"interface","documentation":{"id":5841,"nodeType":"StructuredDocumentation","src":"142:280:23","text":" @dev Interface of the ERC-165 standard, as defined in the\n https://eips.ethereum.org/EIPS/eip-165[ERC].\n Implementers can declare support of contract interfaces, which can then be\n queried by others ({ERC165Checker}).\n For an implementation, see {ERC165}."},"fullyImplemented":false,"id":5850,"linearizedBaseContracts":[5850],"name":"IERC165","nameLocation":"433:7:23","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":5842,"nodeType":"StructuredDocumentation","src":"447:340:23","text":" @dev Returns true if this contract implements the interface defined by\n `interfaceId`. See the corresponding\n https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]\n to learn more about how these ids are created.\n This function call must use less than 30 000 gas."},"functionSelector":"01ffc9a7","id":5849,"implemented":false,"kind":"function","modifiers":[],"name":"supportsInterface","nameLocation":"801:17:23","nodeType":"FunctionDefinition","parameters":{"id":5845,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5844,"mutability":"mutable","name":"interfaceId","nameLocation":"826:11:23","nodeType":"VariableDeclaration","scope":5849,"src":"819:18:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":5843,"name":"bytes4","nodeType":"ElementaryTypeName","src":"819:6:23","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"818:20:23"},"returnParameters":{"id":5848,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5847,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5849,"src":"862:4:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5846,"name":"bool","nodeType":"ElementaryTypeName","src":"862:4:23","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"861:6:23"},"scope":5850,"src":"792:76:23","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":5851,"src":"423:447:23","usedErrors":[],"usedEvents":[]}],"src":"115:756:23"},"id":23},"@openzeppelin/contracts/utils/math/Math.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/math/Math.sol","exportedSymbols":{"Math":[7507],"Panic":[3959],"SafeCast":[9272]},"id":7508,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":5852,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"103:24:24"},{"absolutePath":"@openzeppelin/contracts/utils/Panic.sol","file":"../Panic.sol","id":5854,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":7508,"sourceUnit":3960,"src":"129:35:24","symbolAliases":[{"foreign":{"id":5853,"name":"Panic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3959,"src":"137:5:24","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/math/SafeCast.sol","file":"./SafeCast.sol","id":5856,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":7508,"sourceUnit":9273,"src":"165:40:24","symbolAliases":[{"foreign":{"id":5855,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9272,"src":"173:8:24","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"Math","contractDependencies":[],"contractKind":"library","documentation":{"id":5857,"nodeType":"StructuredDocumentation","src":"207:73:24","text":" @dev Standard math utilities missing in the Solidity language."},"fullyImplemented":true,"id":7507,"linearizedBaseContracts":[7507],"name":"Math","nameLocation":"289:4:24","nodeType":"ContractDefinition","nodes":[{"canonicalName":"Math.Rounding","id":5862,"members":[{"id":5858,"name":"Floor","nameLocation":"324:5:24","nodeType":"EnumValue","src":"324:5:24"},{"id":5859,"name":"Ceil","nameLocation":"367:4:24","nodeType":"EnumValue","src":"367:4:24"},{"id":5860,"name":"Trunc","nameLocation":"409:5:24","nodeType":"EnumValue","src":"409:5:24"},{"id":5861,"name":"Expand","nameLocation":"439:6:24","nodeType":"EnumValue","src":"439:6:24"}],"name":"Rounding","nameLocation":"305:8:24","nodeType":"EnumDefinition","src":"300:169:24"},{"body":{"id":5875,"nodeType":"Block","src":"731:112:24","statements":[{"AST":{"nativeSrc":"766:71:24","nodeType":"YulBlock","src":"766:71:24","statements":[{"nativeSrc":"780:16:24","nodeType":"YulAssignment","src":"780:16:24","value":{"arguments":[{"name":"a","nativeSrc":"791:1:24","nodeType":"YulIdentifier","src":"791:1:24"},{"name":"b","nativeSrc":"794:1:24","nodeType":"YulIdentifier","src":"794:1:24"}],"functionName":{"name":"add","nativeSrc":"787:3:24","nodeType":"YulIdentifier","src":"787:3:24"},"nativeSrc":"787:9:24","nodeType":"YulFunctionCall","src":"787:9:24"},"variableNames":[{"name":"low","nativeSrc":"780:3:24","nodeType":"YulIdentifier","src":"780:3:24"}]},{"nativeSrc":"809:18:24","nodeType":"YulAssignment","src":"809:18:24","value":{"arguments":[{"name":"low","nativeSrc":"820:3:24","nodeType":"YulIdentifier","src":"820:3:24"},{"name":"a","nativeSrc":"825:1:24","nodeType":"YulIdentifier","src":"825:1:24"}],"functionName":{"name":"lt","nativeSrc":"817:2:24","nodeType":"YulIdentifier","src":"817:2:24"},"nativeSrc":"817:10:24","nodeType":"YulFunctionCall","src":"817:10:24"},"variableNames":[{"name":"high","nativeSrc":"809:4:24","nodeType":"YulIdentifier","src":"809:4:24"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":5865,"isOffset":false,"isSlot":false,"src":"791:1:24","valueSize":1},{"declaration":5865,"isOffset":false,"isSlot":false,"src":"825:1:24","valueSize":1},{"declaration":5867,"isOffset":false,"isSlot":false,"src":"794:1:24","valueSize":1},{"declaration":5870,"isOffset":false,"isSlot":false,"src":"809:4:24","valueSize":1},{"declaration":5872,"isOffset":false,"isSlot":false,"src":"780:3:24","valueSize":1},{"declaration":5872,"isOffset":false,"isSlot":false,"src":"820:3:24","valueSize":1}],"flags":["memory-safe"],"id":5874,"nodeType":"InlineAssembly","src":"741:96:24"}]},"documentation":{"id":5863,"nodeType":"StructuredDocumentation","src":"475:163:24","text":" @dev Return the 512-bit addition of two uint256.\n The result is stored in two 256 variables such that sum = high * 2²⁵⁶ + low."},"id":5876,"implemented":true,"kind":"function","modifiers":[],"name":"add512","nameLocation":"652:6:24","nodeType":"FunctionDefinition","parameters":{"id":5868,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5865,"mutability":"mutable","name":"a","nameLocation":"667:1:24","nodeType":"VariableDeclaration","scope":5876,"src":"659:9:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5864,"name":"uint256","nodeType":"ElementaryTypeName","src":"659:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5867,"mutability":"mutable","name":"b","nameLocation":"678:1:24","nodeType":"VariableDeclaration","scope":5876,"src":"670:9:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5866,"name":"uint256","nodeType":"ElementaryTypeName","src":"670:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"658:22:24"},"returnParameters":{"id":5873,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5870,"mutability":"mutable","name":"high","nameLocation":"712:4:24","nodeType":"VariableDeclaration","scope":5876,"src":"704:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5869,"name":"uint256","nodeType":"ElementaryTypeName","src":"704:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5872,"mutability":"mutable","name":"low","nameLocation":"726:3:24","nodeType":"VariableDeclaration","scope":5876,"src":"718:11:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5871,"name":"uint256","nodeType":"ElementaryTypeName","src":"718:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"703:27:24"},"scope":7507,"src":"643:200:24","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":5889,"nodeType":"Block","src":"1115:462:24","statements":[{"AST":{"nativeSrc":"1437:134:24","nodeType":"YulBlock","src":"1437:134:24","statements":[{"nativeSrc":"1451:30:24","nodeType":"YulVariableDeclaration","src":"1451:30:24","value":{"arguments":[{"name":"a","nativeSrc":"1468:1:24","nodeType":"YulIdentifier","src":"1468:1:24"},{"name":"b","nativeSrc":"1471:1:24","nodeType":"YulIdentifier","src":"1471:1:24"},{"arguments":[{"kind":"number","nativeSrc":"1478:1:24","nodeType":"YulLiteral","src":"1478:1:24","type":"","value":"0"}],"functionName":{"name":"not","nativeSrc":"1474:3:24","nodeType":"YulIdentifier","src":"1474:3:24"},"nativeSrc":"1474:6:24","nodeType":"YulFunctionCall","src":"1474:6:24"}],"functionName":{"name":"mulmod","nativeSrc":"1461:6:24","nodeType":"YulIdentifier","src":"1461:6:24"},"nativeSrc":"1461:20:24","nodeType":"YulFunctionCall","src":"1461:20:24"},"variables":[{"name":"mm","nativeSrc":"1455:2:24","nodeType":"YulTypedName","src":"1455:2:24","type":""}]},{"nativeSrc":"1494:16:24","nodeType":"YulAssignment","src":"1494:16:24","value":{"arguments":[{"name":"a","nativeSrc":"1505:1:24","nodeType":"YulIdentifier","src":"1505:1:24"},{"name":"b","nativeSrc":"1508:1:24","nodeType":"YulIdentifier","src":"1508:1:24"}],"functionName":{"name":"mul","nativeSrc":"1501:3:24","nodeType":"YulIdentifier","src":"1501:3:24"},"nativeSrc":"1501:9:24","nodeType":"YulFunctionCall","src":"1501:9:24"},"variableNames":[{"name":"low","nativeSrc":"1494:3:24","nodeType":"YulIdentifier","src":"1494:3:24"}]},{"nativeSrc":"1523:38:24","nodeType":"YulAssignment","src":"1523:38:24","value":{"arguments":[{"arguments":[{"name":"mm","nativeSrc":"1539:2:24","nodeType":"YulIdentifier","src":"1539:2:24"},{"name":"low","nativeSrc":"1543:3:24","nodeType":"YulIdentifier","src":"1543:3:24"}],"functionName":{"name":"sub","nativeSrc":"1535:3:24","nodeType":"YulIdentifier","src":"1535:3:24"},"nativeSrc":"1535:12:24","nodeType":"YulFunctionCall","src":"1535:12:24"},{"arguments":[{"name":"mm","nativeSrc":"1552:2:24","nodeType":"YulIdentifier","src":"1552:2:24"},{"name":"low","nativeSrc":"1556:3:24","nodeType":"YulIdentifier","src":"1556:3:24"}],"functionName":{"name":"lt","nativeSrc":"1549:2:24","nodeType":"YulIdentifier","src":"1549:2:24"},"nativeSrc":"1549:11:24","nodeType":"YulFunctionCall","src":"1549:11:24"}],"functionName":{"name":"sub","nativeSrc":"1531:3:24","nodeType":"YulIdentifier","src":"1531:3:24"},"nativeSrc":"1531:30:24","nodeType":"YulFunctionCall","src":"1531:30:24"},"variableNames":[{"name":"high","nativeSrc":"1523:4:24","nodeType":"YulIdentifier","src":"1523:4:24"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":5879,"isOffset":false,"isSlot":false,"src":"1468:1:24","valueSize":1},{"declaration":5879,"isOffset":false,"isSlot":false,"src":"1505:1:24","valueSize":1},{"declaration":5881,"isOffset":false,"isSlot":false,"src":"1471:1:24","valueSize":1},{"declaration":5881,"isOffset":false,"isSlot":false,"src":"1508:1:24","valueSize":1},{"declaration":5884,"isOffset":false,"isSlot":false,"src":"1523:4:24","valueSize":1},{"declaration":5886,"isOffset":false,"isSlot":false,"src":"1494:3:24","valueSize":1},{"declaration":5886,"isOffset":false,"isSlot":false,"src":"1543:3:24","valueSize":1},{"declaration":5886,"isOffset":false,"isSlot":false,"src":"1556:3:24","valueSize":1}],"flags":["memory-safe"],"id":5888,"nodeType":"InlineAssembly","src":"1412:159:24"}]},"documentation":{"id":5877,"nodeType":"StructuredDocumentation","src":"849:173:24","text":" @dev Return the 512-bit multiplication of two uint256.\n The result is stored in two 256 variables such that product = high * 2²⁵⁶ + low."},"id":5890,"implemented":true,"kind":"function","modifiers":[],"name":"mul512","nameLocation":"1036:6:24","nodeType":"FunctionDefinition","parameters":{"id":5882,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5879,"mutability":"mutable","name":"a","nameLocation":"1051:1:24","nodeType":"VariableDeclaration","scope":5890,"src":"1043:9:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5878,"name":"uint256","nodeType":"ElementaryTypeName","src":"1043:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5881,"mutability":"mutable","name":"b","nameLocation":"1062:1:24","nodeType":"VariableDeclaration","scope":5890,"src":"1054:9:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5880,"name":"uint256","nodeType":"ElementaryTypeName","src":"1054:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1042:22:24"},"returnParameters":{"id":5887,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5884,"mutability":"mutable","name":"high","nameLocation":"1096:4:24","nodeType":"VariableDeclaration","scope":5890,"src":"1088:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5883,"name":"uint256","nodeType":"ElementaryTypeName","src":"1088:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5886,"mutability":"mutable","name":"low","nameLocation":"1110:3:24","nodeType":"VariableDeclaration","scope":5890,"src":"1102:11:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5885,"name":"uint256","nodeType":"ElementaryTypeName","src":"1102:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1087:27:24"},"scope":7507,"src":"1027:550:24","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":5924,"nodeType":"Block","src":"1784:149:24","statements":[{"id":5923,"nodeType":"UncheckedBlock","src":"1794:133:24","statements":[{"assignments":[5903],"declarations":[{"constant":false,"id":5903,"mutability":"mutable","name":"c","nameLocation":"1826:1:24","nodeType":"VariableDeclaration","scope":5923,"src":"1818:9:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5902,"name":"uint256","nodeType":"ElementaryTypeName","src":"1818:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5907,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5906,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5904,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5893,"src":"1830:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":5905,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5895,"src":"1834:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1830:5:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1818:17:24"},{"expression":{"id":5912,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5908,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5898,"src":"1849:7:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5911,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5909,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5903,"src":"1859:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5910,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5893,"src":"1864:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1859:6:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"1849:16:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5913,"nodeType":"ExpressionStatement","src":"1849:16:24"},{"expression":{"id":5921,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5914,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5900,"src":"1879:6:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5920,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5915,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5903,"src":"1888:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"arguments":[{"id":5918,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5898,"src":"1908:7:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":5916,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9272,"src":"1892:8:24","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$9272_$","typeString":"type(library SafeCast)"}},"id":5917,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1901:6:24","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":9271,"src":"1892:15:24","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":5919,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1892:24:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1888:28:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1879:37:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5922,"nodeType":"ExpressionStatement","src":"1879:37:24"}]}]},"documentation":{"id":5891,"nodeType":"StructuredDocumentation","src":"1583:105:24","text":" @dev Returns the addition of two unsigned integers, with a success flag (no overflow)."},"id":5925,"implemented":true,"kind":"function","modifiers":[],"name":"tryAdd","nameLocation":"1702:6:24","nodeType":"FunctionDefinition","parameters":{"id":5896,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5893,"mutability":"mutable","name":"a","nameLocation":"1717:1:24","nodeType":"VariableDeclaration","scope":5925,"src":"1709:9:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5892,"name":"uint256","nodeType":"ElementaryTypeName","src":"1709:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5895,"mutability":"mutable","name":"b","nameLocation":"1728:1:24","nodeType":"VariableDeclaration","scope":5925,"src":"1720:9:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5894,"name":"uint256","nodeType":"ElementaryTypeName","src":"1720:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1708:22:24"},"returnParameters":{"id":5901,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5898,"mutability":"mutable","name":"success","nameLocation":"1759:7:24","nodeType":"VariableDeclaration","scope":5925,"src":"1754:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5897,"name":"bool","nodeType":"ElementaryTypeName","src":"1754:4:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":5900,"mutability":"mutable","name":"result","nameLocation":"1776:6:24","nodeType":"VariableDeclaration","scope":5925,"src":"1768:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5899,"name":"uint256","nodeType":"ElementaryTypeName","src":"1768:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1753:30:24"},"scope":7507,"src":"1693:240:24","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":5959,"nodeType":"Block","src":"2143:149:24","statements":[{"id":5958,"nodeType":"UncheckedBlock","src":"2153:133:24","statements":[{"assignments":[5938],"declarations":[{"constant":false,"id":5938,"mutability":"mutable","name":"c","nameLocation":"2185:1:24","nodeType":"VariableDeclaration","scope":5958,"src":"2177:9:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5937,"name":"uint256","nodeType":"ElementaryTypeName","src":"2177:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5942,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5941,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5939,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5928,"src":"2189:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":5940,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5930,"src":"2193:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2189:5:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2177:17:24"},{"expression":{"id":5947,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5943,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5933,"src":"2208:7:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5946,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5944,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5938,"src":"2218:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":5945,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5928,"src":"2223:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2218:6:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2208:16:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5948,"nodeType":"ExpressionStatement","src":"2208:16:24"},{"expression":{"id":5956,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5949,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5935,"src":"2238:6:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5955,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5950,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5938,"src":"2247:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"arguments":[{"id":5953,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5933,"src":"2267:7:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":5951,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9272,"src":"2251:8:24","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$9272_$","typeString":"type(library SafeCast)"}},"id":5952,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2260:6:24","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":9271,"src":"2251:15:24","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":5954,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2251:24:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2247:28:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2238:37:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5957,"nodeType":"ExpressionStatement","src":"2238:37:24"}]}]},"documentation":{"id":5926,"nodeType":"StructuredDocumentation","src":"1939:108:24","text":" @dev Returns the subtraction of two unsigned integers, with a success flag (no overflow)."},"id":5960,"implemented":true,"kind":"function","modifiers":[],"name":"trySub","nameLocation":"2061:6:24","nodeType":"FunctionDefinition","parameters":{"id":5931,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5928,"mutability":"mutable","name":"a","nameLocation":"2076:1:24","nodeType":"VariableDeclaration","scope":5960,"src":"2068:9:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5927,"name":"uint256","nodeType":"ElementaryTypeName","src":"2068:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5930,"mutability":"mutable","name":"b","nameLocation":"2087:1:24","nodeType":"VariableDeclaration","scope":5960,"src":"2079:9:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5929,"name":"uint256","nodeType":"ElementaryTypeName","src":"2079:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2067:22:24"},"returnParameters":{"id":5936,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5933,"mutability":"mutable","name":"success","nameLocation":"2118:7:24","nodeType":"VariableDeclaration","scope":5960,"src":"2113:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5932,"name":"bool","nodeType":"ElementaryTypeName","src":"2113:4:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":5935,"mutability":"mutable","name":"result","nameLocation":"2135:6:24","nodeType":"VariableDeclaration","scope":5960,"src":"2127:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5934,"name":"uint256","nodeType":"ElementaryTypeName","src":"2127:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2112:30:24"},"scope":7507,"src":"2052:240:24","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":5989,"nodeType":"Block","src":"2505:391:24","statements":[{"id":5988,"nodeType":"UncheckedBlock","src":"2515:375:24","statements":[{"assignments":[5973],"declarations":[{"constant":false,"id":5973,"mutability":"mutable","name":"c","nameLocation":"2547:1:24","nodeType":"VariableDeclaration","scope":5988,"src":"2539:9:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5972,"name":"uint256","nodeType":"ElementaryTypeName","src":"2539:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5977,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5976,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5974,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5963,"src":"2551:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5975,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5965,"src":"2555:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2551:5:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2539:17:24"},{"AST":{"nativeSrc":"2595:188:24","nodeType":"YulBlock","src":"2595:188:24","statements":[{"nativeSrc":"2727:42:24","nodeType":"YulAssignment","src":"2727:42:24","value":{"arguments":[{"arguments":[{"arguments":[{"name":"c","nativeSrc":"2748:1:24","nodeType":"YulIdentifier","src":"2748:1:24"},{"name":"a","nativeSrc":"2751:1:24","nodeType":"YulIdentifier","src":"2751:1:24"}],"functionName":{"name":"div","nativeSrc":"2744:3:24","nodeType":"YulIdentifier","src":"2744:3:24"},"nativeSrc":"2744:9:24","nodeType":"YulFunctionCall","src":"2744:9:24"},{"name":"b","nativeSrc":"2755:1:24","nodeType":"YulIdentifier","src":"2755:1:24"}],"functionName":{"name":"eq","nativeSrc":"2741:2:24","nodeType":"YulIdentifier","src":"2741:2:24"},"nativeSrc":"2741:16:24","nodeType":"YulFunctionCall","src":"2741:16:24"},{"arguments":[{"name":"a","nativeSrc":"2766:1:24","nodeType":"YulIdentifier","src":"2766:1:24"}],"functionName":{"name":"iszero","nativeSrc":"2759:6:24","nodeType":"YulIdentifier","src":"2759:6:24"},"nativeSrc":"2759:9:24","nodeType":"YulFunctionCall","src":"2759:9:24"}],"functionName":{"name":"or","nativeSrc":"2738:2:24","nodeType":"YulIdentifier","src":"2738:2:24"},"nativeSrc":"2738:31:24","nodeType":"YulFunctionCall","src":"2738:31:24"},"variableNames":[{"name":"success","nativeSrc":"2727:7:24","nodeType":"YulIdentifier","src":"2727:7:24"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":5963,"isOffset":false,"isSlot":false,"src":"2751:1:24","valueSize":1},{"declaration":5963,"isOffset":false,"isSlot":false,"src":"2766:1:24","valueSize":1},{"declaration":5965,"isOffset":false,"isSlot":false,"src":"2755:1:24","valueSize":1},{"declaration":5973,"isOffset":false,"isSlot":false,"src":"2748:1:24","valueSize":1},{"declaration":5968,"isOffset":false,"isSlot":false,"src":"2727:7:24","valueSize":1}],"flags":["memory-safe"],"id":5978,"nodeType":"InlineAssembly","src":"2570:213:24"},{"expression":{"id":5986,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5979,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5970,"src":"2842:6:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5985,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5980,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5973,"src":"2851:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"arguments":[{"id":5983,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5968,"src":"2871:7:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":5981,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9272,"src":"2855:8:24","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$9272_$","typeString":"type(library SafeCast)"}},"id":5982,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2864:6:24","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":9271,"src":"2855:15:24","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":5984,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2855:24:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2851:28:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2842:37:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5987,"nodeType":"ExpressionStatement","src":"2842:37:24"}]}]},"documentation":{"id":5961,"nodeType":"StructuredDocumentation","src":"2298:111:24","text":" @dev Returns the multiplication of two unsigned integers, with a success flag (no overflow)."},"id":5990,"implemented":true,"kind":"function","modifiers":[],"name":"tryMul","nameLocation":"2423:6:24","nodeType":"FunctionDefinition","parameters":{"id":5966,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5963,"mutability":"mutable","name":"a","nameLocation":"2438:1:24","nodeType":"VariableDeclaration","scope":5990,"src":"2430:9:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5962,"name":"uint256","nodeType":"ElementaryTypeName","src":"2430:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5965,"mutability":"mutable","name":"b","nameLocation":"2449:1:24","nodeType":"VariableDeclaration","scope":5990,"src":"2441:9:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5964,"name":"uint256","nodeType":"ElementaryTypeName","src":"2441:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2429:22:24"},"returnParameters":{"id":5971,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5968,"mutability":"mutable","name":"success","nameLocation":"2480:7:24","nodeType":"VariableDeclaration","scope":5990,"src":"2475:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5967,"name":"bool","nodeType":"ElementaryTypeName","src":"2475:4:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":5970,"mutability":"mutable","name":"result","nameLocation":"2497:6:24","nodeType":"VariableDeclaration","scope":5990,"src":"2489:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5969,"name":"uint256","nodeType":"ElementaryTypeName","src":"2489:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2474:30:24"},"scope":7507,"src":"2414:482:24","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":6010,"nodeType":"Block","src":"3111:231:24","statements":[{"id":6009,"nodeType":"UncheckedBlock","src":"3121:215:24","statements":[{"expression":{"id":6006,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6002,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5998,"src":"3145:7:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6005,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6003,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5995,"src":"3155:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":6004,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3159:1:24","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3155:5:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"3145:15:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6007,"nodeType":"ExpressionStatement","src":"3145:15:24"},{"AST":{"nativeSrc":"3199:127:24","nodeType":"YulBlock","src":"3199:127:24","statements":[{"nativeSrc":"3293:19:24","nodeType":"YulAssignment","src":"3293:19:24","value":{"arguments":[{"name":"a","nativeSrc":"3307:1:24","nodeType":"YulIdentifier","src":"3307:1:24"},{"name":"b","nativeSrc":"3310:1:24","nodeType":"YulIdentifier","src":"3310:1:24"}],"functionName":{"name":"div","nativeSrc":"3303:3:24","nodeType":"YulIdentifier","src":"3303:3:24"},"nativeSrc":"3303:9:24","nodeType":"YulFunctionCall","src":"3303:9:24"},"variableNames":[{"name":"result","nativeSrc":"3293:6:24","nodeType":"YulIdentifier","src":"3293:6:24"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":5993,"isOffset":false,"isSlot":false,"src":"3307:1:24","valueSize":1},{"declaration":5995,"isOffset":false,"isSlot":false,"src":"3310:1:24","valueSize":1},{"declaration":6000,"isOffset":false,"isSlot":false,"src":"3293:6:24","valueSize":1}],"flags":["memory-safe"],"id":6008,"nodeType":"InlineAssembly","src":"3174:152:24"}]}]},"documentation":{"id":5991,"nodeType":"StructuredDocumentation","src":"2902:113:24","text":" @dev Returns the division of two unsigned integers, with a success flag (no division by zero)."},"id":6011,"implemented":true,"kind":"function","modifiers":[],"name":"tryDiv","nameLocation":"3029:6:24","nodeType":"FunctionDefinition","parameters":{"id":5996,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5993,"mutability":"mutable","name":"a","nameLocation":"3044:1:24","nodeType":"VariableDeclaration","scope":6011,"src":"3036:9:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5992,"name":"uint256","nodeType":"ElementaryTypeName","src":"3036:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5995,"mutability":"mutable","name":"b","nameLocation":"3055:1:24","nodeType":"VariableDeclaration","scope":6011,"src":"3047:9:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5994,"name":"uint256","nodeType":"ElementaryTypeName","src":"3047:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3035:22:24"},"returnParameters":{"id":6001,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5998,"mutability":"mutable","name":"success","nameLocation":"3086:7:24","nodeType":"VariableDeclaration","scope":6011,"src":"3081:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5997,"name":"bool","nodeType":"ElementaryTypeName","src":"3081:4:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":6000,"mutability":"mutable","name":"result","nameLocation":"3103:6:24","nodeType":"VariableDeclaration","scope":6011,"src":"3095:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5999,"name":"uint256","nodeType":"ElementaryTypeName","src":"3095:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3080:30:24"},"scope":7507,"src":"3020:322:24","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":6031,"nodeType":"Block","src":"3567:231:24","statements":[{"id":6030,"nodeType":"UncheckedBlock","src":"3577:215:24","statements":[{"expression":{"id":6027,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6023,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6019,"src":"3601:7:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6026,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6024,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6016,"src":"3611:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":6025,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3615:1:24","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3611:5:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"3601:15:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6028,"nodeType":"ExpressionStatement","src":"3601:15:24"},{"AST":{"nativeSrc":"3655:127:24","nodeType":"YulBlock","src":"3655:127:24","statements":[{"nativeSrc":"3749:19:24","nodeType":"YulAssignment","src":"3749:19:24","value":{"arguments":[{"name":"a","nativeSrc":"3763:1:24","nodeType":"YulIdentifier","src":"3763:1:24"},{"name":"b","nativeSrc":"3766:1:24","nodeType":"YulIdentifier","src":"3766:1:24"}],"functionName":{"name":"mod","nativeSrc":"3759:3:24","nodeType":"YulIdentifier","src":"3759:3:24"},"nativeSrc":"3759:9:24","nodeType":"YulFunctionCall","src":"3759:9:24"},"variableNames":[{"name":"result","nativeSrc":"3749:6:24","nodeType":"YulIdentifier","src":"3749:6:24"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":6014,"isOffset":false,"isSlot":false,"src":"3763:1:24","valueSize":1},{"declaration":6016,"isOffset":false,"isSlot":false,"src":"3766:1:24","valueSize":1},{"declaration":6021,"isOffset":false,"isSlot":false,"src":"3749:6:24","valueSize":1}],"flags":["memory-safe"],"id":6029,"nodeType":"InlineAssembly","src":"3630:152:24"}]}]},"documentation":{"id":6012,"nodeType":"StructuredDocumentation","src":"3348:123:24","text":" @dev Returns the remainder of dividing two unsigned integers, with a success flag (no division by zero)."},"id":6032,"implemented":true,"kind":"function","modifiers":[],"name":"tryMod","nameLocation":"3485:6:24","nodeType":"FunctionDefinition","parameters":{"id":6017,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6014,"mutability":"mutable","name":"a","nameLocation":"3500:1:24","nodeType":"VariableDeclaration","scope":6032,"src":"3492:9:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6013,"name":"uint256","nodeType":"ElementaryTypeName","src":"3492:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6016,"mutability":"mutable","name":"b","nameLocation":"3511:1:24","nodeType":"VariableDeclaration","scope":6032,"src":"3503:9:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6015,"name":"uint256","nodeType":"ElementaryTypeName","src":"3503:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3491:22:24"},"returnParameters":{"id":6022,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6019,"mutability":"mutable","name":"success","nameLocation":"3542:7:24","nodeType":"VariableDeclaration","scope":6032,"src":"3537:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6018,"name":"bool","nodeType":"ElementaryTypeName","src":"3537:4:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":6021,"mutability":"mutable","name":"result","nameLocation":"3559:6:24","nodeType":"VariableDeclaration","scope":6032,"src":"3551:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6020,"name":"uint256","nodeType":"ElementaryTypeName","src":"3551:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3536:30:24"},"scope":7507,"src":"3476:322:24","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":6061,"nodeType":"Block","src":"3989:122:24","statements":[{"assignments":[6043,6045],"declarations":[{"constant":false,"id":6043,"mutability":"mutable","name":"success","nameLocation":"4005:7:24","nodeType":"VariableDeclaration","scope":6061,"src":"4000:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6042,"name":"bool","nodeType":"ElementaryTypeName","src":"4000:4:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":6045,"mutability":"mutable","name":"result","nameLocation":"4022:6:24","nodeType":"VariableDeclaration","scope":6061,"src":"4014:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6044,"name":"uint256","nodeType":"ElementaryTypeName","src":"4014:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6050,"initialValue":{"arguments":[{"id":6047,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6035,"src":"4039:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":6048,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6037,"src":"4042:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6046,"name":"tryAdd","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5925,"src":"4032:6:24","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (bool,uint256)"}},"id":6049,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4032:12:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$","typeString":"tuple(bool,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"3999:45:24"},{"expression":{"arguments":[{"id":6052,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6043,"src":"4069:7:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":6053,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6045,"src":"4078:6:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"arguments":[{"id":6056,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4091:7:24","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":6055,"name":"uint256","nodeType":"ElementaryTypeName","src":"4091:7:24","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"id":6054,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967269,"src":"4086:4:24","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":6057,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4086:13:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint256","typeString":"type(uint256)"}},"id":6058,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4100:3:24","memberName":"max","nodeType":"MemberAccess","src":"4086:17:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6051,"name":"ternary","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6139,"src":"4061:7:24","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (bool,uint256,uint256) pure returns (uint256)"}},"id":6059,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4061:43:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":6041,"id":6060,"nodeType":"Return","src":"4054:50:24"}]},"documentation":{"id":6033,"nodeType":"StructuredDocumentation","src":"3804:103:24","text":" @dev Unsigned saturating addition, bounds to `2²⁵⁶ - 1` instead of overflowing."},"id":6062,"implemented":true,"kind":"function","modifiers":[],"name":"saturatingAdd","nameLocation":"3921:13:24","nodeType":"FunctionDefinition","parameters":{"id":6038,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6035,"mutability":"mutable","name":"a","nameLocation":"3943:1:24","nodeType":"VariableDeclaration","scope":6062,"src":"3935:9:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6034,"name":"uint256","nodeType":"ElementaryTypeName","src":"3935:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6037,"mutability":"mutable","name":"b","nameLocation":"3954:1:24","nodeType":"VariableDeclaration","scope":6062,"src":"3946:9:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6036,"name":"uint256","nodeType":"ElementaryTypeName","src":"3946:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3934:22:24"},"returnParameters":{"id":6041,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6040,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6062,"src":"3980:7:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6039,"name":"uint256","nodeType":"ElementaryTypeName","src":"3980:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3979:9:24"},"scope":7507,"src":"3912:199:24","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":6081,"nodeType":"Block","src":"4294:73:24","statements":[{"assignments":[null,6073],"declarations":[null,{"constant":false,"id":6073,"mutability":"mutable","name":"result","nameLocation":"4315:6:24","nodeType":"VariableDeclaration","scope":6081,"src":"4307:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6072,"name":"uint256","nodeType":"ElementaryTypeName","src":"4307:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6078,"initialValue":{"arguments":[{"id":6075,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6065,"src":"4332:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":6076,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6067,"src":"4335:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6074,"name":"trySub","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5960,"src":"4325:6:24","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (bool,uint256)"}},"id":6077,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4325:12:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$","typeString":"tuple(bool,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"4304:33:24"},{"expression":{"id":6079,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6073,"src":"4354:6:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":6071,"id":6080,"nodeType":"Return","src":"4347:13:24"}]},"documentation":{"id":6063,"nodeType":"StructuredDocumentation","src":"4117:95:24","text":" @dev Unsigned saturating subtraction, bounds to zero instead of overflowing."},"id":6082,"implemented":true,"kind":"function","modifiers":[],"name":"saturatingSub","nameLocation":"4226:13:24","nodeType":"FunctionDefinition","parameters":{"id":6068,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6065,"mutability":"mutable","name":"a","nameLocation":"4248:1:24","nodeType":"VariableDeclaration","scope":6082,"src":"4240:9:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6064,"name":"uint256","nodeType":"ElementaryTypeName","src":"4240:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6067,"mutability":"mutable","name":"b","nameLocation":"4259:1:24","nodeType":"VariableDeclaration","scope":6082,"src":"4251:9:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6066,"name":"uint256","nodeType":"ElementaryTypeName","src":"4251:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4239:22:24"},"returnParameters":{"id":6071,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6070,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6082,"src":"4285:7:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6069,"name":"uint256","nodeType":"ElementaryTypeName","src":"4285:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4284:9:24"},"scope":7507,"src":"4217:150:24","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":6111,"nodeType":"Block","src":"4564:122:24","statements":[{"assignments":[6093,6095],"declarations":[{"constant":false,"id":6093,"mutability":"mutable","name":"success","nameLocation":"4580:7:24","nodeType":"VariableDeclaration","scope":6111,"src":"4575:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6092,"name":"bool","nodeType":"ElementaryTypeName","src":"4575:4:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":6095,"mutability":"mutable","name":"result","nameLocation":"4597:6:24","nodeType":"VariableDeclaration","scope":6111,"src":"4589:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6094,"name":"uint256","nodeType":"ElementaryTypeName","src":"4589:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6100,"initialValue":{"arguments":[{"id":6097,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6085,"src":"4614:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":6098,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6087,"src":"4617:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6096,"name":"tryMul","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5990,"src":"4607:6:24","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (bool,uint256)"}},"id":6099,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4607:12:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$","typeString":"tuple(bool,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"4574:45:24"},{"expression":{"arguments":[{"id":6102,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6093,"src":"4644:7:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":6103,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6095,"src":"4653:6:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"arguments":[{"id":6106,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4666:7:24","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":6105,"name":"uint256","nodeType":"ElementaryTypeName","src":"4666:7:24","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"id":6104,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967269,"src":"4661:4:24","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":6107,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4661:13:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint256","typeString":"type(uint256)"}},"id":6108,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4675:3:24","memberName":"max","nodeType":"MemberAccess","src":"4661:17:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6101,"name":"ternary","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6139,"src":"4636:7:24","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (bool,uint256,uint256) pure returns (uint256)"}},"id":6109,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4636:43:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":6091,"id":6110,"nodeType":"Return","src":"4629:50:24"}]},"documentation":{"id":6083,"nodeType":"StructuredDocumentation","src":"4373:109:24","text":" @dev Unsigned saturating multiplication, bounds to `2²⁵⁶ - 1` instead of overflowing."},"id":6112,"implemented":true,"kind":"function","modifiers":[],"name":"saturatingMul","nameLocation":"4496:13:24","nodeType":"FunctionDefinition","parameters":{"id":6088,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6085,"mutability":"mutable","name":"a","nameLocation":"4518:1:24","nodeType":"VariableDeclaration","scope":6112,"src":"4510:9:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6084,"name":"uint256","nodeType":"ElementaryTypeName","src":"4510:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6087,"mutability":"mutable","name":"b","nameLocation":"4529:1:24","nodeType":"VariableDeclaration","scope":6112,"src":"4521:9:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6086,"name":"uint256","nodeType":"ElementaryTypeName","src":"4521:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4509:22:24"},"returnParameters":{"id":6091,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6090,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6112,"src":"4555:7:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6089,"name":"uint256","nodeType":"ElementaryTypeName","src":"4555:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4554:9:24"},"scope":7507,"src":"4487:199:24","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":6138,"nodeType":"Block","src":"5174:207:24","statements":[{"id":6137,"nodeType":"UncheckedBlock","src":"5184:191:24","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6135,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6124,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"5322:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"^","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6133,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6127,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6125,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6117,"src":"5328:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"^","rightExpression":{"id":6126,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"5332:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5328:5:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":6128,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5327:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"arguments":[{"id":6131,"name":"condition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6115,"src":"5353:9:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":6129,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9272,"src":"5337:8:24","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$9272_$","typeString":"type(library SafeCast)"}},"id":6130,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5346:6:24","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":9271,"src":"5337:15:24","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":6132,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5337:26:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5327:36:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":6134,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5326:38:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5322:42:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":6123,"id":6136,"nodeType":"Return","src":"5315:49:24"}]}]},"documentation":{"id":6113,"nodeType":"StructuredDocumentation","src":"4692:390:24","text":" @dev Branchless ternary evaluation for `condition ? a : b`. Gas costs are constant.\n IMPORTANT: This function may reduce bytecode size and consume less gas when used standalone.\n However, the compiler may optimize Solidity ternary operations (i.e. `condition ? a : b`) to only compute\n one branch when needed, making this function more expensive."},"id":6139,"implemented":true,"kind":"function","modifiers":[],"name":"ternary","nameLocation":"5096:7:24","nodeType":"FunctionDefinition","parameters":{"id":6120,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6115,"mutability":"mutable","name":"condition","nameLocation":"5109:9:24","nodeType":"VariableDeclaration","scope":6139,"src":"5104:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6114,"name":"bool","nodeType":"ElementaryTypeName","src":"5104:4:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":6117,"mutability":"mutable","name":"a","nameLocation":"5128:1:24","nodeType":"VariableDeclaration","scope":6139,"src":"5120:9:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6116,"name":"uint256","nodeType":"ElementaryTypeName","src":"5120:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6119,"mutability":"mutable","name":"b","nameLocation":"5139:1:24","nodeType":"VariableDeclaration","scope":6139,"src":"5131:9:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6118,"name":"uint256","nodeType":"ElementaryTypeName","src":"5131:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5103:38:24"},"returnParameters":{"id":6123,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6122,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6139,"src":"5165:7:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6121,"name":"uint256","nodeType":"ElementaryTypeName","src":"5165:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5164:9:24"},"scope":7507,"src":"5087:294:24","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":6157,"nodeType":"Block","src":"5518:44:24","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6152,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6150,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6142,"src":"5543:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":6151,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6144,"src":"5547:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5543:5:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":6153,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6142,"src":"5550:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":6154,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6144,"src":"5553:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6149,"name":"ternary","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6139,"src":"5535:7:24","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (bool,uint256,uint256) pure returns (uint256)"}},"id":6155,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5535:20:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":6148,"id":6156,"nodeType":"Return","src":"5528:27:24"}]},"documentation":{"id":6140,"nodeType":"StructuredDocumentation","src":"5387:59:24","text":" @dev Returns the largest of two numbers."},"id":6158,"implemented":true,"kind":"function","modifiers":[],"name":"max","nameLocation":"5460:3:24","nodeType":"FunctionDefinition","parameters":{"id":6145,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6142,"mutability":"mutable","name":"a","nameLocation":"5472:1:24","nodeType":"VariableDeclaration","scope":6158,"src":"5464:9:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6141,"name":"uint256","nodeType":"ElementaryTypeName","src":"5464:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6144,"mutability":"mutable","name":"b","nameLocation":"5483:1:24","nodeType":"VariableDeclaration","scope":6158,"src":"5475:9:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6143,"name":"uint256","nodeType":"ElementaryTypeName","src":"5475:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5463:22:24"},"returnParameters":{"id":6148,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6147,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6158,"src":"5509:7:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6146,"name":"uint256","nodeType":"ElementaryTypeName","src":"5509:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5508:9:24"},"scope":7507,"src":"5451:111:24","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":6176,"nodeType":"Block","src":"5700:44:24","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6171,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6169,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6161,"src":"5725:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":6170,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6163,"src":"5729:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5725:5:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":6172,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6161,"src":"5732:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":6173,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6163,"src":"5735:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6168,"name":"ternary","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6139,"src":"5717:7:24","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (bool,uint256,uint256) pure returns (uint256)"}},"id":6174,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5717:20:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":6167,"id":6175,"nodeType":"Return","src":"5710:27:24"}]},"documentation":{"id":6159,"nodeType":"StructuredDocumentation","src":"5568:60:24","text":" @dev Returns the smallest of two numbers."},"id":6177,"implemented":true,"kind":"function","modifiers":[],"name":"min","nameLocation":"5642:3:24","nodeType":"FunctionDefinition","parameters":{"id":6164,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6161,"mutability":"mutable","name":"a","nameLocation":"5654:1:24","nodeType":"VariableDeclaration","scope":6177,"src":"5646:9:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6160,"name":"uint256","nodeType":"ElementaryTypeName","src":"5646:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6163,"mutability":"mutable","name":"b","nameLocation":"5665:1:24","nodeType":"VariableDeclaration","scope":6177,"src":"5657:9:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6162,"name":"uint256","nodeType":"ElementaryTypeName","src":"5657:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5645:22:24"},"returnParameters":{"id":6167,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6166,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6177,"src":"5691:7:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6165,"name":"uint256","nodeType":"ElementaryTypeName","src":"5691:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5690:9:24"},"scope":7507,"src":"5633:111:24","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":6200,"nodeType":"Block","src":"5928:120:24","statements":[{"id":6199,"nodeType":"UncheckedBlock","src":"5938:104:24","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6197,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6189,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6187,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6180,"src":"6011:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":6188,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6182,"src":"6015:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6011:5:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":6190,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6010:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6196,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6193,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6191,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6180,"src":"6021:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"^","rightExpression":{"id":6192,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6182,"src":"6025:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6021:5:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":6194,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6020:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"32","id":6195,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6030:1:24","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"6020:11:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6010:21:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":6186,"id":6198,"nodeType":"Return","src":"6003:28:24"}]}]},"documentation":{"id":6178,"nodeType":"StructuredDocumentation","src":"5750:102:24","text":" @dev Returns the average of two numbers. The result is rounded towards\n zero."},"id":6201,"implemented":true,"kind":"function","modifiers":[],"name":"average","nameLocation":"5866:7:24","nodeType":"FunctionDefinition","parameters":{"id":6183,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6180,"mutability":"mutable","name":"a","nameLocation":"5882:1:24","nodeType":"VariableDeclaration","scope":6201,"src":"5874:9:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6179,"name":"uint256","nodeType":"ElementaryTypeName","src":"5874:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6182,"mutability":"mutable","name":"b","nameLocation":"5893:1:24","nodeType":"VariableDeclaration","scope":6201,"src":"5885:9:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6181,"name":"uint256","nodeType":"ElementaryTypeName","src":"5885:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5873:22:24"},"returnParameters":{"id":6186,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6185,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6201,"src":"5919:7:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6184,"name":"uint256","nodeType":"ElementaryTypeName","src":"5919:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5918:9:24"},"scope":7507,"src":"5857:191:24","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":6241,"nodeType":"Block","src":"6340:633:24","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6213,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6211,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6206,"src":"6354:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":6212,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6359:1:24","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6354:6:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6222,"nodeType":"IfStatement","src":"6350:150:24","trueBody":{"id":6221,"nodeType":"Block","src":"6362:138:24","statements":[{"expression":{"arguments":[{"expression":{"id":6217,"name":"Panic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3959,"src":"6466:5:24","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Panic_$3959_$","typeString":"type(library Panic)"}},"id":6218,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6472:16:24","memberName":"DIVISION_BY_ZERO","nodeType":"MemberAccess","referencedDeclaration":3926,"src":"6466:22:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":6214,"name":"Panic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3959,"src":"6454:5:24","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Panic_$3959_$","typeString":"type(library Panic)"}},"id":6216,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6460:5:24","memberName":"panic","nodeType":"MemberAccess","referencedDeclaration":3958,"src":"6454:11:24","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$__$","typeString":"function (uint256) pure"}},"id":6219,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6454:35:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6220,"nodeType":"ExpressionStatement","src":"6454:35:24"}]}},{"id":6240,"nodeType":"UncheckedBlock","src":"6883:84:24","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6238,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6227,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6225,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6204,"src":"6930:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":6226,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6934:1:24","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6930:5:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":6223,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9272,"src":"6914:8:24","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$9272_$","typeString":"type(library SafeCast)"}},"id":6224,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6923:6:24","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":9271,"src":"6914:15:24","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":6228,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6914:22:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6236,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6234,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6231,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6229,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6204,"src":"6941:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":6230,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6945:1:24","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"6941:5:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":6232,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6940:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6233,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6206,"src":"6950:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6940:11:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":6235,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6954:1:24","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"6940:15:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":6237,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6939:17:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6914:42:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":6210,"id":6239,"nodeType":"Return","src":"6907:49:24"}]}]},"documentation":{"id":6202,"nodeType":"StructuredDocumentation","src":"6054:210:24","text":" @dev Returns the ceiling of the division of two numbers.\n This differs from standard division with `/` in that it rounds towards infinity instead\n of rounding towards zero."},"id":6242,"implemented":true,"kind":"function","modifiers":[],"name":"ceilDiv","nameLocation":"6278:7:24","nodeType":"FunctionDefinition","parameters":{"id":6207,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6204,"mutability":"mutable","name":"a","nameLocation":"6294:1:24","nodeType":"VariableDeclaration","scope":6242,"src":"6286:9:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6203,"name":"uint256","nodeType":"ElementaryTypeName","src":"6286:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6206,"mutability":"mutable","name":"b","nameLocation":"6305:1:24","nodeType":"VariableDeclaration","scope":6242,"src":"6297:9:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6205,"name":"uint256","nodeType":"ElementaryTypeName","src":"6297:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6285:22:24"},"returnParameters":{"id":6210,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6209,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6242,"src":"6331:7:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6208,"name":"uint256","nodeType":"ElementaryTypeName","src":"6331:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6330:9:24"},"scope":7507,"src":"6269:704:24","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":6377,"nodeType":"Block","src":"7394:3585:24","statements":[{"id":6376,"nodeType":"UncheckedBlock","src":"7404:3569:24","statements":[{"assignments":[6255,6257],"declarations":[{"constant":false,"id":6255,"mutability":"mutable","name":"high","nameLocation":"7437:4:24","nodeType":"VariableDeclaration","scope":6376,"src":"7429:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6254,"name":"uint256","nodeType":"ElementaryTypeName","src":"7429:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6257,"mutability":"mutable","name":"low","nameLocation":"7451:3:24","nodeType":"VariableDeclaration","scope":6376,"src":"7443:11:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6256,"name":"uint256","nodeType":"ElementaryTypeName","src":"7443:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6262,"initialValue":{"arguments":[{"id":6259,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6245,"src":"7465:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":6260,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6247,"src":"7468:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6258,"name":"mul512","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5890,"src":"7458:6:24","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256,uint256)"}},"id":6261,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7458:12:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"7428:42:24"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6265,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6263,"name":"high","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6255,"src":"7552:4:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":6264,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7560:1:24","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7552:9:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6271,"nodeType":"IfStatement","src":"7548:365:24","trueBody":{"id":6270,"nodeType":"Block","src":"7563:350:24","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6268,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6266,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6257,"src":"7881:3:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6267,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6249,"src":"7887:11:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7881:17:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":6253,"id":6269,"nodeType":"Return","src":"7874:24:24"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6274,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6272,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6249,"src":"8023:11:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":6273,"name":"high","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6255,"src":"8038:4:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8023:19:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6290,"nodeType":"IfStatement","src":"8019:142:24","trueBody":{"id":6289,"nodeType":"Block","src":"8044:117:24","statements":[{"expression":{"arguments":[{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6281,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6279,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6249,"src":"8082:11:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":6280,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8097:1:24","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8082:16:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":6282,"name":"Panic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3959,"src":"8100:5:24","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Panic_$3959_$","typeString":"type(library Panic)"}},"id":6283,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8106:16:24","memberName":"DIVISION_BY_ZERO","nodeType":"MemberAccess","referencedDeclaration":3926,"src":"8100:22:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":6284,"name":"Panic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3959,"src":"8124:5:24","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Panic_$3959_$","typeString":"type(library Panic)"}},"id":6285,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8130:14:24","memberName":"UNDER_OVERFLOW","nodeType":"MemberAccess","referencedDeclaration":3922,"src":"8124:20:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6278,"name":"ternary","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6139,"src":"8074:7:24","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (bool,uint256,uint256) pure returns (uint256)"}},"id":6286,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8074:71:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":6275,"name":"Panic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3959,"src":"8062:5:24","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Panic_$3959_$","typeString":"type(library Panic)"}},"id":6277,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8068:5:24","memberName":"panic","nodeType":"MemberAccess","referencedDeclaration":3958,"src":"8062:11:24","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$__$","typeString":"function (uint256) pure"}},"id":6287,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8062:84:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6288,"nodeType":"ExpressionStatement","src":"8062:84:24"}]}},{"assignments":[6292],"declarations":[{"constant":false,"id":6292,"mutability":"mutable","name":"remainder","nameLocation":"8421:9:24","nodeType":"VariableDeclaration","scope":6376,"src":"8413:17:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6291,"name":"uint256","nodeType":"ElementaryTypeName","src":"8413:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6293,"nodeType":"VariableDeclarationStatement","src":"8413:17:24"},{"AST":{"nativeSrc":"8469:283:24","nodeType":"YulBlock","src":"8469:283:24","statements":[{"nativeSrc":"8538:38:24","nodeType":"YulAssignment","src":"8538:38:24","value":{"arguments":[{"name":"x","nativeSrc":"8558:1:24","nodeType":"YulIdentifier","src":"8558:1:24"},{"name":"y","nativeSrc":"8561:1:24","nodeType":"YulIdentifier","src":"8561:1:24"},{"name":"denominator","nativeSrc":"8564:11:24","nodeType":"YulIdentifier","src":"8564:11:24"}],"functionName":{"name":"mulmod","nativeSrc":"8551:6:24","nodeType":"YulIdentifier","src":"8551:6:24"},"nativeSrc":"8551:25:24","nodeType":"YulFunctionCall","src":"8551:25:24"},"variableNames":[{"name":"remainder","nativeSrc":"8538:9:24","nodeType":"YulIdentifier","src":"8538:9:24"}]},{"nativeSrc":"8658:37:24","nodeType":"YulAssignment","src":"8658:37:24","value":{"arguments":[{"name":"high","nativeSrc":"8670:4:24","nodeType":"YulIdentifier","src":"8670:4:24"},{"arguments":[{"name":"remainder","nativeSrc":"8679:9:24","nodeType":"YulIdentifier","src":"8679:9:24"},{"name":"low","nativeSrc":"8690:3:24","nodeType":"YulIdentifier","src":"8690:3:24"}],"functionName":{"name":"gt","nativeSrc":"8676:2:24","nodeType":"YulIdentifier","src":"8676:2:24"},"nativeSrc":"8676:18:24","nodeType":"YulFunctionCall","src":"8676:18:24"}],"functionName":{"name":"sub","nativeSrc":"8666:3:24","nodeType":"YulIdentifier","src":"8666:3:24"},"nativeSrc":"8666:29:24","nodeType":"YulFunctionCall","src":"8666:29:24"},"variableNames":[{"name":"high","nativeSrc":"8658:4:24","nodeType":"YulIdentifier","src":"8658:4:24"}]},{"nativeSrc":"8712:26:24","nodeType":"YulAssignment","src":"8712:26:24","value":{"arguments":[{"name":"low","nativeSrc":"8723:3:24","nodeType":"YulIdentifier","src":"8723:3:24"},{"name":"remainder","nativeSrc":"8728:9:24","nodeType":"YulIdentifier","src":"8728:9:24"}],"functionName":{"name":"sub","nativeSrc":"8719:3:24","nodeType":"YulIdentifier","src":"8719:3:24"},"nativeSrc":"8719:19:24","nodeType":"YulFunctionCall","src":"8719:19:24"},"variableNames":[{"name":"low","nativeSrc":"8712:3:24","nodeType":"YulIdentifier","src":"8712:3:24"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":6249,"isOffset":false,"isSlot":false,"src":"8564:11:24","valueSize":1},{"declaration":6255,"isOffset":false,"isSlot":false,"src":"8658:4:24","valueSize":1},{"declaration":6255,"isOffset":false,"isSlot":false,"src":"8670:4:24","valueSize":1},{"declaration":6257,"isOffset":false,"isSlot":false,"src":"8690:3:24","valueSize":1},{"declaration":6257,"isOffset":false,"isSlot":false,"src":"8712:3:24","valueSize":1},{"declaration":6257,"isOffset":false,"isSlot":false,"src":"8723:3:24","valueSize":1},{"declaration":6292,"isOffset":false,"isSlot":false,"src":"8538:9:24","valueSize":1},{"declaration":6292,"isOffset":false,"isSlot":false,"src":"8679:9:24","valueSize":1},{"declaration":6292,"isOffset":false,"isSlot":false,"src":"8728:9:24","valueSize":1},{"declaration":6245,"isOffset":false,"isSlot":false,"src":"8558:1:24","valueSize":1},{"declaration":6247,"isOffset":false,"isSlot":false,"src":"8561:1:24","valueSize":1}],"flags":["memory-safe"],"id":6294,"nodeType":"InlineAssembly","src":"8444:308:24"},{"assignments":[6296],"declarations":[{"constant":false,"id":6296,"mutability":"mutable","name":"twos","nameLocation":"8964:4:24","nodeType":"VariableDeclaration","scope":6376,"src":"8956:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6295,"name":"uint256","nodeType":"ElementaryTypeName","src":"8956:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6303,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6302,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6297,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6249,"src":"8971:11:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6300,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"30","id":6298,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8986:1:24","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":6299,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6249,"src":"8990:11:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8986:15:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":6301,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"8985:17:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8971:31:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8956:46:24"},{"AST":{"nativeSrc":"9041:359:24","nodeType":"YulBlock","src":"9041:359:24","statements":[{"nativeSrc":"9106:37:24","nodeType":"YulAssignment","src":"9106:37:24","value":{"arguments":[{"name":"denominator","nativeSrc":"9125:11:24","nodeType":"YulIdentifier","src":"9125:11:24"},{"name":"twos","nativeSrc":"9138:4:24","nodeType":"YulIdentifier","src":"9138:4:24"}],"functionName":{"name":"div","nativeSrc":"9121:3:24","nodeType":"YulIdentifier","src":"9121:3:24"},"nativeSrc":"9121:22:24","nodeType":"YulFunctionCall","src":"9121:22:24"},"variableNames":[{"name":"denominator","nativeSrc":"9106:11:24","nodeType":"YulIdentifier","src":"9106:11:24"}]},{"nativeSrc":"9207:21:24","nodeType":"YulAssignment","src":"9207:21:24","value":{"arguments":[{"name":"low","nativeSrc":"9218:3:24","nodeType":"YulIdentifier","src":"9218:3:24"},{"name":"twos","nativeSrc":"9223:4:24","nodeType":"YulIdentifier","src":"9223:4:24"}],"functionName":{"name":"div","nativeSrc":"9214:3:24","nodeType":"YulIdentifier","src":"9214:3:24"},"nativeSrc":"9214:14:24","nodeType":"YulFunctionCall","src":"9214:14:24"},"variableNames":[{"name":"low","nativeSrc":"9207:3:24","nodeType":"YulIdentifier","src":"9207:3:24"}]},{"nativeSrc":"9347:39:24","nodeType":"YulAssignment","src":"9347:39:24","value":{"arguments":[{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"9367:1:24","nodeType":"YulLiteral","src":"9367:1:24","type":"","value":"0"},{"name":"twos","nativeSrc":"9370:4:24","nodeType":"YulIdentifier","src":"9370:4:24"}],"functionName":{"name":"sub","nativeSrc":"9363:3:24","nodeType":"YulIdentifier","src":"9363:3:24"},"nativeSrc":"9363:12:24","nodeType":"YulFunctionCall","src":"9363:12:24"},{"name":"twos","nativeSrc":"9377:4:24","nodeType":"YulIdentifier","src":"9377:4:24"}],"functionName":{"name":"div","nativeSrc":"9359:3:24","nodeType":"YulIdentifier","src":"9359:3:24"},"nativeSrc":"9359:23:24","nodeType":"YulFunctionCall","src":"9359:23:24"},{"kind":"number","nativeSrc":"9384:1:24","nodeType":"YulLiteral","src":"9384:1:24","type":"","value":"1"}],"functionName":{"name":"add","nativeSrc":"9355:3:24","nodeType":"YulIdentifier","src":"9355:3:24"},"nativeSrc":"9355:31:24","nodeType":"YulFunctionCall","src":"9355:31:24"},"variableNames":[{"name":"twos","nativeSrc":"9347:4:24","nodeType":"YulIdentifier","src":"9347:4:24"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":6249,"isOffset":false,"isSlot":false,"src":"9106:11:24","valueSize":1},{"declaration":6249,"isOffset":false,"isSlot":false,"src":"9125:11:24","valueSize":1},{"declaration":6257,"isOffset":false,"isSlot":false,"src":"9207:3:24","valueSize":1},{"declaration":6257,"isOffset":false,"isSlot":false,"src":"9218:3:24","valueSize":1},{"declaration":6296,"isOffset":false,"isSlot":false,"src":"9138:4:24","valueSize":1},{"declaration":6296,"isOffset":false,"isSlot":false,"src":"9223:4:24","valueSize":1},{"declaration":6296,"isOffset":false,"isSlot":false,"src":"9347:4:24","valueSize":1},{"declaration":6296,"isOffset":false,"isSlot":false,"src":"9370:4:24","valueSize":1},{"declaration":6296,"isOffset":false,"isSlot":false,"src":"9377:4:24","valueSize":1}],"flags":["memory-safe"],"id":6304,"nodeType":"InlineAssembly","src":"9016:384:24"},{"expression":{"id":6309,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6305,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6257,"src":"9463:3:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"|=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6308,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6306,"name":"high","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6255,"src":"9470:4:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6307,"name":"twos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6296,"src":"9477:4:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9470:11:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9463:18:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6310,"nodeType":"ExpressionStatement","src":"9463:18:24"},{"assignments":[6312],"declarations":[{"constant":false,"id":6312,"mutability":"mutable","name":"inverse","nameLocation":"9824:7:24","nodeType":"VariableDeclaration","scope":6376,"src":"9816:15:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6311,"name":"uint256","nodeType":"ElementaryTypeName","src":"9816:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6319,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6318,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6315,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"33","id":6313,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9835:1:24","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6314,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6249,"src":"9839:11:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9835:15:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":6316,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9834:17:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"^","rightExpression":{"hexValue":"32","id":6317,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9854:1:24","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"9834:21:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9816:39:24"},{"expression":{"id":6326,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6320,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6312,"src":"10072:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6325,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":6321,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10083:1:24","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6324,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6322,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6249,"src":"10087:11:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6323,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6312,"src":"10101:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10087:21:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10083:25:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10072:36:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6327,"nodeType":"ExpressionStatement","src":"10072:36:24"},{"expression":{"id":6334,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6328,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6312,"src":"10142:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6333,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":6329,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10153:1:24","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6332,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6330,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6249,"src":"10157:11:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6331,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6312,"src":"10171:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10157:21:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10153:25:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10142:36:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6335,"nodeType":"ExpressionStatement","src":"10142:36:24"},{"expression":{"id":6342,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6336,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6312,"src":"10214:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6341,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":6337,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10225:1:24","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6340,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6338,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6249,"src":"10229:11:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6339,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6312,"src":"10243:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10229:21:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10225:25:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10214:36:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6343,"nodeType":"ExpressionStatement","src":"10214:36:24"},{"expression":{"id":6350,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6344,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6312,"src":"10285:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6349,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":6345,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10296:1:24","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6348,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6346,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6249,"src":"10300:11:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6347,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6312,"src":"10314:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10300:21:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10296:25:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10285:36:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6351,"nodeType":"ExpressionStatement","src":"10285:36:24"},{"expression":{"id":6358,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6352,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6312,"src":"10358:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6357,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":6353,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10369:1:24","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6356,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6354,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6249,"src":"10373:11:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6355,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6312,"src":"10387:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10373:21:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10369:25:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10358:36:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6359,"nodeType":"ExpressionStatement","src":"10358:36:24"},{"expression":{"id":6366,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6360,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6312,"src":"10432:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6365,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":6361,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10443:1:24","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6364,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6362,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6249,"src":"10447:11:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6363,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6312,"src":"10461:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10447:21:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10443:25:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10432:36:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6367,"nodeType":"ExpressionStatement","src":"10432:36:24"},{"expression":{"id":6372,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6368,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6252,"src":"10913:6:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6371,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6369,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6257,"src":"10922:3:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6370,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6312,"src":"10928:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10922:13:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10913:22:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6373,"nodeType":"ExpressionStatement","src":"10913:22:24"},{"expression":{"id":6374,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6252,"src":"10956:6:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":6253,"id":6375,"nodeType":"Return","src":"10949:13:24"}]}]},"documentation":{"id":6243,"nodeType":"StructuredDocumentation","src":"6979:312:24","text":" @dev Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or\n denominator == 0.\n Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) with further edits by\n Uniswap Labs also under MIT license."},"id":6378,"implemented":true,"kind":"function","modifiers":[],"name":"mulDiv","nameLocation":"7305:6:24","nodeType":"FunctionDefinition","parameters":{"id":6250,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6245,"mutability":"mutable","name":"x","nameLocation":"7320:1:24","nodeType":"VariableDeclaration","scope":6378,"src":"7312:9:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6244,"name":"uint256","nodeType":"ElementaryTypeName","src":"7312:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6247,"mutability":"mutable","name":"y","nameLocation":"7331:1:24","nodeType":"VariableDeclaration","scope":6378,"src":"7323:9:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6246,"name":"uint256","nodeType":"ElementaryTypeName","src":"7323:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6249,"mutability":"mutable","name":"denominator","nameLocation":"7342:11:24","nodeType":"VariableDeclaration","scope":6378,"src":"7334:19:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6248,"name":"uint256","nodeType":"ElementaryTypeName","src":"7334:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7311:43:24"},"returnParameters":{"id":6253,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6252,"mutability":"mutable","name":"result","nameLocation":"7386:6:24","nodeType":"VariableDeclaration","scope":6378,"src":"7378:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6251,"name":"uint256","nodeType":"ElementaryTypeName","src":"7378:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7377:16:24"},"scope":7507,"src":"7296:3683:24","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":6414,"nodeType":"Block","src":"11218:128:24","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6412,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":6394,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6381,"src":"11242:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":6395,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6383,"src":"11245:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":6396,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6385,"src":"11248:11:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6393,"name":"mulDiv","nodeType":"Identifier","overloadedDeclarations":[6378,6415],"referencedDeclaration":6378,"src":"11235:6:24","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":6397,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11235:25:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":6410,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":6401,"name":"rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6388,"src":"11296:8:24","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$5862","typeString":"enum Math.Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_Rounding_$5862","typeString":"enum Math.Rounding"}],"id":6400,"name":"unsignedRoundsUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7485,"src":"11279:16:24","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_enum$_Rounding_$5862_$returns$_t_bool_$","typeString":"function (enum Math.Rounding) pure returns (bool)"}},"id":6402,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11279:26:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6409,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":6404,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6381,"src":"11316:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":6405,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6383,"src":"11319:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":6406,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6385,"src":"11322:11:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6403,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967280,"src":"11309:6:24","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":6407,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11309:25:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":6408,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11337:1:24","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11309:29:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"11279:59:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":6398,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9272,"src":"11263:8:24","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$9272_$","typeString":"type(library SafeCast)"}},"id":6399,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11272:6:24","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":9271,"src":"11263:15:24","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":6411,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11263:76:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11235:104:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":6392,"id":6413,"nodeType":"Return","src":"11228:111:24"}]},"documentation":{"id":6379,"nodeType":"StructuredDocumentation","src":"10985:118:24","text":" @dev Calculates x * y / denominator with full precision, following the selected rounding direction."},"id":6415,"implemented":true,"kind":"function","modifiers":[],"name":"mulDiv","nameLocation":"11117:6:24","nodeType":"FunctionDefinition","parameters":{"id":6389,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6381,"mutability":"mutable","name":"x","nameLocation":"11132:1:24","nodeType":"VariableDeclaration","scope":6415,"src":"11124:9:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6380,"name":"uint256","nodeType":"ElementaryTypeName","src":"11124:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6383,"mutability":"mutable","name":"y","nameLocation":"11143:1:24","nodeType":"VariableDeclaration","scope":6415,"src":"11135:9:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6382,"name":"uint256","nodeType":"ElementaryTypeName","src":"11135:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6385,"mutability":"mutable","name":"denominator","nameLocation":"11154:11:24","nodeType":"VariableDeclaration","scope":6415,"src":"11146:19:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6384,"name":"uint256","nodeType":"ElementaryTypeName","src":"11146:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6388,"mutability":"mutable","name":"rounding","nameLocation":"11176:8:24","nodeType":"VariableDeclaration","scope":6415,"src":"11167:17:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$5862","typeString":"enum Math.Rounding"},"typeName":{"id":6387,"nodeType":"UserDefinedTypeName","pathNode":{"id":6386,"name":"Rounding","nameLocations":["11167:8:24"],"nodeType":"IdentifierPath","referencedDeclaration":5862,"src":"11167:8:24"},"referencedDeclaration":5862,"src":"11167:8:24","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$5862","typeString":"enum Math.Rounding"}},"visibility":"internal"}],"src":"11123:62:24"},"returnParameters":{"id":6392,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6391,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6415,"src":"11209:7:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6390,"name":"uint256","nodeType":"ElementaryTypeName","src":"11209:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11208:9:24"},"scope":7507,"src":"11108:238:24","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":6464,"nodeType":"Block","src":"11554:245:24","statements":[{"id":6463,"nodeType":"UncheckedBlock","src":"11564:229:24","statements":[{"assignments":[6428,6430],"declarations":[{"constant":false,"id":6428,"mutability":"mutable","name":"high","nameLocation":"11597:4:24","nodeType":"VariableDeclaration","scope":6463,"src":"11589:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6427,"name":"uint256","nodeType":"ElementaryTypeName","src":"11589:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6430,"mutability":"mutable","name":"low","nameLocation":"11611:3:24","nodeType":"VariableDeclaration","scope":6463,"src":"11603:11:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6429,"name":"uint256","nodeType":"ElementaryTypeName","src":"11603:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6435,"initialValue":{"arguments":[{"id":6432,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6418,"src":"11625:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":6433,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6420,"src":"11628:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6431,"name":"mul512","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5890,"src":"11618:6:24","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256,uint256)"}},"id":6434,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11618:12:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"11588:42:24"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6440,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6436,"name":"high","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6428,"src":"11648:4:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6439,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":6437,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11656:1:24","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"id":6438,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6422,"src":"11661:1:24","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"11656:6:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11648:14:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6449,"nodeType":"IfStatement","src":"11644:86:24","trueBody":{"id":6448,"nodeType":"Block","src":"11664:66:24","statements":[{"expression":{"arguments":[{"expression":{"id":6444,"name":"Panic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3959,"src":"11694:5:24","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Panic_$3959_$","typeString":"type(library Panic)"}},"id":6445,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11700:14:24","memberName":"UNDER_OVERFLOW","nodeType":"MemberAccess","referencedDeclaration":3922,"src":"11694:20:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":6441,"name":"Panic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3959,"src":"11682:5:24","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Panic_$3959_$","typeString":"type(library Panic)"}},"id":6443,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11688:5:24","memberName":"panic","nodeType":"MemberAccess","referencedDeclaration":3958,"src":"11682:11:24","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$__$","typeString":"function (uint256) pure"}},"id":6446,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11682:33:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6447,"nodeType":"ExpressionStatement","src":"11682:33:24"}]}},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6461,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6455,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6450,"name":"high","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6428,"src":"11751:4:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint16","typeString":"uint16"},"id":6453,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"323536","id":6451,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11760:3:24","typeDescriptions":{"typeIdentifier":"t_rational_256_by_1","typeString":"int_const 256"},"value":"256"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":6452,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6422,"src":"11766:1:24","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"11760:7:24","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}}],"id":6454,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11759:9:24","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"src":"11751:17:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":6456,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11750:19:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"|","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6459,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6457,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6430,"src":"11773:3:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":6458,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6422,"src":"11780:1:24","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"11773:8:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":6460,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11772:10:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11750:32:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":6426,"id":6462,"nodeType":"Return","src":"11743:39:24"}]}]},"documentation":{"id":6416,"nodeType":"StructuredDocumentation","src":"11352:111:24","text":" @dev Calculates floor(x * y >> n) with full precision. Throws if result overflows a uint256."},"id":6465,"implemented":true,"kind":"function","modifiers":[],"name":"mulShr","nameLocation":"11477:6:24","nodeType":"FunctionDefinition","parameters":{"id":6423,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6418,"mutability":"mutable","name":"x","nameLocation":"11492:1:24","nodeType":"VariableDeclaration","scope":6465,"src":"11484:9:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6417,"name":"uint256","nodeType":"ElementaryTypeName","src":"11484:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6420,"mutability":"mutable","name":"y","nameLocation":"11503:1:24","nodeType":"VariableDeclaration","scope":6465,"src":"11495:9:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6419,"name":"uint256","nodeType":"ElementaryTypeName","src":"11495:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6422,"mutability":"mutable","name":"n","nameLocation":"11512:1:24","nodeType":"VariableDeclaration","scope":6465,"src":"11506:7:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":6421,"name":"uint8","nodeType":"ElementaryTypeName","src":"11506:5:24","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"11483:31:24"},"returnParameters":{"id":6426,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6425,"mutability":"mutable","name":"result","nameLocation":"11546:6:24","nodeType":"VariableDeclaration","scope":6465,"src":"11538:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6424,"name":"uint256","nodeType":"ElementaryTypeName","src":"11538:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11537:16:24"},"scope":7507,"src":"11468:331:24","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":6503,"nodeType":"Block","src":"12017:113:24","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6501,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":6481,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6468,"src":"12041:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":6482,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6470,"src":"12044:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":6483,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6472,"src":"12047:1:24","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":6480,"name":"mulShr","nodeType":"Identifier","overloadedDeclarations":[6465,6504],"referencedDeclaration":6465,"src":"12034:6:24","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint8_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint8) pure returns (uint256)"}},"id":6484,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12034:15:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":6499,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":6488,"name":"rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6475,"src":"12085:8:24","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$5862","typeString":"enum Math.Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_Rounding_$5862","typeString":"enum Math.Rounding"}],"id":6487,"name":"unsignedRoundsUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7485,"src":"12068:16:24","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_enum$_Rounding_$5862_$returns$_t_bool_$","typeString":"function (enum Math.Rounding) pure returns (bool)"}},"id":6489,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12068:26:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6498,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":6491,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6468,"src":"12105:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":6492,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6470,"src":"12108:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6495,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":6493,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12111:1:24","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"id":6494,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6472,"src":"12116:1:24","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"12111:6:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6490,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967280,"src":"12098:6:24","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":6496,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12098:20:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":6497,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12121:1:24","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"12098:24:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"12068:54:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":6485,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9272,"src":"12052:8:24","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$9272_$","typeString":"type(library SafeCast)"}},"id":6486,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12061:6:24","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":9271,"src":"12052:15:24","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":6500,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12052:71:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12034:89:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":6479,"id":6502,"nodeType":"Return","src":"12027:96:24"}]},"documentation":{"id":6466,"nodeType":"StructuredDocumentation","src":"11805:109:24","text":" @dev Calculates x * y >> n with full precision, following the selected rounding direction."},"id":6504,"implemented":true,"kind":"function","modifiers":[],"name":"mulShr","nameLocation":"11928:6:24","nodeType":"FunctionDefinition","parameters":{"id":6476,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6468,"mutability":"mutable","name":"x","nameLocation":"11943:1:24","nodeType":"VariableDeclaration","scope":6504,"src":"11935:9:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6467,"name":"uint256","nodeType":"ElementaryTypeName","src":"11935:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6470,"mutability":"mutable","name":"y","nameLocation":"11954:1:24","nodeType":"VariableDeclaration","scope":6504,"src":"11946:9:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6469,"name":"uint256","nodeType":"ElementaryTypeName","src":"11946:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6472,"mutability":"mutable","name":"n","nameLocation":"11963:1:24","nodeType":"VariableDeclaration","scope":6504,"src":"11957:7:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":6471,"name":"uint8","nodeType":"ElementaryTypeName","src":"11957:5:24","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":6475,"mutability":"mutable","name":"rounding","nameLocation":"11975:8:24","nodeType":"VariableDeclaration","scope":6504,"src":"11966:17:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$5862","typeString":"enum Math.Rounding"},"typeName":{"id":6474,"nodeType":"UserDefinedTypeName","pathNode":{"id":6473,"name":"Rounding","nameLocations":["11966:8:24"],"nodeType":"IdentifierPath","referencedDeclaration":5862,"src":"11966:8:24"},"referencedDeclaration":5862,"src":"11966:8:24","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$5862","typeString":"enum Math.Rounding"}},"visibility":"internal"}],"src":"11934:50:24"},"returnParameters":{"id":6479,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6478,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6504,"src":"12008:7:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6477,"name":"uint256","nodeType":"ElementaryTypeName","src":"12008:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12007:9:24"},"scope":7507,"src":"11919:211:24","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":6600,"nodeType":"Block","src":"12764:1849:24","statements":[{"id":6599,"nodeType":"UncheckedBlock","src":"12774:1833:24","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6516,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6514,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6509,"src":"12802:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":6515,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12807:1:24","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"12802:6:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6519,"nodeType":"IfStatement","src":"12798:20:24","trueBody":{"expression":{"hexValue":"30","id":6517,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12817:1:24","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":6513,"id":6518,"nodeType":"Return","src":"12810:8:24"}},{"assignments":[6521],"declarations":[{"constant":false,"id":6521,"mutability":"mutable","name":"remainder","nameLocation":"13297:9:24","nodeType":"VariableDeclaration","scope":6599,"src":"13289:17:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6520,"name":"uint256","nodeType":"ElementaryTypeName","src":"13289:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6525,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6524,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6522,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6507,"src":"13309:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"%","rightExpression":{"id":6523,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6509,"src":"13313:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13309:5:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"13289:25:24"},{"assignments":[6527],"declarations":[{"constant":false,"id":6527,"mutability":"mutable","name":"gcd","nameLocation":"13336:3:24","nodeType":"VariableDeclaration","scope":6599,"src":"13328:11:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6526,"name":"uint256","nodeType":"ElementaryTypeName","src":"13328:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6529,"initialValue":{"id":6528,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6509,"src":"13342:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"13328:15:24"},{"assignments":[6531],"declarations":[{"constant":false,"id":6531,"mutability":"mutable","name":"x","nameLocation":"13486:1:24","nodeType":"VariableDeclaration","scope":6599,"src":"13479:8:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6530,"name":"int256","nodeType":"ElementaryTypeName","src":"13479:6:24","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":6533,"initialValue":{"hexValue":"30","id":6532,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13490:1:24","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"13479:12:24"},{"assignments":[6535],"declarations":[{"constant":false,"id":6535,"mutability":"mutable","name":"y","nameLocation":"13512:1:24","nodeType":"VariableDeclaration","scope":6599,"src":"13505:8:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6534,"name":"int256","nodeType":"ElementaryTypeName","src":"13505:6:24","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":6537,"initialValue":{"hexValue":"31","id":6536,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13516:1:24","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"VariableDeclarationStatement","src":"13505:12:24"},{"body":{"id":6574,"nodeType":"Block","src":"13555:882:24","statements":[{"assignments":[6542],"declarations":[{"constant":false,"id":6542,"mutability":"mutable","name":"quotient","nameLocation":"13581:8:24","nodeType":"VariableDeclaration","scope":6574,"src":"13573:16:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6541,"name":"uint256","nodeType":"ElementaryTypeName","src":"13573:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6546,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6545,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6543,"name":"gcd","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6527,"src":"13592:3:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6544,"name":"remainder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6521,"src":"13598:9:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13592:15:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"13573:34:24"},{"expression":{"id":6557,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":6547,"name":"gcd","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6527,"src":"13627:3:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":6548,"name":"remainder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6521,"src":"13632:9:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":6549,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"13626:16:24","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"components":[{"id":6550,"name":"remainder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6521,"src":"13732:9:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6555,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6551,"name":"gcd","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6527,"src":"13977:3:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6554,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6552,"name":"remainder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6521,"src":"13983:9:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6553,"name":"quotient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6542,"src":"13995:8:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13983:20:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13977:26:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":6556,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"13645:376:24","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"src":"13626:395:24","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6558,"nodeType":"ExpressionStatement","src":"13626:395:24"},{"expression":{"id":6572,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":6559,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6531,"src":"14041:1:24","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},{"id":6560,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6535,"src":"14044:1:24","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6561,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"14040:6:24","typeDescriptions":{"typeIdentifier":"t_tuple$_t_int256_$_t_int256_$","typeString":"tuple(int256,int256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"components":[{"id":6562,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6535,"src":"14126:1:24","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6570,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6563,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6531,"src":"14380:1:24","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6569,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6564,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6535,"src":"14384:1:24","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"arguments":[{"id":6567,"name":"quotient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6542,"src":"14395:8:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6566,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14388:6:24","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":6565,"name":"int256","nodeType":"ElementaryTypeName","src":"14388:6:24","typeDescriptions":{}}},"id":6568,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14388:16:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"14384:20:24","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"14380:24:24","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6571,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"14049:373:24","typeDescriptions":{"typeIdentifier":"t_tuple$_t_int256_$_t_int256_$","typeString":"tuple(int256,int256)"}},"src":"14040:382:24","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6573,"nodeType":"ExpressionStatement","src":"14040:382:24"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6540,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6538,"name":"remainder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6521,"src":"13539:9:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":6539,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13552:1:24","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"13539:14:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6575,"nodeType":"WhileStatement","src":"13532:905:24"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6578,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6576,"name":"gcd","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6527,"src":"14455:3:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"31","id":6577,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14462:1:24","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"14455:8:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6581,"nodeType":"IfStatement","src":"14451:22:24","trueBody":{"expression":{"hexValue":"30","id":6579,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14472:1:24","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":6513,"id":6580,"nodeType":"Return","src":"14465:8:24"}},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6585,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6583,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6531,"src":"14524:1:24","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"30","id":6584,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14528:1:24","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"14524:5:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6592,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6586,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6509,"src":"14531:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"arguments":[{"id":6590,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"-","prefix":true,"src":"14543:2:24","subExpression":{"id":6589,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6531,"src":"14544:1:24","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":6588,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14535:7:24","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":6587,"name":"uint256","nodeType":"ElementaryTypeName","src":"14535:7:24","typeDescriptions":{}}},"id":6591,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14535:11:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14531:15:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":6595,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6531,"src":"14556:1:24","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":6594,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14548:7:24","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":6593,"name":"uint256","nodeType":"ElementaryTypeName","src":"14548:7:24","typeDescriptions":{}}},"id":6596,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14548:10:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6582,"name":"ternary","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6139,"src":"14516:7:24","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (bool,uint256,uint256) pure returns (uint256)"}},"id":6597,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14516:43:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":6513,"id":6598,"nodeType":"Return","src":"14509:50:24"}]}]},"documentation":{"id":6505,"nodeType":"StructuredDocumentation","src":"12136:553:24","text":" @dev Calculate the modular multiplicative inverse of a number in Z/nZ.\n If n is a prime, then Z/nZ is a field. In that case all elements are inversible, except 0.\n If n is not a prime, then Z/nZ is not a field, and some elements might not be inversible.\n If the input value is not inversible, 0 is returned.\n NOTE: If you know for sure that n is (big) a prime, it may be cheaper to use Fermat's little theorem and get the\n inverse using `Math.modExp(a, n - 2, n)`. See {invModPrime}."},"id":6601,"implemented":true,"kind":"function","modifiers":[],"name":"invMod","nameLocation":"12703:6:24","nodeType":"FunctionDefinition","parameters":{"id":6510,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6507,"mutability":"mutable","name":"a","nameLocation":"12718:1:24","nodeType":"VariableDeclaration","scope":6601,"src":"12710:9:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6506,"name":"uint256","nodeType":"ElementaryTypeName","src":"12710:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6509,"mutability":"mutable","name":"n","nameLocation":"12729:1:24","nodeType":"VariableDeclaration","scope":6601,"src":"12721:9:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6508,"name":"uint256","nodeType":"ElementaryTypeName","src":"12721:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12709:22:24"},"returnParameters":{"id":6513,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6512,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6601,"src":"12755:7:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6511,"name":"uint256","nodeType":"ElementaryTypeName","src":"12755:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12754:9:24"},"scope":7507,"src":"12694:1919:24","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":6621,"nodeType":"Block","src":"15213:82:24","statements":[{"id":6620,"nodeType":"UncheckedBlock","src":"15223:66:24","statements":[{"expression":{"arguments":[{"id":6613,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6604,"src":"15266:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6616,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6614,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6606,"src":"15269:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"32","id":6615,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15273:1:24","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"15269:5:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":6617,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6606,"src":"15276:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":6611,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7507,"src":"15254:4:24","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$7507_$","typeString":"type(library Math)"}},"id":6612,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15259:6:24","memberName":"modExp","nodeType":"MemberAccess","referencedDeclaration":6658,"src":"15254:11:24","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) view returns (uint256)"}},"id":6618,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15254:24:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":6610,"id":6619,"nodeType":"Return","src":"15247:31:24"}]}]},"documentation":{"id":6602,"nodeType":"StructuredDocumentation","src":"14619:514:24","text":" @dev Variant of {invMod}. More efficient, but only works if `p` is known to be a prime greater than `2`.\n From https://en.wikipedia.org/wiki/Fermat%27s_little_theorem[Fermat's little theorem], we know that if p is\n prime, then `a**(p-1) ≡ 1 mod p`. As a consequence, we have `a * a**(p-2) ≡ 1 mod p`, which means that\n `a**(p-2)` is the modular multiplicative inverse of a in Fp.\n NOTE: this function does NOT check that `p` is a prime greater than `2`."},"id":6622,"implemented":true,"kind":"function","modifiers":[],"name":"invModPrime","nameLocation":"15147:11:24","nodeType":"FunctionDefinition","parameters":{"id":6607,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6604,"mutability":"mutable","name":"a","nameLocation":"15167:1:24","nodeType":"VariableDeclaration","scope":6622,"src":"15159:9:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6603,"name":"uint256","nodeType":"ElementaryTypeName","src":"15159:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6606,"mutability":"mutable","name":"p","nameLocation":"15178:1:24","nodeType":"VariableDeclaration","scope":6622,"src":"15170:9:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6605,"name":"uint256","nodeType":"ElementaryTypeName","src":"15170:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15158:22:24"},"returnParameters":{"id":6610,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6609,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6622,"src":"15204:7:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6608,"name":"uint256","nodeType":"ElementaryTypeName","src":"15204:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15203:9:24"},"scope":7507,"src":"15138:157:24","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":6657,"nodeType":"Block","src":"16065:174:24","statements":[{"assignments":[6635,6637],"declarations":[{"constant":false,"id":6635,"mutability":"mutable","name":"success","nameLocation":"16081:7:24","nodeType":"VariableDeclaration","scope":6657,"src":"16076:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6634,"name":"bool","nodeType":"ElementaryTypeName","src":"16076:4:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":6637,"mutability":"mutable","name":"result","nameLocation":"16098:6:24","nodeType":"VariableDeclaration","scope":6657,"src":"16090:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6636,"name":"uint256","nodeType":"ElementaryTypeName","src":"16090:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6643,"initialValue":{"arguments":[{"id":6639,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6625,"src":"16118:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":6640,"name":"e","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6627,"src":"16121:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":6641,"name":"m","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6629,"src":"16124:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6638,"name":"tryModExp","nodeType":"Identifier","overloadedDeclarations":[6682,6764],"referencedDeclaration":6682,"src":"16108:9:24","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_uint256_$","typeString":"function (uint256,uint256,uint256) view returns (bool,uint256)"}},"id":6642,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16108:18:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$","typeString":"tuple(bool,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"16075:51:24"},{"condition":{"id":6645,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"16140:8:24","subExpression":{"id":6644,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6635,"src":"16141:7:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6654,"nodeType":"IfStatement","src":"16136:74:24","trueBody":{"id":6653,"nodeType":"Block","src":"16150:60:24","statements":[{"expression":{"arguments":[{"expression":{"id":6649,"name":"Panic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3959,"src":"16176:5:24","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Panic_$3959_$","typeString":"type(library Panic)"}},"id":6650,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"16182:16:24","memberName":"DIVISION_BY_ZERO","nodeType":"MemberAccess","referencedDeclaration":3926,"src":"16176:22:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":6646,"name":"Panic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3959,"src":"16164:5:24","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Panic_$3959_$","typeString":"type(library Panic)"}},"id":6648,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16170:5:24","memberName":"panic","nodeType":"MemberAccess","referencedDeclaration":3958,"src":"16164:11:24","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$__$","typeString":"function (uint256) pure"}},"id":6651,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16164:35:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6652,"nodeType":"ExpressionStatement","src":"16164:35:24"}]}},{"expression":{"id":6655,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6637,"src":"16226:6:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":6633,"id":6656,"nodeType":"Return","src":"16219:13:24"}]},"documentation":{"id":6623,"nodeType":"StructuredDocumentation","src":"15301:678:24","text":" @dev Returns the modular exponentiation of the specified base, exponent and modulus (b ** e % m)\n Requirements:\n - modulus can't be zero\n - underlying staticcall to precompile must succeed\n IMPORTANT: The result is only valid if the underlying call succeeds. When using this function, make\n sure the chain you're using it on supports the precompiled contract for modular exponentiation\n at address 0x05 as specified in https://eips.ethereum.org/EIPS/eip-198[EIP-198]. Otherwise,\n the underlying function will succeed given the lack of a revert, but the result may be incorrectly\n interpreted as 0."},"id":6658,"implemented":true,"kind":"function","modifiers":[],"name":"modExp","nameLocation":"15993:6:24","nodeType":"FunctionDefinition","parameters":{"id":6630,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6625,"mutability":"mutable","name":"b","nameLocation":"16008:1:24","nodeType":"VariableDeclaration","scope":6658,"src":"16000:9:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6624,"name":"uint256","nodeType":"ElementaryTypeName","src":"16000:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6627,"mutability":"mutable","name":"e","nameLocation":"16019:1:24","nodeType":"VariableDeclaration","scope":6658,"src":"16011:9:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6626,"name":"uint256","nodeType":"ElementaryTypeName","src":"16011:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6629,"mutability":"mutable","name":"m","nameLocation":"16030:1:24","nodeType":"VariableDeclaration","scope":6658,"src":"16022:9:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6628,"name":"uint256","nodeType":"ElementaryTypeName","src":"16022:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15999:33:24"},"returnParameters":{"id":6633,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6632,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6658,"src":"16056:7:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6631,"name":"uint256","nodeType":"ElementaryTypeName","src":"16056:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16055:9:24"},"scope":7507,"src":"15984:255:24","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":6681,"nodeType":"Block","src":"17093:1493:24","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6674,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6672,"name":"m","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6665,"src":"17107:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":6673,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17112:1:24","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"17107:6:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6679,"nodeType":"IfStatement","src":"17103:29:24","trueBody":{"expression":{"components":[{"hexValue":"66616c7365","id":6675,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"17123:5:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"hexValue":"30","id":6676,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17130:1:24","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":6677,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"17122:10:24","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_rational_0_by_1_$","typeString":"tuple(bool,int_const 0)"}},"functionReturnParameters":6671,"id":6678,"nodeType":"Return","src":"17115:17:24"}},{"AST":{"nativeSrc":"17167:1413:24","nodeType":"YulBlock","src":"17167:1413:24","statements":[{"nativeSrc":"17181:22:24","nodeType":"YulVariableDeclaration","src":"17181:22:24","value":{"arguments":[{"kind":"number","nativeSrc":"17198:4:24","nodeType":"YulLiteral","src":"17198:4:24","type":"","value":"0x40"}],"functionName":{"name":"mload","nativeSrc":"17192:5:24","nodeType":"YulIdentifier","src":"17192:5:24"},"nativeSrc":"17192:11:24","nodeType":"YulFunctionCall","src":"17192:11:24"},"variables":[{"name":"ptr","nativeSrc":"17185:3:24","nodeType":"YulTypedName","src":"17185:3:24","type":""}]},{"expression":{"arguments":[{"name":"ptr","nativeSrc":"18111:3:24","nodeType":"YulIdentifier","src":"18111:3:24"},{"kind":"number","nativeSrc":"18116:4:24","nodeType":"YulLiteral","src":"18116:4:24","type":"","value":"0x20"}],"functionName":{"name":"mstore","nativeSrc":"18104:6:24","nodeType":"YulIdentifier","src":"18104:6:24"},"nativeSrc":"18104:17:24","nodeType":"YulFunctionCall","src":"18104:17:24"},"nativeSrc":"18104:17:24","nodeType":"YulExpressionStatement","src":"18104:17:24"},{"expression":{"arguments":[{"arguments":[{"name":"ptr","nativeSrc":"18145:3:24","nodeType":"YulIdentifier","src":"18145:3:24"},{"kind":"number","nativeSrc":"18150:4:24","nodeType":"YulLiteral","src":"18150:4:24","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"18141:3:24","nodeType":"YulIdentifier","src":"18141:3:24"},"nativeSrc":"18141:14:24","nodeType":"YulFunctionCall","src":"18141:14:24"},{"kind":"number","nativeSrc":"18157:4:24","nodeType":"YulLiteral","src":"18157:4:24","type":"","value":"0x20"}],"functionName":{"name":"mstore","nativeSrc":"18134:6:24","nodeType":"YulIdentifier","src":"18134:6:24"},"nativeSrc":"18134:28:24","nodeType":"YulFunctionCall","src":"18134:28:24"},"nativeSrc":"18134:28:24","nodeType":"YulExpressionStatement","src":"18134:28:24"},{"expression":{"arguments":[{"arguments":[{"name":"ptr","nativeSrc":"18186:3:24","nodeType":"YulIdentifier","src":"18186:3:24"},{"kind":"number","nativeSrc":"18191:4:24","nodeType":"YulLiteral","src":"18191:4:24","type":"","value":"0x40"}],"functionName":{"name":"add","nativeSrc":"18182:3:24","nodeType":"YulIdentifier","src":"18182:3:24"},"nativeSrc":"18182:14:24","nodeType":"YulFunctionCall","src":"18182:14:24"},{"kind":"number","nativeSrc":"18198:4:24","nodeType":"YulLiteral","src":"18198:4:24","type":"","value":"0x20"}],"functionName":{"name":"mstore","nativeSrc":"18175:6:24","nodeType":"YulIdentifier","src":"18175:6:24"},"nativeSrc":"18175:28:24","nodeType":"YulFunctionCall","src":"18175:28:24"},"nativeSrc":"18175:28:24","nodeType":"YulExpressionStatement","src":"18175:28:24"},{"expression":{"arguments":[{"arguments":[{"name":"ptr","nativeSrc":"18227:3:24","nodeType":"YulIdentifier","src":"18227:3:24"},{"kind":"number","nativeSrc":"18232:4:24","nodeType":"YulLiteral","src":"18232:4:24","type":"","value":"0x60"}],"functionName":{"name":"add","nativeSrc":"18223:3:24","nodeType":"YulIdentifier","src":"18223:3:24"},"nativeSrc":"18223:14:24","nodeType":"YulFunctionCall","src":"18223:14:24"},{"name":"b","nativeSrc":"18239:1:24","nodeType":"YulIdentifier","src":"18239:1:24"}],"functionName":{"name":"mstore","nativeSrc":"18216:6:24","nodeType":"YulIdentifier","src":"18216:6:24"},"nativeSrc":"18216:25:24","nodeType":"YulFunctionCall","src":"18216:25:24"},"nativeSrc":"18216:25:24","nodeType":"YulExpressionStatement","src":"18216:25:24"},{"expression":{"arguments":[{"arguments":[{"name":"ptr","nativeSrc":"18265:3:24","nodeType":"YulIdentifier","src":"18265:3:24"},{"kind":"number","nativeSrc":"18270:4:24","nodeType":"YulLiteral","src":"18270:4:24","type":"","value":"0x80"}],"functionName":{"name":"add","nativeSrc":"18261:3:24","nodeType":"YulIdentifier","src":"18261:3:24"},"nativeSrc":"18261:14:24","nodeType":"YulFunctionCall","src":"18261:14:24"},{"name":"e","nativeSrc":"18277:1:24","nodeType":"YulIdentifier","src":"18277:1:24"}],"functionName":{"name":"mstore","nativeSrc":"18254:6:24","nodeType":"YulIdentifier","src":"18254:6:24"},"nativeSrc":"18254:25:24","nodeType":"YulFunctionCall","src":"18254:25:24"},"nativeSrc":"18254:25:24","nodeType":"YulExpressionStatement","src":"18254:25:24"},{"expression":{"arguments":[{"arguments":[{"name":"ptr","nativeSrc":"18303:3:24","nodeType":"YulIdentifier","src":"18303:3:24"},{"kind":"number","nativeSrc":"18308:4:24","nodeType":"YulLiteral","src":"18308:4:24","type":"","value":"0xa0"}],"functionName":{"name":"add","nativeSrc":"18299:3:24","nodeType":"YulIdentifier","src":"18299:3:24"},"nativeSrc":"18299:14:24","nodeType":"YulFunctionCall","src":"18299:14:24"},{"name":"m","nativeSrc":"18315:1:24","nodeType":"YulIdentifier","src":"18315:1:24"}],"functionName":{"name":"mstore","nativeSrc":"18292:6:24","nodeType":"YulIdentifier","src":"18292:6:24"},"nativeSrc":"18292:25:24","nodeType":"YulFunctionCall","src":"18292:25:24"},"nativeSrc":"18292:25:24","nodeType":"YulExpressionStatement","src":"18292:25:24"},{"nativeSrc":"18479:57:24","nodeType":"YulAssignment","src":"18479:57:24","value":{"arguments":[{"arguments":[],"functionName":{"name":"gas","nativeSrc":"18501:3:24","nodeType":"YulIdentifier","src":"18501:3:24"},"nativeSrc":"18501:5:24","nodeType":"YulFunctionCall","src":"18501:5:24"},{"kind":"number","nativeSrc":"18508:4:24","nodeType":"YulLiteral","src":"18508:4:24","type":"","value":"0x05"},{"name":"ptr","nativeSrc":"18514:3:24","nodeType":"YulIdentifier","src":"18514:3:24"},{"kind":"number","nativeSrc":"18519:4:24","nodeType":"YulLiteral","src":"18519:4:24","type":"","value":"0xc0"},{"kind":"number","nativeSrc":"18525:4:24","nodeType":"YulLiteral","src":"18525:4:24","type":"","value":"0x00"},{"kind":"number","nativeSrc":"18531:4:24","nodeType":"YulLiteral","src":"18531:4:24","type":"","value":"0x20"}],"functionName":{"name":"staticcall","nativeSrc":"18490:10:24","nodeType":"YulIdentifier","src":"18490:10:24"},"nativeSrc":"18490:46:24","nodeType":"YulFunctionCall","src":"18490:46:24"},"variableNames":[{"name":"success","nativeSrc":"18479:7:24","nodeType":"YulIdentifier","src":"18479:7:24"}]},{"nativeSrc":"18549:21:24","nodeType":"YulAssignment","src":"18549:21:24","value":{"arguments":[{"kind":"number","nativeSrc":"18565:4:24","nodeType":"YulLiteral","src":"18565:4:24","type":"","value":"0x00"}],"functionName":{"name":"mload","nativeSrc":"18559:5:24","nodeType":"YulIdentifier","src":"18559:5:24"},"nativeSrc":"18559:11:24","nodeType":"YulFunctionCall","src":"18559:11:24"},"variableNames":[{"name":"result","nativeSrc":"18549:6:24","nodeType":"YulIdentifier","src":"18549:6:24"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":6661,"isOffset":false,"isSlot":false,"src":"18239:1:24","valueSize":1},{"declaration":6663,"isOffset":false,"isSlot":false,"src":"18277:1:24","valueSize":1},{"declaration":6665,"isOffset":false,"isSlot":false,"src":"18315:1:24","valueSize":1},{"declaration":6670,"isOffset":false,"isSlot":false,"src":"18549:6:24","valueSize":1},{"declaration":6668,"isOffset":false,"isSlot":false,"src":"18479:7:24","valueSize":1}],"flags":["memory-safe"],"id":6680,"nodeType":"InlineAssembly","src":"17142:1438:24"}]},"documentation":{"id":6659,"nodeType":"StructuredDocumentation","src":"16245:738:24","text":" @dev Returns the modular exponentiation of the specified base, exponent and modulus (b ** e % m).\n It includes a success flag indicating if the operation succeeded. Operation will be marked as failed if trying\n to operate modulo 0 or if the underlying precompile reverted.\n IMPORTANT: The result is only valid if the success flag is true. When using this function, make sure the chain\n you're using it on supports the precompiled contract for modular exponentiation at address 0x05 as specified in\n https://eips.ethereum.org/EIPS/eip-198[EIP-198]. Otherwise, the underlying function will succeed given the lack\n of a revert, but the result may be incorrectly interpreted as 0."},"id":6682,"implemented":true,"kind":"function","modifiers":[],"name":"tryModExp","nameLocation":"16997:9:24","nodeType":"FunctionDefinition","parameters":{"id":6666,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6661,"mutability":"mutable","name":"b","nameLocation":"17015:1:24","nodeType":"VariableDeclaration","scope":6682,"src":"17007:9:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6660,"name":"uint256","nodeType":"ElementaryTypeName","src":"17007:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6663,"mutability":"mutable","name":"e","nameLocation":"17026:1:24","nodeType":"VariableDeclaration","scope":6682,"src":"17018:9:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6662,"name":"uint256","nodeType":"ElementaryTypeName","src":"17018:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6665,"mutability":"mutable","name":"m","nameLocation":"17037:1:24","nodeType":"VariableDeclaration","scope":6682,"src":"17029:9:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6664,"name":"uint256","nodeType":"ElementaryTypeName","src":"17029:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17006:33:24"},"returnParameters":{"id":6671,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6668,"mutability":"mutable","name":"success","nameLocation":"17068:7:24","nodeType":"VariableDeclaration","scope":6682,"src":"17063:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6667,"name":"bool","nodeType":"ElementaryTypeName","src":"17063:4:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":6670,"mutability":"mutable","name":"result","nameLocation":"17085:6:24","nodeType":"VariableDeclaration","scope":6682,"src":"17077:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6669,"name":"uint256","nodeType":"ElementaryTypeName","src":"17077:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17062:30:24"},"scope":7507,"src":"16988:1598:24","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":6717,"nodeType":"Block","src":"18783:179:24","statements":[{"assignments":[6695,6697],"declarations":[{"constant":false,"id":6695,"mutability":"mutable","name":"success","nameLocation":"18799:7:24","nodeType":"VariableDeclaration","scope":6717,"src":"18794:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6694,"name":"bool","nodeType":"ElementaryTypeName","src":"18794:4:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":6697,"mutability":"mutable","name":"result","nameLocation":"18821:6:24","nodeType":"VariableDeclaration","scope":6717,"src":"18808:19:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":6696,"name":"bytes","nodeType":"ElementaryTypeName","src":"18808:5:24","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":6703,"initialValue":{"arguments":[{"id":6699,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6685,"src":"18841:1:24","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":6700,"name":"e","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6687,"src":"18844:1:24","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":6701,"name":"m","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6689,"src":"18847:1:24","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":6698,"name":"tryModExp","nodeType":"Identifier","overloadedDeclarations":[6682,6764],"referencedDeclaration":6764,"src":"18831:9:24","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory,bytes memory,bytes memory) view returns (bool,bytes memory)"}},"id":6702,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18831:18:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"18793:56:24"},{"condition":{"id":6705,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"18863:8:24","subExpression":{"id":6704,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6695,"src":"18864:7:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6714,"nodeType":"IfStatement","src":"18859:74:24","trueBody":{"id":6713,"nodeType":"Block","src":"18873:60:24","statements":[{"expression":{"arguments":[{"expression":{"id":6709,"name":"Panic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3959,"src":"18899:5:24","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Panic_$3959_$","typeString":"type(library Panic)"}},"id":6710,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"18905:16:24","memberName":"DIVISION_BY_ZERO","nodeType":"MemberAccess","referencedDeclaration":3926,"src":"18899:22:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":6706,"name":"Panic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3959,"src":"18887:5:24","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Panic_$3959_$","typeString":"type(library Panic)"}},"id":6708,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18893:5:24","memberName":"panic","nodeType":"MemberAccess","referencedDeclaration":3958,"src":"18887:11:24","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$__$","typeString":"function (uint256) pure"}},"id":6711,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18887:35:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6712,"nodeType":"ExpressionStatement","src":"18887:35:24"}]}},{"expression":{"id":6715,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6697,"src":"18949:6:24","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":6693,"id":6716,"nodeType":"Return","src":"18942:13:24"}]},"documentation":{"id":6683,"nodeType":"StructuredDocumentation","src":"18592:85:24","text":" @dev Variant of {modExp} that supports inputs of arbitrary length."},"id":6718,"implemented":true,"kind":"function","modifiers":[],"name":"modExp","nameLocation":"18691:6:24","nodeType":"FunctionDefinition","parameters":{"id":6690,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6685,"mutability":"mutable","name":"b","nameLocation":"18711:1:24","nodeType":"VariableDeclaration","scope":6718,"src":"18698:14:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":6684,"name":"bytes","nodeType":"ElementaryTypeName","src":"18698:5:24","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":6687,"mutability":"mutable","name":"e","nameLocation":"18727:1:24","nodeType":"VariableDeclaration","scope":6718,"src":"18714:14:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":6686,"name":"bytes","nodeType":"ElementaryTypeName","src":"18714:5:24","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":6689,"mutability":"mutable","name":"m","nameLocation":"18743:1:24","nodeType":"VariableDeclaration","scope":6718,"src":"18730:14:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":6688,"name":"bytes","nodeType":"ElementaryTypeName","src":"18730:5:24","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"18697:48:24"},"returnParameters":{"id":6693,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6692,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6718,"src":"18769:12:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":6691,"name":"bytes","nodeType":"ElementaryTypeName","src":"18769:5:24","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"18768:14:24"},"scope":7507,"src":"18682:280:24","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":6763,"nodeType":"Block","src":"19216:771:24","statements":[{"condition":{"arguments":[{"id":6733,"name":"m","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6725,"src":"19241:1:24","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":6732,"name":"_zeroBytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6811,"src":"19230:10:24","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bool_$","typeString":"function (bytes memory) pure returns (bool)"}},"id":6734,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19230:13:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6742,"nodeType":"IfStatement","src":"19226:47:24","trueBody":{"expression":{"components":[{"hexValue":"66616c7365","id":6735,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"19253:5:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"arguments":[{"hexValue":"30","id":6738,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19270:1:24","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":6737,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"19260:9:24","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$","typeString":"function (uint256) pure returns (bytes memory)"},"typeName":{"id":6736,"name":"bytes","nodeType":"ElementaryTypeName","src":"19264:5:24","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}}},"id":6739,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19260:12:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"id":6740,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"19252:21:24","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"functionReturnParameters":6731,"id":6741,"nodeType":"Return","src":"19245:28:24"}},{"assignments":[6744],"declarations":[{"constant":false,"id":6744,"mutability":"mutable","name":"mLen","nameLocation":"19292:4:24","nodeType":"VariableDeclaration","scope":6763,"src":"19284:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6743,"name":"uint256","nodeType":"ElementaryTypeName","src":"19284:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6747,"initialValue":{"expression":{"id":6745,"name":"m","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6725,"src":"19299:1:24","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":6746,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19301:6:24","memberName":"length","nodeType":"MemberAccess","src":"19299:8:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"19284:23:24"},{"expression":{"id":6760,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6748,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6730,"src":"19389:6:24","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":6751,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6721,"src":"19415:1:24","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":6752,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19417:6:24","memberName":"length","nodeType":"MemberAccess","src":"19415:8:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":6753,"name":"e","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6723,"src":"19425:1:24","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":6754,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19427:6:24","memberName":"length","nodeType":"MemberAccess","src":"19425:8:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":6755,"name":"mLen","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6744,"src":"19435:4:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":6756,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6721,"src":"19441:1:24","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":6757,"name":"e","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6723,"src":"19444:1:24","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":6758,"name":"m","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6725,"src":"19447:1:24","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":6749,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967295,"src":"19398:3:24","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":6750,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"19402:12:24","memberName":"encodePacked","nodeType":"MemberAccess","src":"19398:16:24","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":6759,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19398:51:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"src":"19389:60:24","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":6761,"nodeType":"ExpressionStatement","src":"19389:60:24"},{"AST":{"nativeSrc":"19485:496:24","nodeType":"YulBlock","src":"19485:496:24","statements":[{"nativeSrc":"19499:32:24","nodeType":"YulVariableDeclaration","src":"19499:32:24","value":{"arguments":[{"name":"result","nativeSrc":"19518:6:24","nodeType":"YulIdentifier","src":"19518:6:24"},{"kind":"number","nativeSrc":"19526:4:24","nodeType":"YulLiteral","src":"19526:4:24","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"19514:3:24","nodeType":"YulIdentifier","src":"19514:3:24"},"nativeSrc":"19514:17:24","nodeType":"YulFunctionCall","src":"19514:17:24"},"variables":[{"name":"dataPtr","nativeSrc":"19503:7:24","nodeType":"YulTypedName","src":"19503:7:24","type":""}]},{"nativeSrc":"19621:73:24","nodeType":"YulAssignment","src":"19621:73:24","value":{"arguments":[{"arguments":[],"functionName":{"name":"gas","nativeSrc":"19643:3:24","nodeType":"YulIdentifier","src":"19643:3:24"},"nativeSrc":"19643:5:24","nodeType":"YulFunctionCall","src":"19643:5:24"},{"kind":"number","nativeSrc":"19650:4:24","nodeType":"YulLiteral","src":"19650:4:24","type":"","value":"0x05"},{"name":"dataPtr","nativeSrc":"19656:7:24","nodeType":"YulIdentifier","src":"19656:7:24"},{"arguments":[{"name":"result","nativeSrc":"19671:6:24","nodeType":"YulIdentifier","src":"19671:6:24"}],"functionName":{"name":"mload","nativeSrc":"19665:5:24","nodeType":"YulIdentifier","src":"19665:5:24"},"nativeSrc":"19665:13:24","nodeType":"YulFunctionCall","src":"19665:13:24"},{"name":"dataPtr","nativeSrc":"19680:7:24","nodeType":"YulIdentifier","src":"19680:7:24"},{"name":"mLen","nativeSrc":"19689:4:24","nodeType":"YulIdentifier","src":"19689:4:24"}],"functionName":{"name":"staticcall","nativeSrc":"19632:10:24","nodeType":"YulIdentifier","src":"19632:10:24"},"nativeSrc":"19632:62:24","nodeType":"YulFunctionCall","src":"19632:62:24"},"variableNames":[{"name":"success","nativeSrc":"19621:7:24","nodeType":"YulIdentifier","src":"19621:7:24"}]},{"expression":{"arguments":[{"name":"result","nativeSrc":"19850:6:24","nodeType":"YulIdentifier","src":"19850:6:24"},{"name":"mLen","nativeSrc":"19858:4:24","nodeType":"YulIdentifier","src":"19858:4:24"}],"functionName":{"name":"mstore","nativeSrc":"19843:6:24","nodeType":"YulIdentifier","src":"19843:6:24"},"nativeSrc":"19843:20:24","nodeType":"YulFunctionCall","src":"19843:20:24"},"nativeSrc":"19843:20:24","nodeType":"YulExpressionStatement","src":"19843:20:24"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"19946:4:24","nodeType":"YulLiteral","src":"19946:4:24","type":"","value":"0x40"},{"arguments":[{"name":"dataPtr","nativeSrc":"19956:7:24","nodeType":"YulIdentifier","src":"19956:7:24"},{"name":"mLen","nativeSrc":"19965:4:24","nodeType":"YulIdentifier","src":"19965:4:24"}],"functionName":{"name":"add","nativeSrc":"19952:3:24","nodeType":"YulIdentifier","src":"19952:3:24"},"nativeSrc":"19952:18:24","nodeType":"YulFunctionCall","src":"19952:18:24"}],"functionName":{"name":"mstore","nativeSrc":"19939:6:24","nodeType":"YulIdentifier","src":"19939:6:24"},"nativeSrc":"19939:32:24","nodeType":"YulFunctionCall","src":"19939:32:24"},"nativeSrc":"19939:32:24","nodeType":"YulExpressionStatement","src":"19939:32:24"}]},"evmVersion":"cancun","externalReferences":[{"declaration":6744,"isOffset":false,"isSlot":false,"src":"19689:4:24","valueSize":1},{"declaration":6744,"isOffset":false,"isSlot":false,"src":"19858:4:24","valueSize":1},{"declaration":6744,"isOffset":false,"isSlot":false,"src":"19965:4:24","valueSize":1},{"declaration":6730,"isOffset":false,"isSlot":false,"src":"19518:6:24","valueSize":1},{"declaration":6730,"isOffset":false,"isSlot":false,"src":"19671:6:24","valueSize":1},{"declaration":6730,"isOffset":false,"isSlot":false,"src":"19850:6:24","valueSize":1},{"declaration":6728,"isOffset":false,"isSlot":false,"src":"19621:7:24","valueSize":1}],"flags":["memory-safe"],"id":6762,"nodeType":"InlineAssembly","src":"19460:521:24"}]},"documentation":{"id":6719,"nodeType":"StructuredDocumentation","src":"18968:88:24","text":" @dev Variant of {tryModExp} that supports inputs of arbitrary length."},"id":6764,"implemented":true,"kind":"function","modifiers":[],"name":"tryModExp","nameLocation":"19070:9:24","nodeType":"FunctionDefinition","parameters":{"id":6726,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6721,"mutability":"mutable","name":"b","nameLocation":"19102:1:24","nodeType":"VariableDeclaration","scope":6764,"src":"19089:14:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":6720,"name":"bytes","nodeType":"ElementaryTypeName","src":"19089:5:24","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":6723,"mutability":"mutable","name":"e","nameLocation":"19126:1:24","nodeType":"VariableDeclaration","scope":6764,"src":"19113:14:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":6722,"name":"bytes","nodeType":"ElementaryTypeName","src":"19113:5:24","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":6725,"mutability":"mutable","name":"m","nameLocation":"19150:1:24","nodeType":"VariableDeclaration","scope":6764,"src":"19137:14:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":6724,"name":"bytes","nodeType":"ElementaryTypeName","src":"19137:5:24","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"19079:78:24"},"returnParameters":{"id":6731,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6728,"mutability":"mutable","name":"success","nameLocation":"19186:7:24","nodeType":"VariableDeclaration","scope":6764,"src":"19181:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6727,"name":"bool","nodeType":"ElementaryTypeName","src":"19181:4:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":6730,"mutability":"mutable","name":"result","nameLocation":"19208:6:24","nodeType":"VariableDeclaration","scope":6764,"src":"19195:19:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":6729,"name":"bytes","nodeType":"ElementaryTypeName","src":"19195:5:24","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"19180:35:24"},"scope":7507,"src":"19061:926:24","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":6810,"nodeType":"Block","src":"20139:417:24","statements":[{"assignments":[6773],"declarations":[{"constant":false,"id":6773,"mutability":"mutable","name":"chunk","nameLocation":"20157:5:24","nodeType":"VariableDeclaration","scope":6810,"src":"20149:13:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6772,"name":"uint256","nodeType":"ElementaryTypeName","src":"20149:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6774,"nodeType":"VariableDeclarationStatement","src":"20149:13:24"},{"body":{"id":6806,"nodeType":"Block","src":"20222:307:24","statements":[{"AST":{"nativeSrc":"20324:73:24","nodeType":"YulBlock","src":"20324:73:24","statements":[{"nativeSrc":"20342:41:24","nodeType":"YulAssignment","src":"20342:41:24","value":{"arguments":[{"arguments":[{"arguments":[{"name":"buffer","nativeSrc":"20365:6:24","nodeType":"YulIdentifier","src":"20365:6:24"},{"kind":"number","nativeSrc":"20373:4:24","nodeType":"YulLiteral","src":"20373:4:24","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"20361:3:24","nodeType":"YulIdentifier","src":"20361:3:24"},"nativeSrc":"20361:17:24","nodeType":"YulFunctionCall","src":"20361:17:24"},{"name":"i","nativeSrc":"20380:1:24","nodeType":"YulIdentifier","src":"20380:1:24"}],"functionName":{"name":"add","nativeSrc":"20357:3:24","nodeType":"YulIdentifier","src":"20357:3:24"},"nativeSrc":"20357:25:24","nodeType":"YulFunctionCall","src":"20357:25:24"}],"functionName":{"name":"mload","nativeSrc":"20351:5:24","nodeType":"YulIdentifier","src":"20351:5:24"},"nativeSrc":"20351:32:24","nodeType":"YulFunctionCall","src":"20351:32:24"},"variableNames":[{"name":"chunk","nativeSrc":"20342:5:24","nodeType":"YulIdentifier","src":"20342:5:24"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":6767,"isOffset":false,"isSlot":false,"src":"20365:6:24","valueSize":1},{"declaration":6773,"isOffset":false,"isSlot":false,"src":"20342:5:24","valueSize":1},{"declaration":6776,"isOffset":false,"isSlot":false,"src":"20380:1:24","valueSize":1}],"flags":["memory-safe"],"id":6787,"nodeType":"InlineAssembly","src":"20299:98:24"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6801,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6799,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6788,"name":"chunk","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6773,"src":"20414:5:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6797,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"38","id":6789,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20424:1:24","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6793,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6791,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6776,"src":"20442:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"30783230","id":6792,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20446:4:24","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"0x20"},"src":"20442:8:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":6794,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6767,"src":"20452:6:24","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":6795,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20459:6:24","memberName":"length","nodeType":"MemberAccess","src":"20452:13:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6790,"name":"saturatingSub","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6082,"src":"20428:13:24","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":6796,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20428:38:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20424:42:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":6798,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"20423:44:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20414:53:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":6800,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20471:1:24","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"20414:58:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6805,"nodeType":"IfStatement","src":"20410:109:24","trueBody":{"id":6804,"nodeType":"Block","src":"20474:45:24","statements":[{"expression":{"hexValue":"66616c7365","id":6802,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"20499:5:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":6771,"id":6803,"nodeType":"Return","src":"20492:12:24"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6782,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6779,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6776,"src":"20192:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":6780,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6767,"src":"20196:6:24","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":6781,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20203:6:24","memberName":"length","nodeType":"MemberAccess","src":"20196:13:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20192:17:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6807,"initializationExpression":{"assignments":[6776],"declarations":[{"constant":false,"id":6776,"mutability":"mutable","name":"i","nameLocation":"20185:1:24","nodeType":"VariableDeclaration","scope":6807,"src":"20177:9:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6775,"name":"uint256","nodeType":"ElementaryTypeName","src":"20177:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6778,"initialValue":{"hexValue":"30","id":6777,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20189:1:24","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"20177:13:24"},"isSimpleCounterLoop":false,"loopExpression":{"expression":{"id":6785,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6783,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6776,"src":"20211:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"30783230","id":6784,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20216:4:24","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"0x20"},"src":"20211:9:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6786,"nodeType":"ExpressionStatement","src":"20211:9:24"},"nodeType":"ForStatement","src":"20172:357:24"},{"expression":{"hexValue":"74727565","id":6808,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"20545:4:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":6771,"id":6809,"nodeType":"Return","src":"20538:11:24"}]},"documentation":{"id":6765,"nodeType":"StructuredDocumentation","src":"19993:72:24","text":" @dev Returns whether the provided byte array is zero."},"id":6811,"implemented":true,"kind":"function","modifiers":[],"name":"_zeroBytes","nameLocation":"20079:10:24","nodeType":"FunctionDefinition","parameters":{"id":6768,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6767,"mutability":"mutable","name":"buffer","nameLocation":"20103:6:24","nodeType":"VariableDeclaration","scope":6811,"src":"20090:19:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":6766,"name":"bytes","nodeType":"ElementaryTypeName","src":"20090:5:24","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"20089:21:24"},"returnParameters":{"id":6771,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6770,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6811,"src":"20133:4:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6769,"name":"bool","nodeType":"ElementaryTypeName","src":"20133:4:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"20132:6:24"},"scope":7507,"src":"20070:486:24","stateMutability":"pure","virtual":false,"visibility":"private"},{"body":{"id":7029,"nodeType":"Block","src":"20916:5124:24","statements":[{"id":7028,"nodeType":"UncheckedBlock","src":"20926:5108:24","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6821,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6819,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6814,"src":"21020:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"hexValue":"31","id":6820,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21025:1:24","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"21020:6:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6825,"nodeType":"IfStatement","src":"21016:53:24","trueBody":{"id":6824,"nodeType":"Block","src":"21028:41:24","statements":[{"expression":{"id":6822,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6814,"src":"21053:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":6818,"id":6823,"nodeType":"Return","src":"21046:8:24"}]}},{"assignments":[6827],"declarations":[{"constant":false,"id":6827,"mutability":"mutable","name":"aa","nameLocation":"22004:2:24","nodeType":"VariableDeclaration","scope":7028,"src":"21996:10:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6826,"name":"uint256","nodeType":"ElementaryTypeName","src":"21996:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6829,"initialValue":{"id":6828,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6814,"src":"22009:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"21996:14:24"},{"assignments":[6831],"declarations":[{"constant":false,"id":6831,"mutability":"mutable","name":"xn","nameLocation":"22032:2:24","nodeType":"VariableDeclaration","scope":7028,"src":"22024:10:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6830,"name":"uint256","nodeType":"ElementaryTypeName","src":"22024:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6833,"initialValue":{"hexValue":"31","id":6832,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22037:1:24","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"VariableDeclarationStatement","src":"22024:14:24"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6839,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6834,"name":"aa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6827,"src":"22057:2:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_rational_340282366920938463463374607431768211456_by_1","typeString":"int_const 3402...(31 digits omitted)...1456"},"id":6837,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":6835,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22064:1:24","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"313238","id":6836,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22069:3:24","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},"src":"22064:8:24","typeDescriptions":{"typeIdentifier":"t_rational_340282366920938463463374607431768211456_by_1","typeString":"int_const 3402...(31 digits omitted)...1456"}}],"id":6838,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"22063:10:24","typeDescriptions":{"typeIdentifier":"t_rational_340282366920938463463374607431768211456_by_1","typeString":"int_const 3402...(31 digits omitted)...1456"}},"src":"22057:16:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6849,"nodeType":"IfStatement","src":"22053:92:24","trueBody":{"id":6848,"nodeType":"Block","src":"22075:70:24","statements":[{"expression":{"id":6842,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6840,"name":"aa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6827,"src":"22093:2:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"313238","id":6841,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22100:3:24","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},"src":"22093:10:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6843,"nodeType":"ExpressionStatement","src":"22093:10:24"},{"expression":{"id":6846,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6844,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6831,"src":"22121:2:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"<<=","rightHandSide":{"hexValue":"3634","id":6845,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22128:2:24","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"22121:9:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6847,"nodeType":"ExpressionStatement","src":"22121:9:24"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6855,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6850,"name":"aa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6827,"src":"22162:2:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_rational_18446744073709551616_by_1","typeString":"int_const 18446744073709551616"},"id":6853,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":6851,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22169:1:24","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"3634","id":6852,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22174:2:24","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"22169:7:24","typeDescriptions":{"typeIdentifier":"t_rational_18446744073709551616_by_1","typeString":"int_const 18446744073709551616"}}],"id":6854,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"22168:9:24","typeDescriptions":{"typeIdentifier":"t_rational_18446744073709551616_by_1","typeString":"int_const 18446744073709551616"}},"src":"22162:15:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6865,"nodeType":"IfStatement","src":"22158:90:24","trueBody":{"id":6864,"nodeType":"Block","src":"22179:69:24","statements":[{"expression":{"id":6858,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6856,"name":"aa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6827,"src":"22197:2:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"3634","id":6857,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22204:2:24","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"22197:9:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6859,"nodeType":"ExpressionStatement","src":"22197:9:24"},{"expression":{"id":6862,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6860,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6831,"src":"22224:2:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"<<=","rightHandSide":{"hexValue":"3332","id":6861,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22231:2:24","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"22224:9:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6863,"nodeType":"ExpressionStatement","src":"22224:9:24"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6871,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6866,"name":"aa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6827,"src":"22265:2:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_rational_4294967296_by_1","typeString":"int_const 4294967296"},"id":6869,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":6867,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22272:1:24","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"3332","id":6868,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22277:2:24","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"22272:7:24","typeDescriptions":{"typeIdentifier":"t_rational_4294967296_by_1","typeString":"int_const 4294967296"}}],"id":6870,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"22271:9:24","typeDescriptions":{"typeIdentifier":"t_rational_4294967296_by_1","typeString":"int_const 4294967296"}},"src":"22265:15:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6881,"nodeType":"IfStatement","src":"22261:90:24","trueBody":{"id":6880,"nodeType":"Block","src":"22282:69:24","statements":[{"expression":{"id":6874,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6872,"name":"aa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6827,"src":"22300:2:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"3332","id":6873,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22307:2:24","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"22300:9:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6875,"nodeType":"ExpressionStatement","src":"22300:9:24"},{"expression":{"id":6878,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6876,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6831,"src":"22327:2:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"<<=","rightHandSide":{"hexValue":"3136","id":6877,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22334:2:24","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"22327:9:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6879,"nodeType":"ExpressionStatement","src":"22327:9:24"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6887,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6882,"name":"aa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6827,"src":"22368:2:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_rational_65536_by_1","typeString":"int_const 65536"},"id":6885,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":6883,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22375:1:24","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"3136","id":6884,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22380:2:24","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"22375:7:24","typeDescriptions":{"typeIdentifier":"t_rational_65536_by_1","typeString":"int_const 65536"}}],"id":6886,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"22374:9:24","typeDescriptions":{"typeIdentifier":"t_rational_65536_by_1","typeString":"int_const 65536"}},"src":"22368:15:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6897,"nodeType":"IfStatement","src":"22364:89:24","trueBody":{"id":6896,"nodeType":"Block","src":"22385:68:24","statements":[{"expression":{"id":6890,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6888,"name":"aa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6827,"src":"22403:2:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"3136","id":6889,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22410:2:24","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"22403:9:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6891,"nodeType":"ExpressionStatement","src":"22403:9:24"},{"expression":{"id":6894,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6892,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6831,"src":"22430:2:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"<<=","rightHandSide":{"hexValue":"38","id":6893,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22437:1:24","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"22430:8:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6895,"nodeType":"ExpressionStatement","src":"22430:8:24"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6903,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6898,"name":"aa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6827,"src":"22470:2:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_rational_256_by_1","typeString":"int_const 256"},"id":6901,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":6899,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22477:1:24","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"38","id":6900,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22482:1:24","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"22477:6:24","typeDescriptions":{"typeIdentifier":"t_rational_256_by_1","typeString":"int_const 256"}}],"id":6902,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"22476:8:24","typeDescriptions":{"typeIdentifier":"t_rational_256_by_1","typeString":"int_const 256"}},"src":"22470:14:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6913,"nodeType":"IfStatement","src":"22466:87:24","trueBody":{"id":6912,"nodeType":"Block","src":"22486:67:24","statements":[{"expression":{"id":6906,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6904,"name":"aa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6827,"src":"22504:2:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"38","id":6905,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22511:1:24","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"22504:8:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6907,"nodeType":"ExpressionStatement","src":"22504:8:24"},{"expression":{"id":6910,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6908,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6831,"src":"22530:2:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"<<=","rightHandSide":{"hexValue":"34","id":6909,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22537:1:24","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"22530:8:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6911,"nodeType":"ExpressionStatement","src":"22530:8:24"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6919,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6914,"name":"aa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6827,"src":"22570:2:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"id":6917,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":6915,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22577:1:24","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"34","id":6916,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22582:1:24","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"22577:6:24","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"}}],"id":6918,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"22576:8:24","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"}},"src":"22570:14:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6929,"nodeType":"IfStatement","src":"22566:87:24","trueBody":{"id":6928,"nodeType":"Block","src":"22586:67:24","statements":[{"expression":{"id":6922,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6920,"name":"aa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6827,"src":"22604:2:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"34","id":6921,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22611:1:24","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"22604:8:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6923,"nodeType":"ExpressionStatement","src":"22604:8:24"},{"expression":{"id":6926,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6924,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6831,"src":"22630:2:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"<<=","rightHandSide":{"hexValue":"32","id":6925,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22637:1:24","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"22630:8:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6927,"nodeType":"ExpressionStatement","src":"22630:8:24"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6935,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6930,"name":"aa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6827,"src":"22670:2:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"id":6933,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":6931,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22677:1:24","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"32","id":6932,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22682:1:24","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"22677:6:24","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"}}],"id":6934,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"22676:8:24","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"}},"src":"22670:14:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6941,"nodeType":"IfStatement","src":"22666:61:24","trueBody":{"id":6940,"nodeType":"Block","src":"22686:41:24","statements":[{"expression":{"id":6938,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6936,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6831,"src":"22704:2:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"<<=","rightHandSide":{"hexValue":"31","id":6937,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22711:1:24","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"22704:8:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6939,"nodeType":"ExpressionStatement","src":"22704:8:24"}]}},{"expression":{"id":6949,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6942,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6831,"src":"23147:2:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6948,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6945,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"33","id":6943,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23153:1:24","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6944,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6831,"src":"23157:2:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23153:6:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":6946,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"23152:8:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":6947,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23164:1:24","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"23152:13:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23147:18:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6950,"nodeType":"ExpressionStatement","src":"23147:18:24"},{"expression":{"id":6960,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6951,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6831,"src":"25052:2:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6959,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6956,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6952,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6831,"src":"25058:2:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6955,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6953,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6814,"src":"25063:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6954,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6831,"src":"25067:2:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25063:6:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25058:11:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":6957,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"25057:13:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":6958,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25074:1:24","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"25057:18:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25052:23:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6961,"nodeType":"ExpressionStatement","src":"25052:23:24"},{"expression":{"id":6971,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6962,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6831,"src":"25161:2:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6970,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6967,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6963,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6831,"src":"25167:2:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6966,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6964,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6814,"src":"25172:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6965,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6831,"src":"25176:2:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25172:6:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25167:11:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":6968,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"25166:13:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":6969,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25183:1:24","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"25166:18:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25161:23:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6972,"nodeType":"ExpressionStatement","src":"25161:23:24"},{"expression":{"id":6982,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6973,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6831,"src":"25272:2:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6981,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6978,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6974,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6831,"src":"25278:2:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6977,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6975,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6814,"src":"25283:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6976,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6831,"src":"25287:2:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25283:6:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25278:11:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":6979,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"25277:13:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":6980,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25294:1:24","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"25277:18:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25272:23:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6983,"nodeType":"ExpressionStatement","src":"25272:23:24"},{"expression":{"id":6993,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6984,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6831,"src":"25381:2:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6992,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6989,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6985,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6831,"src":"25387:2:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6988,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6986,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6814,"src":"25392:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6987,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6831,"src":"25396:2:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25392:6:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25387:11:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":6990,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"25386:13:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":6991,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25403:1:24","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"25386:18:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25381:23:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6994,"nodeType":"ExpressionStatement","src":"25381:23:24"},{"expression":{"id":7004,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6995,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6831,"src":"25491:2:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7003,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7000,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6996,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6831,"src":"25497:2:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6999,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6997,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6814,"src":"25502:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6998,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6831,"src":"25506:2:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25502:6:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25497:11:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":7001,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"25496:13:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":7002,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25513:1:24","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"25496:18:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25491:23:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7005,"nodeType":"ExpressionStatement","src":"25491:23:24"},{"expression":{"id":7015,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7006,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6831,"src":"25601:2:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7014,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7011,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7007,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6831,"src":"25607:2:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7010,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7008,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6814,"src":"25612:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":7009,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6831,"src":"25616:2:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25612:6:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25607:11:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":7012,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"25606:13:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":7013,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25623:1:24","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"25606:18:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25601:23:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7016,"nodeType":"ExpressionStatement","src":"25601:23:24"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7026,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7017,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6831,"src":"25990:2:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7024,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7020,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6831,"src":"26011:2:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7023,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7021,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6814,"src":"26016:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":7022,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6831,"src":"26020:2:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26016:6:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26011:11:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":7018,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9272,"src":"25995:8:24","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$9272_$","typeString":"type(library SafeCast)"}},"id":7019,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"26004:6:24","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":9271,"src":"25995:15:24","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":7025,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25995:28:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25990:33:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":6818,"id":7027,"nodeType":"Return","src":"25983:40:24"}]}]},"documentation":{"id":6812,"nodeType":"StructuredDocumentation","src":"20562:292:24","text":" @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded\n towards zero.\n This method is based on Newton's method for computing square roots; the algorithm is restricted to only\n using integer operations."},"id":7030,"implemented":true,"kind":"function","modifiers":[],"name":"sqrt","nameLocation":"20868:4:24","nodeType":"FunctionDefinition","parameters":{"id":6815,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6814,"mutability":"mutable","name":"a","nameLocation":"20881:1:24","nodeType":"VariableDeclaration","scope":7030,"src":"20873:9:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6813,"name":"uint256","nodeType":"ElementaryTypeName","src":"20873:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"20872:11:24"},"returnParameters":{"id":6818,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6817,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7030,"src":"20907:7:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6816,"name":"uint256","nodeType":"ElementaryTypeName","src":"20907:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"20906:9:24"},"scope":7507,"src":"20859:5181:24","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7063,"nodeType":"Block","src":"26213:171:24","statements":[{"id":7062,"nodeType":"UncheckedBlock","src":"26223:155:24","statements":[{"assignments":[7042],"declarations":[{"constant":false,"id":7042,"mutability":"mutable","name":"result","nameLocation":"26255:6:24","nodeType":"VariableDeclaration","scope":7062,"src":"26247:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7041,"name":"uint256","nodeType":"ElementaryTypeName","src":"26247:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7046,"initialValue":{"arguments":[{"id":7044,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7033,"src":"26269:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7043,"name":"sqrt","nodeType":"Identifier","overloadedDeclarations":[7030,7064],"referencedDeclaration":7030,"src":"26264:4:24","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":7045,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26264:7:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"26247:24:24"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7060,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7047,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7042,"src":"26292:6:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":7058,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":7051,"name":"rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7036,"src":"26334:8:24","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$5862","typeString":"enum Math.Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_Rounding_$5862","typeString":"enum Math.Rounding"}],"id":7050,"name":"unsignedRoundsUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7485,"src":"26317:16:24","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_enum$_Rounding_$5862_$returns$_t_bool_$","typeString":"function (enum Math.Rounding) pure returns (bool)"}},"id":7052,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26317:26:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7057,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7055,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7053,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7042,"src":"26347:6:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":7054,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7042,"src":"26356:6:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26347:15:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":7056,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7033,"src":"26365:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26347:19:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"26317:49:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":7048,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9272,"src":"26301:8:24","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$9272_$","typeString":"type(library SafeCast)"}},"id":7049,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"26310:6:24","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":9271,"src":"26301:15:24","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":7059,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26301:66:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26292:75:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":7040,"id":7061,"nodeType":"Return","src":"26285:82:24"}]}]},"documentation":{"id":7031,"nodeType":"StructuredDocumentation","src":"26046:86:24","text":" @dev Calculates sqrt(a), following the selected rounding direction."},"id":7064,"implemented":true,"kind":"function","modifiers":[],"name":"sqrt","nameLocation":"26146:4:24","nodeType":"FunctionDefinition","parameters":{"id":7037,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7033,"mutability":"mutable","name":"a","nameLocation":"26159:1:24","nodeType":"VariableDeclaration","scope":7064,"src":"26151:9:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7032,"name":"uint256","nodeType":"ElementaryTypeName","src":"26151:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7036,"mutability":"mutable","name":"rounding","nameLocation":"26171:8:24","nodeType":"VariableDeclaration","scope":7064,"src":"26162:17:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$5862","typeString":"enum Math.Rounding"},"typeName":{"id":7035,"nodeType":"UserDefinedTypeName","pathNode":{"id":7034,"name":"Rounding","nameLocations":["26162:8:24"],"nodeType":"IdentifierPath","referencedDeclaration":5862,"src":"26162:8:24"},"referencedDeclaration":5862,"src":"26162:8:24","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$5862","typeString":"enum Math.Rounding"}},"visibility":"internal"}],"src":"26150:30:24"},"returnParameters":{"id":7040,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7039,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7064,"src":"26204:7:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7038,"name":"uint256","nodeType":"ElementaryTypeName","src":"26204:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"26203:9:24"},"scope":7507,"src":"26137:247:24","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7154,"nodeType":"Block","src":"26573:2359:24","statements":[{"expression":{"id":7081,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7072,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7070,"src":"26655:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7080,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7077,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7075,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7067,"src":"26675:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30786666666666666666666666666666666666666666666666666666666666666666","id":7076,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26679:34:24","typeDescriptions":{"typeIdentifier":"t_rational_340282366920938463463374607431768211455_by_1","typeString":"int_const 3402...(31 digits omitted)...1455"},"value":"0xffffffffffffffffffffffffffffffff"},"src":"26675:38:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":7073,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9272,"src":"26659:8:24","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$9272_$","typeString":"type(library SafeCast)"}},"id":7074,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"26668:6:24","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":9271,"src":"26659:15:24","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":7078,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26659:55:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"37","id":7079,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26718:1:24","typeDescriptions":{"typeIdentifier":"t_rational_7_by_1","typeString":"int_const 7"},"value":"7"},"src":"26659:60:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26655:64:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7082,"nodeType":"ExpressionStatement","src":"26655:64:24"},{"expression":{"id":7095,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7083,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7070,"src":"26795:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"|=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7094,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7091,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7088,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7086,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7067,"src":"26817:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":7087,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7070,"src":"26822:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26817:6:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":7089,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"26816:8:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"307866666666666666666666666666666666","id":7090,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26827:18:24","typeDescriptions":{"typeIdentifier":"t_rational_18446744073709551615_by_1","typeString":"int_const 18446744073709551615"},"value":"0xffffffffffffffff"},"src":"26816:29:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":7084,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9272,"src":"26800:8:24","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$9272_$","typeString":"type(library SafeCast)"}},"id":7085,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"26809:6:24","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":9271,"src":"26800:15:24","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":7092,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26800:46:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"36","id":7093,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26850:1:24","typeDescriptions":{"typeIdentifier":"t_rational_6_by_1","typeString":"int_const 6"},"value":"6"},"src":"26800:51:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26795:56:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7096,"nodeType":"ExpressionStatement","src":"26795:56:24"},{"expression":{"id":7109,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7097,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7070,"src":"26926:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"|=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7108,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7105,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7102,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7100,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7067,"src":"26948:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":7101,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7070,"src":"26953:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26948:6:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":7103,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"26947:8:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30786666666666666666","id":7104,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26958:10:24","typeDescriptions":{"typeIdentifier":"t_rational_4294967295_by_1","typeString":"int_const 4294967295"},"value":"0xffffffff"},"src":"26947:21:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":7098,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9272,"src":"26931:8:24","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$9272_$","typeString":"type(library SafeCast)"}},"id":7099,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"26940:6:24","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":9271,"src":"26931:15:24","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":7106,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26931:38:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"35","id":7107,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26973:1:24","typeDescriptions":{"typeIdentifier":"t_rational_5_by_1","typeString":"int_const 5"},"value":"5"},"src":"26931:43:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26926:48:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7110,"nodeType":"ExpressionStatement","src":"26926:48:24"},{"expression":{"id":7123,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7111,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7070,"src":"27049:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"|=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7122,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7119,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7116,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7114,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7067,"src":"27071:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":7115,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7070,"src":"27076:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27071:6:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":7117,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"27070:8:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"307866666666","id":7118,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27081:6:24","typeDescriptions":{"typeIdentifier":"t_rational_65535_by_1","typeString":"int_const 65535"},"value":"0xffff"},"src":"27070:17:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":7112,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9272,"src":"27054:8:24","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$9272_$","typeString":"type(library SafeCast)"}},"id":7113,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"27063:6:24","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":9271,"src":"27054:15:24","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":7120,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27054:34:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"34","id":7121,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27092:1:24","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"27054:39:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27049:44:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7124,"nodeType":"ExpressionStatement","src":"27049:44:24"},{"expression":{"id":7137,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7125,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7070,"src":"27166:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"|=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7136,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7133,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7130,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7128,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7067,"src":"27188:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":7129,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7070,"src":"27193:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27188:6:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":7131,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"27187:8:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30786666","id":7132,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27198:4:24","typeDescriptions":{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"},"value":"0xff"},"src":"27187:15:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":7126,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9272,"src":"27171:8:24","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$9272_$","typeString":"type(library SafeCast)"}},"id":7127,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"27180:6:24","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":9271,"src":"27171:15:24","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":7134,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27171:32:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"33","id":7135,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27207:1:24","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"src":"27171:37:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27166:42:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7138,"nodeType":"ExpressionStatement","src":"27166:42:24"},{"expression":{"id":7151,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7139,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7070,"src":"27280:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"|=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7150,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7147,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7144,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7142,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7067,"src":"27302:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":7143,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7070,"src":"27307:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27302:6:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":7145,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"27301:8:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"307866","id":7146,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27312:3:24","typeDescriptions":{"typeIdentifier":"t_rational_15_by_1","typeString":"int_const 15"},"value":"0xf"},"src":"27301:14:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":7140,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9272,"src":"27285:8:24","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$9272_$","typeString":"type(library SafeCast)"}},"id":7141,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"27294:6:24","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":9271,"src":"27285:15:24","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":7148,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27285:31:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"32","id":7149,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27320:1:24","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"27285:36:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27280:41:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7152,"nodeType":"ExpressionStatement","src":"27280:41:24"},{"AST":{"nativeSrc":"28807:119:24","nodeType":"YulBlock","src":"28807:119:24","statements":[{"nativeSrc":"28821:95:24","nodeType":"YulAssignment","src":"28821:95:24","value":{"arguments":[{"name":"r","nativeSrc":"28829:1:24","nodeType":"YulIdentifier","src":"28829:1:24"},{"arguments":[{"arguments":[{"name":"r","nativeSrc":"28841:1:24","nodeType":"YulIdentifier","src":"28841:1:24"},{"name":"x","nativeSrc":"28844:1:24","nodeType":"YulIdentifier","src":"28844:1:24"}],"functionName":{"name":"shr","nativeSrc":"28837:3:24","nodeType":"YulIdentifier","src":"28837:3:24"},"nativeSrc":"28837:9:24","nodeType":"YulFunctionCall","src":"28837:9:24"},{"kind":"number","nativeSrc":"28848:66:24","nodeType":"YulLiteral","src":"28848:66:24","type":"","value":"0x0000010102020202030303030303030300000000000000000000000000000000"}],"functionName":{"name":"byte","nativeSrc":"28832:4:24","nodeType":"YulIdentifier","src":"28832:4:24"},"nativeSrc":"28832:83:24","nodeType":"YulFunctionCall","src":"28832:83:24"}],"functionName":{"name":"or","nativeSrc":"28826:2:24","nodeType":"YulIdentifier","src":"28826:2:24"},"nativeSrc":"28826:90:24","nodeType":"YulFunctionCall","src":"28826:90:24"},"variableNames":[{"name":"r","nativeSrc":"28821:1:24","nodeType":"YulIdentifier","src":"28821:1:24"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":7070,"isOffset":false,"isSlot":false,"src":"28821:1:24","valueSize":1},{"declaration":7070,"isOffset":false,"isSlot":false,"src":"28829:1:24","valueSize":1},{"declaration":7070,"isOffset":false,"isSlot":false,"src":"28841:1:24","valueSize":1},{"declaration":7067,"isOffset":false,"isSlot":false,"src":"28844:1:24","valueSize":1}],"flags":["memory-safe"],"id":7153,"nodeType":"InlineAssembly","src":"28782:144:24"}]},"documentation":{"id":7065,"nodeType":"StructuredDocumentation","src":"26390:119:24","text":" @dev Return the log in base 2 of a positive value rounded towards zero.\n Returns 0 if given 0."},"id":7155,"implemented":true,"kind":"function","modifiers":[],"name":"log2","nameLocation":"26523:4:24","nodeType":"FunctionDefinition","parameters":{"id":7068,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7067,"mutability":"mutable","name":"x","nameLocation":"26536:1:24","nodeType":"VariableDeclaration","scope":7155,"src":"26528:9:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7066,"name":"uint256","nodeType":"ElementaryTypeName","src":"26528:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"26527:11:24"},"returnParameters":{"id":7071,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7070,"mutability":"mutable","name":"r","nameLocation":"26570:1:24","nodeType":"VariableDeclaration","scope":7155,"src":"26562:9:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7069,"name":"uint256","nodeType":"ElementaryTypeName","src":"26562:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"26561:11:24"},"scope":7507,"src":"26514:2418:24","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7188,"nodeType":"Block","src":"29165:175:24","statements":[{"id":7187,"nodeType":"UncheckedBlock","src":"29175:159:24","statements":[{"assignments":[7167],"declarations":[{"constant":false,"id":7167,"mutability":"mutable","name":"result","nameLocation":"29207:6:24","nodeType":"VariableDeclaration","scope":7187,"src":"29199:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7166,"name":"uint256","nodeType":"ElementaryTypeName","src":"29199:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7171,"initialValue":{"arguments":[{"id":7169,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7158,"src":"29221:5:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7168,"name":"log2","nodeType":"Identifier","overloadedDeclarations":[7155,7189],"referencedDeclaration":7155,"src":"29216:4:24","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":7170,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29216:11:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"29199:28:24"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7185,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7172,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7167,"src":"29248:6:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":7183,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":7176,"name":"rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7161,"src":"29290:8:24","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$5862","typeString":"enum Math.Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_Rounding_$5862","typeString":"enum Math.Rounding"}],"id":7175,"name":"unsignedRoundsUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7485,"src":"29273:16:24","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_enum$_Rounding_$5862_$returns$_t_bool_$","typeString":"function (enum Math.Rounding) pure returns (bool)"}},"id":7177,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29273:26:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7182,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7180,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":7178,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29303:1:24","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"id":7179,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7167,"src":"29308:6:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"29303:11:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":7181,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7158,"src":"29317:5:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"29303:19:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"29273:49:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":7173,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9272,"src":"29257:8:24","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$9272_$","typeString":"type(library SafeCast)"}},"id":7174,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"29266:6:24","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":9271,"src":"29257:15:24","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":7184,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29257:66:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"29248:75:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":7165,"id":7186,"nodeType":"Return","src":"29241:82:24"}]}]},"documentation":{"id":7156,"nodeType":"StructuredDocumentation","src":"28938:142:24","text":" @dev Return the log in base 2, following the selected rounding direction, of a positive value.\n Returns 0 if given 0."},"id":7189,"implemented":true,"kind":"function","modifiers":[],"name":"log2","nameLocation":"29094:4:24","nodeType":"FunctionDefinition","parameters":{"id":7162,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7158,"mutability":"mutable","name":"value","nameLocation":"29107:5:24","nodeType":"VariableDeclaration","scope":7189,"src":"29099:13:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7157,"name":"uint256","nodeType":"ElementaryTypeName","src":"29099:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7161,"mutability":"mutable","name":"rounding","nameLocation":"29123:8:24","nodeType":"VariableDeclaration","scope":7189,"src":"29114:17:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$5862","typeString":"enum Math.Rounding"},"typeName":{"id":7160,"nodeType":"UserDefinedTypeName","pathNode":{"id":7159,"name":"Rounding","nameLocations":["29114:8:24"],"nodeType":"IdentifierPath","referencedDeclaration":5862,"src":"29114:8:24"},"referencedDeclaration":5862,"src":"29114:8:24","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$5862","typeString":"enum Math.Rounding"}},"visibility":"internal"}],"src":"29098:34:24"},"returnParameters":{"id":7165,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7164,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7189,"src":"29156:7:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7163,"name":"uint256","nodeType":"ElementaryTypeName","src":"29156:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"29155:9:24"},"scope":7507,"src":"29085:255:24","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7317,"nodeType":"Block","src":"29533:854:24","statements":[{"assignments":[7198],"declarations":[{"constant":false,"id":7198,"mutability":"mutable","name":"result","nameLocation":"29551:6:24","nodeType":"VariableDeclaration","scope":7317,"src":"29543:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7197,"name":"uint256","nodeType":"ElementaryTypeName","src":"29543:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7200,"initialValue":{"hexValue":"30","id":7199,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29560:1:24","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"29543:18:24"},{"id":7314,"nodeType":"UncheckedBlock","src":"29571:787:24","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7205,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7201,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7192,"src":"29599:5:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_rational_10000000000000000000000000000000000000000000000000000000000000000_by_1","typeString":"int_const 1000...(57 digits omitted)...0000"},"id":7204,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":7202,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29608:2:24","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"3634","id":7203,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29614:2:24","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"29608:8:24","typeDescriptions":{"typeIdentifier":"t_rational_10000000000000000000000000000000000000000000000000000000000000000_by_1","typeString":"int_const 1000...(57 digits omitted)...0000"}},"src":"29599:17:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7217,"nodeType":"IfStatement","src":"29595:103:24","trueBody":{"id":7216,"nodeType":"Block","src":"29618:80:24","statements":[{"expression":{"id":7210,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7206,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7192,"src":"29636:5:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"commonType":{"typeIdentifier":"t_rational_10000000000000000000000000000000000000000000000000000000000000000_by_1","typeString":"int_const 1000...(57 digits omitted)...0000"},"id":7209,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":7207,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29645:2:24","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"3634","id":7208,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29651:2:24","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"29645:8:24","typeDescriptions":{"typeIdentifier":"t_rational_10000000000000000000000000000000000000000000000000000000000000000_by_1","typeString":"int_const 1000...(57 digits omitted)...0000"}},"src":"29636:17:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7211,"nodeType":"ExpressionStatement","src":"29636:17:24"},{"expression":{"id":7214,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7212,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7198,"src":"29671:6:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"3634","id":7213,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29681:2:24","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"29671:12:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7215,"nodeType":"ExpressionStatement","src":"29671:12:24"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7222,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7218,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7192,"src":"29715:5:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_rational_100000000000000000000000000000000_by_1","typeString":"int_const 1000...(25 digits omitted)...0000"},"id":7221,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":7219,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29724:2:24","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"3332","id":7220,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29730:2:24","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"29724:8:24","typeDescriptions":{"typeIdentifier":"t_rational_100000000000000000000000000000000_by_1","typeString":"int_const 1000...(25 digits omitted)...0000"}},"src":"29715:17:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7234,"nodeType":"IfStatement","src":"29711:103:24","trueBody":{"id":7233,"nodeType":"Block","src":"29734:80:24","statements":[{"expression":{"id":7227,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7223,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7192,"src":"29752:5:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"commonType":{"typeIdentifier":"t_rational_100000000000000000000000000000000_by_1","typeString":"int_const 1000...(25 digits omitted)...0000"},"id":7226,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":7224,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29761:2:24","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"3332","id":7225,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29767:2:24","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"29761:8:24","typeDescriptions":{"typeIdentifier":"t_rational_100000000000000000000000000000000_by_1","typeString":"int_const 1000...(25 digits omitted)...0000"}},"src":"29752:17:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7228,"nodeType":"ExpressionStatement","src":"29752:17:24"},{"expression":{"id":7231,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7229,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7198,"src":"29787:6:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"3332","id":7230,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29797:2:24","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"29787:12:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7232,"nodeType":"ExpressionStatement","src":"29787:12:24"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7239,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7235,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7192,"src":"29831:5:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_rational_10000000000000000_by_1","typeString":"int_const 10000000000000000"},"id":7238,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":7236,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29840:2:24","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"3136","id":7237,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29846:2:24","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"29840:8:24","typeDescriptions":{"typeIdentifier":"t_rational_10000000000000000_by_1","typeString":"int_const 10000000000000000"}},"src":"29831:17:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7251,"nodeType":"IfStatement","src":"29827:103:24","trueBody":{"id":7250,"nodeType":"Block","src":"29850:80:24","statements":[{"expression":{"id":7244,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7240,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7192,"src":"29868:5:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"commonType":{"typeIdentifier":"t_rational_10000000000000000_by_1","typeString":"int_const 10000000000000000"},"id":7243,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":7241,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29877:2:24","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"3136","id":7242,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29883:2:24","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"29877:8:24","typeDescriptions":{"typeIdentifier":"t_rational_10000000000000000_by_1","typeString":"int_const 10000000000000000"}},"src":"29868:17:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7245,"nodeType":"ExpressionStatement","src":"29868:17:24"},{"expression":{"id":7248,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7246,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7198,"src":"29903:6:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"3136","id":7247,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29913:2:24","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"29903:12:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7249,"nodeType":"ExpressionStatement","src":"29903:12:24"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7256,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7252,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7192,"src":"29947:5:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_rational_100000000_by_1","typeString":"int_const 100000000"},"id":7255,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":7253,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29956:2:24","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"38","id":7254,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29962:1:24","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"29956:7:24","typeDescriptions":{"typeIdentifier":"t_rational_100000000_by_1","typeString":"int_const 100000000"}},"src":"29947:16:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7268,"nodeType":"IfStatement","src":"29943:100:24","trueBody":{"id":7267,"nodeType":"Block","src":"29965:78:24","statements":[{"expression":{"id":7261,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7257,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7192,"src":"29983:5:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"commonType":{"typeIdentifier":"t_rational_100000000_by_1","typeString":"int_const 100000000"},"id":7260,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":7258,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29992:2:24","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"38","id":7259,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29998:1:24","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"29992:7:24","typeDescriptions":{"typeIdentifier":"t_rational_100000000_by_1","typeString":"int_const 100000000"}},"src":"29983:16:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7262,"nodeType":"ExpressionStatement","src":"29983:16:24"},{"expression":{"id":7265,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7263,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7198,"src":"30017:6:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"38","id":7264,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30027:1:24","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"30017:11:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7266,"nodeType":"ExpressionStatement","src":"30017:11:24"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7273,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7269,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7192,"src":"30060:5:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_rational_10000_by_1","typeString":"int_const 10000"},"id":7272,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":7270,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30069:2:24","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"34","id":7271,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30075:1:24","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"30069:7:24","typeDescriptions":{"typeIdentifier":"t_rational_10000_by_1","typeString":"int_const 10000"}},"src":"30060:16:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7285,"nodeType":"IfStatement","src":"30056:100:24","trueBody":{"id":7284,"nodeType":"Block","src":"30078:78:24","statements":[{"expression":{"id":7278,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7274,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7192,"src":"30096:5:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"commonType":{"typeIdentifier":"t_rational_10000_by_1","typeString":"int_const 10000"},"id":7277,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":7275,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30105:2:24","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"34","id":7276,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30111:1:24","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"30105:7:24","typeDescriptions":{"typeIdentifier":"t_rational_10000_by_1","typeString":"int_const 10000"}},"src":"30096:16:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7279,"nodeType":"ExpressionStatement","src":"30096:16:24"},{"expression":{"id":7282,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7280,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7198,"src":"30130:6:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"34","id":7281,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30140:1:24","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"30130:11:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7283,"nodeType":"ExpressionStatement","src":"30130:11:24"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7290,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7286,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7192,"src":"30173:5:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"id":7289,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":7287,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30182:2:24","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"32","id":7288,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30188:1:24","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"30182:7:24","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"}},"src":"30173:16:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7302,"nodeType":"IfStatement","src":"30169:100:24","trueBody":{"id":7301,"nodeType":"Block","src":"30191:78:24","statements":[{"expression":{"id":7295,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7291,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7192,"src":"30209:5:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"commonType":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"id":7294,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":7292,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30218:2:24","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"32","id":7293,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30224:1:24","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"30218:7:24","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"}},"src":"30209:16:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7296,"nodeType":"ExpressionStatement","src":"30209:16:24"},{"expression":{"id":7299,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7297,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7198,"src":"30243:6:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"32","id":7298,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30253:1:24","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"30243:11:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7300,"nodeType":"ExpressionStatement","src":"30243:11:24"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7307,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7303,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7192,"src":"30286:5:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"id":7306,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":7304,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30295:2:24","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"31","id":7305,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30301:1:24","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"30295:7:24","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"}},"src":"30286:16:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7313,"nodeType":"IfStatement","src":"30282:66:24","trueBody":{"id":7312,"nodeType":"Block","src":"30304:44:24","statements":[{"expression":{"id":7310,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7308,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7198,"src":"30322:6:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"31","id":7309,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30332:1:24","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"30322:11:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7311,"nodeType":"ExpressionStatement","src":"30322:11:24"}]}}]},{"expression":{"id":7315,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7198,"src":"30374:6:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":7196,"id":7316,"nodeType":"Return","src":"30367:13:24"}]},"documentation":{"id":7190,"nodeType":"StructuredDocumentation","src":"29346:120:24","text":" @dev Return the log in base 10 of a positive value rounded towards zero.\n Returns 0 if given 0."},"id":7318,"implemented":true,"kind":"function","modifiers":[],"name":"log10","nameLocation":"29480:5:24","nodeType":"FunctionDefinition","parameters":{"id":7193,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7192,"mutability":"mutable","name":"value","nameLocation":"29494:5:24","nodeType":"VariableDeclaration","scope":7318,"src":"29486:13:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7191,"name":"uint256","nodeType":"ElementaryTypeName","src":"29486:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"29485:15:24"},"returnParameters":{"id":7196,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7195,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7318,"src":"29524:7:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7194,"name":"uint256","nodeType":"ElementaryTypeName","src":"29524:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"29523:9:24"},"scope":7507,"src":"29471:916:24","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7351,"nodeType":"Block","src":"30622:177:24","statements":[{"id":7350,"nodeType":"UncheckedBlock","src":"30632:161:24","statements":[{"assignments":[7330],"declarations":[{"constant":false,"id":7330,"mutability":"mutable","name":"result","nameLocation":"30664:6:24","nodeType":"VariableDeclaration","scope":7350,"src":"30656:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7329,"name":"uint256","nodeType":"ElementaryTypeName","src":"30656:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7334,"initialValue":{"arguments":[{"id":7332,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7321,"src":"30679:5:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7331,"name":"log10","nodeType":"Identifier","overloadedDeclarations":[7318,7352],"referencedDeclaration":7318,"src":"30673:5:24","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":7333,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30673:12:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"30656:29:24"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7348,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7335,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7330,"src":"30706:6:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":7346,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":7339,"name":"rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7324,"src":"30748:8:24","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$5862","typeString":"enum Math.Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_Rounding_$5862","typeString":"enum Math.Rounding"}],"id":7338,"name":"unsignedRoundsUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7485,"src":"30731:16:24","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_enum$_Rounding_$5862_$returns$_t_bool_$","typeString":"function (enum Math.Rounding) pure returns (bool)"}},"id":7340,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30731:26:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7345,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7343,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":7341,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30761:2:24","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"id":7342,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7330,"src":"30767:6:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"30761:12:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":7344,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7321,"src":"30776:5:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"30761:20:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"30731:50:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":7336,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9272,"src":"30715:8:24","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$9272_$","typeString":"type(library SafeCast)"}},"id":7337,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"30724:6:24","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":9271,"src":"30715:15:24","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":7347,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30715:67:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"30706:76:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":7328,"id":7349,"nodeType":"Return","src":"30699:83:24"}]}]},"documentation":{"id":7319,"nodeType":"StructuredDocumentation","src":"30393:143:24","text":" @dev Return the log in base 10, following the selected rounding direction, of a positive value.\n Returns 0 if given 0."},"id":7352,"implemented":true,"kind":"function","modifiers":[],"name":"log10","nameLocation":"30550:5:24","nodeType":"FunctionDefinition","parameters":{"id":7325,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7321,"mutability":"mutable","name":"value","nameLocation":"30564:5:24","nodeType":"VariableDeclaration","scope":7352,"src":"30556:13:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7320,"name":"uint256","nodeType":"ElementaryTypeName","src":"30556:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7324,"mutability":"mutable","name":"rounding","nameLocation":"30580:8:24","nodeType":"VariableDeclaration","scope":7352,"src":"30571:17:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$5862","typeString":"enum Math.Rounding"},"typeName":{"id":7323,"nodeType":"UserDefinedTypeName","pathNode":{"id":7322,"name":"Rounding","nameLocations":["30571:8:24"],"nodeType":"IdentifierPath","referencedDeclaration":5862,"src":"30571:8:24"},"referencedDeclaration":5862,"src":"30571:8:24","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$5862","typeString":"enum Math.Rounding"}},"visibility":"internal"}],"src":"30555:34:24"},"returnParameters":{"id":7328,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7327,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7352,"src":"30613:7:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7326,"name":"uint256","nodeType":"ElementaryTypeName","src":"30613:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"30612:9:24"},"scope":7507,"src":"30541:258:24","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7428,"nodeType":"Block","src":"31117:675:24","statements":[{"expression":{"id":7369,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7360,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7358,"src":"31199:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7368,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7365,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7363,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7355,"src":"31219:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30786666666666666666666666666666666666666666666666666666666666666666","id":7364,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31223:34:24","typeDescriptions":{"typeIdentifier":"t_rational_340282366920938463463374607431768211455_by_1","typeString":"int_const 3402...(31 digits omitted)...1455"},"value":"0xffffffffffffffffffffffffffffffff"},"src":"31219:38:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":7361,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9272,"src":"31203:8:24","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$9272_$","typeString":"type(library SafeCast)"}},"id":7362,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31212:6:24","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":9271,"src":"31203:15:24","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":7366,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31203:55:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"37","id":7367,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31262:1:24","typeDescriptions":{"typeIdentifier":"t_rational_7_by_1","typeString":"int_const 7"},"value":"7"},"src":"31203:60:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"31199:64:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7370,"nodeType":"ExpressionStatement","src":"31199:64:24"},{"expression":{"id":7383,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7371,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7358,"src":"31339:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"|=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7382,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7379,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7376,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7374,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7355,"src":"31361:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":7375,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7358,"src":"31366:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"31361:6:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":7377,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"31360:8:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"307866666666666666666666666666666666","id":7378,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31371:18:24","typeDescriptions":{"typeIdentifier":"t_rational_18446744073709551615_by_1","typeString":"int_const 18446744073709551615"},"value":"0xffffffffffffffff"},"src":"31360:29:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":7372,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9272,"src":"31344:8:24","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$9272_$","typeString":"type(library SafeCast)"}},"id":7373,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31353:6:24","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":9271,"src":"31344:15:24","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":7380,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31344:46:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"36","id":7381,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31394:1:24","typeDescriptions":{"typeIdentifier":"t_rational_6_by_1","typeString":"int_const 6"},"value":"6"},"src":"31344:51:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"31339:56:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7384,"nodeType":"ExpressionStatement","src":"31339:56:24"},{"expression":{"id":7397,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7385,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7358,"src":"31470:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"|=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7396,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7393,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7390,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7388,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7355,"src":"31492:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":7389,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7358,"src":"31497:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"31492:6:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":7391,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"31491:8:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30786666666666666666","id":7392,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31502:10:24","typeDescriptions":{"typeIdentifier":"t_rational_4294967295_by_1","typeString":"int_const 4294967295"},"value":"0xffffffff"},"src":"31491:21:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":7386,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9272,"src":"31475:8:24","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$9272_$","typeString":"type(library SafeCast)"}},"id":7387,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31484:6:24","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":9271,"src":"31475:15:24","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":7394,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31475:38:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"35","id":7395,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31517:1:24","typeDescriptions":{"typeIdentifier":"t_rational_5_by_1","typeString":"int_const 5"},"value":"5"},"src":"31475:43:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"31470:48:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7398,"nodeType":"ExpressionStatement","src":"31470:48:24"},{"expression":{"id":7411,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7399,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7358,"src":"31593:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"|=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7410,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7407,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7404,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7402,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7355,"src":"31615:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":7403,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7358,"src":"31620:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"31615:6:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":7405,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"31614:8:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"307866666666","id":7406,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31625:6:24","typeDescriptions":{"typeIdentifier":"t_rational_65535_by_1","typeString":"int_const 65535"},"value":"0xffff"},"src":"31614:17:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":7400,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9272,"src":"31598:8:24","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$9272_$","typeString":"type(library SafeCast)"}},"id":7401,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31607:6:24","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":9271,"src":"31598:15:24","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":7408,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31598:34:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"34","id":7409,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31636:1:24","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"31598:39:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"31593:44:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7412,"nodeType":"ExpressionStatement","src":"31593:44:24"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7426,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7415,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7413,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7358,"src":"31743:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"33","id":7414,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31748:1:24","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"src":"31743:6:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":7416,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"31742:8:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"|","rightExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7424,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7421,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7419,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7355,"src":"31770:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":7420,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7358,"src":"31775:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"31770:6:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":7422,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"31769:8:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30786666","id":7423,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31780:4:24","typeDescriptions":{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"},"value":"0xff"},"src":"31769:15:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":7417,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9272,"src":"31753:8:24","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$9272_$","typeString":"type(library SafeCast)"}},"id":7418,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31762:6:24","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":9271,"src":"31753:15:24","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":7425,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31753:32:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"31742:43:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":7359,"id":7427,"nodeType":"Return","src":"31735:50:24"}]},"documentation":{"id":7353,"nodeType":"StructuredDocumentation","src":"30805:246:24","text":" @dev Return the log in base 256 of a positive value rounded towards zero.\n Returns 0 if given 0.\n Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string."},"id":7429,"implemented":true,"kind":"function","modifiers":[],"name":"log256","nameLocation":"31065:6:24","nodeType":"FunctionDefinition","parameters":{"id":7356,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7355,"mutability":"mutable","name":"x","nameLocation":"31080:1:24","nodeType":"VariableDeclaration","scope":7429,"src":"31072:9:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7354,"name":"uint256","nodeType":"ElementaryTypeName","src":"31072:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"31071:11:24"},"returnParameters":{"id":7359,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7358,"mutability":"mutable","name":"r","nameLocation":"31114:1:24","nodeType":"VariableDeclaration","scope":7429,"src":"31106:9:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7357,"name":"uint256","nodeType":"ElementaryTypeName","src":"31106:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"31105:11:24"},"scope":7507,"src":"31056:736:24","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7465,"nodeType":"Block","src":"32029:184:24","statements":[{"id":7464,"nodeType":"UncheckedBlock","src":"32039:168:24","statements":[{"assignments":[7441],"declarations":[{"constant":false,"id":7441,"mutability":"mutable","name":"result","nameLocation":"32071:6:24","nodeType":"VariableDeclaration","scope":7464,"src":"32063:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7440,"name":"uint256","nodeType":"ElementaryTypeName","src":"32063:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7445,"initialValue":{"arguments":[{"id":7443,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7432,"src":"32087:5:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7442,"name":"log256","nodeType":"Identifier","overloadedDeclarations":[7429,7466],"referencedDeclaration":7429,"src":"32080:6:24","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":7444,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32080:13:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"32063:30:24"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7462,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7446,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7441,"src":"32114:6:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":7460,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":7450,"name":"rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7435,"src":"32156:8:24","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$5862","typeString":"enum Math.Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_Rounding_$5862","typeString":"enum Math.Rounding"}],"id":7449,"name":"unsignedRoundsUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7485,"src":"32139:16:24","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_enum$_Rounding_$5862_$returns$_t_bool_$","typeString":"function (enum Math.Rounding) pure returns (bool)"}},"id":7451,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32139:26:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7459,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7457,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":7452,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"32169:1:24","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7455,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7453,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7441,"src":"32175:6:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"33","id":7454,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"32185:1:24","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"src":"32175:11:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":7456,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"32174:13:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"32169:18:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":7458,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7432,"src":"32190:5:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"32169:26:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"32139:56:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":7447,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9272,"src":"32123:8:24","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$9272_$","typeString":"type(library SafeCast)"}},"id":7448,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"32132:6:24","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":9271,"src":"32123:15:24","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":7461,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32123:73:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"32114:82:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":7439,"id":7463,"nodeType":"Return","src":"32107:89:24"}]}]},"documentation":{"id":7430,"nodeType":"StructuredDocumentation","src":"31798:144:24","text":" @dev Return the log in base 256, following the selected rounding direction, of a positive value.\n Returns 0 if given 0."},"id":7466,"implemented":true,"kind":"function","modifiers":[],"name":"log256","nameLocation":"31956:6:24","nodeType":"FunctionDefinition","parameters":{"id":7436,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7432,"mutability":"mutable","name":"value","nameLocation":"31971:5:24","nodeType":"VariableDeclaration","scope":7466,"src":"31963:13:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7431,"name":"uint256","nodeType":"ElementaryTypeName","src":"31963:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7435,"mutability":"mutable","name":"rounding","nameLocation":"31987:8:24","nodeType":"VariableDeclaration","scope":7466,"src":"31978:17:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$5862","typeString":"enum Math.Rounding"},"typeName":{"id":7434,"nodeType":"UserDefinedTypeName","pathNode":{"id":7433,"name":"Rounding","nameLocations":["31978:8:24"],"nodeType":"IdentifierPath","referencedDeclaration":5862,"src":"31978:8:24"},"referencedDeclaration":5862,"src":"31978:8:24","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$5862","typeString":"enum Math.Rounding"}},"visibility":"internal"}],"src":"31962:34:24"},"returnParameters":{"id":7439,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7438,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7466,"src":"32020:7:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7437,"name":"uint256","nodeType":"ElementaryTypeName","src":"32020:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"32019:9:24"},"scope":7507,"src":"31947:266:24","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7484,"nodeType":"Block","src":"32411:48:24","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":7482,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":7480,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":7477,"name":"rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7470,"src":"32434:8:24","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$5862","typeString":"enum Math.Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_Rounding_$5862","typeString":"enum Math.Rounding"}],"id":7476,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"32428:5:24","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":7475,"name":"uint8","nodeType":"ElementaryTypeName","src":"32428:5:24","typeDescriptions":{}}},"id":7478,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32428:15:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"%","rightExpression":{"hexValue":"32","id":7479,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"32446:1:24","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"32428:19:24","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"31","id":7481,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"32451:1:24","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"32428:24:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":7474,"id":7483,"nodeType":"Return","src":"32421:31:24"}]},"documentation":{"id":7467,"nodeType":"StructuredDocumentation","src":"32219:113:24","text":" @dev Returns whether a provided rounding mode is considered rounding up for unsigned integers."},"id":7485,"implemented":true,"kind":"function","modifiers":[],"name":"unsignedRoundsUp","nameLocation":"32346:16:24","nodeType":"FunctionDefinition","parameters":{"id":7471,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7470,"mutability":"mutable","name":"rounding","nameLocation":"32372:8:24","nodeType":"VariableDeclaration","scope":7485,"src":"32363:17:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$5862","typeString":"enum Math.Rounding"},"typeName":{"id":7469,"nodeType":"UserDefinedTypeName","pathNode":{"id":7468,"name":"Rounding","nameLocations":["32363:8:24"],"nodeType":"IdentifierPath","referencedDeclaration":5862,"src":"32363:8:24"},"referencedDeclaration":5862,"src":"32363:8:24","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$5862","typeString":"enum Math.Rounding"}},"visibility":"internal"}],"src":"32362:19:24"},"returnParameters":{"id":7474,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7473,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7485,"src":"32405:4:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7472,"name":"bool","nodeType":"ElementaryTypeName","src":"32405:4:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"32404:6:24"},"scope":7507,"src":"32337:122:24","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7505,"nodeType":"Block","src":"32602:59:24","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7496,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7494,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7488,"src":"32627:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":7495,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"32632:1:24","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"32627:6:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"323536","id":7497,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"32635:3:24","typeDescriptions":{"typeIdentifier":"t_rational_256_by_1","typeString":"int_const 256"},"value":"256"},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7502,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"323535","id":7498,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"32640:3:24","typeDescriptions":{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"},"value":"255"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"arguments":[{"id":7500,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7488,"src":"32651:1:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7499,"name":"log2","nodeType":"Identifier","overloadedDeclarations":[7155,7189],"referencedDeclaration":7155,"src":"32646:4:24","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":7501,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32646:7:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"32640:13:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_rational_256_by_1","typeString":"int_const 256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7493,"name":"ternary","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6139,"src":"32619:7:24","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (bool,uint256,uint256) pure returns (uint256)"}},"id":7503,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32619:35:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":7492,"id":7504,"nodeType":"Return","src":"32612:42:24"}]},"documentation":{"id":7486,"nodeType":"StructuredDocumentation","src":"32465:76:24","text":" @dev Counts the number of leading zero bits in a uint256."},"id":7506,"implemented":true,"kind":"function","modifiers":[],"name":"clz","nameLocation":"32555:3:24","nodeType":"FunctionDefinition","parameters":{"id":7489,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7488,"mutability":"mutable","name":"x","nameLocation":"32567:1:24","nodeType":"VariableDeclaration","scope":7506,"src":"32559:9:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7487,"name":"uint256","nodeType":"ElementaryTypeName","src":"32559:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"32558:11:24"},"returnParameters":{"id":7492,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7491,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7506,"src":"32593:7:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7490,"name":"uint256","nodeType":"ElementaryTypeName","src":"32593:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"32592:9:24"},"scope":7507,"src":"32546:115:24","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":7508,"src":"281:32382:24","usedErrors":[],"usedEvents":[]}],"src":"103:32561:24"},"id":24},"@openzeppelin/contracts/utils/math/SafeCast.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/math/SafeCast.sol","exportedSymbols":{"SafeCast":[9272]},"id":9273,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":7509,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"192:24:25"},{"abstract":false,"baseContracts":[],"canonicalName":"SafeCast","contractDependencies":[],"contractKind":"library","documentation":{"id":7510,"nodeType":"StructuredDocumentation","src":"218:550:25","text":" @dev Wrappers over Solidity's uintXX/intXX/bool casting operators with added overflow\n checks.\n Downcasting from uint256/int256 in Solidity does not revert on overflow. This can\n easily result in undesired exploitation or bugs, since developers usually\n assume that overflows raise errors. `SafeCast` restores this intuition by\n reverting the transaction when such an operation overflows.\n Using this library instead of the unchecked operations eliminates an entire\n class of bugs, so it's recommended to use it always."},"fullyImplemented":true,"id":9272,"linearizedBaseContracts":[9272],"name":"SafeCast","nameLocation":"777:8:25","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":7511,"nodeType":"StructuredDocumentation","src":"792:67:25","text":" @dev Value doesn't fit in a uint of `bits` size."},"errorSelector":"6dfcc650","id":7517,"name":"SafeCastOverflowedUintDowncast","nameLocation":"870:30:25","nodeType":"ErrorDefinition","parameters":{"id":7516,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7513,"mutability":"mutable","name":"bits","nameLocation":"907:4:25","nodeType":"VariableDeclaration","scope":7517,"src":"901:10:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":7512,"name":"uint8","nodeType":"ElementaryTypeName","src":"901:5:25","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":7515,"mutability":"mutable","name":"value","nameLocation":"921:5:25","nodeType":"VariableDeclaration","scope":7517,"src":"913:13:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7514,"name":"uint256","nodeType":"ElementaryTypeName","src":"913:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"900:27:25"},"src":"864:64:25"},{"documentation":{"id":7518,"nodeType":"StructuredDocumentation","src":"934:74:25","text":" @dev An int value doesn't fit in a uint of `bits` size."},"errorSelector":"a8ce4432","id":7522,"name":"SafeCastOverflowedIntToUint","nameLocation":"1019:27:25","nodeType":"ErrorDefinition","parameters":{"id":7521,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7520,"mutability":"mutable","name":"value","nameLocation":"1054:5:25","nodeType":"VariableDeclaration","scope":7522,"src":"1047:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":7519,"name":"int256","nodeType":"ElementaryTypeName","src":"1047:6:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"1046:14:25"},"src":"1013:48:25"},{"documentation":{"id":7523,"nodeType":"StructuredDocumentation","src":"1067:67:25","text":" @dev Value doesn't fit in an int of `bits` size."},"errorSelector":"327269a7","id":7529,"name":"SafeCastOverflowedIntDowncast","nameLocation":"1145:29:25","nodeType":"ErrorDefinition","parameters":{"id":7528,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7525,"mutability":"mutable","name":"bits","nameLocation":"1181:4:25","nodeType":"VariableDeclaration","scope":7529,"src":"1175:10:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":7524,"name":"uint8","nodeType":"ElementaryTypeName","src":"1175:5:25","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":7527,"mutability":"mutable","name":"value","nameLocation":"1194:5:25","nodeType":"VariableDeclaration","scope":7529,"src":"1187:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":7526,"name":"int256","nodeType":"ElementaryTypeName","src":"1187:6:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"1174:26:25"},"src":"1139:62:25"},{"documentation":{"id":7530,"nodeType":"StructuredDocumentation","src":"1207:74:25","text":" @dev A uint value doesn't fit in an int of `bits` size."},"errorSelector":"24775e06","id":7534,"name":"SafeCastOverflowedUintToInt","nameLocation":"1292:27:25","nodeType":"ErrorDefinition","parameters":{"id":7533,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7532,"mutability":"mutable","name":"value","nameLocation":"1328:5:25","nodeType":"VariableDeclaration","scope":7534,"src":"1320:13:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7531,"name":"uint256","nodeType":"ElementaryTypeName","src":"1320:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1319:15:25"},"src":"1286:49:25"},{"body":{"id":7561,"nodeType":"Block","src":"1692:152:25","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7548,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7542,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7537,"src":"1706:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7545,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1719:7:25","typeDescriptions":{"typeIdentifier":"t_type$_t_uint248_$","typeString":"type(uint248)"},"typeName":{"id":7544,"name":"uint248","nodeType":"ElementaryTypeName","src":"1719:7:25","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint248_$","typeString":"type(uint248)"}],"id":7543,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967269,"src":"1714:4:25","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7546,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1714:13:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint248","typeString":"type(uint248)"}},"id":7547,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1728:3:25","memberName":"max","nodeType":"MemberAccess","src":"1714:17:25","typeDescriptions":{"typeIdentifier":"t_uint248","typeString":"uint248"}},"src":"1706:25:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7555,"nodeType":"IfStatement","src":"1702:105:25","trueBody":{"id":7554,"nodeType":"Block","src":"1733:74:25","statements":[{"errorCall":{"arguments":[{"hexValue":"323438","id":7550,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1785:3:25","typeDescriptions":{"typeIdentifier":"t_rational_248_by_1","typeString":"int_const 248"},"value":"248"},{"id":7551,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7537,"src":"1790:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_248_by_1","typeString":"int_const 248"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7549,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7517,"src":"1754:30:25","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7552,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1754:42:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7553,"nodeType":"RevertStatement","src":"1747:49:25"}]}},{"expression":{"arguments":[{"id":7558,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7537,"src":"1831:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7557,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1823:7:25","typeDescriptions":{"typeIdentifier":"t_type$_t_uint248_$","typeString":"type(uint248)"},"typeName":{"id":7556,"name":"uint248","nodeType":"ElementaryTypeName","src":"1823:7:25","typeDescriptions":{}}},"id":7559,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1823:14:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint248","typeString":"uint248"}},"functionReturnParameters":7541,"id":7560,"nodeType":"Return","src":"1816:21:25"}]},"documentation":{"id":7535,"nodeType":"StructuredDocumentation","src":"1341:280:25","text":" @dev Returns the downcasted uint248 from uint256, reverting on\n overflow (when the input is greater than largest uint248).\n Counterpart to Solidity's `uint248` operator.\n Requirements:\n - input must fit into 248 bits"},"id":7562,"implemented":true,"kind":"function","modifiers":[],"name":"toUint248","nameLocation":"1635:9:25","nodeType":"FunctionDefinition","parameters":{"id":7538,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7537,"mutability":"mutable","name":"value","nameLocation":"1653:5:25","nodeType":"VariableDeclaration","scope":7562,"src":"1645:13:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7536,"name":"uint256","nodeType":"ElementaryTypeName","src":"1645:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1644:15:25"},"returnParameters":{"id":7541,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7540,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7562,"src":"1683:7:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint248","typeString":"uint248"},"typeName":{"id":7539,"name":"uint248","nodeType":"ElementaryTypeName","src":"1683:7:25","typeDescriptions":{"typeIdentifier":"t_uint248","typeString":"uint248"}},"visibility":"internal"}],"src":"1682:9:25"},"scope":9272,"src":"1626:218:25","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7589,"nodeType":"Block","src":"2201:152:25","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7576,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7570,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7565,"src":"2215:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7573,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2228:7:25","typeDescriptions":{"typeIdentifier":"t_type$_t_uint240_$","typeString":"type(uint240)"},"typeName":{"id":7572,"name":"uint240","nodeType":"ElementaryTypeName","src":"2228:7:25","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint240_$","typeString":"type(uint240)"}],"id":7571,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967269,"src":"2223:4:25","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7574,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2223:13:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint240","typeString":"type(uint240)"}},"id":7575,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2237:3:25","memberName":"max","nodeType":"MemberAccess","src":"2223:17:25","typeDescriptions":{"typeIdentifier":"t_uint240","typeString":"uint240"}},"src":"2215:25:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7583,"nodeType":"IfStatement","src":"2211:105:25","trueBody":{"id":7582,"nodeType":"Block","src":"2242:74:25","statements":[{"errorCall":{"arguments":[{"hexValue":"323430","id":7578,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2294:3:25","typeDescriptions":{"typeIdentifier":"t_rational_240_by_1","typeString":"int_const 240"},"value":"240"},{"id":7579,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7565,"src":"2299:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_240_by_1","typeString":"int_const 240"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7577,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7517,"src":"2263:30:25","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7580,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2263:42:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7581,"nodeType":"RevertStatement","src":"2256:49:25"}]}},{"expression":{"arguments":[{"id":7586,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7565,"src":"2340:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7585,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2332:7:25","typeDescriptions":{"typeIdentifier":"t_type$_t_uint240_$","typeString":"type(uint240)"},"typeName":{"id":7584,"name":"uint240","nodeType":"ElementaryTypeName","src":"2332:7:25","typeDescriptions":{}}},"id":7587,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2332:14:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint240","typeString":"uint240"}},"functionReturnParameters":7569,"id":7588,"nodeType":"Return","src":"2325:21:25"}]},"documentation":{"id":7563,"nodeType":"StructuredDocumentation","src":"1850:280:25","text":" @dev Returns the downcasted uint240 from uint256, reverting on\n overflow (when the input is greater than largest uint240).\n Counterpart to Solidity's `uint240` operator.\n Requirements:\n - input must fit into 240 bits"},"id":7590,"implemented":true,"kind":"function","modifiers":[],"name":"toUint240","nameLocation":"2144:9:25","nodeType":"FunctionDefinition","parameters":{"id":7566,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7565,"mutability":"mutable","name":"value","nameLocation":"2162:5:25","nodeType":"VariableDeclaration","scope":7590,"src":"2154:13:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7564,"name":"uint256","nodeType":"ElementaryTypeName","src":"2154:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2153:15:25"},"returnParameters":{"id":7569,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7568,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7590,"src":"2192:7:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint240","typeString":"uint240"},"typeName":{"id":7567,"name":"uint240","nodeType":"ElementaryTypeName","src":"2192:7:25","typeDescriptions":{"typeIdentifier":"t_uint240","typeString":"uint240"}},"visibility":"internal"}],"src":"2191:9:25"},"scope":9272,"src":"2135:218:25","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7617,"nodeType":"Block","src":"2710:152:25","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7604,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7598,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7593,"src":"2724:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7601,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2737:7:25","typeDescriptions":{"typeIdentifier":"t_type$_t_uint232_$","typeString":"type(uint232)"},"typeName":{"id":7600,"name":"uint232","nodeType":"ElementaryTypeName","src":"2737:7:25","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint232_$","typeString":"type(uint232)"}],"id":7599,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967269,"src":"2732:4:25","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7602,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2732:13:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint232","typeString":"type(uint232)"}},"id":7603,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2746:3:25","memberName":"max","nodeType":"MemberAccess","src":"2732:17:25","typeDescriptions":{"typeIdentifier":"t_uint232","typeString":"uint232"}},"src":"2724:25:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7611,"nodeType":"IfStatement","src":"2720:105:25","trueBody":{"id":7610,"nodeType":"Block","src":"2751:74:25","statements":[{"errorCall":{"arguments":[{"hexValue":"323332","id":7606,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2803:3:25","typeDescriptions":{"typeIdentifier":"t_rational_232_by_1","typeString":"int_const 232"},"value":"232"},{"id":7607,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7593,"src":"2808:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_232_by_1","typeString":"int_const 232"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7605,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7517,"src":"2772:30:25","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7608,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2772:42:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7609,"nodeType":"RevertStatement","src":"2765:49:25"}]}},{"expression":{"arguments":[{"id":7614,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7593,"src":"2849:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7613,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2841:7:25","typeDescriptions":{"typeIdentifier":"t_type$_t_uint232_$","typeString":"type(uint232)"},"typeName":{"id":7612,"name":"uint232","nodeType":"ElementaryTypeName","src":"2841:7:25","typeDescriptions":{}}},"id":7615,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2841:14:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint232","typeString":"uint232"}},"functionReturnParameters":7597,"id":7616,"nodeType":"Return","src":"2834:21:25"}]},"documentation":{"id":7591,"nodeType":"StructuredDocumentation","src":"2359:280:25","text":" @dev Returns the downcasted uint232 from uint256, reverting on\n overflow (when the input is greater than largest uint232).\n Counterpart to Solidity's `uint232` operator.\n Requirements:\n - input must fit into 232 bits"},"id":7618,"implemented":true,"kind":"function","modifiers":[],"name":"toUint232","nameLocation":"2653:9:25","nodeType":"FunctionDefinition","parameters":{"id":7594,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7593,"mutability":"mutable","name":"value","nameLocation":"2671:5:25","nodeType":"VariableDeclaration","scope":7618,"src":"2663:13:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7592,"name":"uint256","nodeType":"ElementaryTypeName","src":"2663:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2662:15:25"},"returnParameters":{"id":7597,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7596,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7618,"src":"2701:7:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint232","typeString":"uint232"},"typeName":{"id":7595,"name":"uint232","nodeType":"ElementaryTypeName","src":"2701:7:25","typeDescriptions":{"typeIdentifier":"t_uint232","typeString":"uint232"}},"visibility":"internal"}],"src":"2700:9:25"},"scope":9272,"src":"2644:218:25","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7645,"nodeType":"Block","src":"3219:152:25","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7632,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7626,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7621,"src":"3233:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7629,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3246:7:25","typeDescriptions":{"typeIdentifier":"t_type$_t_uint224_$","typeString":"type(uint224)"},"typeName":{"id":7628,"name":"uint224","nodeType":"ElementaryTypeName","src":"3246:7:25","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint224_$","typeString":"type(uint224)"}],"id":7627,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967269,"src":"3241:4:25","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7630,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3241:13:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint224","typeString":"type(uint224)"}},"id":7631,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3255:3:25","memberName":"max","nodeType":"MemberAccess","src":"3241:17:25","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"src":"3233:25:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7639,"nodeType":"IfStatement","src":"3229:105:25","trueBody":{"id":7638,"nodeType":"Block","src":"3260:74:25","statements":[{"errorCall":{"arguments":[{"hexValue":"323234","id":7634,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3312:3:25","typeDescriptions":{"typeIdentifier":"t_rational_224_by_1","typeString":"int_const 224"},"value":"224"},{"id":7635,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7621,"src":"3317:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_224_by_1","typeString":"int_const 224"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7633,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7517,"src":"3281:30:25","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7636,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3281:42:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7637,"nodeType":"RevertStatement","src":"3274:49:25"}]}},{"expression":{"arguments":[{"id":7642,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7621,"src":"3358:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7641,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3350:7:25","typeDescriptions":{"typeIdentifier":"t_type$_t_uint224_$","typeString":"type(uint224)"},"typeName":{"id":7640,"name":"uint224","nodeType":"ElementaryTypeName","src":"3350:7:25","typeDescriptions":{}}},"id":7643,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3350:14:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"functionReturnParameters":7625,"id":7644,"nodeType":"Return","src":"3343:21:25"}]},"documentation":{"id":7619,"nodeType":"StructuredDocumentation","src":"2868:280:25","text":" @dev Returns the downcasted uint224 from uint256, reverting on\n overflow (when the input is greater than largest uint224).\n Counterpart to Solidity's `uint224` operator.\n Requirements:\n - input must fit into 224 bits"},"id":7646,"implemented":true,"kind":"function","modifiers":[],"name":"toUint224","nameLocation":"3162:9:25","nodeType":"FunctionDefinition","parameters":{"id":7622,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7621,"mutability":"mutable","name":"value","nameLocation":"3180:5:25","nodeType":"VariableDeclaration","scope":7646,"src":"3172:13:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7620,"name":"uint256","nodeType":"ElementaryTypeName","src":"3172:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3171:15:25"},"returnParameters":{"id":7625,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7624,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7646,"src":"3210:7:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"},"typeName":{"id":7623,"name":"uint224","nodeType":"ElementaryTypeName","src":"3210:7:25","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"visibility":"internal"}],"src":"3209:9:25"},"scope":9272,"src":"3153:218:25","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7673,"nodeType":"Block","src":"3728:152:25","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7660,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7654,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7649,"src":"3742:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7657,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3755:7:25","typeDescriptions":{"typeIdentifier":"t_type$_t_uint216_$","typeString":"type(uint216)"},"typeName":{"id":7656,"name":"uint216","nodeType":"ElementaryTypeName","src":"3755:7:25","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint216_$","typeString":"type(uint216)"}],"id":7655,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967269,"src":"3750:4:25","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7658,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3750:13:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint216","typeString":"type(uint216)"}},"id":7659,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3764:3:25","memberName":"max","nodeType":"MemberAccess","src":"3750:17:25","typeDescriptions":{"typeIdentifier":"t_uint216","typeString":"uint216"}},"src":"3742:25:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7667,"nodeType":"IfStatement","src":"3738:105:25","trueBody":{"id":7666,"nodeType":"Block","src":"3769:74:25","statements":[{"errorCall":{"arguments":[{"hexValue":"323136","id":7662,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3821:3:25","typeDescriptions":{"typeIdentifier":"t_rational_216_by_1","typeString":"int_const 216"},"value":"216"},{"id":7663,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7649,"src":"3826:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_216_by_1","typeString":"int_const 216"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7661,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7517,"src":"3790:30:25","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7664,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3790:42:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7665,"nodeType":"RevertStatement","src":"3783:49:25"}]}},{"expression":{"arguments":[{"id":7670,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7649,"src":"3867:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7669,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3859:7:25","typeDescriptions":{"typeIdentifier":"t_type$_t_uint216_$","typeString":"type(uint216)"},"typeName":{"id":7668,"name":"uint216","nodeType":"ElementaryTypeName","src":"3859:7:25","typeDescriptions":{}}},"id":7671,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3859:14:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint216","typeString":"uint216"}},"functionReturnParameters":7653,"id":7672,"nodeType":"Return","src":"3852:21:25"}]},"documentation":{"id":7647,"nodeType":"StructuredDocumentation","src":"3377:280:25","text":" @dev Returns the downcasted uint216 from uint256, reverting on\n overflow (when the input is greater than largest uint216).\n Counterpart to Solidity's `uint216` operator.\n Requirements:\n - input must fit into 216 bits"},"id":7674,"implemented":true,"kind":"function","modifiers":[],"name":"toUint216","nameLocation":"3671:9:25","nodeType":"FunctionDefinition","parameters":{"id":7650,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7649,"mutability":"mutable","name":"value","nameLocation":"3689:5:25","nodeType":"VariableDeclaration","scope":7674,"src":"3681:13:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7648,"name":"uint256","nodeType":"ElementaryTypeName","src":"3681:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3680:15:25"},"returnParameters":{"id":7653,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7652,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7674,"src":"3719:7:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint216","typeString":"uint216"},"typeName":{"id":7651,"name":"uint216","nodeType":"ElementaryTypeName","src":"3719:7:25","typeDescriptions":{"typeIdentifier":"t_uint216","typeString":"uint216"}},"visibility":"internal"}],"src":"3718:9:25"},"scope":9272,"src":"3662:218:25","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7701,"nodeType":"Block","src":"4237:152:25","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7688,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7682,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7677,"src":"4251:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7685,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4264:7:25","typeDescriptions":{"typeIdentifier":"t_type$_t_uint208_$","typeString":"type(uint208)"},"typeName":{"id":7684,"name":"uint208","nodeType":"ElementaryTypeName","src":"4264:7:25","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint208_$","typeString":"type(uint208)"}],"id":7683,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967269,"src":"4259:4:25","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7686,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4259:13:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint208","typeString":"type(uint208)"}},"id":7687,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4273:3:25","memberName":"max","nodeType":"MemberAccess","src":"4259:17:25","typeDescriptions":{"typeIdentifier":"t_uint208","typeString":"uint208"}},"src":"4251:25:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7695,"nodeType":"IfStatement","src":"4247:105:25","trueBody":{"id":7694,"nodeType":"Block","src":"4278:74:25","statements":[{"errorCall":{"arguments":[{"hexValue":"323038","id":7690,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4330:3:25","typeDescriptions":{"typeIdentifier":"t_rational_208_by_1","typeString":"int_const 208"},"value":"208"},{"id":7691,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7677,"src":"4335:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_208_by_1","typeString":"int_const 208"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7689,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7517,"src":"4299:30:25","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7692,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4299:42:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7693,"nodeType":"RevertStatement","src":"4292:49:25"}]}},{"expression":{"arguments":[{"id":7698,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7677,"src":"4376:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7697,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4368:7:25","typeDescriptions":{"typeIdentifier":"t_type$_t_uint208_$","typeString":"type(uint208)"},"typeName":{"id":7696,"name":"uint208","nodeType":"ElementaryTypeName","src":"4368:7:25","typeDescriptions":{}}},"id":7699,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4368:14:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint208","typeString":"uint208"}},"functionReturnParameters":7681,"id":7700,"nodeType":"Return","src":"4361:21:25"}]},"documentation":{"id":7675,"nodeType":"StructuredDocumentation","src":"3886:280:25","text":" @dev Returns the downcasted uint208 from uint256, reverting on\n overflow (when the input is greater than largest uint208).\n Counterpart to Solidity's `uint208` operator.\n Requirements:\n - input must fit into 208 bits"},"id":7702,"implemented":true,"kind":"function","modifiers":[],"name":"toUint208","nameLocation":"4180:9:25","nodeType":"FunctionDefinition","parameters":{"id":7678,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7677,"mutability":"mutable","name":"value","nameLocation":"4198:5:25","nodeType":"VariableDeclaration","scope":7702,"src":"4190:13:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7676,"name":"uint256","nodeType":"ElementaryTypeName","src":"4190:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4189:15:25"},"returnParameters":{"id":7681,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7680,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7702,"src":"4228:7:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint208","typeString":"uint208"},"typeName":{"id":7679,"name":"uint208","nodeType":"ElementaryTypeName","src":"4228:7:25","typeDescriptions":{"typeIdentifier":"t_uint208","typeString":"uint208"}},"visibility":"internal"}],"src":"4227:9:25"},"scope":9272,"src":"4171:218:25","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7729,"nodeType":"Block","src":"4746:152:25","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7716,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7710,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7705,"src":"4760:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7713,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4773:7:25","typeDescriptions":{"typeIdentifier":"t_type$_t_uint200_$","typeString":"type(uint200)"},"typeName":{"id":7712,"name":"uint200","nodeType":"ElementaryTypeName","src":"4773:7:25","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint200_$","typeString":"type(uint200)"}],"id":7711,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967269,"src":"4768:4:25","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7714,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4768:13:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint200","typeString":"type(uint200)"}},"id":7715,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4782:3:25","memberName":"max","nodeType":"MemberAccess","src":"4768:17:25","typeDescriptions":{"typeIdentifier":"t_uint200","typeString":"uint200"}},"src":"4760:25:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7723,"nodeType":"IfStatement","src":"4756:105:25","trueBody":{"id":7722,"nodeType":"Block","src":"4787:74:25","statements":[{"errorCall":{"arguments":[{"hexValue":"323030","id":7718,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4839:3:25","typeDescriptions":{"typeIdentifier":"t_rational_200_by_1","typeString":"int_const 200"},"value":"200"},{"id":7719,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7705,"src":"4844:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_200_by_1","typeString":"int_const 200"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7717,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7517,"src":"4808:30:25","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7720,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4808:42:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7721,"nodeType":"RevertStatement","src":"4801:49:25"}]}},{"expression":{"arguments":[{"id":7726,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7705,"src":"4885:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7725,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4877:7:25","typeDescriptions":{"typeIdentifier":"t_type$_t_uint200_$","typeString":"type(uint200)"},"typeName":{"id":7724,"name":"uint200","nodeType":"ElementaryTypeName","src":"4877:7:25","typeDescriptions":{}}},"id":7727,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4877:14:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint200","typeString":"uint200"}},"functionReturnParameters":7709,"id":7728,"nodeType":"Return","src":"4870:21:25"}]},"documentation":{"id":7703,"nodeType":"StructuredDocumentation","src":"4395:280:25","text":" @dev Returns the downcasted uint200 from uint256, reverting on\n overflow (when the input is greater than largest uint200).\n Counterpart to Solidity's `uint200` operator.\n Requirements:\n - input must fit into 200 bits"},"id":7730,"implemented":true,"kind":"function","modifiers":[],"name":"toUint200","nameLocation":"4689:9:25","nodeType":"FunctionDefinition","parameters":{"id":7706,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7705,"mutability":"mutable","name":"value","nameLocation":"4707:5:25","nodeType":"VariableDeclaration","scope":7730,"src":"4699:13:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7704,"name":"uint256","nodeType":"ElementaryTypeName","src":"4699:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4698:15:25"},"returnParameters":{"id":7709,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7708,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7730,"src":"4737:7:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint200","typeString":"uint200"},"typeName":{"id":7707,"name":"uint200","nodeType":"ElementaryTypeName","src":"4737:7:25","typeDescriptions":{"typeIdentifier":"t_uint200","typeString":"uint200"}},"visibility":"internal"}],"src":"4736:9:25"},"scope":9272,"src":"4680:218:25","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7757,"nodeType":"Block","src":"5255:152:25","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7744,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7738,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7733,"src":"5269:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7741,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5282:7:25","typeDescriptions":{"typeIdentifier":"t_type$_t_uint192_$","typeString":"type(uint192)"},"typeName":{"id":7740,"name":"uint192","nodeType":"ElementaryTypeName","src":"5282:7:25","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint192_$","typeString":"type(uint192)"}],"id":7739,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967269,"src":"5277:4:25","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7742,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5277:13:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint192","typeString":"type(uint192)"}},"id":7743,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5291:3:25","memberName":"max","nodeType":"MemberAccess","src":"5277:17:25","typeDescriptions":{"typeIdentifier":"t_uint192","typeString":"uint192"}},"src":"5269:25:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7751,"nodeType":"IfStatement","src":"5265:105:25","trueBody":{"id":7750,"nodeType":"Block","src":"5296:74:25","statements":[{"errorCall":{"arguments":[{"hexValue":"313932","id":7746,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5348:3:25","typeDescriptions":{"typeIdentifier":"t_rational_192_by_1","typeString":"int_const 192"},"value":"192"},{"id":7747,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7733,"src":"5353:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_192_by_1","typeString":"int_const 192"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7745,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7517,"src":"5317:30:25","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7748,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5317:42:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7749,"nodeType":"RevertStatement","src":"5310:49:25"}]}},{"expression":{"arguments":[{"id":7754,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7733,"src":"5394:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7753,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5386:7:25","typeDescriptions":{"typeIdentifier":"t_type$_t_uint192_$","typeString":"type(uint192)"},"typeName":{"id":7752,"name":"uint192","nodeType":"ElementaryTypeName","src":"5386:7:25","typeDescriptions":{}}},"id":7755,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5386:14:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint192","typeString":"uint192"}},"functionReturnParameters":7737,"id":7756,"nodeType":"Return","src":"5379:21:25"}]},"documentation":{"id":7731,"nodeType":"StructuredDocumentation","src":"4904:280:25","text":" @dev Returns the downcasted uint192 from uint256, reverting on\n overflow (when the input is greater than largest uint192).\n Counterpart to Solidity's `uint192` operator.\n Requirements:\n - input must fit into 192 bits"},"id":7758,"implemented":true,"kind":"function","modifiers":[],"name":"toUint192","nameLocation":"5198:9:25","nodeType":"FunctionDefinition","parameters":{"id":7734,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7733,"mutability":"mutable","name":"value","nameLocation":"5216:5:25","nodeType":"VariableDeclaration","scope":7758,"src":"5208:13:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7732,"name":"uint256","nodeType":"ElementaryTypeName","src":"5208:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5207:15:25"},"returnParameters":{"id":7737,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7736,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7758,"src":"5246:7:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint192","typeString":"uint192"},"typeName":{"id":7735,"name":"uint192","nodeType":"ElementaryTypeName","src":"5246:7:25","typeDescriptions":{"typeIdentifier":"t_uint192","typeString":"uint192"}},"visibility":"internal"}],"src":"5245:9:25"},"scope":9272,"src":"5189:218:25","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7785,"nodeType":"Block","src":"5764:152:25","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7772,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7766,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7761,"src":"5778:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7769,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5791:7:25","typeDescriptions":{"typeIdentifier":"t_type$_t_uint184_$","typeString":"type(uint184)"},"typeName":{"id":7768,"name":"uint184","nodeType":"ElementaryTypeName","src":"5791:7:25","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint184_$","typeString":"type(uint184)"}],"id":7767,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967269,"src":"5786:4:25","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7770,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5786:13:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint184","typeString":"type(uint184)"}},"id":7771,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5800:3:25","memberName":"max","nodeType":"MemberAccess","src":"5786:17:25","typeDescriptions":{"typeIdentifier":"t_uint184","typeString":"uint184"}},"src":"5778:25:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7779,"nodeType":"IfStatement","src":"5774:105:25","trueBody":{"id":7778,"nodeType":"Block","src":"5805:74:25","statements":[{"errorCall":{"arguments":[{"hexValue":"313834","id":7774,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5857:3:25","typeDescriptions":{"typeIdentifier":"t_rational_184_by_1","typeString":"int_const 184"},"value":"184"},{"id":7775,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7761,"src":"5862:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_184_by_1","typeString":"int_const 184"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7773,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7517,"src":"5826:30:25","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7776,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5826:42:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7777,"nodeType":"RevertStatement","src":"5819:49:25"}]}},{"expression":{"arguments":[{"id":7782,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7761,"src":"5903:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7781,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5895:7:25","typeDescriptions":{"typeIdentifier":"t_type$_t_uint184_$","typeString":"type(uint184)"},"typeName":{"id":7780,"name":"uint184","nodeType":"ElementaryTypeName","src":"5895:7:25","typeDescriptions":{}}},"id":7783,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5895:14:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint184","typeString":"uint184"}},"functionReturnParameters":7765,"id":7784,"nodeType":"Return","src":"5888:21:25"}]},"documentation":{"id":7759,"nodeType":"StructuredDocumentation","src":"5413:280:25","text":" @dev Returns the downcasted uint184 from uint256, reverting on\n overflow (when the input is greater than largest uint184).\n Counterpart to Solidity's `uint184` operator.\n Requirements:\n - input must fit into 184 bits"},"id":7786,"implemented":true,"kind":"function","modifiers":[],"name":"toUint184","nameLocation":"5707:9:25","nodeType":"FunctionDefinition","parameters":{"id":7762,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7761,"mutability":"mutable","name":"value","nameLocation":"5725:5:25","nodeType":"VariableDeclaration","scope":7786,"src":"5717:13:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7760,"name":"uint256","nodeType":"ElementaryTypeName","src":"5717:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5716:15:25"},"returnParameters":{"id":7765,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7764,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7786,"src":"5755:7:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint184","typeString":"uint184"},"typeName":{"id":7763,"name":"uint184","nodeType":"ElementaryTypeName","src":"5755:7:25","typeDescriptions":{"typeIdentifier":"t_uint184","typeString":"uint184"}},"visibility":"internal"}],"src":"5754:9:25"},"scope":9272,"src":"5698:218:25","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7813,"nodeType":"Block","src":"6273:152:25","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7800,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7794,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7789,"src":"6287:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7797,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6300:7:25","typeDescriptions":{"typeIdentifier":"t_type$_t_uint176_$","typeString":"type(uint176)"},"typeName":{"id":7796,"name":"uint176","nodeType":"ElementaryTypeName","src":"6300:7:25","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint176_$","typeString":"type(uint176)"}],"id":7795,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967269,"src":"6295:4:25","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7798,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6295:13:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint176","typeString":"type(uint176)"}},"id":7799,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6309:3:25","memberName":"max","nodeType":"MemberAccess","src":"6295:17:25","typeDescriptions":{"typeIdentifier":"t_uint176","typeString":"uint176"}},"src":"6287:25:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7807,"nodeType":"IfStatement","src":"6283:105:25","trueBody":{"id":7806,"nodeType":"Block","src":"6314:74:25","statements":[{"errorCall":{"arguments":[{"hexValue":"313736","id":7802,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6366:3:25","typeDescriptions":{"typeIdentifier":"t_rational_176_by_1","typeString":"int_const 176"},"value":"176"},{"id":7803,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7789,"src":"6371:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_176_by_1","typeString":"int_const 176"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7801,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7517,"src":"6335:30:25","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7804,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6335:42:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7805,"nodeType":"RevertStatement","src":"6328:49:25"}]}},{"expression":{"arguments":[{"id":7810,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7789,"src":"6412:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7809,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6404:7:25","typeDescriptions":{"typeIdentifier":"t_type$_t_uint176_$","typeString":"type(uint176)"},"typeName":{"id":7808,"name":"uint176","nodeType":"ElementaryTypeName","src":"6404:7:25","typeDescriptions":{}}},"id":7811,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6404:14:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint176","typeString":"uint176"}},"functionReturnParameters":7793,"id":7812,"nodeType":"Return","src":"6397:21:25"}]},"documentation":{"id":7787,"nodeType":"StructuredDocumentation","src":"5922:280:25","text":" @dev Returns the downcasted uint176 from uint256, reverting on\n overflow (when the input is greater than largest uint176).\n Counterpart to Solidity's `uint176` operator.\n Requirements:\n - input must fit into 176 bits"},"id":7814,"implemented":true,"kind":"function","modifiers":[],"name":"toUint176","nameLocation":"6216:9:25","nodeType":"FunctionDefinition","parameters":{"id":7790,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7789,"mutability":"mutable","name":"value","nameLocation":"6234:5:25","nodeType":"VariableDeclaration","scope":7814,"src":"6226:13:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7788,"name":"uint256","nodeType":"ElementaryTypeName","src":"6226:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6225:15:25"},"returnParameters":{"id":7793,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7792,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7814,"src":"6264:7:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint176","typeString":"uint176"},"typeName":{"id":7791,"name":"uint176","nodeType":"ElementaryTypeName","src":"6264:7:25","typeDescriptions":{"typeIdentifier":"t_uint176","typeString":"uint176"}},"visibility":"internal"}],"src":"6263:9:25"},"scope":9272,"src":"6207:218:25","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7841,"nodeType":"Block","src":"6782:152:25","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7828,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7822,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7817,"src":"6796:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7825,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6809:7:25","typeDescriptions":{"typeIdentifier":"t_type$_t_uint168_$","typeString":"type(uint168)"},"typeName":{"id":7824,"name":"uint168","nodeType":"ElementaryTypeName","src":"6809:7:25","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint168_$","typeString":"type(uint168)"}],"id":7823,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967269,"src":"6804:4:25","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7826,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6804:13:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint168","typeString":"type(uint168)"}},"id":7827,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6818:3:25","memberName":"max","nodeType":"MemberAccess","src":"6804:17:25","typeDescriptions":{"typeIdentifier":"t_uint168","typeString":"uint168"}},"src":"6796:25:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7835,"nodeType":"IfStatement","src":"6792:105:25","trueBody":{"id":7834,"nodeType":"Block","src":"6823:74:25","statements":[{"errorCall":{"arguments":[{"hexValue":"313638","id":7830,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6875:3:25","typeDescriptions":{"typeIdentifier":"t_rational_168_by_1","typeString":"int_const 168"},"value":"168"},{"id":7831,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7817,"src":"6880:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_168_by_1","typeString":"int_const 168"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7829,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7517,"src":"6844:30:25","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7832,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6844:42:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7833,"nodeType":"RevertStatement","src":"6837:49:25"}]}},{"expression":{"arguments":[{"id":7838,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7817,"src":"6921:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7837,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6913:7:25","typeDescriptions":{"typeIdentifier":"t_type$_t_uint168_$","typeString":"type(uint168)"},"typeName":{"id":7836,"name":"uint168","nodeType":"ElementaryTypeName","src":"6913:7:25","typeDescriptions":{}}},"id":7839,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6913:14:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint168","typeString":"uint168"}},"functionReturnParameters":7821,"id":7840,"nodeType":"Return","src":"6906:21:25"}]},"documentation":{"id":7815,"nodeType":"StructuredDocumentation","src":"6431:280:25","text":" @dev Returns the downcasted uint168 from uint256, reverting on\n overflow (when the input is greater than largest uint168).\n Counterpart to Solidity's `uint168` operator.\n Requirements:\n - input must fit into 168 bits"},"id":7842,"implemented":true,"kind":"function","modifiers":[],"name":"toUint168","nameLocation":"6725:9:25","nodeType":"FunctionDefinition","parameters":{"id":7818,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7817,"mutability":"mutable","name":"value","nameLocation":"6743:5:25","nodeType":"VariableDeclaration","scope":7842,"src":"6735:13:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7816,"name":"uint256","nodeType":"ElementaryTypeName","src":"6735:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6734:15:25"},"returnParameters":{"id":7821,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7820,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7842,"src":"6773:7:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint168","typeString":"uint168"},"typeName":{"id":7819,"name":"uint168","nodeType":"ElementaryTypeName","src":"6773:7:25","typeDescriptions":{"typeIdentifier":"t_uint168","typeString":"uint168"}},"visibility":"internal"}],"src":"6772:9:25"},"scope":9272,"src":"6716:218:25","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7869,"nodeType":"Block","src":"7291:152:25","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7856,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7850,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7845,"src":"7305:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7853,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7318:7:25","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":7852,"name":"uint160","nodeType":"ElementaryTypeName","src":"7318:7:25","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"}],"id":7851,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967269,"src":"7313:4:25","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7854,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7313:13:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint160","typeString":"type(uint160)"}},"id":7855,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7327:3:25","memberName":"max","nodeType":"MemberAccess","src":"7313:17:25","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},"src":"7305:25:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7863,"nodeType":"IfStatement","src":"7301:105:25","trueBody":{"id":7862,"nodeType":"Block","src":"7332:74:25","statements":[{"errorCall":{"arguments":[{"hexValue":"313630","id":7858,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7384:3:25","typeDescriptions":{"typeIdentifier":"t_rational_160_by_1","typeString":"int_const 160"},"value":"160"},{"id":7859,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7845,"src":"7389:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_160_by_1","typeString":"int_const 160"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7857,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7517,"src":"7353:30:25","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7860,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7353:42:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7861,"nodeType":"RevertStatement","src":"7346:49:25"}]}},{"expression":{"arguments":[{"id":7866,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7845,"src":"7430:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7865,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7422:7:25","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":7864,"name":"uint160","nodeType":"ElementaryTypeName","src":"7422:7:25","typeDescriptions":{}}},"id":7867,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7422:14:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},"functionReturnParameters":7849,"id":7868,"nodeType":"Return","src":"7415:21:25"}]},"documentation":{"id":7843,"nodeType":"StructuredDocumentation","src":"6940:280:25","text":" @dev Returns the downcasted uint160 from uint256, reverting on\n overflow (when the input is greater than largest uint160).\n Counterpart to Solidity's `uint160` operator.\n Requirements:\n - input must fit into 160 bits"},"id":7870,"implemented":true,"kind":"function","modifiers":[],"name":"toUint160","nameLocation":"7234:9:25","nodeType":"FunctionDefinition","parameters":{"id":7846,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7845,"mutability":"mutable","name":"value","nameLocation":"7252:5:25","nodeType":"VariableDeclaration","scope":7870,"src":"7244:13:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7844,"name":"uint256","nodeType":"ElementaryTypeName","src":"7244:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7243:15:25"},"returnParameters":{"id":7849,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7848,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7870,"src":"7282:7:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"},"typeName":{"id":7847,"name":"uint160","nodeType":"ElementaryTypeName","src":"7282:7:25","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},"visibility":"internal"}],"src":"7281:9:25"},"scope":9272,"src":"7225:218:25","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7897,"nodeType":"Block","src":"7800:152:25","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7884,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7878,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7873,"src":"7814:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7881,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7827:7:25","typeDescriptions":{"typeIdentifier":"t_type$_t_uint152_$","typeString":"type(uint152)"},"typeName":{"id":7880,"name":"uint152","nodeType":"ElementaryTypeName","src":"7827:7:25","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint152_$","typeString":"type(uint152)"}],"id":7879,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967269,"src":"7822:4:25","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7882,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7822:13:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint152","typeString":"type(uint152)"}},"id":7883,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7836:3:25","memberName":"max","nodeType":"MemberAccess","src":"7822:17:25","typeDescriptions":{"typeIdentifier":"t_uint152","typeString":"uint152"}},"src":"7814:25:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7891,"nodeType":"IfStatement","src":"7810:105:25","trueBody":{"id":7890,"nodeType":"Block","src":"7841:74:25","statements":[{"errorCall":{"arguments":[{"hexValue":"313532","id":7886,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7893:3:25","typeDescriptions":{"typeIdentifier":"t_rational_152_by_1","typeString":"int_const 152"},"value":"152"},{"id":7887,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7873,"src":"7898:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_152_by_1","typeString":"int_const 152"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7885,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7517,"src":"7862:30:25","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7888,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7862:42:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7889,"nodeType":"RevertStatement","src":"7855:49:25"}]}},{"expression":{"arguments":[{"id":7894,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7873,"src":"7939:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7893,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7931:7:25","typeDescriptions":{"typeIdentifier":"t_type$_t_uint152_$","typeString":"type(uint152)"},"typeName":{"id":7892,"name":"uint152","nodeType":"ElementaryTypeName","src":"7931:7:25","typeDescriptions":{}}},"id":7895,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7931:14:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint152","typeString":"uint152"}},"functionReturnParameters":7877,"id":7896,"nodeType":"Return","src":"7924:21:25"}]},"documentation":{"id":7871,"nodeType":"StructuredDocumentation","src":"7449:280:25","text":" @dev Returns the downcasted uint152 from uint256, reverting on\n overflow (when the input is greater than largest uint152).\n Counterpart to Solidity's `uint152` operator.\n Requirements:\n - input must fit into 152 bits"},"id":7898,"implemented":true,"kind":"function","modifiers":[],"name":"toUint152","nameLocation":"7743:9:25","nodeType":"FunctionDefinition","parameters":{"id":7874,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7873,"mutability":"mutable","name":"value","nameLocation":"7761:5:25","nodeType":"VariableDeclaration","scope":7898,"src":"7753:13:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7872,"name":"uint256","nodeType":"ElementaryTypeName","src":"7753:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7752:15:25"},"returnParameters":{"id":7877,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7876,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7898,"src":"7791:7:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint152","typeString":"uint152"},"typeName":{"id":7875,"name":"uint152","nodeType":"ElementaryTypeName","src":"7791:7:25","typeDescriptions":{"typeIdentifier":"t_uint152","typeString":"uint152"}},"visibility":"internal"}],"src":"7790:9:25"},"scope":9272,"src":"7734:218:25","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7925,"nodeType":"Block","src":"8309:152:25","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7912,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7906,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7901,"src":"8323:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7909,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8336:7:25","typeDescriptions":{"typeIdentifier":"t_type$_t_uint144_$","typeString":"type(uint144)"},"typeName":{"id":7908,"name":"uint144","nodeType":"ElementaryTypeName","src":"8336:7:25","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint144_$","typeString":"type(uint144)"}],"id":7907,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967269,"src":"8331:4:25","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7910,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8331:13:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint144","typeString":"type(uint144)"}},"id":7911,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8345:3:25","memberName":"max","nodeType":"MemberAccess","src":"8331:17:25","typeDescriptions":{"typeIdentifier":"t_uint144","typeString":"uint144"}},"src":"8323:25:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7919,"nodeType":"IfStatement","src":"8319:105:25","trueBody":{"id":7918,"nodeType":"Block","src":"8350:74:25","statements":[{"errorCall":{"arguments":[{"hexValue":"313434","id":7914,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8402:3:25","typeDescriptions":{"typeIdentifier":"t_rational_144_by_1","typeString":"int_const 144"},"value":"144"},{"id":7915,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7901,"src":"8407:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_144_by_1","typeString":"int_const 144"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7913,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7517,"src":"8371:30:25","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7916,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8371:42:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7917,"nodeType":"RevertStatement","src":"8364:49:25"}]}},{"expression":{"arguments":[{"id":7922,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7901,"src":"8448:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7921,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8440:7:25","typeDescriptions":{"typeIdentifier":"t_type$_t_uint144_$","typeString":"type(uint144)"},"typeName":{"id":7920,"name":"uint144","nodeType":"ElementaryTypeName","src":"8440:7:25","typeDescriptions":{}}},"id":7923,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8440:14:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint144","typeString":"uint144"}},"functionReturnParameters":7905,"id":7924,"nodeType":"Return","src":"8433:21:25"}]},"documentation":{"id":7899,"nodeType":"StructuredDocumentation","src":"7958:280:25","text":" @dev Returns the downcasted uint144 from uint256, reverting on\n overflow (when the input is greater than largest uint144).\n Counterpart to Solidity's `uint144` operator.\n Requirements:\n - input must fit into 144 bits"},"id":7926,"implemented":true,"kind":"function","modifiers":[],"name":"toUint144","nameLocation":"8252:9:25","nodeType":"FunctionDefinition","parameters":{"id":7902,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7901,"mutability":"mutable","name":"value","nameLocation":"8270:5:25","nodeType":"VariableDeclaration","scope":7926,"src":"8262:13:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7900,"name":"uint256","nodeType":"ElementaryTypeName","src":"8262:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8261:15:25"},"returnParameters":{"id":7905,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7904,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7926,"src":"8300:7:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint144","typeString":"uint144"},"typeName":{"id":7903,"name":"uint144","nodeType":"ElementaryTypeName","src":"8300:7:25","typeDescriptions":{"typeIdentifier":"t_uint144","typeString":"uint144"}},"visibility":"internal"}],"src":"8299:9:25"},"scope":9272,"src":"8243:218:25","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7953,"nodeType":"Block","src":"8818:152:25","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7940,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7934,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7929,"src":"8832:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7937,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8845:7:25","typeDescriptions":{"typeIdentifier":"t_type$_t_uint136_$","typeString":"type(uint136)"},"typeName":{"id":7936,"name":"uint136","nodeType":"ElementaryTypeName","src":"8845:7:25","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint136_$","typeString":"type(uint136)"}],"id":7935,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967269,"src":"8840:4:25","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7938,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8840:13:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint136","typeString":"type(uint136)"}},"id":7939,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8854:3:25","memberName":"max","nodeType":"MemberAccess","src":"8840:17:25","typeDescriptions":{"typeIdentifier":"t_uint136","typeString":"uint136"}},"src":"8832:25:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7947,"nodeType":"IfStatement","src":"8828:105:25","trueBody":{"id":7946,"nodeType":"Block","src":"8859:74:25","statements":[{"errorCall":{"arguments":[{"hexValue":"313336","id":7942,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8911:3:25","typeDescriptions":{"typeIdentifier":"t_rational_136_by_1","typeString":"int_const 136"},"value":"136"},{"id":7943,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7929,"src":"8916:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_136_by_1","typeString":"int_const 136"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7941,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7517,"src":"8880:30:25","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7944,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8880:42:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7945,"nodeType":"RevertStatement","src":"8873:49:25"}]}},{"expression":{"arguments":[{"id":7950,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7929,"src":"8957:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7949,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8949:7:25","typeDescriptions":{"typeIdentifier":"t_type$_t_uint136_$","typeString":"type(uint136)"},"typeName":{"id":7948,"name":"uint136","nodeType":"ElementaryTypeName","src":"8949:7:25","typeDescriptions":{}}},"id":7951,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8949:14:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint136","typeString":"uint136"}},"functionReturnParameters":7933,"id":7952,"nodeType":"Return","src":"8942:21:25"}]},"documentation":{"id":7927,"nodeType":"StructuredDocumentation","src":"8467:280:25","text":" @dev Returns the downcasted uint136 from uint256, reverting on\n overflow (when the input is greater than largest uint136).\n Counterpart to Solidity's `uint136` operator.\n Requirements:\n - input must fit into 136 bits"},"id":7954,"implemented":true,"kind":"function","modifiers":[],"name":"toUint136","nameLocation":"8761:9:25","nodeType":"FunctionDefinition","parameters":{"id":7930,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7929,"mutability":"mutable","name":"value","nameLocation":"8779:5:25","nodeType":"VariableDeclaration","scope":7954,"src":"8771:13:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7928,"name":"uint256","nodeType":"ElementaryTypeName","src":"8771:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8770:15:25"},"returnParameters":{"id":7933,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7932,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7954,"src":"8809:7:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint136","typeString":"uint136"},"typeName":{"id":7931,"name":"uint136","nodeType":"ElementaryTypeName","src":"8809:7:25","typeDescriptions":{"typeIdentifier":"t_uint136","typeString":"uint136"}},"visibility":"internal"}],"src":"8808:9:25"},"scope":9272,"src":"8752:218:25","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7981,"nodeType":"Block","src":"9327:152:25","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7968,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7962,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7957,"src":"9341:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7965,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9354:7:25","typeDescriptions":{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"},"typeName":{"id":7964,"name":"uint128","nodeType":"ElementaryTypeName","src":"9354:7:25","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"}],"id":7963,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967269,"src":"9349:4:25","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7966,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9349:13:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint128","typeString":"type(uint128)"}},"id":7967,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9363:3:25","memberName":"max","nodeType":"MemberAccess","src":"9349:17:25","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"9341:25:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7975,"nodeType":"IfStatement","src":"9337:105:25","trueBody":{"id":7974,"nodeType":"Block","src":"9368:74:25","statements":[{"errorCall":{"arguments":[{"hexValue":"313238","id":7970,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9420:3:25","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},{"id":7971,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7957,"src":"9425:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7969,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7517,"src":"9389:30:25","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7972,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9389:42:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7973,"nodeType":"RevertStatement","src":"9382:49:25"}]}},{"expression":{"arguments":[{"id":7978,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7957,"src":"9466:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7977,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9458:7:25","typeDescriptions":{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"},"typeName":{"id":7976,"name":"uint128","nodeType":"ElementaryTypeName","src":"9458:7:25","typeDescriptions":{}}},"id":7979,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9458:14:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"functionReturnParameters":7961,"id":7980,"nodeType":"Return","src":"9451:21:25"}]},"documentation":{"id":7955,"nodeType":"StructuredDocumentation","src":"8976:280:25","text":" @dev Returns the downcasted uint128 from uint256, reverting on\n overflow (when the input is greater than largest uint128).\n Counterpart to Solidity's `uint128` operator.\n Requirements:\n - input must fit into 128 bits"},"id":7982,"implemented":true,"kind":"function","modifiers":[],"name":"toUint128","nameLocation":"9270:9:25","nodeType":"FunctionDefinition","parameters":{"id":7958,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7957,"mutability":"mutable","name":"value","nameLocation":"9288:5:25","nodeType":"VariableDeclaration","scope":7982,"src":"9280:13:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7956,"name":"uint256","nodeType":"ElementaryTypeName","src":"9280:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9279:15:25"},"returnParameters":{"id":7961,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7960,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7982,"src":"9318:7:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":7959,"name":"uint128","nodeType":"ElementaryTypeName","src":"9318:7:25","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"9317:9:25"},"scope":9272,"src":"9261:218:25","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8009,"nodeType":"Block","src":"9836:152:25","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7996,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7990,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7985,"src":"9850:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7993,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9863:7:25","typeDescriptions":{"typeIdentifier":"t_type$_t_uint120_$","typeString":"type(uint120)"},"typeName":{"id":7992,"name":"uint120","nodeType":"ElementaryTypeName","src":"9863:7:25","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint120_$","typeString":"type(uint120)"}],"id":7991,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967269,"src":"9858:4:25","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7994,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9858:13:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint120","typeString":"type(uint120)"}},"id":7995,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9872:3:25","memberName":"max","nodeType":"MemberAccess","src":"9858:17:25","typeDescriptions":{"typeIdentifier":"t_uint120","typeString":"uint120"}},"src":"9850:25:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8003,"nodeType":"IfStatement","src":"9846:105:25","trueBody":{"id":8002,"nodeType":"Block","src":"9877:74:25","statements":[{"errorCall":{"arguments":[{"hexValue":"313230","id":7998,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9929:3:25","typeDescriptions":{"typeIdentifier":"t_rational_120_by_1","typeString":"int_const 120"},"value":"120"},{"id":7999,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7985,"src":"9934:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_120_by_1","typeString":"int_const 120"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7997,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7517,"src":"9898:30:25","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":8000,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9898:42:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8001,"nodeType":"RevertStatement","src":"9891:49:25"}]}},{"expression":{"arguments":[{"id":8006,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7985,"src":"9975:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8005,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9967:7:25","typeDescriptions":{"typeIdentifier":"t_type$_t_uint120_$","typeString":"type(uint120)"},"typeName":{"id":8004,"name":"uint120","nodeType":"ElementaryTypeName","src":"9967:7:25","typeDescriptions":{}}},"id":8007,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9967:14:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint120","typeString":"uint120"}},"functionReturnParameters":7989,"id":8008,"nodeType":"Return","src":"9960:21:25"}]},"documentation":{"id":7983,"nodeType":"StructuredDocumentation","src":"9485:280:25","text":" @dev Returns the downcasted uint120 from uint256, reverting on\n overflow (when the input is greater than largest uint120).\n Counterpart to Solidity's `uint120` operator.\n Requirements:\n - input must fit into 120 bits"},"id":8010,"implemented":true,"kind":"function","modifiers":[],"name":"toUint120","nameLocation":"9779:9:25","nodeType":"FunctionDefinition","parameters":{"id":7986,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7985,"mutability":"mutable","name":"value","nameLocation":"9797:5:25","nodeType":"VariableDeclaration","scope":8010,"src":"9789:13:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7984,"name":"uint256","nodeType":"ElementaryTypeName","src":"9789:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9788:15:25"},"returnParameters":{"id":7989,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7988,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8010,"src":"9827:7:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint120","typeString":"uint120"},"typeName":{"id":7987,"name":"uint120","nodeType":"ElementaryTypeName","src":"9827:7:25","typeDescriptions":{"typeIdentifier":"t_uint120","typeString":"uint120"}},"visibility":"internal"}],"src":"9826:9:25"},"scope":9272,"src":"9770:218:25","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8037,"nodeType":"Block","src":"10345:152:25","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8024,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8018,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8013,"src":"10359:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":8021,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10372:7:25","typeDescriptions":{"typeIdentifier":"t_type$_t_uint112_$","typeString":"type(uint112)"},"typeName":{"id":8020,"name":"uint112","nodeType":"ElementaryTypeName","src":"10372:7:25","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint112_$","typeString":"type(uint112)"}],"id":8019,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967269,"src":"10367:4:25","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":8022,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10367:13:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint112","typeString":"type(uint112)"}},"id":8023,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10381:3:25","memberName":"max","nodeType":"MemberAccess","src":"10367:17:25","typeDescriptions":{"typeIdentifier":"t_uint112","typeString":"uint112"}},"src":"10359:25:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8031,"nodeType":"IfStatement","src":"10355:105:25","trueBody":{"id":8030,"nodeType":"Block","src":"10386:74:25","statements":[{"errorCall":{"arguments":[{"hexValue":"313132","id":8026,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10438:3:25","typeDescriptions":{"typeIdentifier":"t_rational_112_by_1","typeString":"int_const 112"},"value":"112"},{"id":8027,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8013,"src":"10443:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_112_by_1","typeString":"int_const 112"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8025,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7517,"src":"10407:30:25","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":8028,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10407:42:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8029,"nodeType":"RevertStatement","src":"10400:49:25"}]}},{"expression":{"arguments":[{"id":8034,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8013,"src":"10484:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8033,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10476:7:25","typeDescriptions":{"typeIdentifier":"t_type$_t_uint112_$","typeString":"type(uint112)"},"typeName":{"id":8032,"name":"uint112","nodeType":"ElementaryTypeName","src":"10476:7:25","typeDescriptions":{}}},"id":8035,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10476:14:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint112","typeString":"uint112"}},"functionReturnParameters":8017,"id":8036,"nodeType":"Return","src":"10469:21:25"}]},"documentation":{"id":8011,"nodeType":"StructuredDocumentation","src":"9994:280:25","text":" @dev Returns the downcasted uint112 from uint256, reverting on\n overflow (when the input is greater than largest uint112).\n Counterpart to Solidity's `uint112` operator.\n Requirements:\n - input must fit into 112 bits"},"id":8038,"implemented":true,"kind":"function","modifiers":[],"name":"toUint112","nameLocation":"10288:9:25","nodeType":"FunctionDefinition","parameters":{"id":8014,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8013,"mutability":"mutable","name":"value","nameLocation":"10306:5:25","nodeType":"VariableDeclaration","scope":8038,"src":"10298:13:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8012,"name":"uint256","nodeType":"ElementaryTypeName","src":"10298:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10297:15:25"},"returnParameters":{"id":8017,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8016,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8038,"src":"10336:7:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint112","typeString":"uint112"},"typeName":{"id":8015,"name":"uint112","nodeType":"ElementaryTypeName","src":"10336:7:25","typeDescriptions":{"typeIdentifier":"t_uint112","typeString":"uint112"}},"visibility":"internal"}],"src":"10335:9:25"},"scope":9272,"src":"10279:218:25","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8065,"nodeType":"Block","src":"10854:152:25","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8052,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8046,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8041,"src":"10868:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":8049,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10881:7:25","typeDescriptions":{"typeIdentifier":"t_type$_t_uint104_$","typeString":"type(uint104)"},"typeName":{"id":8048,"name":"uint104","nodeType":"ElementaryTypeName","src":"10881:7:25","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint104_$","typeString":"type(uint104)"}],"id":8047,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967269,"src":"10876:4:25","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":8050,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10876:13:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint104","typeString":"type(uint104)"}},"id":8051,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10890:3:25","memberName":"max","nodeType":"MemberAccess","src":"10876:17:25","typeDescriptions":{"typeIdentifier":"t_uint104","typeString":"uint104"}},"src":"10868:25:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8059,"nodeType":"IfStatement","src":"10864:105:25","trueBody":{"id":8058,"nodeType":"Block","src":"10895:74:25","statements":[{"errorCall":{"arguments":[{"hexValue":"313034","id":8054,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10947:3:25","typeDescriptions":{"typeIdentifier":"t_rational_104_by_1","typeString":"int_const 104"},"value":"104"},{"id":8055,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8041,"src":"10952:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_104_by_1","typeString":"int_const 104"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8053,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7517,"src":"10916:30:25","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":8056,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10916:42:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8057,"nodeType":"RevertStatement","src":"10909:49:25"}]}},{"expression":{"arguments":[{"id":8062,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8041,"src":"10993:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8061,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10985:7:25","typeDescriptions":{"typeIdentifier":"t_type$_t_uint104_$","typeString":"type(uint104)"},"typeName":{"id":8060,"name":"uint104","nodeType":"ElementaryTypeName","src":"10985:7:25","typeDescriptions":{}}},"id":8063,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10985:14:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint104","typeString":"uint104"}},"functionReturnParameters":8045,"id":8064,"nodeType":"Return","src":"10978:21:25"}]},"documentation":{"id":8039,"nodeType":"StructuredDocumentation","src":"10503:280:25","text":" @dev Returns the downcasted uint104 from uint256, reverting on\n overflow (when the input is greater than largest uint104).\n Counterpart to Solidity's `uint104` operator.\n Requirements:\n - input must fit into 104 bits"},"id":8066,"implemented":true,"kind":"function","modifiers":[],"name":"toUint104","nameLocation":"10797:9:25","nodeType":"FunctionDefinition","parameters":{"id":8042,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8041,"mutability":"mutable","name":"value","nameLocation":"10815:5:25","nodeType":"VariableDeclaration","scope":8066,"src":"10807:13:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8040,"name":"uint256","nodeType":"ElementaryTypeName","src":"10807:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10806:15:25"},"returnParameters":{"id":8045,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8044,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8066,"src":"10845:7:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint104","typeString":"uint104"},"typeName":{"id":8043,"name":"uint104","nodeType":"ElementaryTypeName","src":"10845:7:25","typeDescriptions":{"typeIdentifier":"t_uint104","typeString":"uint104"}},"visibility":"internal"}],"src":"10844:9:25"},"scope":9272,"src":"10788:218:25","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8093,"nodeType":"Block","src":"11357:149:25","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8080,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8074,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8069,"src":"11371:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":8077,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11384:6:25","typeDescriptions":{"typeIdentifier":"t_type$_t_uint96_$","typeString":"type(uint96)"},"typeName":{"id":8076,"name":"uint96","nodeType":"ElementaryTypeName","src":"11384:6:25","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint96_$","typeString":"type(uint96)"}],"id":8075,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967269,"src":"11379:4:25","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":8078,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11379:12:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint96","typeString":"type(uint96)"}},"id":8079,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11392:3:25","memberName":"max","nodeType":"MemberAccess","src":"11379:16:25","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"src":"11371:24:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8087,"nodeType":"IfStatement","src":"11367:103:25","trueBody":{"id":8086,"nodeType":"Block","src":"11397:73:25","statements":[{"errorCall":{"arguments":[{"hexValue":"3936","id":8082,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11449:2:25","typeDescriptions":{"typeIdentifier":"t_rational_96_by_1","typeString":"int_const 96"},"value":"96"},{"id":8083,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8069,"src":"11453:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_96_by_1","typeString":"int_const 96"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8081,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7517,"src":"11418:30:25","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":8084,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11418:41:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8085,"nodeType":"RevertStatement","src":"11411:48:25"}]}},{"expression":{"arguments":[{"id":8090,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8069,"src":"11493:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8089,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11486:6:25","typeDescriptions":{"typeIdentifier":"t_type$_t_uint96_$","typeString":"type(uint96)"},"typeName":{"id":8088,"name":"uint96","nodeType":"ElementaryTypeName","src":"11486:6:25","typeDescriptions":{}}},"id":8091,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11486:13:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"functionReturnParameters":8073,"id":8092,"nodeType":"Return","src":"11479:20:25"}]},"documentation":{"id":8067,"nodeType":"StructuredDocumentation","src":"11012:276:25","text":" @dev Returns the downcasted uint96 from uint256, reverting on\n overflow (when the input is greater than largest uint96).\n Counterpart to Solidity's `uint96` operator.\n Requirements:\n - input must fit into 96 bits"},"id":8094,"implemented":true,"kind":"function","modifiers":[],"name":"toUint96","nameLocation":"11302:8:25","nodeType":"FunctionDefinition","parameters":{"id":8070,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8069,"mutability":"mutable","name":"value","nameLocation":"11319:5:25","nodeType":"VariableDeclaration","scope":8094,"src":"11311:13:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8068,"name":"uint256","nodeType":"ElementaryTypeName","src":"11311:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11310:15:25"},"returnParameters":{"id":8073,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8072,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8094,"src":"11349:6:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"},"typeName":{"id":8071,"name":"uint96","nodeType":"ElementaryTypeName","src":"11349:6:25","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"visibility":"internal"}],"src":"11348:8:25"},"scope":9272,"src":"11293:213:25","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8121,"nodeType":"Block","src":"11857:149:25","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8108,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8102,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8097,"src":"11871:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":8105,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11884:6:25","typeDescriptions":{"typeIdentifier":"t_type$_t_uint88_$","typeString":"type(uint88)"},"typeName":{"id":8104,"name":"uint88","nodeType":"ElementaryTypeName","src":"11884:6:25","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint88_$","typeString":"type(uint88)"}],"id":8103,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967269,"src":"11879:4:25","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":8106,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11879:12:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint88","typeString":"type(uint88)"}},"id":8107,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11892:3:25","memberName":"max","nodeType":"MemberAccess","src":"11879:16:25","typeDescriptions":{"typeIdentifier":"t_uint88","typeString":"uint88"}},"src":"11871:24:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8115,"nodeType":"IfStatement","src":"11867:103:25","trueBody":{"id":8114,"nodeType":"Block","src":"11897:73:25","statements":[{"errorCall":{"arguments":[{"hexValue":"3838","id":8110,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11949:2:25","typeDescriptions":{"typeIdentifier":"t_rational_88_by_1","typeString":"int_const 88"},"value":"88"},{"id":8111,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8097,"src":"11953:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_88_by_1","typeString":"int_const 88"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8109,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7517,"src":"11918:30:25","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":8112,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11918:41:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8113,"nodeType":"RevertStatement","src":"11911:48:25"}]}},{"expression":{"arguments":[{"id":8118,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8097,"src":"11993:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8117,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11986:6:25","typeDescriptions":{"typeIdentifier":"t_type$_t_uint88_$","typeString":"type(uint88)"},"typeName":{"id":8116,"name":"uint88","nodeType":"ElementaryTypeName","src":"11986:6:25","typeDescriptions":{}}},"id":8119,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11986:13:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint88","typeString":"uint88"}},"functionReturnParameters":8101,"id":8120,"nodeType":"Return","src":"11979:20:25"}]},"documentation":{"id":8095,"nodeType":"StructuredDocumentation","src":"11512:276:25","text":" @dev Returns the downcasted uint88 from uint256, reverting on\n overflow (when the input is greater than largest uint88).\n Counterpart to Solidity's `uint88` operator.\n Requirements:\n - input must fit into 88 bits"},"id":8122,"implemented":true,"kind":"function","modifiers":[],"name":"toUint88","nameLocation":"11802:8:25","nodeType":"FunctionDefinition","parameters":{"id":8098,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8097,"mutability":"mutable","name":"value","nameLocation":"11819:5:25","nodeType":"VariableDeclaration","scope":8122,"src":"11811:13:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8096,"name":"uint256","nodeType":"ElementaryTypeName","src":"11811:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11810:15:25"},"returnParameters":{"id":8101,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8100,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8122,"src":"11849:6:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint88","typeString":"uint88"},"typeName":{"id":8099,"name":"uint88","nodeType":"ElementaryTypeName","src":"11849:6:25","typeDescriptions":{"typeIdentifier":"t_uint88","typeString":"uint88"}},"visibility":"internal"}],"src":"11848:8:25"},"scope":9272,"src":"11793:213:25","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8149,"nodeType":"Block","src":"12357:149:25","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8136,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8130,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8125,"src":"12371:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":8133,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12384:6:25","typeDescriptions":{"typeIdentifier":"t_type$_t_uint80_$","typeString":"type(uint80)"},"typeName":{"id":8132,"name":"uint80","nodeType":"ElementaryTypeName","src":"12384:6:25","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint80_$","typeString":"type(uint80)"}],"id":8131,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967269,"src":"12379:4:25","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":8134,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12379:12:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint80","typeString":"type(uint80)"}},"id":8135,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"12392:3:25","memberName":"max","nodeType":"MemberAccess","src":"12379:16:25","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"src":"12371:24:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8143,"nodeType":"IfStatement","src":"12367:103:25","trueBody":{"id":8142,"nodeType":"Block","src":"12397:73:25","statements":[{"errorCall":{"arguments":[{"hexValue":"3830","id":8138,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12449:2:25","typeDescriptions":{"typeIdentifier":"t_rational_80_by_1","typeString":"int_const 80"},"value":"80"},{"id":8139,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8125,"src":"12453:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_80_by_1","typeString":"int_const 80"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8137,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7517,"src":"12418:30:25","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":8140,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12418:41:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8141,"nodeType":"RevertStatement","src":"12411:48:25"}]}},{"expression":{"arguments":[{"id":8146,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8125,"src":"12493:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8145,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12486:6:25","typeDescriptions":{"typeIdentifier":"t_type$_t_uint80_$","typeString":"type(uint80)"},"typeName":{"id":8144,"name":"uint80","nodeType":"ElementaryTypeName","src":"12486:6:25","typeDescriptions":{}}},"id":8147,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12486:13:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"functionReturnParameters":8129,"id":8148,"nodeType":"Return","src":"12479:20:25"}]},"documentation":{"id":8123,"nodeType":"StructuredDocumentation","src":"12012:276:25","text":" @dev Returns the downcasted uint80 from uint256, reverting on\n overflow (when the input is greater than largest uint80).\n Counterpart to Solidity's `uint80` operator.\n Requirements:\n - input must fit into 80 bits"},"id":8150,"implemented":true,"kind":"function","modifiers":[],"name":"toUint80","nameLocation":"12302:8:25","nodeType":"FunctionDefinition","parameters":{"id":8126,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8125,"mutability":"mutable","name":"value","nameLocation":"12319:5:25","nodeType":"VariableDeclaration","scope":8150,"src":"12311:13:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8124,"name":"uint256","nodeType":"ElementaryTypeName","src":"12311:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12310:15:25"},"returnParameters":{"id":8129,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8128,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8150,"src":"12349:6:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"},"typeName":{"id":8127,"name":"uint80","nodeType":"ElementaryTypeName","src":"12349:6:25","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"visibility":"internal"}],"src":"12348:8:25"},"scope":9272,"src":"12293:213:25","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8177,"nodeType":"Block","src":"12857:149:25","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8164,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8158,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8153,"src":"12871:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":8161,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12884:6:25","typeDescriptions":{"typeIdentifier":"t_type$_t_uint72_$","typeString":"type(uint72)"},"typeName":{"id":8160,"name":"uint72","nodeType":"ElementaryTypeName","src":"12884:6:25","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint72_$","typeString":"type(uint72)"}],"id":8159,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967269,"src":"12879:4:25","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":8162,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12879:12:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint72","typeString":"type(uint72)"}},"id":8163,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"12892:3:25","memberName":"max","nodeType":"MemberAccess","src":"12879:16:25","typeDescriptions":{"typeIdentifier":"t_uint72","typeString":"uint72"}},"src":"12871:24:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8171,"nodeType":"IfStatement","src":"12867:103:25","trueBody":{"id":8170,"nodeType":"Block","src":"12897:73:25","statements":[{"errorCall":{"arguments":[{"hexValue":"3732","id":8166,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12949:2:25","typeDescriptions":{"typeIdentifier":"t_rational_72_by_1","typeString":"int_const 72"},"value":"72"},{"id":8167,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8153,"src":"12953:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_72_by_1","typeString":"int_const 72"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8165,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7517,"src":"12918:30:25","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":8168,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12918:41:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8169,"nodeType":"RevertStatement","src":"12911:48:25"}]}},{"expression":{"arguments":[{"id":8174,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8153,"src":"12993:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8173,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12986:6:25","typeDescriptions":{"typeIdentifier":"t_type$_t_uint72_$","typeString":"type(uint72)"},"typeName":{"id":8172,"name":"uint72","nodeType":"ElementaryTypeName","src":"12986:6:25","typeDescriptions":{}}},"id":8175,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12986:13:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint72","typeString":"uint72"}},"functionReturnParameters":8157,"id":8176,"nodeType":"Return","src":"12979:20:25"}]},"documentation":{"id":8151,"nodeType":"StructuredDocumentation","src":"12512:276:25","text":" @dev Returns the downcasted uint72 from uint256, reverting on\n overflow (when the input is greater than largest uint72).\n Counterpart to Solidity's `uint72` operator.\n Requirements:\n - input must fit into 72 bits"},"id":8178,"implemented":true,"kind":"function","modifiers":[],"name":"toUint72","nameLocation":"12802:8:25","nodeType":"FunctionDefinition","parameters":{"id":8154,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8153,"mutability":"mutable","name":"value","nameLocation":"12819:5:25","nodeType":"VariableDeclaration","scope":8178,"src":"12811:13:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8152,"name":"uint256","nodeType":"ElementaryTypeName","src":"12811:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12810:15:25"},"returnParameters":{"id":8157,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8156,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8178,"src":"12849:6:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint72","typeString":"uint72"},"typeName":{"id":8155,"name":"uint72","nodeType":"ElementaryTypeName","src":"12849:6:25","typeDescriptions":{"typeIdentifier":"t_uint72","typeString":"uint72"}},"visibility":"internal"}],"src":"12848:8:25"},"scope":9272,"src":"12793:213:25","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8205,"nodeType":"Block","src":"13357:149:25","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8192,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8186,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8181,"src":"13371:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":8189,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13384:6:25","typeDescriptions":{"typeIdentifier":"t_type$_t_uint64_$","typeString":"type(uint64)"},"typeName":{"id":8188,"name":"uint64","nodeType":"ElementaryTypeName","src":"13384:6:25","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint64_$","typeString":"type(uint64)"}],"id":8187,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967269,"src":"13379:4:25","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":8190,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13379:12:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint64","typeString":"type(uint64)"}},"id":8191,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"13392:3:25","memberName":"max","nodeType":"MemberAccess","src":"13379:16:25","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"13371:24:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8199,"nodeType":"IfStatement","src":"13367:103:25","trueBody":{"id":8198,"nodeType":"Block","src":"13397:73:25","statements":[{"errorCall":{"arguments":[{"hexValue":"3634","id":8194,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13449:2:25","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},{"id":8195,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8181,"src":"13453:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8193,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7517,"src":"13418:30:25","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":8196,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13418:41:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8197,"nodeType":"RevertStatement","src":"13411:48:25"}]}},{"expression":{"arguments":[{"id":8202,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8181,"src":"13493:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8201,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13486:6:25","typeDescriptions":{"typeIdentifier":"t_type$_t_uint64_$","typeString":"type(uint64)"},"typeName":{"id":8200,"name":"uint64","nodeType":"ElementaryTypeName","src":"13486:6:25","typeDescriptions":{}}},"id":8203,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13486:13:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"functionReturnParameters":8185,"id":8204,"nodeType":"Return","src":"13479:20:25"}]},"documentation":{"id":8179,"nodeType":"StructuredDocumentation","src":"13012:276:25","text":" @dev Returns the downcasted uint64 from uint256, reverting on\n overflow (when the input is greater than largest uint64).\n Counterpart to Solidity's `uint64` operator.\n Requirements:\n - input must fit into 64 bits"},"id":8206,"implemented":true,"kind":"function","modifiers":[],"name":"toUint64","nameLocation":"13302:8:25","nodeType":"FunctionDefinition","parameters":{"id":8182,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8181,"mutability":"mutable","name":"value","nameLocation":"13319:5:25","nodeType":"VariableDeclaration","scope":8206,"src":"13311:13:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8180,"name":"uint256","nodeType":"ElementaryTypeName","src":"13311:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13310:15:25"},"returnParameters":{"id":8185,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8184,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8206,"src":"13349:6:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":8183,"name":"uint64","nodeType":"ElementaryTypeName","src":"13349:6:25","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"}],"src":"13348:8:25"},"scope":9272,"src":"13293:213:25","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8233,"nodeType":"Block","src":"13857:149:25","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8220,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8214,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8209,"src":"13871:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":8217,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13884:6:25","typeDescriptions":{"typeIdentifier":"t_type$_t_uint56_$","typeString":"type(uint56)"},"typeName":{"id":8216,"name":"uint56","nodeType":"ElementaryTypeName","src":"13884:6:25","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint56_$","typeString":"type(uint56)"}],"id":8215,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967269,"src":"13879:4:25","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":8218,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13879:12:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint56","typeString":"type(uint56)"}},"id":8219,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"13892:3:25","memberName":"max","nodeType":"MemberAccess","src":"13879:16:25","typeDescriptions":{"typeIdentifier":"t_uint56","typeString":"uint56"}},"src":"13871:24:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8227,"nodeType":"IfStatement","src":"13867:103:25","trueBody":{"id":8226,"nodeType":"Block","src":"13897:73:25","statements":[{"errorCall":{"arguments":[{"hexValue":"3536","id":8222,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13949:2:25","typeDescriptions":{"typeIdentifier":"t_rational_56_by_1","typeString":"int_const 56"},"value":"56"},{"id":8223,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8209,"src":"13953:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_56_by_1","typeString":"int_const 56"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8221,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7517,"src":"13918:30:25","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":8224,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13918:41:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8225,"nodeType":"RevertStatement","src":"13911:48:25"}]}},{"expression":{"arguments":[{"id":8230,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8209,"src":"13993:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8229,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13986:6:25","typeDescriptions":{"typeIdentifier":"t_type$_t_uint56_$","typeString":"type(uint56)"},"typeName":{"id":8228,"name":"uint56","nodeType":"ElementaryTypeName","src":"13986:6:25","typeDescriptions":{}}},"id":8231,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13986:13:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint56","typeString":"uint56"}},"functionReturnParameters":8213,"id":8232,"nodeType":"Return","src":"13979:20:25"}]},"documentation":{"id":8207,"nodeType":"StructuredDocumentation","src":"13512:276:25","text":" @dev Returns the downcasted uint56 from uint256, reverting on\n overflow (when the input is greater than largest uint56).\n Counterpart to Solidity's `uint56` operator.\n Requirements:\n - input must fit into 56 bits"},"id":8234,"implemented":true,"kind":"function","modifiers":[],"name":"toUint56","nameLocation":"13802:8:25","nodeType":"FunctionDefinition","parameters":{"id":8210,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8209,"mutability":"mutable","name":"value","nameLocation":"13819:5:25","nodeType":"VariableDeclaration","scope":8234,"src":"13811:13:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8208,"name":"uint256","nodeType":"ElementaryTypeName","src":"13811:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13810:15:25"},"returnParameters":{"id":8213,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8212,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8234,"src":"13849:6:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint56","typeString":"uint56"},"typeName":{"id":8211,"name":"uint56","nodeType":"ElementaryTypeName","src":"13849:6:25","typeDescriptions":{"typeIdentifier":"t_uint56","typeString":"uint56"}},"visibility":"internal"}],"src":"13848:8:25"},"scope":9272,"src":"13793:213:25","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8261,"nodeType":"Block","src":"14357:149:25","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8248,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8242,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8237,"src":"14371:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":8245,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14384:6:25","typeDescriptions":{"typeIdentifier":"t_type$_t_uint48_$","typeString":"type(uint48)"},"typeName":{"id":8244,"name":"uint48","nodeType":"ElementaryTypeName","src":"14384:6:25","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint48_$","typeString":"type(uint48)"}],"id":8243,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967269,"src":"14379:4:25","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":8246,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14379:12:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint48","typeString":"type(uint48)"}},"id":8247,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"14392:3:25","memberName":"max","nodeType":"MemberAccess","src":"14379:16:25","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"14371:24:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8255,"nodeType":"IfStatement","src":"14367:103:25","trueBody":{"id":8254,"nodeType":"Block","src":"14397:73:25","statements":[{"errorCall":{"arguments":[{"hexValue":"3438","id":8250,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14449:2:25","typeDescriptions":{"typeIdentifier":"t_rational_48_by_1","typeString":"int_const 48"},"value":"48"},{"id":8251,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8237,"src":"14453:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_48_by_1","typeString":"int_const 48"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8249,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7517,"src":"14418:30:25","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":8252,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14418:41:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8253,"nodeType":"RevertStatement","src":"14411:48:25"}]}},{"expression":{"arguments":[{"id":8258,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8237,"src":"14493:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8257,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14486:6:25","typeDescriptions":{"typeIdentifier":"t_type$_t_uint48_$","typeString":"type(uint48)"},"typeName":{"id":8256,"name":"uint48","nodeType":"ElementaryTypeName","src":"14486:6:25","typeDescriptions":{}}},"id":8259,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14486:13:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"functionReturnParameters":8241,"id":8260,"nodeType":"Return","src":"14479:20:25"}]},"documentation":{"id":8235,"nodeType":"StructuredDocumentation","src":"14012:276:25","text":" @dev Returns the downcasted uint48 from uint256, reverting on\n overflow (when the input is greater than largest uint48).\n Counterpart to Solidity's `uint48` operator.\n Requirements:\n - input must fit into 48 bits"},"id":8262,"implemented":true,"kind":"function","modifiers":[],"name":"toUint48","nameLocation":"14302:8:25","nodeType":"FunctionDefinition","parameters":{"id":8238,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8237,"mutability":"mutable","name":"value","nameLocation":"14319:5:25","nodeType":"VariableDeclaration","scope":8262,"src":"14311:13:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8236,"name":"uint256","nodeType":"ElementaryTypeName","src":"14311:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14310:15:25"},"returnParameters":{"id":8241,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8240,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8262,"src":"14349:6:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":8239,"name":"uint48","nodeType":"ElementaryTypeName","src":"14349:6:25","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"src":"14348:8:25"},"scope":9272,"src":"14293:213:25","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8289,"nodeType":"Block","src":"14857:149:25","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8276,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8270,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8265,"src":"14871:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":8273,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14884:6:25","typeDescriptions":{"typeIdentifier":"t_type$_t_uint40_$","typeString":"type(uint40)"},"typeName":{"id":8272,"name":"uint40","nodeType":"ElementaryTypeName","src":"14884:6:25","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint40_$","typeString":"type(uint40)"}],"id":8271,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967269,"src":"14879:4:25","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":8274,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14879:12:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint40","typeString":"type(uint40)"}},"id":8275,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"14892:3:25","memberName":"max","nodeType":"MemberAccess","src":"14879:16:25","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"src":"14871:24:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8283,"nodeType":"IfStatement","src":"14867:103:25","trueBody":{"id":8282,"nodeType":"Block","src":"14897:73:25","statements":[{"errorCall":{"arguments":[{"hexValue":"3430","id":8278,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14949:2:25","typeDescriptions":{"typeIdentifier":"t_rational_40_by_1","typeString":"int_const 40"},"value":"40"},{"id":8279,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8265,"src":"14953:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_40_by_1","typeString":"int_const 40"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8277,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7517,"src":"14918:30:25","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":8280,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14918:41:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8281,"nodeType":"RevertStatement","src":"14911:48:25"}]}},{"expression":{"arguments":[{"id":8286,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8265,"src":"14993:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8285,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14986:6:25","typeDescriptions":{"typeIdentifier":"t_type$_t_uint40_$","typeString":"type(uint40)"},"typeName":{"id":8284,"name":"uint40","nodeType":"ElementaryTypeName","src":"14986:6:25","typeDescriptions":{}}},"id":8287,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14986:13:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"functionReturnParameters":8269,"id":8288,"nodeType":"Return","src":"14979:20:25"}]},"documentation":{"id":8263,"nodeType":"StructuredDocumentation","src":"14512:276:25","text":" @dev Returns the downcasted uint40 from uint256, reverting on\n overflow (when the input is greater than largest uint40).\n Counterpart to Solidity's `uint40` operator.\n Requirements:\n - input must fit into 40 bits"},"id":8290,"implemented":true,"kind":"function","modifiers":[],"name":"toUint40","nameLocation":"14802:8:25","nodeType":"FunctionDefinition","parameters":{"id":8266,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8265,"mutability":"mutable","name":"value","nameLocation":"14819:5:25","nodeType":"VariableDeclaration","scope":8290,"src":"14811:13:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8264,"name":"uint256","nodeType":"ElementaryTypeName","src":"14811:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14810:15:25"},"returnParameters":{"id":8269,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8268,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8290,"src":"14849:6:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"},"typeName":{"id":8267,"name":"uint40","nodeType":"ElementaryTypeName","src":"14849:6:25","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"visibility":"internal"}],"src":"14848:8:25"},"scope":9272,"src":"14793:213:25","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8317,"nodeType":"Block","src":"15357:149:25","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8304,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8298,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8293,"src":"15371:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":8301,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15384:6:25","typeDescriptions":{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"},"typeName":{"id":8300,"name":"uint32","nodeType":"ElementaryTypeName","src":"15384:6:25","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"}],"id":8299,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967269,"src":"15379:4:25","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":8302,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15379:12:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint32","typeString":"type(uint32)"}},"id":8303,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"15392:3:25","memberName":"max","nodeType":"MemberAccess","src":"15379:16:25","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"15371:24:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8311,"nodeType":"IfStatement","src":"15367:103:25","trueBody":{"id":8310,"nodeType":"Block","src":"15397:73:25","statements":[{"errorCall":{"arguments":[{"hexValue":"3332","id":8306,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15449:2:25","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},{"id":8307,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8293,"src":"15453:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8305,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7517,"src":"15418:30:25","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":8308,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15418:41:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8309,"nodeType":"RevertStatement","src":"15411:48:25"}]}},{"expression":{"arguments":[{"id":8314,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8293,"src":"15493:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8313,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15486:6:25","typeDescriptions":{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"},"typeName":{"id":8312,"name":"uint32","nodeType":"ElementaryTypeName","src":"15486:6:25","typeDescriptions":{}}},"id":8315,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15486:13:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"functionReturnParameters":8297,"id":8316,"nodeType":"Return","src":"15479:20:25"}]},"documentation":{"id":8291,"nodeType":"StructuredDocumentation","src":"15012:276:25","text":" @dev Returns the downcasted uint32 from uint256, reverting on\n overflow (when the input is greater than largest uint32).\n Counterpart to Solidity's `uint32` operator.\n Requirements:\n - input must fit into 32 bits"},"id":8318,"implemented":true,"kind":"function","modifiers":[],"name":"toUint32","nameLocation":"15302:8:25","nodeType":"FunctionDefinition","parameters":{"id":8294,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8293,"mutability":"mutable","name":"value","nameLocation":"15319:5:25","nodeType":"VariableDeclaration","scope":8318,"src":"15311:13:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8292,"name":"uint256","nodeType":"ElementaryTypeName","src":"15311:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15310:15:25"},"returnParameters":{"id":8297,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8296,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8318,"src":"15349:6:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":8295,"name":"uint32","nodeType":"ElementaryTypeName","src":"15349:6:25","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"15348:8:25"},"scope":9272,"src":"15293:213:25","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8345,"nodeType":"Block","src":"15857:149:25","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8332,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8326,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8321,"src":"15871:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":8329,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15884:6:25","typeDescriptions":{"typeIdentifier":"t_type$_t_uint24_$","typeString":"type(uint24)"},"typeName":{"id":8328,"name":"uint24","nodeType":"ElementaryTypeName","src":"15884:6:25","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint24_$","typeString":"type(uint24)"}],"id":8327,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967269,"src":"15879:4:25","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":8330,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15879:12:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint24","typeString":"type(uint24)"}},"id":8331,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"15892:3:25","memberName":"max","nodeType":"MemberAccess","src":"15879:16:25","typeDescriptions":{"typeIdentifier":"t_uint24","typeString":"uint24"}},"src":"15871:24:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8339,"nodeType":"IfStatement","src":"15867:103:25","trueBody":{"id":8338,"nodeType":"Block","src":"15897:73:25","statements":[{"errorCall":{"arguments":[{"hexValue":"3234","id":8334,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15949:2:25","typeDescriptions":{"typeIdentifier":"t_rational_24_by_1","typeString":"int_const 24"},"value":"24"},{"id":8335,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8321,"src":"15953:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_24_by_1","typeString":"int_const 24"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8333,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7517,"src":"15918:30:25","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":8336,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15918:41:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8337,"nodeType":"RevertStatement","src":"15911:48:25"}]}},{"expression":{"arguments":[{"id":8342,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8321,"src":"15993:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8341,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15986:6:25","typeDescriptions":{"typeIdentifier":"t_type$_t_uint24_$","typeString":"type(uint24)"},"typeName":{"id":8340,"name":"uint24","nodeType":"ElementaryTypeName","src":"15986:6:25","typeDescriptions":{}}},"id":8343,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15986:13:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint24","typeString":"uint24"}},"functionReturnParameters":8325,"id":8344,"nodeType":"Return","src":"15979:20:25"}]},"documentation":{"id":8319,"nodeType":"StructuredDocumentation","src":"15512:276:25","text":" @dev Returns the downcasted uint24 from uint256, reverting on\n overflow (when the input is greater than largest uint24).\n Counterpart to Solidity's `uint24` operator.\n Requirements:\n - input must fit into 24 bits"},"id":8346,"implemented":true,"kind":"function","modifiers":[],"name":"toUint24","nameLocation":"15802:8:25","nodeType":"FunctionDefinition","parameters":{"id":8322,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8321,"mutability":"mutable","name":"value","nameLocation":"15819:5:25","nodeType":"VariableDeclaration","scope":8346,"src":"15811:13:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8320,"name":"uint256","nodeType":"ElementaryTypeName","src":"15811:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15810:15:25"},"returnParameters":{"id":8325,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8324,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8346,"src":"15849:6:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint24","typeString":"uint24"},"typeName":{"id":8323,"name":"uint24","nodeType":"ElementaryTypeName","src":"15849:6:25","typeDescriptions":{"typeIdentifier":"t_uint24","typeString":"uint24"}},"visibility":"internal"}],"src":"15848:8:25"},"scope":9272,"src":"15793:213:25","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8373,"nodeType":"Block","src":"16357:149:25","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8360,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8354,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8349,"src":"16371:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":8357,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16384:6:25","typeDescriptions":{"typeIdentifier":"t_type$_t_uint16_$","typeString":"type(uint16)"},"typeName":{"id":8356,"name":"uint16","nodeType":"ElementaryTypeName","src":"16384:6:25","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint16_$","typeString":"type(uint16)"}],"id":8355,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967269,"src":"16379:4:25","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":8358,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16379:12:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint16","typeString":"type(uint16)"}},"id":8359,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"16392:3:25","memberName":"max","nodeType":"MemberAccess","src":"16379:16:25","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"src":"16371:24:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8367,"nodeType":"IfStatement","src":"16367:103:25","trueBody":{"id":8366,"nodeType":"Block","src":"16397:73:25","statements":[{"errorCall":{"arguments":[{"hexValue":"3136","id":8362,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16449:2:25","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},{"id":8363,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8349,"src":"16453:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8361,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7517,"src":"16418:30:25","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":8364,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16418:41:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8365,"nodeType":"RevertStatement","src":"16411:48:25"}]}},{"expression":{"arguments":[{"id":8370,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8349,"src":"16493:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8369,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16486:6:25","typeDescriptions":{"typeIdentifier":"t_type$_t_uint16_$","typeString":"type(uint16)"},"typeName":{"id":8368,"name":"uint16","nodeType":"ElementaryTypeName","src":"16486:6:25","typeDescriptions":{}}},"id":8371,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16486:13:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"functionReturnParameters":8353,"id":8372,"nodeType":"Return","src":"16479:20:25"}]},"documentation":{"id":8347,"nodeType":"StructuredDocumentation","src":"16012:276:25","text":" @dev Returns the downcasted uint16 from uint256, reverting on\n overflow (when the input is greater than largest uint16).\n Counterpart to Solidity's `uint16` operator.\n Requirements:\n - input must fit into 16 bits"},"id":8374,"implemented":true,"kind":"function","modifiers":[],"name":"toUint16","nameLocation":"16302:8:25","nodeType":"FunctionDefinition","parameters":{"id":8350,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8349,"mutability":"mutable","name":"value","nameLocation":"16319:5:25","nodeType":"VariableDeclaration","scope":8374,"src":"16311:13:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8348,"name":"uint256","nodeType":"ElementaryTypeName","src":"16311:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16310:15:25"},"returnParameters":{"id":8353,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8352,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8374,"src":"16349:6:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":8351,"name":"uint16","nodeType":"ElementaryTypeName","src":"16349:6:25","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"16348:8:25"},"scope":9272,"src":"16293:213:25","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8401,"nodeType":"Block","src":"16851:146:25","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8388,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8382,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8377,"src":"16865:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":8385,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16878:5:25","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":8384,"name":"uint8","nodeType":"ElementaryTypeName","src":"16878:5:25","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"}],"id":8383,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967269,"src":"16873:4:25","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":8386,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16873:11:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint8","typeString":"type(uint8)"}},"id":8387,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"16885:3:25","memberName":"max","nodeType":"MemberAccess","src":"16873:15:25","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"16865:23:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8395,"nodeType":"IfStatement","src":"16861:101:25","trueBody":{"id":8394,"nodeType":"Block","src":"16890:72:25","statements":[{"errorCall":{"arguments":[{"hexValue":"38","id":8390,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16942:1:25","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},{"id":8391,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8377,"src":"16945:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8389,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7517,"src":"16911:30:25","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":8392,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16911:40:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8393,"nodeType":"RevertStatement","src":"16904:47:25"}]}},{"expression":{"arguments":[{"id":8398,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8377,"src":"16984:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8397,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16978:5:25","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":8396,"name":"uint8","nodeType":"ElementaryTypeName","src":"16978:5:25","typeDescriptions":{}}},"id":8399,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16978:12:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"functionReturnParameters":8381,"id":8400,"nodeType":"Return","src":"16971:19:25"}]},"documentation":{"id":8375,"nodeType":"StructuredDocumentation","src":"16512:272:25","text":" @dev Returns the downcasted uint8 from uint256, reverting on\n overflow (when the input is greater than largest uint8).\n Counterpart to Solidity's `uint8` operator.\n Requirements:\n - input must fit into 8 bits"},"id":8402,"implemented":true,"kind":"function","modifiers":[],"name":"toUint8","nameLocation":"16798:7:25","nodeType":"FunctionDefinition","parameters":{"id":8378,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8377,"mutability":"mutable","name":"value","nameLocation":"16814:5:25","nodeType":"VariableDeclaration","scope":8402,"src":"16806:13:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8376,"name":"uint256","nodeType":"ElementaryTypeName","src":"16806:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16805:15:25"},"returnParameters":{"id":8381,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8380,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8402,"src":"16844:5:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":8379,"name":"uint8","nodeType":"ElementaryTypeName","src":"16844:5:25","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"16843:7:25"},"scope":9272,"src":"16789:208:25","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8424,"nodeType":"Block","src":"17233:128:25","statements":[{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8412,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8410,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8405,"src":"17247:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"30","id":8411,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17255:1:25","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"17247:9:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8418,"nodeType":"IfStatement","src":"17243:81:25","trueBody":{"id":8417,"nodeType":"Block","src":"17258:66:25","statements":[{"errorCall":{"arguments":[{"id":8414,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8405,"src":"17307:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8413,"name":"SafeCastOverflowedIntToUint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7522,"src":"17279:27:25","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_int256_$returns$_t_error_$","typeString":"function (int256) pure returns (error)"}},"id":8415,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17279:34:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8416,"nodeType":"RevertStatement","src":"17272:41:25"}]}},{"expression":{"arguments":[{"id":8421,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8405,"src":"17348:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8420,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"17340:7:25","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":8419,"name":"uint256","nodeType":"ElementaryTypeName","src":"17340:7:25","typeDescriptions":{}}},"id":8422,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17340:14:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":8409,"id":8423,"nodeType":"Return","src":"17333:21:25"}]},"documentation":{"id":8403,"nodeType":"StructuredDocumentation","src":"17003:160:25","text":" @dev Converts a signed int256 into an unsigned uint256.\n Requirements:\n - input must be greater than or equal to 0."},"id":8425,"implemented":true,"kind":"function","modifiers":[],"name":"toUint256","nameLocation":"17177:9:25","nodeType":"FunctionDefinition","parameters":{"id":8406,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8405,"mutability":"mutable","name":"value","nameLocation":"17194:5:25","nodeType":"VariableDeclaration","scope":8425,"src":"17187:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8404,"name":"int256","nodeType":"ElementaryTypeName","src":"17187:6:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"17186:14:25"},"returnParameters":{"id":8409,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8408,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8425,"src":"17224:7:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8407,"name":"uint256","nodeType":"ElementaryTypeName","src":"17224:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17223:9:25"},"scope":9272,"src":"17168:193:25","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8450,"nodeType":"Block","src":"17758:150:25","statements":[{"expression":{"id":8438,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8433,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8431,"src":"17768:10:25","typeDescriptions":{"typeIdentifier":"t_int248","typeString":"int248"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8436,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8428,"src":"17788:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8435,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"17781:6:25","typeDescriptions":{"typeIdentifier":"t_type$_t_int248_$","typeString":"type(int248)"},"typeName":{"id":8434,"name":"int248","nodeType":"ElementaryTypeName","src":"17781:6:25","typeDescriptions":{}}},"id":8437,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17781:13:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int248","typeString":"int248"}},"src":"17768:26:25","typeDescriptions":{"typeIdentifier":"t_int248","typeString":"int248"}},"id":8439,"nodeType":"ExpressionStatement","src":"17768:26:25"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8442,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8440,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8431,"src":"17808:10:25","typeDescriptions":{"typeIdentifier":"t_int248","typeString":"int248"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8441,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8428,"src":"17822:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17808:19:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8449,"nodeType":"IfStatement","src":"17804:98:25","trueBody":{"id":8448,"nodeType":"Block","src":"17829:73:25","statements":[{"errorCall":{"arguments":[{"hexValue":"323438","id":8444,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17880:3:25","typeDescriptions":{"typeIdentifier":"t_rational_248_by_1","typeString":"int_const 248"},"value":"248"},{"id":8445,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8428,"src":"17885:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_248_by_1","typeString":"int_const 248"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8443,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7529,"src":"17850:29:25","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8446,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17850:41:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8447,"nodeType":"RevertStatement","src":"17843:48:25"}]}}]},"documentation":{"id":8426,"nodeType":"StructuredDocumentation","src":"17367:312:25","text":" @dev Returns the downcasted int248 from int256, reverting on\n overflow (when the input is less than smallest int248 or\n greater than largest int248).\n Counterpart to Solidity's `int248` operator.\n Requirements:\n - input must fit into 248 bits"},"id":8451,"implemented":true,"kind":"function","modifiers":[],"name":"toInt248","nameLocation":"17693:8:25","nodeType":"FunctionDefinition","parameters":{"id":8429,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8428,"mutability":"mutable","name":"value","nameLocation":"17709:5:25","nodeType":"VariableDeclaration","scope":8451,"src":"17702:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8427,"name":"int256","nodeType":"ElementaryTypeName","src":"17702:6:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"17701:14:25"},"returnParameters":{"id":8432,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8431,"mutability":"mutable","name":"downcasted","nameLocation":"17746:10:25","nodeType":"VariableDeclaration","scope":8451,"src":"17739:17:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int248","typeString":"int248"},"typeName":{"id":8430,"name":"int248","nodeType":"ElementaryTypeName","src":"17739:6:25","typeDescriptions":{"typeIdentifier":"t_int248","typeString":"int248"}},"visibility":"internal"}],"src":"17738:19:25"},"scope":9272,"src":"17684:224:25","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8476,"nodeType":"Block","src":"18305:150:25","statements":[{"expression":{"id":8464,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8459,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8457,"src":"18315:10:25","typeDescriptions":{"typeIdentifier":"t_int240","typeString":"int240"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8462,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8454,"src":"18335:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8461,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"18328:6:25","typeDescriptions":{"typeIdentifier":"t_type$_t_int240_$","typeString":"type(int240)"},"typeName":{"id":8460,"name":"int240","nodeType":"ElementaryTypeName","src":"18328:6:25","typeDescriptions":{}}},"id":8463,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18328:13:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int240","typeString":"int240"}},"src":"18315:26:25","typeDescriptions":{"typeIdentifier":"t_int240","typeString":"int240"}},"id":8465,"nodeType":"ExpressionStatement","src":"18315:26:25"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8468,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8466,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8457,"src":"18355:10:25","typeDescriptions":{"typeIdentifier":"t_int240","typeString":"int240"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8467,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8454,"src":"18369:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18355:19:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8475,"nodeType":"IfStatement","src":"18351:98:25","trueBody":{"id":8474,"nodeType":"Block","src":"18376:73:25","statements":[{"errorCall":{"arguments":[{"hexValue":"323430","id":8470,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18427:3:25","typeDescriptions":{"typeIdentifier":"t_rational_240_by_1","typeString":"int_const 240"},"value":"240"},{"id":8471,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8454,"src":"18432:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_240_by_1","typeString":"int_const 240"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8469,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7529,"src":"18397:29:25","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8472,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18397:41:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8473,"nodeType":"RevertStatement","src":"18390:48:25"}]}}]},"documentation":{"id":8452,"nodeType":"StructuredDocumentation","src":"17914:312:25","text":" @dev Returns the downcasted int240 from int256, reverting on\n overflow (when the input is less than smallest int240 or\n greater than largest int240).\n Counterpart to Solidity's `int240` operator.\n Requirements:\n - input must fit into 240 bits"},"id":8477,"implemented":true,"kind":"function","modifiers":[],"name":"toInt240","nameLocation":"18240:8:25","nodeType":"FunctionDefinition","parameters":{"id":8455,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8454,"mutability":"mutable","name":"value","nameLocation":"18256:5:25","nodeType":"VariableDeclaration","scope":8477,"src":"18249:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8453,"name":"int256","nodeType":"ElementaryTypeName","src":"18249:6:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"18248:14:25"},"returnParameters":{"id":8458,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8457,"mutability":"mutable","name":"downcasted","nameLocation":"18293:10:25","nodeType":"VariableDeclaration","scope":8477,"src":"18286:17:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int240","typeString":"int240"},"typeName":{"id":8456,"name":"int240","nodeType":"ElementaryTypeName","src":"18286:6:25","typeDescriptions":{"typeIdentifier":"t_int240","typeString":"int240"}},"visibility":"internal"}],"src":"18285:19:25"},"scope":9272,"src":"18231:224:25","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8502,"nodeType":"Block","src":"18852:150:25","statements":[{"expression":{"id":8490,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8485,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8483,"src":"18862:10:25","typeDescriptions":{"typeIdentifier":"t_int232","typeString":"int232"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8488,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8480,"src":"18882:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8487,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"18875:6:25","typeDescriptions":{"typeIdentifier":"t_type$_t_int232_$","typeString":"type(int232)"},"typeName":{"id":8486,"name":"int232","nodeType":"ElementaryTypeName","src":"18875:6:25","typeDescriptions":{}}},"id":8489,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18875:13:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int232","typeString":"int232"}},"src":"18862:26:25","typeDescriptions":{"typeIdentifier":"t_int232","typeString":"int232"}},"id":8491,"nodeType":"ExpressionStatement","src":"18862:26:25"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8494,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8492,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8483,"src":"18902:10:25","typeDescriptions":{"typeIdentifier":"t_int232","typeString":"int232"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8493,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8480,"src":"18916:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18902:19:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8501,"nodeType":"IfStatement","src":"18898:98:25","trueBody":{"id":8500,"nodeType":"Block","src":"18923:73:25","statements":[{"errorCall":{"arguments":[{"hexValue":"323332","id":8496,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18974:3:25","typeDescriptions":{"typeIdentifier":"t_rational_232_by_1","typeString":"int_const 232"},"value":"232"},{"id":8497,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8480,"src":"18979:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_232_by_1","typeString":"int_const 232"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8495,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7529,"src":"18944:29:25","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8498,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18944:41:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8499,"nodeType":"RevertStatement","src":"18937:48:25"}]}}]},"documentation":{"id":8478,"nodeType":"StructuredDocumentation","src":"18461:312:25","text":" @dev Returns the downcasted int232 from int256, reverting on\n overflow (when the input is less than smallest int232 or\n greater than largest int232).\n Counterpart to Solidity's `int232` operator.\n Requirements:\n - input must fit into 232 bits"},"id":8503,"implemented":true,"kind":"function","modifiers":[],"name":"toInt232","nameLocation":"18787:8:25","nodeType":"FunctionDefinition","parameters":{"id":8481,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8480,"mutability":"mutable","name":"value","nameLocation":"18803:5:25","nodeType":"VariableDeclaration","scope":8503,"src":"18796:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8479,"name":"int256","nodeType":"ElementaryTypeName","src":"18796:6:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"18795:14:25"},"returnParameters":{"id":8484,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8483,"mutability":"mutable","name":"downcasted","nameLocation":"18840:10:25","nodeType":"VariableDeclaration","scope":8503,"src":"18833:17:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int232","typeString":"int232"},"typeName":{"id":8482,"name":"int232","nodeType":"ElementaryTypeName","src":"18833:6:25","typeDescriptions":{"typeIdentifier":"t_int232","typeString":"int232"}},"visibility":"internal"}],"src":"18832:19:25"},"scope":9272,"src":"18778:224:25","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8528,"nodeType":"Block","src":"19399:150:25","statements":[{"expression":{"id":8516,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8511,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8509,"src":"19409:10:25","typeDescriptions":{"typeIdentifier":"t_int224","typeString":"int224"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8514,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8506,"src":"19429:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8513,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"19422:6:25","typeDescriptions":{"typeIdentifier":"t_type$_t_int224_$","typeString":"type(int224)"},"typeName":{"id":8512,"name":"int224","nodeType":"ElementaryTypeName","src":"19422:6:25","typeDescriptions":{}}},"id":8515,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19422:13:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int224","typeString":"int224"}},"src":"19409:26:25","typeDescriptions":{"typeIdentifier":"t_int224","typeString":"int224"}},"id":8517,"nodeType":"ExpressionStatement","src":"19409:26:25"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8520,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8518,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8509,"src":"19449:10:25","typeDescriptions":{"typeIdentifier":"t_int224","typeString":"int224"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8519,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8506,"src":"19463:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19449:19:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8527,"nodeType":"IfStatement","src":"19445:98:25","trueBody":{"id":8526,"nodeType":"Block","src":"19470:73:25","statements":[{"errorCall":{"arguments":[{"hexValue":"323234","id":8522,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19521:3:25","typeDescriptions":{"typeIdentifier":"t_rational_224_by_1","typeString":"int_const 224"},"value":"224"},{"id":8523,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8506,"src":"19526:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_224_by_1","typeString":"int_const 224"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8521,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7529,"src":"19491:29:25","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8524,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19491:41:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8525,"nodeType":"RevertStatement","src":"19484:48:25"}]}}]},"documentation":{"id":8504,"nodeType":"StructuredDocumentation","src":"19008:312:25","text":" @dev Returns the downcasted int224 from int256, reverting on\n overflow (when the input is less than smallest int224 or\n greater than largest int224).\n Counterpart to Solidity's `int224` operator.\n Requirements:\n - input must fit into 224 bits"},"id":8529,"implemented":true,"kind":"function","modifiers":[],"name":"toInt224","nameLocation":"19334:8:25","nodeType":"FunctionDefinition","parameters":{"id":8507,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8506,"mutability":"mutable","name":"value","nameLocation":"19350:5:25","nodeType":"VariableDeclaration","scope":8529,"src":"19343:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8505,"name":"int256","nodeType":"ElementaryTypeName","src":"19343:6:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"19342:14:25"},"returnParameters":{"id":8510,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8509,"mutability":"mutable","name":"downcasted","nameLocation":"19387:10:25","nodeType":"VariableDeclaration","scope":8529,"src":"19380:17:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int224","typeString":"int224"},"typeName":{"id":8508,"name":"int224","nodeType":"ElementaryTypeName","src":"19380:6:25","typeDescriptions":{"typeIdentifier":"t_int224","typeString":"int224"}},"visibility":"internal"}],"src":"19379:19:25"},"scope":9272,"src":"19325:224:25","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8554,"nodeType":"Block","src":"19946:150:25","statements":[{"expression":{"id":8542,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8537,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8535,"src":"19956:10:25","typeDescriptions":{"typeIdentifier":"t_int216","typeString":"int216"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8540,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8532,"src":"19976:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8539,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"19969:6:25","typeDescriptions":{"typeIdentifier":"t_type$_t_int216_$","typeString":"type(int216)"},"typeName":{"id":8538,"name":"int216","nodeType":"ElementaryTypeName","src":"19969:6:25","typeDescriptions":{}}},"id":8541,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19969:13:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int216","typeString":"int216"}},"src":"19956:26:25","typeDescriptions":{"typeIdentifier":"t_int216","typeString":"int216"}},"id":8543,"nodeType":"ExpressionStatement","src":"19956:26:25"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8546,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8544,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8535,"src":"19996:10:25","typeDescriptions":{"typeIdentifier":"t_int216","typeString":"int216"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8545,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8532,"src":"20010:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19996:19:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8553,"nodeType":"IfStatement","src":"19992:98:25","trueBody":{"id":8552,"nodeType":"Block","src":"20017:73:25","statements":[{"errorCall":{"arguments":[{"hexValue":"323136","id":8548,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20068:3:25","typeDescriptions":{"typeIdentifier":"t_rational_216_by_1","typeString":"int_const 216"},"value":"216"},{"id":8549,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8532,"src":"20073:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_216_by_1","typeString":"int_const 216"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8547,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7529,"src":"20038:29:25","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8550,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20038:41:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8551,"nodeType":"RevertStatement","src":"20031:48:25"}]}}]},"documentation":{"id":8530,"nodeType":"StructuredDocumentation","src":"19555:312:25","text":" @dev Returns the downcasted int216 from int256, reverting on\n overflow (when the input is less than smallest int216 or\n greater than largest int216).\n Counterpart to Solidity's `int216` operator.\n Requirements:\n - input must fit into 216 bits"},"id":8555,"implemented":true,"kind":"function","modifiers":[],"name":"toInt216","nameLocation":"19881:8:25","nodeType":"FunctionDefinition","parameters":{"id":8533,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8532,"mutability":"mutable","name":"value","nameLocation":"19897:5:25","nodeType":"VariableDeclaration","scope":8555,"src":"19890:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8531,"name":"int256","nodeType":"ElementaryTypeName","src":"19890:6:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"19889:14:25"},"returnParameters":{"id":8536,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8535,"mutability":"mutable","name":"downcasted","nameLocation":"19934:10:25","nodeType":"VariableDeclaration","scope":8555,"src":"19927:17:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int216","typeString":"int216"},"typeName":{"id":8534,"name":"int216","nodeType":"ElementaryTypeName","src":"19927:6:25","typeDescriptions":{"typeIdentifier":"t_int216","typeString":"int216"}},"visibility":"internal"}],"src":"19926:19:25"},"scope":9272,"src":"19872:224:25","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8580,"nodeType":"Block","src":"20493:150:25","statements":[{"expression":{"id":8568,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8563,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8561,"src":"20503:10:25","typeDescriptions":{"typeIdentifier":"t_int208","typeString":"int208"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8566,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8558,"src":"20523:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8565,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"20516:6:25","typeDescriptions":{"typeIdentifier":"t_type$_t_int208_$","typeString":"type(int208)"},"typeName":{"id":8564,"name":"int208","nodeType":"ElementaryTypeName","src":"20516:6:25","typeDescriptions":{}}},"id":8567,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20516:13:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int208","typeString":"int208"}},"src":"20503:26:25","typeDescriptions":{"typeIdentifier":"t_int208","typeString":"int208"}},"id":8569,"nodeType":"ExpressionStatement","src":"20503:26:25"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8572,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8570,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8561,"src":"20543:10:25","typeDescriptions":{"typeIdentifier":"t_int208","typeString":"int208"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8571,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8558,"src":"20557:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"20543:19:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8579,"nodeType":"IfStatement","src":"20539:98:25","trueBody":{"id":8578,"nodeType":"Block","src":"20564:73:25","statements":[{"errorCall":{"arguments":[{"hexValue":"323038","id":8574,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20615:3:25","typeDescriptions":{"typeIdentifier":"t_rational_208_by_1","typeString":"int_const 208"},"value":"208"},{"id":8575,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8558,"src":"20620:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_208_by_1","typeString":"int_const 208"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8573,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7529,"src":"20585:29:25","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8576,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20585:41:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8577,"nodeType":"RevertStatement","src":"20578:48:25"}]}}]},"documentation":{"id":8556,"nodeType":"StructuredDocumentation","src":"20102:312:25","text":" @dev Returns the downcasted int208 from int256, reverting on\n overflow (when the input is less than smallest int208 or\n greater than largest int208).\n Counterpart to Solidity's `int208` operator.\n Requirements:\n - input must fit into 208 bits"},"id":8581,"implemented":true,"kind":"function","modifiers":[],"name":"toInt208","nameLocation":"20428:8:25","nodeType":"FunctionDefinition","parameters":{"id":8559,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8558,"mutability":"mutable","name":"value","nameLocation":"20444:5:25","nodeType":"VariableDeclaration","scope":8581,"src":"20437:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8557,"name":"int256","nodeType":"ElementaryTypeName","src":"20437:6:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"20436:14:25"},"returnParameters":{"id":8562,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8561,"mutability":"mutable","name":"downcasted","nameLocation":"20481:10:25","nodeType":"VariableDeclaration","scope":8581,"src":"20474:17:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int208","typeString":"int208"},"typeName":{"id":8560,"name":"int208","nodeType":"ElementaryTypeName","src":"20474:6:25","typeDescriptions":{"typeIdentifier":"t_int208","typeString":"int208"}},"visibility":"internal"}],"src":"20473:19:25"},"scope":9272,"src":"20419:224:25","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8606,"nodeType":"Block","src":"21040:150:25","statements":[{"expression":{"id":8594,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8589,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8587,"src":"21050:10:25","typeDescriptions":{"typeIdentifier":"t_int200","typeString":"int200"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8592,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8584,"src":"21070:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8591,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"21063:6:25","typeDescriptions":{"typeIdentifier":"t_type$_t_int200_$","typeString":"type(int200)"},"typeName":{"id":8590,"name":"int200","nodeType":"ElementaryTypeName","src":"21063:6:25","typeDescriptions":{}}},"id":8593,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21063:13:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int200","typeString":"int200"}},"src":"21050:26:25","typeDescriptions":{"typeIdentifier":"t_int200","typeString":"int200"}},"id":8595,"nodeType":"ExpressionStatement","src":"21050:26:25"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8598,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8596,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8587,"src":"21090:10:25","typeDescriptions":{"typeIdentifier":"t_int200","typeString":"int200"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8597,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8584,"src":"21104:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21090:19:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8605,"nodeType":"IfStatement","src":"21086:98:25","trueBody":{"id":8604,"nodeType":"Block","src":"21111:73:25","statements":[{"errorCall":{"arguments":[{"hexValue":"323030","id":8600,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21162:3:25","typeDescriptions":{"typeIdentifier":"t_rational_200_by_1","typeString":"int_const 200"},"value":"200"},{"id":8601,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8584,"src":"21167:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_200_by_1","typeString":"int_const 200"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8599,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7529,"src":"21132:29:25","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8602,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21132:41:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8603,"nodeType":"RevertStatement","src":"21125:48:25"}]}}]},"documentation":{"id":8582,"nodeType":"StructuredDocumentation","src":"20649:312:25","text":" @dev Returns the downcasted int200 from int256, reverting on\n overflow (when the input is less than smallest int200 or\n greater than largest int200).\n Counterpart to Solidity's `int200` operator.\n Requirements:\n - input must fit into 200 bits"},"id":8607,"implemented":true,"kind":"function","modifiers":[],"name":"toInt200","nameLocation":"20975:8:25","nodeType":"FunctionDefinition","parameters":{"id":8585,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8584,"mutability":"mutable","name":"value","nameLocation":"20991:5:25","nodeType":"VariableDeclaration","scope":8607,"src":"20984:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8583,"name":"int256","nodeType":"ElementaryTypeName","src":"20984:6:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"20983:14:25"},"returnParameters":{"id":8588,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8587,"mutability":"mutable","name":"downcasted","nameLocation":"21028:10:25","nodeType":"VariableDeclaration","scope":8607,"src":"21021:17:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int200","typeString":"int200"},"typeName":{"id":8586,"name":"int200","nodeType":"ElementaryTypeName","src":"21021:6:25","typeDescriptions":{"typeIdentifier":"t_int200","typeString":"int200"}},"visibility":"internal"}],"src":"21020:19:25"},"scope":9272,"src":"20966:224:25","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8632,"nodeType":"Block","src":"21587:150:25","statements":[{"expression":{"id":8620,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8615,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8613,"src":"21597:10:25","typeDescriptions":{"typeIdentifier":"t_int192","typeString":"int192"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8618,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8610,"src":"21617:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8617,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"21610:6:25","typeDescriptions":{"typeIdentifier":"t_type$_t_int192_$","typeString":"type(int192)"},"typeName":{"id":8616,"name":"int192","nodeType":"ElementaryTypeName","src":"21610:6:25","typeDescriptions":{}}},"id":8619,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21610:13:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int192","typeString":"int192"}},"src":"21597:26:25","typeDescriptions":{"typeIdentifier":"t_int192","typeString":"int192"}},"id":8621,"nodeType":"ExpressionStatement","src":"21597:26:25"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8624,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8622,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8613,"src":"21637:10:25","typeDescriptions":{"typeIdentifier":"t_int192","typeString":"int192"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8623,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8610,"src":"21651:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21637:19:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8631,"nodeType":"IfStatement","src":"21633:98:25","trueBody":{"id":8630,"nodeType":"Block","src":"21658:73:25","statements":[{"errorCall":{"arguments":[{"hexValue":"313932","id":8626,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21709:3:25","typeDescriptions":{"typeIdentifier":"t_rational_192_by_1","typeString":"int_const 192"},"value":"192"},{"id":8627,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8610,"src":"21714:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_192_by_1","typeString":"int_const 192"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8625,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7529,"src":"21679:29:25","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8628,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21679:41:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8629,"nodeType":"RevertStatement","src":"21672:48:25"}]}}]},"documentation":{"id":8608,"nodeType":"StructuredDocumentation","src":"21196:312:25","text":" @dev Returns the downcasted int192 from int256, reverting on\n overflow (when the input is less than smallest int192 or\n greater than largest int192).\n Counterpart to Solidity's `int192` operator.\n Requirements:\n - input must fit into 192 bits"},"id":8633,"implemented":true,"kind":"function","modifiers":[],"name":"toInt192","nameLocation":"21522:8:25","nodeType":"FunctionDefinition","parameters":{"id":8611,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8610,"mutability":"mutable","name":"value","nameLocation":"21538:5:25","nodeType":"VariableDeclaration","scope":8633,"src":"21531:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8609,"name":"int256","nodeType":"ElementaryTypeName","src":"21531:6:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"21530:14:25"},"returnParameters":{"id":8614,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8613,"mutability":"mutable","name":"downcasted","nameLocation":"21575:10:25","nodeType":"VariableDeclaration","scope":8633,"src":"21568:17:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int192","typeString":"int192"},"typeName":{"id":8612,"name":"int192","nodeType":"ElementaryTypeName","src":"21568:6:25","typeDescriptions":{"typeIdentifier":"t_int192","typeString":"int192"}},"visibility":"internal"}],"src":"21567:19:25"},"scope":9272,"src":"21513:224:25","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8658,"nodeType":"Block","src":"22134:150:25","statements":[{"expression":{"id":8646,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8641,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8639,"src":"22144:10:25","typeDescriptions":{"typeIdentifier":"t_int184","typeString":"int184"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8644,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8636,"src":"22164:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8643,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"22157:6:25","typeDescriptions":{"typeIdentifier":"t_type$_t_int184_$","typeString":"type(int184)"},"typeName":{"id":8642,"name":"int184","nodeType":"ElementaryTypeName","src":"22157:6:25","typeDescriptions":{}}},"id":8645,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22157:13:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int184","typeString":"int184"}},"src":"22144:26:25","typeDescriptions":{"typeIdentifier":"t_int184","typeString":"int184"}},"id":8647,"nodeType":"ExpressionStatement","src":"22144:26:25"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8650,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8648,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8639,"src":"22184:10:25","typeDescriptions":{"typeIdentifier":"t_int184","typeString":"int184"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8649,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8636,"src":"22198:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22184:19:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8657,"nodeType":"IfStatement","src":"22180:98:25","trueBody":{"id":8656,"nodeType":"Block","src":"22205:73:25","statements":[{"errorCall":{"arguments":[{"hexValue":"313834","id":8652,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22256:3:25","typeDescriptions":{"typeIdentifier":"t_rational_184_by_1","typeString":"int_const 184"},"value":"184"},{"id":8653,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8636,"src":"22261:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_184_by_1","typeString":"int_const 184"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8651,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7529,"src":"22226:29:25","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8654,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22226:41:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8655,"nodeType":"RevertStatement","src":"22219:48:25"}]}}]},"documentation":{"id":8634,"nodeType":"StructuredDocumentation","src":"21743:312:25","text":" @dev Returns the downcasted int184 from int256, reverting on\n overflow (when the input is less than smallest int184 or\n greater than largest int184).\n Counterpart to Solidity's `int184` operator.\n Requirements:\n - input must fit into 184 bits"},"id":8659,"implemented":true,"kind":"function","modifiers":[],"name":"toInt184","nameLocation":"22069:8:25","nodeType":"FunctionDefinition","parameters":{"id":8637,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8636,"mutability":"mutable","name":"value","nameLocation":"22085:5:25","nodeType":"VariableDeclaration","scope":8659,"src":"22078:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8635,"name":"int256","nodeType":"ElementaryTypeName","src":"22078:6:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"22077:14:25"},"returnParameters":{"id":8640,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8639,"mutability":"mutable","name":"downcasted","nameLocation":"22122:10:25","nodeType":"VariableDeclaration","scope":8659,"src":"22115:17:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int184","typeString":"int184"},"typeName":{"id":8638,"name":"int184","nodeType":"ElementaryTypeName","src":"22115:6:25","typeDescriptions":{"typeIdentifier":"t_int184","typeString":"int184"}},"visibility":"internal"}],"src":"22114:19:25"},"scope":9272,"src":"22060:224:25","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8684,"nodeType":"Block","src":"22681:150:25","statements":[{"expression":{"id":8672,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8667,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8665,"src":"22691:10:25","typeDescriptions":{"typeIdentifier":"t_int176","typeString":"int176"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8670,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8662,"src":"22711:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8669,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"22704:6:25","typeDescriptions":{"typeIdentifier":"t_type$_t_int176_$","typeString":"type(int176)"},"typeName":{"id":8668,"name":"int176","nodeType":"ElementaryTypeName","src":"22704:6:25","typeDescriptions":{}}},"id":8671,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22704:13:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int176","typeString":"int176"}},"src":"22691:26:25","typeDescriptions":{"typeIdentifier":"t_int176","typeString":"int176"}},"id":8673,"nodeType":"ExpressionStatement","src":"22691:26:25"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8676,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8674,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8665,"src":"22731:10:25","typeDescriptions":{"typeIdentifier":"t_int176","typeString":"int176"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8675,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8662,"src":"22745:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22731:19:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8683,"nodeType":"IfStatement","src":"22727:98:25","trueBody":{"id":8682,"nodeType":"Block","src":"22752:73:25","statements":[{"errorCall":{"arguments":[{"hexValue":"313736","id":8678,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22803:3:25","typeDescriptions":{"typeIdentifier":"t_rational_176_by_1","typeString":"int_const 176"},"value":"176"},{"id":8679,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8662,"src":"22808:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_176_by_1","typeString":"int_const 176"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8677,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7529,"src":"22773:29:25","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8680,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22773:41:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8681,"nodeType":"RevertStatement","src":"22766:48:25"}]}}]},"documentation":{"id":8660,"nodeType":"StructuredDocumentation","src":"22290:312:25","text":" @dev Returns the downcasted int176 from int256, reverting on\n overflow (when the input is less than smallest int176 or\n greater than largest int176).\n Counterpart to Solidity's `int176` operator.\n Requirements:\n - input must fit into 176 bits"},"id":8685,"implemented":true,"kind":"function","modifiers":[],"name":"toInt176","nameLocation":"22616:8:25","nodeType":"FunctionDefinition","parameters":{"id":8663,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8662,"mutability":"mutable","name":"value","nameLocation":"22632:5:25","nodeType":"VariableDeclaration","scope":8685,"src":"22625:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8661,"name":"int256","nodeType":"ElementaryTypeName","src":"22625:6:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"22624:14:25"},"returnParameters":{"id":8666,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8665,"mutability":"mutable","name":"downcasted","nameLocation":"22669:10:25","nodeType":"VariableDeclaration","scope":8685,"src":"22662:17:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int176","typeString":"int176"},"typeName":{"id":8664,"name":"int176","nodeType":"ElementaryTypeName","src":"22662:6:25","typeDescriptions":{"typeIdentifier":"t_int176","typeString":"int176"}},"visibility":"internal"}],"src":"22661:19:25"},"scope":9272,"src":"22607:224:25","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8710,"nodeType":"Block","src":"23228:150:25","statements":[{"expression":{"id":8698,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8693,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8691,"src":"23238:10:25","typeDescriptions":{"typeIdentifier":"t_int168","typeString":"int168"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8696,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8688,"src":"23258:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8695,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"23251:6:25","typeDescriptions":{"typeIdentifier":"t_type$_t_int168_$","typeString":"type(int168)"},"typeName":{"id":8694,"name":"int168","nodeType":"ElementaryTypeName","src":"23251:6:25","typeDescriptions":{}}},"id":8697,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23251:13:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int168","typeString":"int168"}},"src":"23238:26:25","typeDescriptions":{"typeIdentifier":"t_int168","typeString":"int168"}},"id":8699,"nodeType":"ExpressionStatement","src":"23238:26:25"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8702,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8700,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8691,"src":"23278:10:25","typeDescriptions":{"typeIdentifier":"t_int168","typeString":"int168"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8701,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8688,"src":"23292:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"23278:19:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8709,"nodeType":"IfStatement","src":"23274:98:25","trueBody":{"id":8708,"nodeType":"Block","src":"23299:73:25","statements":[{"errorCall":{"arguments":[{"hexValue":"313638","id":8704,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23350:3:25","typeDescriptions":{"typeIdentifier":"t_rational_168_by_1","typeString":"int_const 168"},"value":"168"},{"id":8705,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8688,"src":"23355:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_168_by_1","typeString":"int_const 168"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8703,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7529,"src":"23320:29:25","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8706,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23320:41:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8707,"nodeType":"RevertStatement","src":"23313:48:25"}]}}]},"documentation":{"id":8686,"nodeType":"StructuredDocumentation","src":"22837:312:25","text":" @dev Returns the downcasted int168 from int256, reverting on\n overflow (when the input is less than smallest int168 or\n greater than largest int168).\n Counterpart to Solidity's `int168` operator.\n Requirements:\n - input must fit into 168 bits"},"id":8711,"implemented":true,"kind":"function","modifiers":[],"name":"toInt168","nameLocation":"23163:8:25","nodeType":"FunctionDefinition","parameters":{"id":8689,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8688,"mutability":"mutable","name":"value","nameLocation":"23179:5:25","nodeType":"VariableDeclaration","scope":8711,"src":"23172:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8687,"name":"int256","nodeType":"ElementaryTypeName","src":"23172:6:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"23171:14:25"},"returnParameters":{"id":8692,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8691,"mutability":"mutable","name":"downcasted","nameLocation":"23216:10:25","nodeType":"VariableDeclaration","scope":8711,"src":"23209:17:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int168","typeString":"int168"},"typeName":{"id":8690,"name":"int168","nodeType":"ElementaryTypeName","src":"23209:6:25","typeDescriptions":{"typeIdentifier":"t_int168","typeString":"int168"}},"visibility":"internal"}],"src":"23208:19:25"},"scope":9272,"src":"23154:224:25","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8736,"nodeType":"Block","src":"23775:150:25","statements":[{"expression":{"id":8724,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8719,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8717,"src":"23785:10:25","typeDescriptions":{"typeIdentifier":"t_int160","typeString":"int160"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8722,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8714,"src":"23805:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8721,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"23798:6:25","typeDescriptions":{"typeIdentifier":"t_type$_t_int160_$","typeString":"type(int160)"},"typeName":{"id":8720,"name":"int160","nodeType":"ElementaryTypeName","src":"23798:6:25","typeDescriptions":{}}},"id":8723,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23798:13:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int160","typeString":"int160"}},"src":"23785:26:25","typeDescriptions":{"typeIdentifier":"t_int160","typeString":"int160"}},"id":8725,"nodeType":"ExpressionStatement","src":"23785:26:25"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8728,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8726,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8717,"src":"23825:10:25","typeDescriptions":{"typeIdentifier":"t_int160","typeString":"int160"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8727,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8714,"src":"23839:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"23825:19:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8735,"nodeType":"IfStatement","src":"23821:98:25","trueBody":{"id":8734,"nodeType":"Block","src":"23846:73:25","statements":[{"errorCall":{"arguments":[{"hexValue":"313630","id":8730,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23897:3:25","typeDescriptions":{"typeIdentifier":"t_rational_160_by_1","typeString":"int_const 160"},"value":"160"},{"id":8731,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8714,"src":"23902:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_160_by_1","typeString":"int_const 160"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8729,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7529,"src":"23867:29:25","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8732,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23867:41:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8733,"nodeType":"RevertStatement","src":"23860:48:25"}]}}]},"documentation":{"id":8712,"nodeType":"StructuredDocumentation","src":"23384:312:25","text":" @dev Returns the downcasted int160 from int256, reverting on\n overflow (when the input is less than smallest int160 or\n greater than largest int160).\n Counterpart to Solidity's `int160` operator.\n Requirements:\n - input must fit into 160 bits"},"id":8737,"implemented":true,"kind":"function","modifiers":[],"name":"toInt160","nameLocation":"23710:8:25","nodeType":"FunctionDefinition","parameters":{"id":8715,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8714,"mutability":"mutable","name":"value","nameLocation":"23726:5:25","nodeType":"VariableDeclaration","scope":8737,"src":"23719:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8713,"name":"int256","nodeType":"ElementaryTypeName","src":"23719:6:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"23718:14:25"},"returnParameters":{"id":8718,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8717,"mutability":"mutable","name":"downcasted","nameLocation":"23763:10:25","nodeType":"VariableDeclaration","scope":8737,"src":"23756:17:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int160","typeString":"int160"},"typeName":{"id":8716,"name":"int160","nodeType":"ElementaryTypeName","src":"23756:6:25","typeDescriptions":{"typeIdentifier":"t_int160","typeString":"int160"}},"visibility":"internal"}],"src":"23755:19:25"},"scope":9272,"src":"23701:224:25","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8762,"nodeType":"Block","src":"24322:150:25","statements":[{"expression":{"id":8750,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8745,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8743,"src":"24332:10:25","typeDescriptions":{"typeIdentifier":"t_int152","typeString":"int152"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8748,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8740,"src":"24352:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8747,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"24345:6:25","typeDescriptions":{"typeIdentifier":"t_type$_t_int152_$","typeString":"type(int152)"},"typeName":{"id":8746,"name":"int152","nodeType":"ElementaryTypeName","src":"24345:6:25","typeDescriptions":{}}},"id":8749,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24345:13:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int152","typeString":"int152"}},"src":"24332:26:25","typeDescriptions":{"typeIdentifier":"t_int152","typeString":"int152"}},"id":8751,"nodeType":"ExpressionStatement","src":"24332:26:25"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8754,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8752,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8743,"src":"24372:10:25","typeDescriptions":{"typeIdentifier":"t_int152","typeString":"int152"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8753,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8740,"src":"24386:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"24372:19:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8761,"nodeType":"IfStatement","src":"24368:98:25","trueBody":{"id":8760,"nodeType":"Block","src":"24393:73:25","statements":[{"errorCall":{"arguments":[{"hexValue":"313532","id":8756,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24444:3:25","typeDescriptions":{"typeIdentifier":"t_rational_152_by_1","typeString":"int_const 152"},"value":"152"},{"id":8757,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8740,"src":"24449:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_152_by_1","typeString":"int_const 152"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8755,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7529,"src":"24414:29:25","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8758,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24414:41:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8759,"nodeType":"RevertStatement","src":"24407:48:25"}]}}]},"documentation":{"id":8738,"nodeType":"StructuredDocumentation","src":"23931:312:25","text":" @dev Returns the downcasted int152 from int256, reverting on\n overflow (when the input is less than smallest int152 or\n greater than largest int152).\n Counterpart to Solidity's `int152` operator.\n Requirements:\n - input must fit into 152 bits"},"id":8763,"implemented":true,"kind":"function","modifiers":[],"name":"toInt152","nameLocation":"24257:8:25","nodeType":"FunctionDefinition","parameters":{"id":8741,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8740,"mutability":"mutable","name":"value","nameLocation":"24273:5:25","nodeType":"VariableDeclaration","scope":8763,"src":"24266:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8739,"name":"int256","nodeType":"ElementaryTypeName","src":"24266:6:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"24265:14:25"},"returnParameters":{"id":8744,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8743,"mutability":"mutable","name":"downcasted","nameLocation":"24310:10:25","nodeType":"VariableDeclaration","scope":8763,"src":"24303:17:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int152","typeString":"int152"},"typeName":{"id":8742,"name":"int152","nodeType":"ElementaryTypeName","src":"24303:6:25","typeDescriptions":{"typeIdentifier":"t_int152","typeString":"int152"}},"visibility":"internal"}],"src":"24302:19:25"},"scope":9272,"src":"24248:224:25","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8788,"nodeType":"Block","src":"24869:150:25","statements":[{"expression":{"id":8776,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8771,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8769,"src":"24879:10:25","typeDescriptions":{"typeIdentifier":"t_int144","typeString":"int144"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8774,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8766,"src":"24899:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8773,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"24892:6:25","typeDescriptions":{"typeIdentifier":"t_type$_t_int144_$","typeString":"type(int144)"},"typeName":{"id":8772,"name":"int144","nodeType":"ElementaryTypeName","src":"24892:6:25","typeDescriptions":{}}},"id":8775,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24892:13:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int144","typeString":"int144"}},"src":"24879:26:25","typeDescriptions":{"typeIdentifier":"t_int144","typeString":"int144"}},"id":8777,"nodeType":"ExpressionStatement","src":"24879:26:25"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8780,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8778,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8769,"src":"24919:10:25","typeDescriptions":{"typeIdentifier":"t_int144","typeString":"int144"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8779,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8766,"src":"24933:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"24919:19:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8787,"nodeType":"IfStatement","src":"24915:98:25","trueBody":{"id":8786,"nodeType":"Block","src":"24940:73:25","statements":[{"errorCall":{"arguments":[{"hexValue":"313434","id":8782,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24991:3:25","typeDescriptions":{"typeIdentifier":"t_rational_144_by_1","typeString":"int_const 144"},"value":"144"},{"id":8783,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8766,"src":"24996:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_144_by_1","typeString":"int_const 144"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8781,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7529,"src":"24961:29:25","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8784,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24961:41:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8785,"nodeType":"RevertStatement","src":"24954:48:25"}]}}]},"documentation":{"id":8764,"nodeType":"StructuredDocumentation","src":"24478:312:25","text":" @dev Returns the downcasted int144 from int256, reverting on\n overflow (when the input is less than smallest int144 or\n greater than largest int144).\n Counterpart to Solidity's `int144` operator.\n Requirements:\n - input must fit into 144 bits"},"id":8789,"implemented":true,"kind":"function","modifiers":[],"name":"toInt144","nameLocation":"24804:8:25","nodeType":"FunctionDefinition","parameters":{"id":8767,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8766,"mutability":"mutable","name":"value","nameLocation":"24820:5:25","nodeType":"VariableDeclaration","scope":8789,"src":"24813:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8765,"name":"int256","nodeType":"ElementaryTypeName","src":"24813:6:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"24812:14:25"},"returnParameters":{"id":8770,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8769,"mutability":"mutable","name":"downcasted","nameLocation":"24857:10:25","nodeType":"VariableDeclaration","scope":8789,"src":"24850:17:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int144","typeString":"int144"},"typeName":{"id":8768,"name":"int144","nodeType":"ElementaryTypeName","src":"24850:6:25","typeDescriptions":{"typeIdentifier":"t_int144","typeString":"int144"}},"visibility":"internal"}],"src":"24849:19:25"},"scope":9272,"src":"24795:224:25","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8814,"nodeType":"Block","src":"25416:150:25","statements":[{"expression":{"id":8802,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8797,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8795,"src":"25426:10:25","typeDescriptions":{"typeIdentifier":"t_int136","typeString":"int136"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8800,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8792,"src":"25446:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8799,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"25439:6:25","typeDescriptions":{"typeIdentifier":"t_type$_t_int136_$","typeString":"type(int136)"},"typeName":{"id":8798,"name":"int136","nodeType":"ElementaryTypeName","src":"25439:6:25","typeDescriptions":{}}},"id":8801,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25439:13:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int136","typeString":"int136"}},"src":"25426:26:25","typeDescriptions":{"typeIdentifier":"t_int136","typeString":"int136"}},"id":8803,"nodeType":"ExpressionStatement","src":"25426:26:25"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8806,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8804,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8795,"src":"25466:10:25","typeDescriptions":{"typeIdentifier":"t_int136","typeString":"int136"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8805,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8792,"src":"25480:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"25466:19:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8813,"nodeType":"IfStatement","src":"25462:98:25","trueBody":{"id":8812,"nodeType":"Block","src":"25487:73:25","statements":[{"errorCall":{"arguments":[{"hexValue":"313336","id":8808,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25538:3:25","typeDescriptions":{"typeIdentifier":"t_rational_136_by_1","typeString":"int_const 136"},"value":"136"},{"id":8809,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8792,"src":"25543:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_136_by_1","typeString":"int_const 136"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8807,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7529,"src":"25508:29:25","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8810,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25508:41:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8811,"nodeType":"RevertStatement","src":"25501:48:25"}]}}]},"documentation":{"id":8790,"nodeType":"StructuredDocumentation","src":"25025:312:25","text":" @dev Returns the downcasted int136 from int256, reverting on\n overflow (when the input is less than smallest int136 or\n greater than largest int136).\n Counterpart to Solidity's `int136` operator.\n Requirements:\n - input must fit into 136 bits"},"id":8815,"implemented":true,"kind":"function","modifiers":[],"name":"toInt136","nameLocation":"25351:8:25","nodeType":"FunctionDefinition","parameters":{"id":8793,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8792,"mutability":"mutable","name":"value","nameLocation":"25367:5:25","nodeType":"VariableDeclaration","scope":8815,"src":"25360:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8791,"name":"int256","nodeType":"ElementaryTypeName","src":"25360:6:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"25359:14:25"},"returnParameters":{"id":8796,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8795,"mutability":"mutable","name":"downcasted","nameLocation":"25404:10:25","nodeType":"VariableDeclaration","scope":8815,"src":"25397:17:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int136","typeString":"int136"},"typeName":{"id":8794,"name":"int136","nodeType":"ElementaryTypeName","src":"25397:6:25","typeDescriptions":{"typeIdentifier":"t_int136","typeString":"int136"}},"visibility":"internal"}],"src":"25396:19:25"},"scope":9272,"src":"25342:224:25","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8840,"nodeType":"Block","src":"25963:150:25","statements":[{"expression":{"id":8828,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8823,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8821,"src":"25973:10:25","typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8826,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8818,"src":"25993:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8825,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"25986:6:25","typeDescriptions":{"typeIdentifier":"t_type$_t_int128_$","typeString":"type(int128)"},"typeName":{"id":8824,"name":"int128","nodeType":"ElementaryTypeName","src":"25986:6:25","typeDescriptions":{}}},"id":8827,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25986:13:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"}},"src":"25973:26:25","typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"}},"id":8829,"nodeType":"ExpressionStatement","src":"25973:26:25"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8832,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8830,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8821,"src":"26013:10:25","typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8831,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8818,"src":"26027:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"26013:19:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8839,"nodeType":"IfStatement","src":"26009:98:25","trueBody":{"id":8838,"nodeType":"Block","src":"26034:73:25","statements":[{"errorCall":{"arguments":[{"hexValue":"313238","id":8834,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26085:3:25","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},{"id":8835,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8818,"src":"26090:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8833,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7529,"src":"26055:29:25","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8836,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26055:41:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8837,"nodeType":"RevertStatement","src":"26048:48:25"}]}}]},"documentation":{"id":8816,"nodeType":"StructuredDocumentation","src":"25572:312:25","text":" @dev Returns the downcasted int128 from int256, reverting on\n overflow (when the input is less than smallest int128 or\n greater than largest int128).\n Counterpart to Solidity's `int128` operator.\n Requirements:\n - input must fit into 128 bits"},"id":8841,"implemented":true,"kind":"function","modifiers":[],"name":"toInt128","nameLocation":"25898:8:25","nodeType":"FunctionDefinition","parameters":{"id":8819,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8818,"mutability":"mutable","name":"value","nameLocation":"25914:5:25","nodeType":"VariableDeclaration","scope":8841,"src":"25907:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8817,"name":"int256","nodeType":"ElementaryTypeName","src":"25907:6:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"25906:14:25"},"returnParameters":{"id":8822,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8821,"mutability":"mutable","name":"downcasted","nameLocation":"25951:10:25","nodeType":"VariableDeclaration","scope":8841,"src":"25944:17:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"},"typeName":{"id":8820,"name":"int128","nodeType":"ElementaryTypeName","src":"25944:6:25","typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"}},"visibility":"internal"}],"src":"25943:19:25"},"scope":9272,"src":"25889:224:25","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8866,"nodeType":"Block","src":"26510:150:25","statements":[{"expression":{"id":8854,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8849,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8847,"src":"26520:10:25","typeDescriptions":{"typeIdentifier":"t_int120","typeString":"int120"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8852,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8844,"src":"26540:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8851,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"26533:6:25","typeDescriptions":{"typeIdentifier":"t_type$_t_int120_$","typeString":"type(int120)"},"typeName":{"id":8850,"name":"int120","nodeType":"ElementaryTypeName","src":"26533:6:25","typeDescriptions":{}}},"id":8853,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26533:13:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int120","typeString":"int120"}},"src":"26520:26:25","typeDescriptions":{"typeIdentifier":"t_int120","typeString":"int120"}},"id":8855,"nodeType":"ExpressionStatement","src":"26520:26:25"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8858,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8856,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8847,"src":"26560:10:25","typeDescriptions":{"typeIdentifier":"t_int120","typeString":"int120"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8857,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8844,"src":"26574:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"26560:19:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8865,"nodeType":"IfStatement","src":"26556:98:25","trueBody":{"id":8864,"nodeType":"Block","src":"26581:73:25","statements":[{"errorCall":{"arguments":[{"hexValue":"313230","id":8860,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26632:3:25","typeDescriptions":{"typeIdentifier":"t_rational_120_by_1","typeString":"int_const 120"},"value":"120"},{"id":8861,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8844,"src":"26637:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_120_by_1","typeString":"int_const 120"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8859,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7529,"src":"26602:29:25","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8862,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26602:41:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8863,"nodeType":"RevertStatement","src":"26595:48:25"}]}}]},"documentation":{"id":8842,"nodeType":"StructuredDocumentation","src":"26119:312:25","text":" @dev Returns the downcasted int120 from int256, reverting on\n overflow (when the input is less than smallest int120 or\n greater than largest int120).\n Counterpart to Solidity's `int120` operator.\n Requirements:\n - input must fit into 120 bits"},"id":8867,"implemented":true,"kind":"function","modifiers":[],"name":"toInt120","nameLocation":"26445:8:25","nodeType":"FunctionDefinition","parameters":{"id":8845,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8844,"mutability":"mutable","name":"value","nameLocation":"26461:5:25","nodeType":"VariableDeclaration","scope":8867,"src":"26454:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8843,"name":"int256","nodeType":"ElementaryTypeName","src":"26454:6:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"26453:14:25"},"returnParameters":{"id":8848,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8847,"mutability":"mutable","name":"downcasted","nameLocation":"26498:10:25","nodeType":"VariableDeclaration","scope":8867,"src":"26491:17:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int120","typeString":"int120"},"typeName":{"id":8846,"name":"int120","nodeType":"ElementaryTypeName","src":"26491:6:25","typeDescriptions":{"typeIdentifier":"t_int120","typeString":"int120"}},"visibility":"internal"}],"src":"26490:19:25"},"scope":9272,"src":"26436:224:25","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8892,"nodeType":"Block","src":"27057:150:25","statements":[{"expression":{"id":8880,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8875,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8873,"src":"27067:10:25","typeDescriptions":{"typeIdentifier":"t_int112","typeString":"int112"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8878,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8870,"src":"27087:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8877,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"27080:6:25","typeDescriptions":{"typeIdentifier":"t_type$_t_int112_$","typeString":"type(int112)"},"typeName":{"id":8876,"name":"int112","nodeType":"ElementaryTypeName","src":"27080:6:25","typeDescriptions":{}}},"id":8879,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27080:13:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int112","typeString":"int112"}},"src":"27067:26:25","typeDescriptions":{"typeIdentifier":"t_int112","typeString":"int112"}},"id":8881,"nodeType":"ExpressionStatement","src":"27067:26:25"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8884,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8882,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8873,"src":"27107:10:25","typeDescriptions":{"typeIdentifier":"t_int112","typeString":"int112"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8883,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8870,"src":"27121:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"27107:19:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8891,"nodeType":"IfStatement","src":"27103:98:25","trueBody":{"id":8890,"nodeType":"Block","src":"27128:73:25","statements":[{"errorCall":{"arguments":[{"hexValue":"313132","id":8886,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27179:3:25","typeDescriptions":{"typeIdentifier":"t_rational_112_by_1","typeString":"int_const 112"},"value":"112"},{"id":8887,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8870,"src":"27184:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_112_by_1","typeString":"int_const 112"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8885,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7529,"src":"27149:29:25","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8888,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27149:41:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8889,"nodeType":"RevertStatement","src":"27142:48:25"}]}}]},"documentation":{"id":8868,"nodeType":"StructuredDocumentation","src":"26666:312:25","text":" @dev Returns the downcasted int112 from int256, reverting on\n overflow (when the input is less than smallest int112 or\n greater than largest int112).\n Counterpart to Solidity's `int112` operator.\n Requirements:\n - input must fit into 112 bits"},"id":8893,"implemented":true,"kind":"function","modifiers":[],"name":"toInt112","nameLocation":"26992:8:25","nodeType":"FunctionDefinition","parameters":{"id":8871,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8870,"mutability":"mutable","name":"value","nameLocation":"27008:5:25","nodeType":"VariableDeclaration","scope":8893,"src":"27001:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8869,"name":"int256","nodeType":"ElementaryTypeName","src":"27001:6:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"27000:14:25"},"returnParameters":{"id":8874,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8873,"mutability":"mutable","name":"downcasted","nameLocation":"27045:10:25","nodeType":"VariableDeclaration","scope":8893,"src":"27038:17:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int112","typeString":"int112"},"typeName":{"id":8872,"name":"int112","nodeType":"ElementaryTypeName","src":"27038:6:25","typeDescriptions":{"typeIdentifier":"t_int112","typeString":"int112"}},"visibility":"internal"}],"src":"27037:19:25"},"scope":9272,"src":"26983:224:25","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8918,"nodeType":"Block","src":"27604:150:25","statements":[{"expression":{"id":8906,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8901,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8899,"src":"27614:10:25","typeDescriptions":{"typeIdentifier":"t_int104","typeString":"int104"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8904,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8896,"src":"27634:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8903,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"27627:6:25","typeDescriptions":{"typeIdentifier":"t_type$_t_int104_$","typeString":"type(int104)"},"typeName":{"id":8902,"name":"int104","nodeType":"ElementaryTypeName","src":"27627:6:25","typeDescriptions":{}}},"id":8905,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27627:13:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int104","typeString":"int104"}},"src":"27614:26:25","typeDescriptions":{"typeIdentifier":"t_int104","typeString":"int104"}},"id":8907,"nodeType":"ExpressionStatement","src":"27614:26:25"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8910,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8908,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8899,"src":"27654:10:25","typeDescriptions":{"typeIdentifier":"t_int104","typeString":"int104"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8909,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8896,"src":"27668:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"27654:19:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8917,"nodeType":"IfStatement","src":"27650:98:25","trueBody":{"id":8916,"nodeType":"Block","src":"27675:73:25","statements":[{"errorCall":{"arguments":[{"hexValue":"313034","id":8912,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27726:3:25","typeDescriptions":{"typeIdentifier":"t_rational_104_by_1","typeString":"int_const 104"},"value":"104"},{"id":8913,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8896,"src":"27731:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_104_by_1","typeString":"int_const 104"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8911,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7529,"src":"27696:29:25","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8914,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27696:41:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8915,"nodeType":"RevertStatement","src":"27689:48:25"}]}}]},"documentation":{"id":8894,"nodeType":"StructuredDocumentation","src":"27213:312:25","text":" @dev Returns the downcasted int104 from int256, reverting on\n overflow (when the input is less than smallest int104 or\n greater than largest int104).\n Counterpart to Solidity's `int104` operator.\n Requirements:\n - input must fit into 104 bits"},"id":8919,"implemented":true,"kind":"function","modifiers":[],"name":"toInt104","nameLocation":"27539:8:25","nodeType":"FunctionDefinition","parameters":{"id":8897,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8896,"mutability":"mutable","name":"value","nameLocation":"27555:5:25","nodeType":"VariableDeclaration","scope":8919,"src":"27548:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8895,"name":"int256","nodeType":"ElementaryTypeName","src":"27548:6:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"27547:14:25"},"returnParameters":{"id":8900,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8899,"mutability":"mutable","name":"downcasted","nameLocation":"27592:10:25","nodeType":"VariableDeclaration","scope":8919,"src":"27585:17:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int104","typeString":"int104"},"typeName":{"id":8898,"name":"int104","nodeType":"ElementaryTypeName","src":"27585:6:25","typeDescriptions":{"typeIdentifier":"t_int104","typeString":"int104"}},"visibility":"internal"}],"src":"27584:19:25"},"scope":9272,"src":"27530:224:25","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8944,"nodeType":"Block","src":"28144:148:25","statements":[{"expression":{"id":8932,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8927,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8925,"src":"28154:10:25","typeDescriptions":{"typeIdentifier":"t_int96","typeString":"int96"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8930,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8922,"src":"28173:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8929,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"28167:5:25","typeDescriptions":{"typeIdentifier":"t_type$_t_int96_$","typeString":"type(int96)"},"typeName":{"id":8928,"name":"int96","nodeType":"ElementaryTypeName","src":"28167:5:25","typeDescriptions":{}}},"id":8931,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28167:12:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int96","typeString":"int96"}},"src":"28154:25:25","typeDescriptions":{"typeIdentifier":"t_int96","typeString":"int96"}},"id":8933,"nodeType":"ExpressionStatement","src":"28154:25:25"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8936,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8934,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8925,"src":"28193:10:25","typeDescriptions":{"typeIdentifier":"t_int96","typeString":"int96"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8935,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8922,"src":"28207:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"28193:19:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8943,"nodeType":"IfStatement","src":"28189:97:25","trueBody":{"id":8942,"nodeType":"Block","src":"28214:72:25","statements":[{"errorCall":{"arguments":[{"hexValue":"3936","id":8938,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28265:2:25","typeDescriptions":{"typeIdentifier":"t_rational_96_by_1","typeString":"int_const 96"},"value":"96"},{"id":8939,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8922,"src":"28269:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_96_by_1","typeString":"int_const 96"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8937,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7529,"src":"28235:29:25","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8940,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28235:40:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8941,"nodeType":"RevertStatement","src":"28228:47:25"}]}}]},"documentation":{"id":8920,"nodeType":"StructuredDocumentation","src":"27760:307:25","text":" @dev Returns the downcasted int96 from int256, reverting on\n overflow (when the input is less than smallest int96 or\n greater than largest int96).\n Counterpart to Solidity's `int96` operator.\n Requirements:\n - input must fit into 96 bits"},"id":8945,"implemented":true,"kind":"function","modifiers":[],"name":"toInt96","nameLocation":"28081:7:25","nodeType":"FunctionDefinition","parameters":{"id":8923,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8922,"mutability":"mutable","name":"value","nameLocation":"28096:5:25","nodeType":"VariableDeclaration","scope":8945,"src":"28089:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8921,"name":"int256","nodeType":"ElementaryTypeName","src":"28089:6:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"28088:14:25"},"returnParameters":{"id":8926,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8925,"mutability":"mutable","name":"downcasted","nameLocation":"28132:10:25","nodeType":"VariableDeclaration","scope":8945,"src":"28126:16:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int96","typeString":"int96"},"typeName":{"id":8924,"name":"int96","nodeType":"ElementaryTypeName","src":"28126:5:25","typeDescriptions":{"typeIdentifier":"t_int96","typeString":"int96"}},"visibility":"internal"}],"src":"28125:18:25"},"scope":9272,"src":"28072:220:25","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8970,"nodeType":"Block","src":"28682:148:25","statements":[{"expression":{"id":8958,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8953,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8951,"src":"28692:10:25","typeDescriptions":{"typeIdentifier":"t_int88","typeString":"int88"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8956,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8948,"src":"28711:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8955,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"28705:5:25","typeDescriptions":{"typeIdentifier":"t_type$_t_int88_$","typeString":"type(int88)"},"typeName":{"id":8954,"name":"int88","nodeType":"ElementaryTypeName","src":"28705:5:25","typeDescriptions":{}}},"id":8957,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28705:12:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int88","typeString":"int88"}},"src":"28692:25:25","typeDescriptions":{"typeIdentifier":"t_int88","typeString":"int88"}},"id":8959,"nodeType":"ExpressionStatement","src":"28692:25:25"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8962,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8960,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8951,"src":"28731:10:25","typeDescriptions":{"typeIdentifier":"t_int88","typeString":"int88"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8961,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8948,"src":"28745:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"28731:19:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8969,"nodeType":"IfStatement","src":"28727:97:25","trueBody":{"id":8968,"nodeType":"Block","src":"28752:72:25","statements":[{"errorCall":{"arguments":[{"hexValue":"3838","id":8964,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28803:2:25","typeDescriptions":{"typeIdentifier":"t_rational_88_by_1","typeString":"int_const 88"},"value":"88"},{"id":8965,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8948,"src":"28807:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_88_by_1","typeString":"int_const 88"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8963,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7529,"src":"28773:29:25","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8966,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28773:40:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8967,"nodeType":"RevertStatement","src":"28766:47:25"}]}}]},"documentation":{"id":8946,"nodeType":"StructuredDocumentation","src":"28298:307:25","text":" @dev Returns the downcasted int88 from int256, reverting on\n overflow (when the input is less than smallest int88 or\n greater than largest int88).\n Counterpart to Solidity's `int88` operator.\n Requirements:\n - input must fit into 88 bits"},"id":8971,"implemented":true,"kind":"function","modifiers":[],"name":"toInt88","nameLocation":"28619:7:25","nodeType":"FunctionDefinition","parameters":{"id":8949,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8948,"mutability":"mutable","name":"value","nameLocation":"28634:5:25","nodeType":"VariableDeclaration","scope":8971,"src":"28627:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8947,"name":"int256","nodeType":"ElementaryTypeName","src":"28627:6:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"28626:14:25"},"returnParameters":{"id":8952,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8951,"mutability":"mutable","name":"downcasted","nameLocation":"28670:10:25","nodeType":"VariableDeclaration","scope":8971,"src":"28664:16:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int88","typeString":"int88"},"typeName":{"id":8950,"name":"int88","nodeType":"ElementaryTypeName","src":"28664:5:25","typeDescriptions":{"typeIdentifier":"t_int88","typeString":"int88"}},"visibility":"internal"}],"src":"28663:18:25"},"scope":9272,"src":"28610:220:25","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8996,"nodeType":"Block","src":"29220:148:25","statements":[{"expression":{"id":8984,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8979,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8977,"src":"29230:10:25","typeDescriptions":{"typeIdentifier":"t_int80","typeString":"int80"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8982,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8974,"src":"29249:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8981,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"29243:5:25","typeDescriptions":{"typeIdentifier":"t_type$_t_int80_$","typeString":"type(int80)"},"typeName":{"id":8980,"name":"int80","nodeType":"ElementaryTypeName","src":"29243:5:25","typeDescriptions":{}}},"id":8983,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29243:12:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int80","typeString":"int80"}},"src":"29230:25:25","typeDescriptions":{"typeIdentifier":"t_int80","typeString":"int80"}},"id":8985,"nodeType":"ExpressionStatement","src":"29230:25:25"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8988,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8986,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8977,"src":"29269:10:25","typeDescriptions":{"typeIdentifier":"t_int80","typeString":"int80"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8987,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8974,"src":"29283:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"29269:19:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8995,"nodeType":"IfStatement","src":"29265:97:25","trueBody":{"id":8994,"nodeType":"Block","src":"29290:72:25","statements":[{"errorCall":{"arguments":[{"hexValue":"3830","id":8990,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29341:2:25","typeDescriptions":{"typeIdentifier":"t_rational_80_by_1","typeString":"int_const 80"},"value":"80"},{"id":8991,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8974,"src":"29345:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_80_by_1","typeString":"int_const 80"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8989,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7529,"src":"29311:29:25","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8992,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29311:40:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8993,"nodeType":"RevertStatement","src":"29304:47:25"}]}}]},"documentation":{"id":8972,"nodeType":"StructuredDocumentation","src":"28836:307:25","text":" @dev Returns the downcasted int80 from int256, reverting on\n overflow (when the input is less than smallest int80 or\n greater than largest int80).\n Counterpart to Solidity's `int80` operator.\n Requirements:\n - input must fit into 80 bits"},"id":8997,"implemented":true,"kind":"function","modifiers":[],"name":"toInt80","nameLocation":"29157:7:25","nodeType":"FunctionDefinition","parameters":{"id":8975,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8974,"mutability":"mutable","name":"value","nameLocation":"29172:5:25","nodeType":"VariableDeclaration","scope":8997,"src":"29165:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8973,"name":"int256","nodeType":"ElementaryTypeName","src":"29165:6:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"29164:14:25"},"returnParameters":{"id":8978,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8977,"mutability":"mutable","name":"downcasted","nameLocation":"29208:10:25","nodeType":"VariableDeclaration","scope":8997,"src":"29202:16:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int80","typeString":"int80"},"typeName":{"id":8976,"name":"int80","nodeType":"ElementaryTypeName","src":"29202:5:25","typeDescriptions":{"typeIdentifier":"t_int80","typeString":"int80"}},"visibility":"internal"}],"src":"29201:18:25"},"scope":9272,"src":"29148:220:25","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9022,"nodeType":"Block","src":"29758:148:25","statements":[{"expression":{"id":9010,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9005,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9003,"src":"29768:10:25","typeDescriptions":{"typeIdentifier":"t_int72","typeString":"int72"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":9008,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9000,"src":"29787:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":9007,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"29781:5:25","typeDescriptions":{"typeIdentifier":"t_type$_t_int72_$","typeString":"type(int72)"},"typeName":{"id":9006,"name":"int72","nodeType":"ElementaryTypeName","src":"29781:5:25","typeDescriptions":{}}},"id":9009,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29781:12:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int72","typeString":"int72"}},"src":"29768:25:25","typeDescriptions":{"typeIdentifier":"t_int72","typeString":"int72"}},"id":9011,"nodeType":"ExpressionStatement","src":"29768:25:25"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9014,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9012,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9003,"src":"29807:10:25","typeDescriptions":{"typeIdentifier":"t_int72","typeString":"int72"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":9013,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9000,"src":"29821:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"29807:19:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9021,"nodeType":"IfStatement","src":"29803:97:25","trueBody":{"id":9020,"nodeType":"Block","src":"29828:72:25","statements":[{"errorCall":{"arguments":[{"hexValue":"3732","id":9016,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29879:2:25","typeDescriptions":{"typeIdentifier":"t_rational_72_by_1","typeString":"int_const 72"},"value":"72"},{"id":9017,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9000,"src":"29883:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_72_by_1","typeString":"int_const 72"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":9015,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7529,"src":"29849:29:25","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":9018,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29849:40:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9019,"nodeType":"RevertStatement","src":"29842:47:25"}]}}]},"documentation":{"id":8998,"nodeType":"StructuredDocumentation","src":"29374:307:25","text":" @dev Returns the downcasted int72 from int256, reverting on\n overflow (when the input is less than smallest int72 or\n greater than largest int72).\n Counterpart to Solidity's `int72` operator.\n Requirements:\n - input must fit into 72 bits"},"id":9023,"implemented":true,"kind":"function","modifiers":[],"name":"toInt72","nameLocation":"29695:7:25","nodeType":"FunctionDefinition","parameters":{"id":9001,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9000,"mutability":"mutable","name":"value","nameLocation":"29710:5:25","nodeType":"VariableDeclaration","scope":9023,"src":"29703:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8999,"name":"int256","nodeType":"ElementaryTypeName","src":"29703:6:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"29702:14:25"},"returnParameters":{"id":9004,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9003,"mutability":"mutable","name":"downcasted","nameLocation":"29746:10:25","nodeType":"VariableDeclaration","scope":9023,"src":"29740:16:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int72","typeString":"int72"},"typeName":{"id":9002,"name":"int72","nodeType":"ElementaryTypeName","src":"29740:5:25","typeDescriptions":{"typeIdentifier":"t_int72","typeString":"int72"}},"visibility":"internal"}],"src":"29739:18:25"},"scope":9272,"src":"29686:220:25","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9048,"nodeType":"Block","src":"30296:148:25","statements":[{"expression":{"id":9036,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9031,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9029,"src":"30306:10:25","typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":9034,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9026,"src":"30325:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":9033,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"30319:5:25","typeDescriptions":{"typeIdentifier":"t_type$_t_int64_$","typeString":"type(int64)"},"typeName":{"id":9032,"name":"int64","nodeType":"ElementaryTypeName","src":"30319:5:25","typeDescriptions":{}}},"id":9035,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30319:12:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"}},"src":"30306:25:25","typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"}},"id":9037,"nodeType":"ExpressionStatement","src":"30306:25:25"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9040,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9038,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9029,"src":"30345:10:25","typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":9039,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9026,"src":"30359:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"30345:19:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9047,"nodeType":"IfStatement","src":"30341:97:25","trueBody":{"id":9046,"nodeType":"Block","src":"30366:72:25","statements":[{"errorCall":{"arguments":[{"hexValue":"3634","id":9042,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30417:2:25","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},{"id":9043,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9026,"src":"30421:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":9041,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7529,"src":"30387:29:25","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":9044,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30387:40:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9045,"nodeType":"RevertStatement","src":"30380:47:25"}]}}]},"documentation":{"id":9024,"nodeType":"StructuredDocumentation","src":"29912:307:25","text":" @dev Returns the downcasted int64 from int256, reverting on\n overflow (when the input is less than smallest int64 or\n greater than largest int64).\n Counterpart to Solidity's `int64` operator.\n Requirements:\n - input must fit into 64 bits"},"id":9049,"implemented":true,"kind":"function","modifiers":[],"name":"toInt64","nameLocation":"30233:7:25","nodeType":"FunctionDefinition","parameters":{"id":9027,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9026,"mutability":"mutable","name":"value","nameLocation":"30248:5:25","nodeType":"VariableDeclaration","scope":9049,"src":"30241:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":9025,"name":"int256","nodeType":"ElementaryTypeName","src":"30241:6:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"30240:14:25"},"returnParameters":{"id":9030,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9029,"mutability":"mutable","name":"downcasted","nameLocation":"30284:10:25","nodeType":"VariableDeclaration","scope":9049,"src":"30278:16:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"},"typeName":{"id":9028,"name":"int64","nodeType":"ElementaryTypeName","src":"30278:5:25","typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"}},"visibility":"internal"}],"src":"30277:18:25"},"scope":9272,"src":"30224:220:25","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9074,"nodeType":"Block","src":"30834:148:25","statements":[{"expression":{"id":9062,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9057,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9055,"src":"30844:10:25","typeDescriptions":{"typeIdentifier":"t_int56","typeString":"int56"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":9060,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9052,"src":"30863:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":9059,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"30857:5:25","typeDescriptions":{"typeIdentifier":"t_type$_t_int56_$","typeString":"type(int56)"},"typeName":{"id":9058,"name":"int56","nodeType":"ElementaryTypeName","src":"30857:5:25","typeDescriptions":{}}},"id":9061,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30857:12:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int56","typeString":"int56"}},"src":"30844:25:25","typeDescriptions":{"typeIdentifier":"t_int56","typeString":"int56"}},"id":9063,"nodeType":"ExpressionStatement","src":"30844:25:25"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9066,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9064,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9055,"src":"30883:10:25","typeDescriptions":{"typeIdentifier":"t_int56","typeString":"int56"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":9065,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9052,"src":"30897:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"30883:19:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9073,"nodeType":"IfStatement","src":"30879:97:25","trueBody":{"id":9072,"nodeType":"Block","src":"30904:72:25","statements":[{"errorCall":{"arguments":[{"hexValue":"3536","id":9068,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30955:2:25","typeDescriptions":{"typeIdentifier":"t_rational_56_by_1","typeString":"int_const 56"},"value":"56"},{"id":9069,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9052,"src":"30959:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_56_by_1","typeString":"int_const 56"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":9067,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7529,"src":"30925:29:25","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":9070,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30925:40:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9071,"nodeType":"RevertStatement","src":"30918:47:25"}]}}]},"documentation":{"id":9050,"nodeType":"StructuredDocumentation","src":"30450:307:25","text":" @dev Returns the downcasted int56 from int256, reverting on\n overflow (when the input is less than smallest int56 or\n greater than largest int56).\n Counterpart to Solidity's `int56` operator.\n Requirements:\n - input must fit into 56 bits"},"id":9075,"implemented":true,"kind":"function","modifiers":[],"name":"toInt56","nameLocation":"30771:7:25","nodeType":"FunctionDefinition","parameters":{"id":9053,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9052,"mutability":"mutable","name":"value","nameLocation":"30786:5:25","nodeType":"VariableDeclaration","scope":9075,"src":"30779:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":9051,"name":"int256","nodeType":"ElementaryTypeName","src":"30779:6:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"30778:14:25"},"returnParameters":{"id":9056,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9055,"mutability":"mutable","name":"downcasted","nameLocation":"30822:10:25","nodeType":"VariableDeclaration","scope":9075,"src":"30816:16:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int56","typeString":"int56"},"typeName":{"id":9054,"name":"int56","nodeType":"ElementaryTypeName","src":"30816:5:25","typeDescriptions":{"typeIdentifier":"t_int56","typeString":"int56"}},"visibility":"internal"}],"src":"30815:18:25"},"scope":9272,"src":"30762:220:25","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9100,"nodeType":"Block","src":"31372:148:25","statements":[{"expression":{"id":9088,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9083,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9081,"src":"31382:10:25","typeDescriptions":{"typeIdentifier":"t_int48","typeString":"int48"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":9086,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9078,"src":"31401:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":9085,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"31395:5:25","typeDescriptions":{"typeIdentifier":"t_type$_t_int48_$","typeString":"type(int48)"},"typeName":{"id":9084,"name":"int48","nodeType":"ElementaryTypeName","src":"31395:5:25","typeDescriptions":{}}},"id":9087,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31395:12:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int48","typeString":"int48"}},"src":"31382:25:25","typeDescriptions":{"typeIdentifier":"t_int48","typeString":"int48"}},"id":9089,"nodeType":"ExpressionStatement","src":"31382:25:25"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9092,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9090,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9081,"src":"31421:10:25","typeDescriptions":{"typeIdentifier":"t_int48","typeString":"int48"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":9091,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9078,"src":"31435:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"31421:19:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9099,"nodeType":"IfStatement","src":"31417:97:25","trueBody":{"id":9098,"nodeType":"Block","src":"31442:72:25","statements":[{"errorCall":{"arguments":[{"hexValue":"3438","id":9094,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31493:2:25","typeDescriptions":{"typeIdentifier":"t_rational_48_by_1","typeString":"int_const 48"},"value":"48"},{"id":9095,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9078,"src":"31497:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_48_by_1","typeString":"int_const 48"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":9093,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7529,"src":"31463:29:25","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":9096,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31463:40:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9097,"nodeType":"RevertStatement","src":"31456:47:25"}]}}]},"documentation":{"id":9076,"nodeType":"StructuredDocumentation","src":"30988:307:25","text":" @dev Returns the downcasted int48 from int256, reverting on\n overflow (when the input is less than smallest int48 or\n greater than largest int48).\n Counterpart to Solidity's `int48` operator.\n Requirements:\n - input must fit into 48 bits"},"id":9101,"implemented":true,"kind":"function","modifiers":[],"name":"toInt48","nameLocation":"31309:7:25","nodeType":"FunctionDefinition","parameters":{"id":9079,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9078,"mutability":"mutable","name":"value","nameLocation":"31324:5:25","nodeType":"VariableDeclaration","scope":9101,"src":"31317:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":9077,"name":"int256","nodeType":"ElementaryTypeName","src":"31317:6:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"31316:14:25"},"returnParameters":{"id":9082,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9081,"mutability":"mutable","name":"downcasted","nameLocation":"31360:10:25","nodeType":"VariableDeclaration","scope":9101,"src":"31354:16:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int48","typeString":"int48"},"typeName":{"id":9080,"name":"int48","nodeType":"ElementaryTypeName","src":"31354:5:25","typeDescriptions":{"typeIdentifier":"t_int48","typeString":"int48"}},"visibility":"internal"}],"src":"31353:18:25"},"scope":9272,"src":"31300:220:25","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9126,"nodeType":"Block","src":"31910:148:25","statements":[{"expression":{"id":9114,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9109,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9107,"src":"31920:10:25","typeDescriptions":{"typeIdentifier":"t_int40","typeString":"int40"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":9112,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9104,"src":"31939:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":9111,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"31933:5:25","typeDescriptions":{"typeIdentifier":"t_type$_t_int40_$","typeString":"type(int40)"},"typeName":{"id":9110,"name":"int40","nodeType":"ElementaryTypeName","src":"31933:5:25","typeDescriptions":{}}},"id":9113,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31933:12:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int40","typeString":"int40"}},"src":"31920:25:25","typeDescriptions":{"typeIdentifier":"t_int40","typeString":"int40"}},"id":9115,"nodeType":"ExpressionStatement","src":"31920:25:25"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9118,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9116,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9107,"src":"31959:10:25","typeDescriptions":{"typeIdentifier":"t_int40","typeString":"int40"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":9117,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9104,"src":"31973:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"31959:19:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9125,"nodeType":"IfStatement","src":"31955:97:25","trueBody":{"id":9124,"nodeType":"Block","src":"31980:72:25","statements":[{"errorCall":{"arguments":[{"hexValue":"3430","id":9120,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"32031:2:25","typeDescriptions":{"typeIdentifier":"t_rational_40_by_1","typeString":"int_const 40"},"value":"40"},{"id":9121,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9104,"src":"32035:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_40_by_1","typeString":"int_const 40"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":9119,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7529,"src":"32001:29:25","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":9122,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32001:40:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9123,"nodeType":"RevertStatement","src":"31994:47:25"}]}}]},"documentation":{"id":9102,"nodeType":"StructuredDocumentation","src":"31526:307:25","text":" @dev Returns the downcasted int40 from int256, reverting on\n overflow (when the input is less than smallest int40 or\n greater than largest int40).\n Counterpart to Solidity's `int40` operator.\n Requirements:\n - input must fit into 40 bits"},"id":9127,"implemented":true,"kind":"function","modifiers":[],"name":"toInt40","nameLocation":"31847:7:25","nodeType":"FunctionDefinition","parameters":{"id":9105,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9104,"mutability":"mutable","name":"value","nameLocation":"31862:5:25","nodeType":"VariableDeclaration","scope":9127,"src":"31855:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":9103,"name":"int256","nodeType":"ElementaryTypeName","src":"31855:6:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"31854:14:25"},"returnParameters":{"id":9108,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9107,"mutability":"mutable","name":"downcasted","nameLocation":"31898:10:25","nodeType":"VariableDeclaration","scope":9127,"src":"31892:16:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int40","typeString":"int40"},"typeName":{"id":9106,"name":"int40","nodeType":"ElementaryTypeName","src":"31892:5:25","typeDescriptions":{"typeIdentifier":"t_int40","typeString":"int40"}},"visibility":"internal"}],"src":"31891:18:25"},"scope":9272,"src":"31838:220:25","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9152,"nodeType":"Block","src":"32448:148:25","statements":[{"expression":{"id":9140,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9135,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9133,"src":"32458:10:25","typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":9138,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9130,"src":"32477:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":9137,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"32471:5:25","typeDescriptions":{"typeIdentifier":"t_type$_t_int32_$","typeString":"type(int32)"},"typeName":{"id":9136,"name":"int32","nodeType":"ElementaryTypeName","src":"32471:5:25","typeDescriptions":{}}},"id":9139,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32471:12:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"}},"src":"32458:25:25","typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"}},"id":9141,"nodeType":"ExpressionStatement","src":"32458:25:25"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9144,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9142,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9133,"src":"32497:10:25","typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":9143,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9130,"src":"32511:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"32497:19:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9151,"nodeType":"IfStatement","src":"32493:97:25","trueBody":{"id":9150,"nodeType":"Block","src":"32518:72:25","statements":[{"errorCall":{"arguments":[{"hexValue":"3332","id":9146,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"32569:2:25","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},{"id":9147,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9130,"src":"32573:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":9145,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7529,"src":"32539:29:25","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":9148,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32539:40:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9149,"nodeType":"RevertStatement","src":"32532:47:25"}]}}]},"documentation":{"id":9128,"nodeType":"StructuredDocumentation","src":"32064:307:25","text":" @dev Returns the downcasted int32 from int256, reverting on\n overflow (when the input is less than smallest int32 or\n greater than largest int32).\n Counterpart to Solidity's `int32` operator.\n Requirements:\n - input must fit into 32 bits"},"id":9153,"implemented":true,"kind":"function","modifiers":[],"name":"toInt32","nameLocation":"32385:7:25","nodeType":"FunctionDefinition","parameters":{"id":9131,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9130,"mutability":"mutable","name":"value","nameLocation":"32400:5:25","nodeType":"VariableDeclaration","scope":9153,"src":"32393:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":9129,"name":"int256","nodeType":"ElementaryTypeName","src":"32393:6:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"32392:14:25"},"returnParameters":{"id":9134,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9133,"mutability":"mutable","name":"downcasted","nameLocation":"32436:10:25","nodeType":"VariableDeclaration","scope":9153,"src":"32430:16:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"},"typeName":{"id":9132,"name":"int32","nodeType":"ElementaryTypeName","src":"32430:5:25","typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"}},"visibility":"internal"}],"src":"32429:18:25"},"scope":9272,"src":"32376:220:25","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9178,"nodeType":"Block","src":"32986:148:25","statements":[{"expression":{"id":9166,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9161,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9159,"src":"32996:10:25","typeDescriptions":{"typeIdentifier":"t_int24","typeString":"int24"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":9164,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9156,"src":"33015:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":9163,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"33009:5:25","typeDescriptions":{"typeIdentifier":"t_type$_t_int24_$","typeString":"type(int24)"},"typeName":{"id":9162,"name":"int24","nodeType":"ElementaryTypeName","src":"33009:5:25","typeDescriptions":{}}},"id":9165,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33009:12:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int24","typeString":"int24"}},"src":"32996:25:25","typeDescriptions":{"typeIdentifier":"t_int24","typeString":"int24"}},"id":9167,"nodeType":"ExpressionStatement","src":"32996:25:25"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9170,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9168,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9159,"src":"33035:10:25","typeDescriptions":{"typeIdentifier":"t_int24","typeString":"int24"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":9169,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9156,"src":"33049:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"33035:19:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9177,"nodeType":"IfStatement","src":"33031:97:25","trueBody":{"id":9176,"nodeType":"Block","src":"33056:72:25","statements":[{"errorCall":{"arguments":[{"hexValue":"3234","id":9172,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"33107:2:25","typeDescriptions":{"typeIdentifier":"t_rational_24_by_1","typeString":"int_const 24"},"value":"24"},{"id":9173,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9156,"src":"33111:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_24_by_1","typeString":"int_const 24"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":9171,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7529,"src":"33077:29:25","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":9174,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33077:40:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9175,"nodeType":"RevertStatement","src":"33070:47:25"}]}}]},"documentation":{"id":9154,"nodeType":"StructuredDocumentation","src":"32602:307:25","text":" @dev Returns the downcasted int24 from int256, reverting on\n overflow (when the input is less than smallest int24 or\n greater than largest int24).\n Counterpart to Solidity's `int24` operator.\n Requirements:\n - input must fit into 24 bits"},"id":9179,"implemented":true,"kind":"function","modifiers":[],"name":"toInt24","nameLocation":"32923:7:25","nodeType":"FunctionDefinition","parameters":{"id":9157,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9156,"mutability":"mutable","name":"value","nameLocation":"32938:5:25","nodeType":"VariableDeclaration","scope":9179,"src":"32931:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":9155,"name":"int256","nodeType":"ElementaryTypeName","src":"32931:6:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"32930:14:25"},"returnParameters":{"id":9160,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9159,"mutability":"mutable","name":"downcasted","nameLocation":"32974:10:25","nodeType":"VariableDeclaration","scope":9179,"src":"32968:16:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int24","typeString":"int24"},"typeName":{"id":9158,"name":"int24","nodeType":"ElementaryTypeName","src":"32968:5:25","typeDescriptions":{"typeIdentifier":"t_int24","typeString":"int24"}},"visibility":"internal"}],"src":"32967:18:25"},"scope":9272,"src":"32914:220:25","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9204,"nodeType":"Block","src":"33524:148:25","statements":[{"expression":{"id":9192,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9187,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9185,"src":"33534:10:25","typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":9190,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9182,"src":"33553:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":9189,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"33547:5:25","typeDescriptions":{"typeIdentifier":"t_type$_t_int16_$","typeString":"type(int16)"},"typeName":{"id":9188,"name":"int16","nodeType":"ElementaryTypeName","src":"33547:5:25","typeDescriptions":{}}},"id":9191,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33547:12:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"}},"src":"33534:25:25","typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"}},"id":9193,"nodeType":"ExpressionStatement","src":"33534:25:25"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9196,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9194,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9185,"src":"33573:10:25","typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":9195,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9182,"src":"33587:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"33573:19:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9203,"nodeType":"IfStatement","src":"33569:97:25","trueBody":{"id":9202,"nodeType":"Block","src":"33594:72:25","statements":[{"errorCall":{"arguments":[{"hexValue":"3136","id":9198,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"33645:2:25","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},{"id":9199,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9182,"src":"33649:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":9197,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7529,"src":"33615:29:25","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":9200,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33615:40:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9201,"nodeType":"RevertStatement","src":"33608:47:25"}]}}]},"documentation":{"id":9180,"nodeType":"StructuredDocumentation","src":"33140:307:25","text":" @dev Returns the downcasted int16 from int256, reverting on\n overflow (when the input is less than smallest int16 or\n greater than largest int16).\n Counterpart to Solidity's `int16` operator.\n Requirements:\n - input must fit into 16 bits"},"id":9205,"implemented":true,"kind":"function","modifiers":[],"name":"toInt16","nameLocation":"33461:7:25","nodeType":"FunctionDefinition","parameters":{"id":9183,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9182,"mutability":"mutable","name":"value","nameLocation":"33476:5:25","nodeType":"VariableDeclaration","scope":9205,"src":"33469:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":9181,"name":"int256","nodeType":"ElementaryTypeName","src":"33469:6:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"33468:14:25"},"returnParameters":{"id":9186,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9185,"mutability":"mutable","name":"downcasted","nameLocation":"33512:10:25","nodeType":"VariableDeclaration","scope":9205,"src":"33506:16:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"},"typeName":{"id":9184,"name":"int16","nodeType":"ElementaryTypeName","src":"33506:5:25","typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"}},"visibility":"internal"}],"src":"33505:18:25"},"scope":9272,"src":"33452:220:25","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9230,"nodeType":"Block","src":"34055:146:25","statements":[{"expression":{"id":9218,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9213,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9211,"src":"34065:10:25","typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":9216,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9208,"src":"34083:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":9215,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"34078:4:25","typeDescriptions":{"typeIdentifier":"t_type$_t_int8_$","typeString":"type(int8)"},"typeName":{"id":9214,"name":"int8","nodeType":"ElementaryTypeName","src":"34078:4:25","typeDescriptions":{}}},"id":9217,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34078:11:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"}},"src":"34065:24:25","typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"}},"id":9219,"nodeType":"ExpressionStatement","src":"34065:24:25"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9222,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9220,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9211,"src":"34103:10:25","typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":9221,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9208,"src":"34117:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"34103:19:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9229,"nodeType":"IfStatement","src":"34099:96:25","trueBody":{"id":9228,"nodeType":"Block","src":"34124:71:25","statements":[{"errorCall":{"arguments":[{"hexValue":"38","id":9224,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"34175:1:25","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},{"id":9225,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9208,"src":"34178:5:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":9223,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7529,"src":"34145:29:25","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":9226,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34145:39:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9227,"nodeType":"RevertStatement","src":"34138:46:25"}]}}]},"documentation":{"id":9206,"nodeType":"StructuredDocumentation","src":"33678:302:25","text":" @dev Returns the downcasted int8 from int256, reverting on\n overflow (when the input is less than smallest int8 or\n greater than largest int8).\n Counterpart to Solidity's `int8` operator.\n Requirements:\n - input must fit into 8 bits"},"id":9231,"implemented":true,"kind":"function","modifiers":[],"name":"toInt8","nameLocation":"33994:6:25","nodeType":"FunctionDefinition","parameters":{"id":9209,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9208,"mutability":"mutable","name":"value","nameLocation":"34008:5:25","nodeType":"VariableDeclaration","scope":9231,"src":"34001:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":9207,"name":"int256","nodeType":"ElementaryTypeName","src":"34001:6:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"34000:14:25"},"returnParameters":{"id":9212,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9211,"mutability":"mutable","name":"downcasted","nameLocation":"34043:10:25","nodeType":"VariableDeclaration","scope":9231,"src":"34038:15:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"},"typeName":{"id":9210,"name":"int8","nodeType":"ElementaryTypeName","src":"34038:4:25","typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"}},"visibility":"internal"}],"src":"34037:17:25"},"scope":9272,"src":"33985:216:25","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9260,"nodeType":"Block","src":"34441:250:25","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9248,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9239,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9234,"src":"34554:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"arguments":[{"expression":{"arguments":[{"id":9244,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"34575:6:25","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":9243,"name":"int256","nodeType":"ElementaryTypeName","src":"34575:6:25","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"}],"id":9242,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967269,"src":"34570:4:25","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":9245,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34570:12:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_int256","typeString":"type(int256)"}},"id":9246,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"34583:3:25","memberName":"max","nodeType":"MemberAccess","src":"34570:16:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":9241,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"34562:7:25","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":9240,"name":"uint256","nodeType":"ElementaryTypeName","src":"34562:7:25","typeDescriptions":{}}},"id":9247,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34562:25:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34554:33:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9254,"nodeType":"IfStatement","src":"34550:105:25","trueBody":{"id":9253,"nodeType":"Block","src":"34589:66:25","statements":[{"errorCall":{"arguments":[{"id":9250,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9234,"src":"34638:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9249,"name":"SafeCastOverflowedUintToInt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7534,"src":"34610:27:25","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$returns$_t_error_$","typeString":"function (uint256) pure returns (error)"}},"id":9251,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34610:34:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9252,"nodeType":"RevertStatement","src":"34603:41:25"}]}},{"expression":{"arguments":[{"id":9257,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9234,"src":"34678:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9256,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"34671:6:25","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":9255,"name":"int256","nodeType":"ElementaryTypeName","src":"34671:6:25","typeDescriptions":{}}},"id":9258,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34671:13:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":9238,"id":9259,"nodeType":"Return","src":"34664:20:25"}]},"documentation":{"id":9232,"nodeType":"StructuredDocumentation","src":"34207:165:25","text":" @dev Converts an unsigned uint256 into a signed int256.\n Requirements:\n - input must be less than or equal to maxInt256."},"id":9261,"implemented":true,"kind":"function","modifiers":[],"name":"toInt256","nameLocation":"34386:8:25","nodeType":"FunctionDefinition","parameters":{"id":9235,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9234,"mutability":"mutable","name":"value","nameLocation":"34403:5:25","nodeType":"VariableDeclaration","scope":9261,"src":"34395:13:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9233,"name":"uint256","nodeType":"ElementaryTypeName","src":"34395:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"34394:15:25"},"returnParameters":{"id":9238,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9237,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9261,"src":"34433:6:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":9236,"name":"int256","nodeType":"ElementaryTypeName","src":"34433:6:25","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"34432:8:25"},"scope":9272,"src":"34377:314:25","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9270,"nodeType":"Block","src":"34850:87:25","statements":[{"AST":{"nativeSrc":"34885:46:25","nodeType":"YulBlock","src":"34885:46:25","statements":[{"nativeSrc":"34899:22:25","nodeType":"YulAssignment","src":"34899:22:25","value":{"arguments":[{"arguments":[{"name":"b","nativeSrc":"34918:1:25","nodeType":"YulIdentifier","src":"34918:1:25"}],"functionName":{"name":"iszero","nativeSrc":"34911:6:25","nodeType":"YulIdentifier","src":"34911:6:25"},"nativeSrc":"34911:9:25","nodeType":"YulFunctionCall","src":"34911:9:25"}],"functionName":{"name":"iszero","nativeSrc":"34904:6:25","nodeType":"YulIdentifier","src":"34904:6:25"},"nativeSrc":"34904:17:25","nodeType":"YulFunctionCall","src":"34904:17:25"},"variableNames":[{"name":"u","nativeSrc":"34899:1:25","nodeType":"YulIdentifier","src":"34899:1:25"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":9264,"isOffset":false,"isSlot":false,"src":"34918:1:25","valueSize":1},{"declaration":9267,"isOffset":false,"isSlot":false,"src":"34899:1:25","valueSize":1}],"flags":["memory-safe"],"id":9269,"nodeType":"InlineAssembly","src":"34860:71:25"}]},"documentation":{"id":9262,"nodeType":"StructuredDocumentation","src":"34697:90:25","text":" @dev Cast a boolean (false or true) to a uint256 (0 or 1) with no jump."},"id":9271,"implemented":true,"kind":"function","modifiers":[],"name":"toUint","nameLocation":"34801:6:25","nodeType":"FunctionDefinition","parameters":{"id":9265,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9264,"mutability":"mutable","name":"b","nameLocation":"34813:1:25","nodeType":"VariableDeclaration","scope":9271,"src":"34808:6:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9263,"name":"bool","nodeType":"ElementaryTypeName","src":"34808:4:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"34807:8:25"},"returnParameters":{"id":9268,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9267,"mutability":"mutable","name":"u","nameLocation":"34847:1:25","nodeType":"VariableDeclaration","scope":9271,"src":"34839:9:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9266,"name":"uint256","nodeType":"ElementaryTypeName","src":"34839:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"34838:11:25"},"scope":9272,"src":"34792:145:25","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":9273,"src":"769:34170:25","usedErrors":[7517,7522,7529,7534],"usedEvents":[]}],"src":"192:34748:25"},"id":25},"@openzeppelin/contracts/utils/math/SignedMath.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/math/SignedMath.sol","exportedSymbols":{"SafeCast":[9272],"SignedMath":[9416]},"id":9417,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":9274,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"109:24:26"},{"absolutePath":"@openzeppelin/contracts/utils/math/SafeCast.sol","file":"./SafeCast.sol","id":9276,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9417,"sourceUnit":9273,"src":"135:40:26","symbolAliases":[{"foreign":{"id":9275,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9272,"src":"143:8:26","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"SignedMath","contractDependencies":[],"contractKind":"library","documentation":{"id":9277,"nodeType":"StructuredDocumentation","src":"177:80:26","text":" @dev Standard signed math utilities missing in the Solidity language."},"fullyImplemented":true,"id":9416,"linearizedBaseContracts":[9416],"name":"SignedMath","nameLocation":"266:10:26","nodeType":"ContractDefinition","nodes":[{"body":{"id":9306,"nodeType":"Block","src":"746:215:26","statements":[{"id":9305,"nodeType":"UncheckedBlock","src":"756:199:26","statements":[{"expression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9303,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9289,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9284,"src":"894:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"^","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9301,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9292,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9290,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9282,"src":"900:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"^","rightExpression":{"id":9291,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9284,"src":"904:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"900:5:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":9293,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"899:7:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"arguments":[{"arguments":[{"id":9298,"name":"condition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9280,"src":"932:9:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":9296,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9272,"src":"916:8:26","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$9272_$","typeString":"type(library SafeCast)"}},"id":9297,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"925:6:26","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":9271,"src":"916:15:26","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":9299,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"916:26:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9295,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"909:6:26","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":9294,"name":"int256","nodeType":"ElementaryTypeName","src":"909:6:26","typeDescriptions":{}}},"id":9300,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"909:34:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"899:44:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":9302,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"898:46:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"894:50:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":9288,"id":9304,"nodeType":"Return","src":"887:57:26"}]}]},"documentation":{"id":9278,"nodeType":"StructuredDocumentation","src":"283:374:26","text":" @dev Branchless ternary evaluation for `a ? b : c`. Gas costs are constant.\n IMPORTANT: This function may reduce bytecode size and consume less gas when used standalone.\n However, the compiler may optimize Solidity ternary operations (i.e. `a ? b : c`) to only compute\n one branch when needed, making this function more expensive."},"id":9307,"implemented":true,"kind":"function","modifiers":[],"name":"ternary","nameLocation":"671:7:26","nodeType":"FunctionDefinition","parameters":{"id":9285,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9280,"mutability":"mutable","name":"condition","nameLocation":"684:9:26","nodeType":"VariableDeclaration","scope":9307,"src":"679:14:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9279,"name":"bool","nodeType":"ElementaryTypeName","src":"679:4:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":9282,"mutability":"mutable","name":"a","nameLocation":"702:1:26","nodeType":"VariableDeclaration","scope":9307,"src":"695:8:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":9281,"name":"int256","nodeType":"ElementaryTypeName","src":"695:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},{"constant":false,"id":9284,"mutability":"mutable","name":"b","nameLocation":"712:1:26","nodeType":"VariableDeclaration","scope":9307,"src":"705:8:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":9283,"name":"int256","nodeType":"ElementaryTypeName","src":"705:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"678:36:26"},"returnParameters":{"id":9288,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9287,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9307,"src":"738:6:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":9286,"name":"int256","nodeType":"ElementaryTypeName","src":"738:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"737:8:26"},"scope":9416,"src":"662:299:26","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9325,"nodeType":"Block","src":"1102:44:26","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9320,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9318,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9310,"src":"1127:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":9319,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9312,"src":"1131:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"1127:5:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":9321,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9310,"src":"1134:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},{"id":9322,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9312,"src":"1137:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_int256","typeString":"int256"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":9317,"name":"ternary","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9307,"src":"1119:7:26","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$_t_int256_$_t_int256_$returns$_t_int256_$","typeString":"function (bool,int256,int256) pure returns (int256)"}},"id":9323,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1119:20:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":9316,"id":9324,"nodeType":"Return","src":"1112:27:26"}]},"documentation":{"id":9308,"nodeType":"StructuredDocumentation","src":"967:66:26","text":" @dev Returns the largest of two signed numbers."},"id":9326,"implemented":true,"kind":"function","modifiers":[],"name":"max","nameLocation":"1047:3:26","nodeType":"FunctionDefinition","parameters":{"id":9313,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9310,"mutability":"mutable","name":"a","nameLocation":"1058:1:26","nodeType":"VariableDeclaration","scope":9326,"src":"1051:8:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":9309,"name":"int256","nodeType":"ElementaryTypeName","src":"1051:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},{"constant":false,"id":9312,"mutability":"mutable","name":"b","nameLocation":"1068:1:26","nodeType":"VariableDeclaration","scope":9326,"src":"1061:8:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":9311,"name":"int256","nodeType":"ElementaryTypeName","src":"1061:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"1050:20:26"},"returnParameters":{"id":9316,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9315,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9326,"src":"1094:6:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":9314,"name":"int256","nodeType":"ElementaryTypeName","src":"1094:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"1093:8:26"},"scope":9416,"src":"1038:108:26","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9344,"nodeType":"Block","src":"1288:44:26","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9339,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9337,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9329,"src":"1313:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":9338,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9331,"src":"1317:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"1313:5:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":9340,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9329,"src":"1320:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},{"id":9341,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9331,"src":"1323:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_int256","typeString":"int256"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":9336,"name":"ternary","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9307,"src":"1305:7:26","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$_t_int256_$_t_int256_$returns$_t_int256_$","typeString":"function (bool,int256,int256) pure returns (int256)"}},"id":9342,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1305:20:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":9335,"id":9343,"nodeType":"Return","src":"1298:27:26"}]},"documentation":{"id":9327,"nodeType":"StructuredDocumentation","src":"1152:67:26","text":" @dev Returns the smallest of two signed numbers."},"id":9345,"implemented":true,"kind":"function","modifiers":[],"name":"min","nameLocation":"1233:3:26","nodeType":"FunctionDefinition","parameters":{"id":9332,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9329,"mutability":"mutable","name":"a","nameLocation":"1244:1:26","nodeType":"VariableDeclaration","scope":9345,"src":"1237:8:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":9328,"name":"int256","nodeType":"ElementaryTypeName","src":"1237:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},{"constant":false,"id":9331,"mutability":"mutable","name":"b","nameLocation":"1254:1:26","nodeType":"VariableDeclaration","scope":9345,"src":"1247:8:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":9330,"name":"int256","nodeType":"ElementaryTypeName","src":"1247:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"1236:20:26"},"returnParameters":{"id":9335,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9334,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9345,"src":"1280:6:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":9333,"name":"int256","nodeType":"ElementaryTypeName","src":"1280:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"1279:8:26"},"scope":9416,"src":"1224:108:26","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9388,"nodeType":"Block","src":"1537:162:26","statements":[{"assignments":[9356],"declarations":[{"constant":false,"id":9356,"mutability":"mutable","name":"x","nameLocation":"1606:1:26","nodeType":"VariableDeclaration","scope":9388,"src":"1599:8:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":9355,"name":"int256","nodeType":"ElementaryTypeName","src":"1599:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":9369,"initialValue":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9368,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9359,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9357,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9348,"src":"1611:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":9358,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9350,"src":"1615:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"1611:5:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":9360,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1610:7:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9366,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9363,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9361,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9348,"src":"1622:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"^","rightExpression":{"id":9362,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9350,"src":"1626:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"1622:5:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":9364,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1621:7:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":9365,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1632:1:26","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1621:12:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":9367,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1620:14:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"1610:24:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"1599:35:26"},{"expression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9386,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9370,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9356,"src":"1651:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9384,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9378,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":9375,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9356,"src":"1671:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":9374,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1663:7:26","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":9373,"name":"uint256","nodeType":"ElementaryTypeName","src":"1663:7:26","typeDescriptions":{}}},"id":9376,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1663:10:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"323535","id":9377,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1677:3:26","typeDescriptions":{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"},"value":"255"},"src":"1663:17:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9372,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1656:6:26","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":9371,"name":"int256","nodeType":"ElementaryTypeName","src":"1656:6:26","typeDescriptions":{}}},"id":9379,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1656:25:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9382,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9380,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9348,"src":"1685:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"^","rightExpression":{"id":9381,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9350,"src":"1689:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"1685:5:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":9383,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1684:7:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"1656:35:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":9385,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1655:37:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"1651:41:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":9354,"id":9387,"nodeType":"Return","src":"1644:48:26"}]},"documentation":{"id":9346,"nodeType":"StructuredDocumentation","src":"1338:126:26","text":" @dev Returns the average of two signed numbers without overflow.\n The result is rounded towards zero."},"id":9389,"implemented":true,"kind":"function","modifiers":[],"name":"average","nameLocation":"1478:7:26","nodeType":"FunctionDefinition","parameters":{"id":9351,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9348,"mutability":"mutable","name":"a","nameLocation":"1493:1:26","nodeType":"VariableDeclaration","scope":9389,"src":"1486:8:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":9347,"name":"int256","nodeType":"ElementaryTypeName","src":"1486:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},{"constant":false,"id":9350,"mutability":"mutable","name":"b","nameLocation":"1503:1:26","nodeType":"VariableDeclaration","scope":9389,"src":"1496:8:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":9349,"name":"int256","nodeType":"ElementaryTypeName","src":"1496:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"1485:20:26"},"returnParameters":{"id":9354,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9353,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9389,"src":"1529:6:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":9352,"name":"int256","nodeType":"ElementaryTypeName","src":"1529:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"1528:8:26"},"scope":9416,"src":"1469:230:26","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9414,"nodeType":"Block","src":"1843:767:26","statements":[{"id":9413,"nodeType":"UncheckedBlock","src":"1853:751:26","statements":[{"assignments":[9398],"declarations":[{"constant":false,"id":9398,"mutability":"mutable","name":"mask","nameLocation":"2424:4:26","nodeType":"VariableDeclaration","scope":9413,"src":"2417:11:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":9397,"name":"int256","nodeType":"ElementaryTypeName","src":"2417:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":9402,"initialValue":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9401,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9399,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9392,"src":"2431:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"323535","id":9400,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2436:3:26","typeDescriptions":{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"},"value":"255"},"src":"2431:8:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"2417:22:26"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9410,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9407,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9405,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9392,"src":"2576:1:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":9406,"name":"mask","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9398,"src":"2580:4:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"2576:8:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":9408,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2575:10:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"^","rightExpression":{"id":9409,"name":"mask","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9398,"src":"2588:4:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"2575:17:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":9404,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2567:7:26","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":9403,"name":"uint256","nodeType":"ElementaryTypeName","src":"2567:7:26","typeDescriptions":{}}},"id":9411,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2567:26:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":9396,"id":9412,"nodeType":"Return","src":"2560:33:26"}]}]},"documentation":{"id":9390,"nodeType":"StructuredDocumentation","src":"1705:78:26","text":" @dev Returns the absolute unsigned value of a signed value."},"id":9415,"implemented":true,"kind":"function","modifiers":[],"name":"abs","nameLocation":"1797:3:26","nodeType":"FunctionDefinition","parameters":{"id":9393,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9392,"mutability":"mutable","name":"n","nameLocation":"1808:1:26","nodeType":"VariableDeclaration","scope":9415,"src":"1801:8:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":9391,"name":"int256","nodeType":"ElementaryTypeName","src":"1801:6:26","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"1800:10:26"},"returnParameters":{"id":9396,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9395,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9415,"src":"1834:7:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9394,"name":"uint256","nodeType":"ElementaryTypeName","src":"1834:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1833:9:26"},"scope":9416,"src":"1788:822:26","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":9417,"src":"258:2354:26","usedErrors":[],"usedEvents":[]}],"src":"109:2504:26"},"id":26},"contracts/TricksforBoosterNFT.sol":{"ast":{"absolutePath":"contracts/TricksforBoosterNFT.sol","exportedSymbols":{"AccessControl":[295],"AccessControlDefaultAdminRules":[1331],"Context":[3907],"ERC165":[5838],"ERC2981":[3076],"ERC721":[2569],"ERC721Utils":[2809],"IAccessControl":[378],"IAccessControlDefaultAdminRules":[1430],"IERC165":[5850],"IERC2981":[1450],"IERC5313":[1460],"IERC721":[2686],"IERC721Errors":[1550],"IERC721Metadata":[2732],"Math":[7507],"Pausable":[4067],"SafeCast":[9272],"Strings":[5814],"TricksforBoosterNFT":[9702]},"id":9703,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":9418,"literals":["solidity","^","0.8",".26"],"nodeType":"PragmaDirective","src":"32:24:27"},{"absolutePath":"@openzeppelin/contracts/token/ERC721/ERC721.sol","file":"@openzeppelin/contracts/token/ERC721/ERC721.sol","id":9419,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9703,"sourceUnit":2570,"src":"58:57:27","symbolAliases":[],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/common/ERC2981.sol","file":"@openzeppelin/contracts/token/common/ERC2981.sol","id":9420,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9703,"sourceUnit":3077,"src":"116:58:27","symbolAliases":[],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/access/extensions/AccessControlDefaultAdminRules.sol","file":"@openzeppelin/contracts/access/extensions/AccessControlDefaultAdminRules.sol","id":9421,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9703,"sourceUnit":1332,"src":"175:86:27","symbolAliases":[],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/Pausable.sol","file":"@openzeppelin/contracts/utils/Pausable.sol","id":9422,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9703,"sourceUnit":4068,"src":"262:52:27","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":9424,"name":"ERC721","nameLocations":["710:6:27"],"nodeType":"IdentifierPath","referencedDeclaration":2569,"src":"710:6:27"},"id":9425,"nodeType":"InheritanceSpecifier","src":"710:6:27"},{"baseName":{"id":9426,"name":"ERC2981","nameLocations":["718:7:27"],"nodeType":"IdentifierPath","referencedDeclaration":3076,"src":"718:7:27"},"id":9427,"nodeType":"InheritanceSpecifier","src":"718:7:27"},{"baseName":{"id":9428,"name":"AccessControlDefaultAdminRules","nameLocations":["727:30:27"],"nodeType":"IdentifierPath","referencedDeclaration":1331,"src":"727:30:27"},"id":9429,"nodeType":"InheritanceSpecifier","src":"727:30:27"},{"baseName":{"id":9430,"name":"Pausable","nameLocations":["759:8:27"],"nodeType":"IdentifierPath","referencedDeclaration":4067,"src":"759:8:27"},"id":9431,"nodeType":"InheritanceSpecifier","src":"759:8:27"}],"canonicalName":"TricksforBoosterNFT","contractDependencies":[],"contractKind":"contract","documentation":{"id":9423,"nodeType":"StructuredDocumentation","src":"316:362:27","text":"@title TricksforBoosterNFT\n @notice ERC-721 NFT collection for Tricksfor Booster items.\n OpenSea-compatible: supports tokenURI, contractURI, and ERC-2981 royalties.\n Minting is role-gated (MINTER_ROLE) and can be paused by the default admin.\n @dev Does not include staking logic — staking is handled by TricksforBoosterStaking."},"fullyImplemented":true,"id":9702,"linearizedBaseContracts":[9702,4067,1331,295,3076,2569,1550,2732,2686,5838,1450,5850,1460,1430,378,3907],"name":"TricksforBoosterNFT","nameLocation":"687:19:27","nodeType":"ContractDefinition","nodes":[{"constant":true,"documentation":{"id":9432,"nodeType":"StructuredDocumentation","src":"950:61:27","text":"@notice Role that authorizes an account to call safeMint."},"functionSelector":"d5391393","id":9437,"mutability":"constant","name":"MINTER_ROLE","nameLocation":"1040:11:27","nodeType":"VariableDeclaration","scope":9702,"src":"1016:62:27","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9433,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1016:7:27","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"4d494e5445525f524f4c45","id":9435,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1064:13:27","typeDescriptions":{"typeIdentifier":"t_stringliteral_9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6","typeString":"literal_string \"MINTER_ROLE\""},"value":"MINTER_ROLE"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6","typeString":"literal_string \"MINTER_ROLE\""}],"id":9434,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967288,"src":"1054:9:27","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":9436,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1054:24:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"public"},{"documentation":{"id":9438,"nodeType":"StructuredDocumentation","src":"1262:71:27","text":"@notice Zero address supplied where a non-zero address is required."},"errorSelector":"d92e233d","id":9440,"name":"ZeroAddress","nameLocation":"1344:11:27","nodeType":"ErrorDefinition","parameters":{"id":9439,"nodeType":"ParameterList","parameters":[],"src":"1355:2:27"},"src":"1338:20:27"},{"anonymous":false,"eventSelector":"309b29ded109b9e28fb9885757b3e0096eb75c51d23aa4635d68bcd569f6adc1","id":9446,"name":"BaseURIUpdated","nameLocation":"1547:14:27","nodeType":"EventDefinition","parameters":{"id":9445,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9442,"indexed":false,"mutability":"mutable","name":"previousURI","nameLocation":"1569:11:27","nodeType":"VariableDeclaration","scope":9446,"src":"1562:18:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":9441,"name":"string","nodeType":"ElementaryTypeName","src":"1562:6:27","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":9444,"indexed":false,"mutability":"mutable","name":"newURI","nameLocation":"1589:6:27","nodeType":"VariableDeclaration","scope":9446,"src":"1582:13:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":9443,"name":"string","nodeType":"ElementaryTypeName","src":"1582:6:27","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1561:35:27"},"src":"1541:56:27"},{"anonymous":false,"eventSelector":"c9c7c3fe08b88b4df9d4d47ef47d2c43d55c025a0ba88ca442580ed9e7348a16","id":9452,"name":"ContractURIUpdated","nameLocation":"1608:18:27","nodeType":"EventDefinition","parameters":{"id":9451,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9448,"indexed":false,"mutability":"mutable","name":"previousURI","nameLocation":"1634:11:27","nodeType":"VariableDeclaration","scope":9452,"src":"1627:18:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":9447,"name":"string","nodeType":"ElementaryTypeName","src":"1627:6:27","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":9450,"indexed":false,"mutability":"mutable","name":"newURI","nameLocation":"1654:6:27","nodeType":"VariableDeclaration","scope":9452,"src":"1647:13:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":9449,"name":"string","nodeType":"ElementaryTypeName","src":"1647:6:27","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1626:35:27"},"src":"1602:60:27"},{"anonymous":false,"eventSelector":"e12d7d5bdb8218a22277dca8f854dd4573a1cea3d3e4808dc567df9eb1c14bf4","id":9458,"name":"DefaultRoyaltyUpdated","nameLocation":"1673:21:27","nodeType":"EventDefinition","parameters":{"id":9457,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9454,"indexed":true,"mutability":"mutable","name":"receiver","nameLocation":"1711:8:27","nodeType":"VariableDeclaration","scope":9458,"src":"1695:24:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9453,"name":"address","nodeType":"ElementaryTypeName","src":"1695:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9456,"indexed":false,"mutability":"mutable","name":"feeBasisPoints","nameLocation":"1728:14:27","nodeType":"VariableDeclaration","scope":9458,"src":"1721:21:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"},"typeName":{"id":9455,"name":"uint96","nodeType":"ElementaryTypeName","src":"1721:6:27","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"visibility":"internal"}],"src":"1694:49:27"},"src":"1667:77:27"},{"constant":false,"id":9460,"mutability":"mutable","name":"_baseTokenURI","nameLocation":"1941:13:27","nodeType":"VariableDeclaration","scope":9702,"src":"1926:28:27","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":9459,"name":"string","nodeType":"ElementaryTypeName","src":"1926:6:27","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"private"},{"constant":false,"id":9462,"mutability":"mutable","name":"_contractMetadataURI","nameLocation":"1975:20:27","nodeType":"VariableDeclaration","scope":9702,"src":"1960:35:27","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":9461,"name":"string","nodeType":"ElementaryTypeName","src":"1960:6:27","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"private"},{"body":{"id":9535,"nodeType":"Block","src":"3277:366:27","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":9511,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":9504,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":9497,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9492,"name":"royaltyReceiver_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9473,"src":"3291:16:27","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":9495,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3319:1:27","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":9494,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3311:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9493,"name":"address","nodeType":"ElementaryTypeName","src":"3311:7:27","typeDescriptions":{}}},"id":9496,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3311:10:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3291:30:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":9503,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9498,"name":"initialAdmin_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9477,"src":"3325:13:27","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":9501,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3350:1:27","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":9500,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3342:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9499,"name":"address","nodeType":"ElementaryTypeName","src":"3342:7:27","typeDescriptions":{}}},"id":9502,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3342:10:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3325:27:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"3291:61:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":9510,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9505,"name":"initialMinter_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9479,"src":"3356:14:27","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":9508,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3382:1:27","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":9507,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3374:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9506,"name":"address","nodeType":"ElementaryTypeName","src":"3374:7:27","typeDescriptions":{}}},"id":9509,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3374:10:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3356:28:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"3291:93:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9516,"nodeType":"IfStatement","src":"3287:144:27","trueBody":{"id":9515,"nodeType":"Block","src":"3386:45:27","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":9512,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9440,"src":"3407:11:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":9513,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3407:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9514,"nodeType":"RevertStatement","src":"3400:20:27"}]}},{"expression":{"id":9519,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9517,"name":"_baseTokenURI","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9460,"src":"3440:13:27","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":9518,"name":"baseURI_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9469,"src":"3456:8:27","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"3440:24:27","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":9520,"nodeType":"ExpressionStatement","src":"3440:24:27"},{"expression":{"id":9523,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9521,"name":"_contractMetadataURI","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9462,"src":"3474:20:27","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":9522,"name":"contractMetadataURI_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9471,"src":"3497:20:27","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"3474:43:27","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":9524,"nodeType":"ExpressionStatement","src":"3474:43:27"},{"expression":{"arguments":[{"id":9526,"name":"royaltyReceiver_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9473,"src":"3546:16:27","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9527,"name":"royaltyFeeBasisPoints_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9475,"src":"3564:22:27","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint96","typeString":"uint96"}],"id":9525,"name":"_setDefaultRoyalty","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3003,"src":"3527:18:27","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint96_$returns$__$","typeString":"function (address,uint96)"}},"id":9528,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3527:60:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9529,"nodeType":"ExpressionStatement","src":"3527:60:27"},{"expression":{"arguments":[{"id":9531,"name":"MINTER_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9437,"src":"3608:11:27","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":9532,"name":"initialMinter_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9479,"src":"3621:14:27","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":9530,"name":"_grantRole","nodeType":"Identifier","overloadedDeclarations":[865],"referencedDeclaration":865,"src":"3597:10:27","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) returns (bool)"}},"id":9533,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3597:39:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9534,"nodeType":"ExpressionStatement","src":"3597:39:27"}]},"documentation":{"id":9463,"nodeType":"StructuredDocumentation","src":"2184:674:27","text":"@param name_ ERC-721 collection name\n @param symbol_ ERC-721 collection symbol\n @param baseURI_ Base URI for token metadata (appended with tokenId)\n @param contractMetadataURI_ URI for OpenSea collection-level metadata\n @param royaltyReceiver_ Address that receives royalty payments\n @param royaltyFeeBasisPoints_ Royalty fee in basis points (10 000 = 100%)\n @param initialAdmin_ Initial default administrator\n @param initialMinter_ Initial account authorized to mint\n @param defaultAdminDelay_ Delay in seconds for default-admin transfers"},"id":9536,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":9484,"name":"name_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9465,"src":"3195:5:27","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":9485,"name":"symbol_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9467,"src":"3202:7:27","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"id":9486,"kind":"baseConstructorSpecifier","modifierName":{"id":9483,"name":"ERC721","nameLocations":["3188:6:27"],"nodeType":"IdentifierPath","referencedDeclaration":2569,"src":"3188:6:27"},"nodeType":"ModifierInvocation","src":"3188:22:27"},{"arguments":[{"id":9488,"name":"defaultAdminDelay_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9481,"src":"3242:18:27","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},{"id":9489,"name":"initialAdmin_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9477,"src":"3262:13:27","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":9490,"kind":"baseConstructorSpecifier","modifierName":{"id":9487,"name":"AccessControlDefaultAdminRules","nameLocations":["3211:30:27"],"nodeType":"IdentifierPath","referencedDeclaration":1331,"src":"3211:30:27"},"nodeType":"ModifierInvocation","src":"3211:65:27"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":9482,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9465,"mutability":"mutable","name":"name_","nameLocation":"2898:5:27","nodeType":"VariableDeclaration","scope":9536,"src":"2884:19:27","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":9464,"name":"string","nodeType":"ElementaryTypeName","src":"2884:6:27","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":9467,"mutability":"mutable","name":"symbol_","nameLocation":"2927:7:27","nodeType":"VariableDeclaration","scope":9536,"src":"2913:21:27","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":9466,"name":"string","nodeType":"ElementaryTypeName","src":"2913:6:27","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":9469,"mutability":"mutable","name":"baseURI_","nameLocation":"2958:8:27","nodeType":"VariableDeclaration","scope":9536,"src":"2944:22:27","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":9468,"name":"string","nodeType":"ElementaryTypeName","src":"2944:6:27","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":9471,"mutability":"mutable","name":"contractMetadataURI_","nameLocation":"2990:20:27","nodeType":"VariableDeclaration","scope":9536,"src":"2976:34:27","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":9470,"name":"string","nodeType":"ElementaryTypeName","src":"2976:6:27","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":9473,"mutability":"mutable","name":"royaltyReceiver_","nameLocation":"3028:16:27","nodeType":"VariableDeclaration","scope":9536,"src":"3020:24:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9472,"name":"address","nodeType":"ElementaryTypeName","src":"3020:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9475,"mutability":"mutable","name":"royaltyFeeBasisPoints_","nameLocation":"3061:22:27","nodeType":"VariableDeclaration","scope":9536,"src":"3054:29:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"},"typeName":{"id":9474,"name":"uint96","nodeType":"ElementaryTypeName","src":"3054:6:27","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"visibility":"internal"},{"constant":false,"id":9477,"mutability":"mutable","name":"initialAdmin_","nameLocation":"3101:13:27","nodeType":"VariableDeclaration","scope":9536,"src":"3093:21:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9476,"name":"address","nodeType":"ElementaryTypeName","src":"3093:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9479,"mutability":"mutable","name":"initialMinter_","nameLocation":"3132:14:27","nodeType":"VariableDeclaration","scope":9536,"src":"3124:22:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9478,"name":"address","nodeType":"ElementaryTypeName","src":"3124:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9481,"mutability":"mutable","name":"defaultAdminDelay_","nameLocation":"3163:18:27","nodeType":"VariableDeclaration","scope":9536,"src":"3156:25:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":9480,"name":"uint48","nodeType":"ElementaryTypeName","src":"3156:6:27","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"src":"2874:313:27"},"returnParameters":{"id":9491,"nodeType":"ParameterList","parameters":[],"src":"3277:0:27"},"scope":9702,"src":"2863:780:27","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":9554,"nodeType":"Block","src":"4192:39:27","statements":[{"expression":{"arguments":[{"id":9550,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9539,"src":"4212:2:27","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9551,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9541,"src":"4216:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9549,"name":"_safeMint","nodeType":"Identifier","overloadedDeclarations":[2232,2262],"referencedDeclaration":2232,"src":"4202:9:27","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":9552,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4202:22:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9553,"nodeType":"ExpressionStatement","src":"4202:22:27"}]},"documentation":{"id":9537,"nodeType":"StructuredDocumentation","src":"3827:268:27","text":"@notice Mints a token with the given ID to the specified address.\n The caller must hold MINTER_ROLE. Reverts when paused.\n @param to Recipient address for the minted token.\n @param tokenId Token ID to mint. Must not already exist."},"functionSelector":"a1448194","id":9555,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":9544,"name":"MINTER_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9437,"src":"4165:11:27","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":9545,"kind":"modifierInvocation","modifierName":{"id":9543,"name":"onlyRole","nameLocations":["4156:8:27"],"nodeType":"IdentifierPath","referencedDeclaration":40,"src":"4156:8:27"},"nodeType":"ModifierInvocation","src":"4156:21:27"},{"id":9547,"kind":"modifierInvocation","modifierName":{"id":9546,"name":"whenNotPaused","nameLocations":["4178:13:27"],"nodeType":"IdentifierPath","referencedDeclaration":3992,"src":"4178:13:27"},"nodeType":"ModifierInvocation","src":"4178:13:27"}],"name":"safeMint","nameLocation":"4109:8:27","nodeType":"FunctionDefinition","parameters":{"id":9542,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9539,"mutability":"mutable","name":"to","nameLocation":"4126:2:27","nodeType":"VariableDeclaration","scope":9555,"src":"4118:10:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9538,"name":"address","nodeType":"ElementaryTypeName","src":"4118:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9541,"mutability":"mutable","name":"tokenId","nameLocation":"4138:7:27","nodeType":"VariableDeclaration","scope":9555,"src":"4130:15:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9540,"name":"uint256","nodeType":"ElementaryTypeName","src":"4130:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4117:29:27"},"returnParameters":{"id":9548,"nodeType":"ParameterList","parameters":[],"src":"4192:0:27"},"scope":9702,"src":"4100:131:27","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":9577,"nodeType":"Block","src":"4636:144:27","statements":[{"assignments":[9565],"declarations":[{"constant":false,"id":9565,"mutability":"mutable","name":"previousURI","nameLocation":"4660:11:27","nodeType":"VariableDeclaration","scope":9577,"src":"4646:25:27","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":9564,"name":"string","nodeType":"ElementaryTypeName","src":"4646:6:27","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"id":9567,"initialValue":{"id":9566,"name":"_baseTokenURI","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9460,"src":"4674:13:27","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"VariableDeclarationStatement","src":"4646:41:27"},{"expression":{"id":9570,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9568,"name":"_baseTokenURI","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9460,"src":"4697:13:27","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":9569,"name":"baseURI_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9558,"src":"4713:8:27","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}},"src":"4697:24:27","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":9571,"nodeType":"ExpressionStatement","src":"4697:24:27"},{"eventCall":{"arguments":[{"id":9573,"name":"previousURI","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9565,"src":"4751:11:27","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":9574,"name":"baseURI_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9558,"src":"4764:8:27","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}],"id":9572,"name":"BaseURIUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9446,"src":"4736:14:27","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory,string memory)"}},"id":9575,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4736:37:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9576,"nodeType":"EmitStatement","src":"4731:42:27"}]},"documentation":{"id":9556,"nodeType":"StructuredDocumentation","src":"4427:120:27","text":"@notice Updates the base URI used to construct per-token metadata URIs.\n @param baseURI_ New base URI string."},"functionSelector":"55f804b3","id":9578,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":9561,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29,"src":"4616:18:27","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":9562,"kind":"modifierInvocation","modifierName":{"id":9560,"name":"onlyRole","nameLocations":["4607:8:27"],"nodeType":"IdentifierPath","referencedDeclaration":40,"src":"4607:8:27"},"nodeType":"ModifierInvocation","src":"4607:28:27"}],"name":"setBaseURI","nameLocation":"4561:10:27","nodeType":"FunctionDefinition","parameters":{"id":9559,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9558,"mutability":"mutable","name":"baseURI_","nameLocation":"4588:8:27","nodeType":"VariableDeclaration","scope":9578,"src":"4572:24:27","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":9557,"name":"string","nodeType":"ElementaryTypeName","src":"4572:6:27","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"4571:26:27"},"returnParameters":{"id":9563,"nodeType":"ParameterList","parameters":[],"src":"4636:0:27"},"scope":9702,"src":"4552:228:27","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":9600,"nodeType":"Block","src":"5042:186:27","statements":[{"assignments":[9588],"declarations":[{"constant":false,"id":9588,"mutability":"mutable","name":"previousURI","nameLocation":"5066:11:27","nodeType":"VariableDeclaration","scope":9600,"src":"5052:25:27","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":9587,"name":"string","nodeType":"ElementaryTypeName","src":"5052:6:27","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"id":9590,"initialValue":{"id":9589,"name":"_contractMetadataURI","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9462,"src":"5080:20:27","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"VariableDeclarationStatement","src":"5052:48:27"},{"expression":{"id":9593,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9591,"name":"_contractMetadataURI","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9462,"src":"5110:20:27","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":9592,"name":"contractMetadataURI_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9581,"src":"5133:20:27","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}},"src":"5110:43:27","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":9594,"nodeType":"ExpressionStatement","src":"5110:43:27"},{"eventCall":{"arguments":[{"id":9596,"name":"previousURI","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9588,"src":"5187:11:27","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":9597,"name":"contractMetadataURI_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9581,"src":"5200:20:27","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}],"id":9595,"name":"ContractURIUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9452,"src":"5168:18:27","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory,string memory)"}},"id":9598,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5168:53:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9599,"nodeType":"EmitStatement","src":"5163:58:27"}]},"documentation":{"id":9579,"nodeType":"StructuredDocumentation","src":"4786:151:27","text":"@notice Updates the collection-level metadata URI (OpenSea contractURI extension).\n @param contractMetadataURI_ New collection metadata URI."},"functionSelector":"938e3d7b","id":9601,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":9584,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29,"src":"5022:18:27","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":9585,"kind":"modifierInvocation","modifierName":{"id":9583,"name":"onlyRole","nameLocations":["5013:8:27"],"nodeType":"IdentifierPath","referencedDeclaration":40,"src":"5013:8:27"},"nodeType":"ModifierInvocation","src":"5013:28:27"}],"name":"setContractURI","nameLocation":"4951:14:27","nodeType":"FunctionDefinition","parameters":{"id":9582,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9581,"mutability":"mutable","name":"contractMetadataURI_","nameLocation":"4982:20:27","nodeType":"VariableDeclaration","scope":9601,"src":"4966:36:27","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":9580,"name":"string","nodeType":"ElementaryTypeName","src":"4966:6:27","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"4965:38:27"},"returnParameters":{"id":9586,"nodeType":"ParameterList","parameters":[],"src":"5042:0:27"},"scope":9702,"src":"4942:286:27","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":9632,"nodeType":"Block","src":"5559:181:27","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":9617,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9612,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9604,"src":"5573:8:27","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":9615,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5593:1:27","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":9614,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5585:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9613,"name":"address","nodeType":"ElementaryTypeName","src":"5585:7:27","typeDescriptions":{}}},"id":9616,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5585:10:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5573:22:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9621,"nodeType":"IfStatement","src":"5569:48:27","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":9618,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9440,"src":"5604:11:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":9619,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5604:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9620,"nodeType":"RevertStatement","src":"5597:20:27"}},{"expression":{"arguments":[{"id":9623,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9604,"src":"5646:8:27","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9624,"name":"feeBasisPoints","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9606,"src":"5656:14:27","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint96","typeString":"uint96"}],"id":9622,"name":"_setDefaultRoyalty","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3003,"src":"5627:18:27","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint96_$returns$__$","typeString":"function (address,uint96)"}},"id":9625,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5627:44:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9626,"nodeType":"ExpressionStatement","src":"5627:44:27"},{"eventCall":{"arguments":[{"id":9628,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9604,"src":"5708:8:27","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9629,"name":"feeBasisPoints","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9606,"src":"5718:14:27","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint96","typeString":"uint96"}],"id":9627,"name":"DefaultRoyaltyUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9458,"src":"5686:21:27","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint96_$returns$__$","typeString":"function (address,uint96)"}},"id":9630,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5686:47:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9631,"nodeType":"EmitStatement","src":"5681:52:27"}]},"documentation":{"id":9602,"nodeType":"StructuredDocumentation","src":"5234:217:27","text":"@notice Updates the default royalty receiver and fee for all tokens.\n @param receiver Address that receives royalty payments.\n @param feeBasisPoints Royalty fee in basis points (10 000 = 100%)."},"functionSelector":"02fa7c47","id":9633,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":9609,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29,"src":"5539:18:27","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":9610,"kind":"modifierInvocation","modifierName":{"id":9608,"name":"onlyRole","nameLocations":["5530:8:27"],"nodeType":"IdentifierPath","referencedDeclaration":40,"src":"5530:8:27"},"nodeType":"ModifierInvocation","src":"5530:28:27"}],"name":"setRoyaltyInfo","nameLocation":"5465:14:27","nodeType":"FunctionDefinition","parameters":{"id":9607,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9604,"mutability":"mutable","name":"receiver","nameLocation":"5488:8:27","nodeType":"VariableDeclaration","scope":9633,"src":"5480:16:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9603,"name":"address","nodeType":"ElementaryTypeName","src":"5480:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9606,"mutability":"mutable","name":"feeBasisPoints","nameLocation":"5505:14:27","nodeType":"VariableDeclaration","scope":9633,"src":"5498:21:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"},"typeName":{"id":9605,"name":"uint96","nodeType":"ElementaryTypeName","src":"5498:6:27","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"visibility":"internal"}],"src":"5479:41:27"},"returnParameters":{"id":9611,"nodeType":"ParameterList","parameters":[],"src":"5559:0:27"},"scope":9702,"src":"5456:284:27","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":9643,"nodeType":"Block","src":"5860:25:27","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":9640,"name":"_pause","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4050,"src":"5870:6:27","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":9641,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5870:8:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9642,"nodeType":"ExpressionStatement","src":"5870:8:27"}]},"documentation":{"id":9634,"nodeType":"StructuredDocumentation","src":"5746:54:27","text":"@notice Pauses minting. Does not affect transfers."},"functionSelector":"8456cb59","id":9644,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":9637,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29,"src":"5840:18:27","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":9638,"kind":"modifierInvocation","modifierName":{"id":9636,"name":"onlyRole","nameLocations":["5831:8:27"],"nodeType":"IdentifierPath","referencedDeclaration":40,"src":"5831:8:27"},"nodeType":"ModifierInvocation","src":"5831:28:27"}],"name":"pause","nameLocation":"5814:5:27","nodeType":"FunctionDefinition","parameters":{"id":9635,"nodeType":"ParameterList","parameters":[],"src":"5819:2:27"},"returnParameters":{"id":9639,"nodeType":"ParameterList","parameters":[],"src":"5860:0:27"},"scope":9702,"src":"5805:80:27","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":9654,"nodeType":"Block","src":"5982:27:27","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":9651,"name":"_unpause","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4066,"src":"5992:8:27","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":9652,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5992:10:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9653,"nodeType":"ExpressionStatement","src":"5992:10:27"}]},"documentation":{"id":9645,"nodeType":"StructuredDocumentation","src":"5891:29:27","text":"@notice Unpauses minting."},"functionSelector":"3f4ba83a","id":9655,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":9648,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29,"src":"5962:18:27","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":9649,"kind":"modifierInvocation","modifierName":{"id":9647,"name":"onlyRole","nameLocations":["5953:8:27"],"nodeType":"IdentifierPath","referencedDeclaration":40,"src":"5953:8:27"},"nodeType":"ModifierInvocation","src":"5953:28:27"}],"name":"unpause","nameLocation":"5934:7:27","nodeType":"FunctionDefinition","parameters":{"id":9646,"nodeType":"ParameterList","parameters":[],"src":"5941:2:27"},"returnParameters":{"id":9650,"nodeType":"ParameterList","parameters":[],"src":"5982:0:27"},"scope":9702,"src":"5925:84:27","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":9663,"nodeType":"Block","src":"6334:44:27","statements":[{"expression":{"id":9661,"name":"_contractMetadataURI","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9462,"src":"6351:20:27","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"functionReturnParameters":9660,"id":9662,"nodeType":"Return","src":"6344:27:27"}]},"documentation":{"id":9656,"nodeType":"StructuredDocumentation","src":"6194:74:27","text":"@notice Returns the collection-level metadata URI (OpenSea extension)."},"functionSelector":"e8a3d485","id":9664,"implemented":true,"kind":"function","modifiers":[],"name":"contractURI","nameLocation":"6282:11:27","nodeType":"FunctionDefinition","parameters":{"id":9657,"nodeType":"ParameterList","parameters":[],"src":"6293:2:27"},"returnParameters":{"id":9660,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9659,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9664,"src":"6319:13:27","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":9658,"name":"string","nodeType":"ElementaryTypeName","src":"6319:6:27","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"6318:15:27"},"scope":9702,"src":"6273:105:27","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":9672,"nodeType":"Block","src":"6517:37:27","statements":[{"expression":{"id":9670,"name":"_baseTokenURI","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9460,"src":"6534:13:27","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"functionReturnParameters":9669,"id":9671,"nodeType":"Return","src":"6527:20:27"}]},"documentation":{"id":9665,"nodeType":"StructuredDocumentation","src":"6384:71:27","text":"@notice Returns the base URI used to construct token metadata URLs."},"functionSelector":"6c0360eb","id":9673,"implemented":true,"kind":"function","modifiers":[],"name":"baseURI","nameLocation":"6469:7:27","nodeType":"FunctionDefinition","parameters":{"id":9666,"nodeType":"ParameterList","parameters":[],"src":"6476:2:27"},"returnParameters":{"id":9669,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9668,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9673,"src":"6502:13:27","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":9667,"name":"string","nodeType":"ElementaryTypeName","src":"6502:6:27","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"6501:15:27"},"scope":9702,"src":"6460:94:27","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1802],"body":{"id":9682,"nodeType":"Block","src":"6881:37:27","statements":[{"expression":{"id":9680,"name":"_baseTokenURI","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9460,"src":"6898:13:27","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"functionReturnParameters":9679,"id":9681,"nodeType":"Return","src":"6891:20:27"}]},"documentation":{"id":9674,"nodeType":"StructuredDocumentation","src":"6749:60:27","text":"@dev Returns the base URI used to build tokenURI values."},"id":9683,"implemented":true,"kind":"function","modifiers":[],"name":"_baseURI","nameLocation":"6823:8:27","nodeType":"FunctionDefinition","overrides":{"id":9676,"nodeType":"OverrideSpecifier","overrides":[],"src":"6848:8:27"},"parameters":{"id":9675,"nodeType":"ParameterList","parameters":[],"src":"6831:2:27"},"returnParameters":{"id":9679,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9678,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9683,"src":"6866:13:27","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":9677,"name":"string","nodeType":"ElementaryTypeName","src":"6866:6:27","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"6865:15:27"},"scope":9702,"src":"6814:104:27","stateMutability":"view","virtual":false,"visibility":"internal"},{"baseFunctions":[701,1698,2886],"body":{"id":9700,"nodeType":"Block","src":"7307:60:27","statements":[{"expression":{"arguments":[{"id":9697,"name":"interfaceId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9686,"src":"7348:11:27","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"expression":{"id":9695,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967271,"src":"7324:5:27","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_TricksforBoosterNFT_$9702_$","typeString":"type(contract super TricksforBoosterNFT)"}},"id":9696,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7330:17:27","memberName":"supportsInterface","nodeType":"MemberAccess","referencedDeclaration":701,"src":"7324:23:27","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes4_$returns$_t_bool_$","typeString":"function (bytes4) view returns (bool)"}},"id":9698,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7324:36:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":9694,"id":9699,"nodeType":"Return","src":"7317:43:27"}]},"documentation":{"id":9684,"nodeType":"StructuredDocumentation","src":"7112:22:27","text":"@inheritdoc ERC165"},"functionSelector":"01ffc9a7","id":9701,"implemented":true,"kind":"function","modifiers":[],"name":"supportsInterface","nameLocation":"7148:17:27","nodeType":"FunctionDefinition","overrides":{"id":9691,"nodeType":"OverrideSpecifier","overrides":[{"id":9688,"name":"ERC721","nameLocations":["7231:6:27"],"nodeType":"IdentifierPath","referencedDeclaration":2569,"src":"7231:6:27"},{"id":9689,"name":"ERC2981","nameLocations":["7239:7:27"],"nodeType":"IdentifierPath","referencedDeclaration":3076,"src":"7239:7:27"},{"id":9690,"name":"AccessControlDefaultAdminRules","nameLocations":["7248:30:27"],"nodeType":"IdentifierPath","referencedDeclaration":1331,"src":"7248:30:27"}],"src":"7222:57:27"},"parameters":{"id":9687,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9686,"mutability":"mutable","name":"interfaceId","nameLocation":"7173:11:27","nodeType":"VariableDeclaration","scope":9701,"src":"7166:18:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":9685,"name":"bytes4","nodeType":"ElementaryTypeName","src":"7166:6:27","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"7165:20:27"},"returnParameters":{"id":9694,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9693,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9701,"src":"7297:4:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9692,"name":"bool","nodeType":"ElementaryTypeName","src":"7297:4:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7296:6:27"},"scope":9702,"src":"7139:228:27","stateMutability":"view","virtual":false,"visibility":"public"}],"scope":9703,"src":"678:6691:27","usedErrors":[305,308,1343,1346,1351,1508,1513,1522,1527,1532,1539,1544,1549,2841,2846,2855,2862,3981,3984,7517,9440],"usedEvents":[317,326,335,1358,1361,1368,1371,2585,2594,2603,3973,3978,9446,9452,9458]}],"src":"32:7338:27"},"id":27},"contracts/TricksforBoosterStaking.sol":{"ast":{"absolutePath":"contracts/TricksforBoosterStaking.sol","exportedSymbols":{"Context":[3907],"IERC165":[5850],"IERC721":[2686],"IERC721Receiver":[2704],"Ownable":[526],"Ownable2Step":[612],"Pausable":[4067],"ReentrancyGuard":[4180],"StorageSlot":[4304],"TricksforBoosterStaking":[10372]},"id":10373,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":9704,"literals":["solidity","^","0.8",".26"],"nodeType":"PragmaDirective","src":"32:24:28"},{"absolutePath":"@openzeppelin/contracts/token/ERC721/IERC721.sol","file":"@openzeppelin/contracts/token/ERC721/IERC721.sol","id":9705,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":10373,"sourceUnit":2687,"src":"58:58:28","symbolAliases":[],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol","file":"@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol","id":9706,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":10373,"sourceUnit":2705,"src":"117:66:28","symbolAliases":[],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/access/Ownable.sol","file":"@openzeppelin/contracts/access/Ownable.sol","id":9707,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":10373,"sourceUnit":527,"src":"184:52:28","symbolAliases":[],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/access/Ownable2Step.sol","file":"@openzeppelin/contracts/access/Ownable2Step.sol","id":9708,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":10373,"sourceUnit":613,"src":"237:57:28","symbolAliases":[],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/ReentrancyGuard.sol","file":"@openzeppelin/contracts/utils/ReentrancyGuard.sol","id":9709,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":10373,"sourceUnit":4181,"src":"295:59:28","symbolAliases":[],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/Pausable.sol","file":"@openzeppelin/contracts/utils/Pausable.sol","id":9710,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":10373,"sourceUnit":4068,"src":"355:52:28","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":9712,"name":"Ownable2Step","nameLocations":["1498:12:28"],"nodeType":"IdentifierPath","referencedDeclaration":612,"src":"1498:12:28"},"id":9713,"nodeType":"InheritanceSpecifier","src":"1498:12:28"},{"baseName":{"id":9714,"name":"ReentrancyGuard","nameLocations":["1512:15:28"],"nodeType":"IdentifierPath","referencedDeclaration":4180,"src":"1512:15:28"},"id":9715,"nodeType":"InheritanceSpecifier","src":"1512:15:28"},{"baseName":{"id":9716,"name":"Pausable","nameLocations":["1529:8:28"],"nodeType":"IdentifierPath","referencedDeclaration":4067,"src":"1529:8:28"},"id":9717,"nodeType":"InheritanceSpecifier","src":"1529:8:28"},{"baseName":{"id":9718,"name":"IERC721Receiver","nameLocations":["1539:15:28"],"nodeType":"IdentifierPath","referencedDeclaration":2704,"src":"1539:15:28"},"id":9719,"nodeType":"InheritanceSpecifier","src":"1539:15:28"}],"canonicalName":"TricksforBoosterStaking","contractDependencies":[],"contractKind":"contract","documentation":{"id":9711,"nodeType":"StructuredDocumentation","src":"409:1053:28","text":"@title TricksforBoosterStaking\n @notice Custodial staking contract for Tricksfor Booster NFTs.\n Players transfer their NFTs into this contract to stake them and retrieve\n them when they unstake. Staking state and timestamps are recorded on-chain\n via integration-critical events consumed by the Tricksfor backend indexer.\n Responsibilities:\n - Accepting NFT custody during staking\n - Emitting TokenStaked / TokenUnstaked events for backend log processing\n - Providing read methods (isStaked, stakedOwnerOf) consistent with event state\n Not responsible for:\n - Reward calculation or distribution\n - Booster tier or multiplier classification\n - Game logic or settlement\n @dev Pause gates new staking only. Unstaking is always available so players can\n always recover their assets. emergencyWithdraw is an explicit, named, and\n event-emitting admin path — it is not hidden."},"fullyImplemented":true,"id":10372,"linearizedBaseContracts":[10372,2704,4067,4180,612,526,3907],"name":"TricksforBoosterStaking","nameLocation":"1471:23:28","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":9720,"nodeType":"StructuredDocumentation","src":"1738:67:28","text":"@notice Caller does not own the token they are trying to stake."},"errorSelector":"59dc379f","id":9722,"name":"NotTokenOwner","nameLocation":"1816:13:28","nodeType":"ErrorDefinition","parameters":{"id":9721,"nodeType":"ParameterList","parameters":[],"src":"1829:2:28"},"src":"1810:22:28"},{"documentation":{"id":9723,"nodeType":"StructuredDocumentation","src":"1838:36:28","text":"@notice Token is already staked."},"errorSelector":"16e9ad8f","id":9725,"name":"TokenAlreadyStaked","nameLocation":"1885:18:28","nodeType":"ErrorDefinition","parameters":{"id":9724,"nodeType":"ParameterList","parameters":[],"src":"1903:2:28"},"src":"1879:27:28"},{"documentation":{"id":9726,"nodeType":"StructuredDocumentation","src":"1912:42:28","text":"@notice Token is not currently staked."},"errorSelector":"2926ef0c","id":9728,"name":"TokenNotStaked","nameLocation":"1965:14:28","nodeType":"ErrorDefinition","parameters":{"id":9727,"nodeType":"ParameterList","parameters":[],"src":"1979:2:28"},"src":"1959:23:28"},{"documentation":{"id":9729,"nodeType":"StructuredDocumentation","src":"1988:60:28","text":"@notice Caller is not the original staker of this token."},"errorSelector":"32dc95cb","id":9731,"name":"NotOriginalStaker","nameLocation":"2059:17:28","nodeType":"ErrorDefinition","parameters":{"id":9730,"nodeType":"ParameterList","parameters":[],"src":"2076:2:28"},"src":"2053:26:28"},{"documentation":{"id":9732,"nodeType":"StructuredDocumentation","src":"2085:71:28","text":"@notice Zero address supplied where a non-zero address is required."},"errorSelector":"d92e233d","id":9734,"name":"ZeroAddress","nameLocation":"2167:11:28","nodeType":"ErrorDefinition","parameters":{"id":9733,"nodeType":"ParameterList","parameters":[],"src":"2178:2:28"},"src":"2161:20:28"},{"documentation":{"id":9735,"nodeType":"StructuredDocumentation","src":"2187:60:28","text":"@notice Token received from an unsupported NFT contract."},"errorSelector":"de1db395","id":9737,"name":"UnsupportedNFTContract","nameLocation":"2258:22:28","nodeType":"ErrorDefinition","parameters":{"id":9736,"nodeType":"ParameterList","parameters":[],"src":"2280:2:28"},"src":"2252:31:28"},{"documentation":{"id":9738,"nodeType":"StructuredDocumentation","src":"2289:89:28","text":"@notice Emergency withdrawals can only return a tracked token to its original staker."},"errorSelector":"c56a3905","id":9740,"name":"InvalidEmergencyRecipient","nameLocation":"2389:25:28","nodeType":"ErrorDefinition","parameters":{"id":9739,"nodeType":"ParameterList","parameters":[],"src":"2414:2:28"},"src":"2383:34:28"},{"documentation":{"id":9741,"nodeType":"StructuredDocumentation","src":"2423:76:28","text":"@notice Rescue is only available for tokens that have no staking record."},"errorSelector":"82d272e3","id":9743,"name":"TokenIsTracked","nameLocation":"2510:14:28","nodeType":"ErrorDefinition","parameters":{"id":9742,"nodeType":"ParameterList","parameters":[],"src":"2524:2:28"},"src":"2504:23:28"},{"documentation":{"id":9744,"nodeType":"StructuredDocumentation","src":"2533:77:28","text":"@notice Rescue requires the staking contract to currently hold the token."},"errorSelector":"d79a486e","id":9746,"name":"TokenNotHeld","nameLocation":"2621:12:28","nodeType":"ErrorDefinition","parameters":{"id":9745,"nodeType":"ParameterList","parameters":[],"src":"2633:2:28"},"src":"2615:21:28"},{"anonymous":false,"documentation":{"id":9747,"nodeType":"StructuredDocumentation","src":"2882:246:28","text":"@notice Emitted when a token is successfully staked.\n @param staker The wallet address that owns and staked the token.\n @param tokenId The staked NFT token ID.\n @param stakedAt Block timestamp at the moment of staking."},"eventSelector":"6173e4d2d9dd52aae0ed37afed3adcf924a490639b759ca93d32dc43366c17d2","id":9755,"name":"TokenStaked","nameLocation":"3139:11:28","nodeType":"EventDefinition","parameters":{"id":9754,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9749,"indexed":true,"mutability":"mutable","name":"staker","nameLocation":"3167:6:28","nodeType":"VariableDeclaration","scope":9755,"src":"3151:22:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9748,"name":"address","nodeType":"ElementaryTypeName","src":"3151:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9751,"indexed":true,"mutability":"mutable","name":"tokenId","nameLocation":"3191:7:28","nodeType":"VariableDeclaration","scope":9755,"src":"3175:23:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9750,"name":"uint256","nodeType":"ElementaryTypeName","src":"3175:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9753,"indexed":false,"mutability":"mutable","name":"stakedAt","nameLocation":"3208:8:28","nodeType":"VariableDeclaration","scope":9755,"src":"3200:16:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9752,"name":"uint256","nodeType":"ElementaryTypeName","src":"3200:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3150:67:28"},"src":"3133:85:28"},{"anonymous":false,"documentation":{"id":9756,"nodeType":"StructuredDocumentation","src":"3224:280:28","text":"@notice Emitted when a token is successfully unstaked.\n @param staker The wallet address that originally staked (and receives back) the token.\n @param tokenId The unstaked NFT token ID.\n @param unstakedAt Block timestamp at the moment of unstaking."},"eventSelector":"563fc70fca9d440d883299c76a721644d5aca7c45df98aeb5292c4cb823579bf","id":9764,"name":"TokenUnstaked","nameLocation":"3515:13:28","nodeType":"EventDefinition","parameters":{"id":9763,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9758,"indexed":true,"mutability":"mutable","name":"staker","nameLocation":"3545:6:28","nodeType":"VariableDeclaration","scope":9764,"src":"3529:22:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9757,"name":"address","nodeType":"ElementaryTypeName","src":"3529:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9760,"indexed":true,"mutability":"mutable","name":"tokenId","nameLocation":"3569:7:28","nodeType":"VariableDeclaration","scope":9764,"src":"3553:23:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9759,"name":"uint256","nodeType":"ElementaryTypeName","src":"3553:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9762,"indexed":false,"mutability":"mutable","name":"unstakedAt","nameLocation":"3586:10:28","nodeType":"VariableDeclaration","scope":9764,"src":"3578:18:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9761,"name":"uint256","nodeType":"ElementaryTypeName","src":"3578:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3528:69:28"},"src":"3509:89:28"},{"anonymous":false,"documentation":{"id":9765,"nodeType":"StructuredDocumentation","src":"3604:525:28","text":"@notice Emitted when an owner-initiated emergency withdrawal occurs.\n This is the only admin path that moves a user's staked NFT without their consent.\n It is explicitly named, event-emitting, and documented here.\n @param originalStaker The wallet that originally staked the token.\n @param tokenId The affected NFT token ID.\n @param recipient The address that received the token.\n @param withdrawnAt Block timestamp at the moment of the withdrawal."},"eventSelector":"f4408f2b7cb3bb2b43ddb3715579eae68a12af5f2e6d938537db2be5e72f5f7d","id":9775,"name":"EmergencyWithdrawn","nameLocation":"4140:18:28","nodeType":"EventDefinition","parameters":{"id":9774,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9767,"indexed":true,"mutability":"mutable","name":"originalStaker","nameLocation":"4184:14:28","nodeType":"VariableDeclaration","scope":9775,"src":"4168:30:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9766,"name":"address","nodeType":"ElementaryTypeName","src":"4168:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9769,"indexed":true,"mutability":"mutable","name":"tokenId","nameLocation":"4224:7:28","nodeType":"VariableDeclaration","scope":9775,"src":"4208:23:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9768,"name":"uint256","nodeType":"ElementaryTypeName","src":"4208:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9771,"indexed":true,"mutability":"mutable","name":"recipient","nameLocation":"4257:9:28","nodeType":"VariableDeclaration","scope":9775,"src":"4241:25:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9770,"name":"address","nodeType":"ElementaryTypeName","src":"4241:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9773,"indexed":false,"mutability":"mutable","name":"withdrawnAt","nameLocation":"4284:11:28","nodeType":"VariableDeclaration","scope":9775,"src":"4276:19:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9772,"name":"uint256","nodeType":"ElementaryTypeName","src":"4276:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4158:143:28"},"src":"4134:168:28"},{"anonymous":false,"documentation":{"id":9776,"nodeType":"StructuredDocumentation","src":"4308:91:28","text":"@notice Emitted when an untracked NFT sent with transferFrom is recovered by the owner."},"eventSelector":"c27a1277308b3908a0fb998812a60b1da8911b8583f20bf8f98e5246db8c47ef","id":9784,"name":"UntrackedTokenRescued","nameLocation":"4410:21:28","nodeType":"EventDefinition","parameters":{"id":9783,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9778,"indexed":true,"mutability":"mutable","name":"recipient","nameLocation":"4448:9:28","nodeType":"VariableDeclaration","scope":9784,"src":"4432:25:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9777,"name":"address","nodeType":"ElementaryTypeName","src":"4432:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9780,"indexed":true,"mutability":"mutable","name":"tokenId","nameLocation":"4475:7:28","nodeType":"VariableDeclaration","scope":9784,"src":"4459:23:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9779,"name":"uint256","nodeType":"ElementaryTypeName","src":"4459:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9782,"indexed":false,"mutability":"mutable","name":"rescuedAt","nameLocation":"4492:9:28","nodeType":"VariableDeclaration","scope":9784,"src":"4484:17:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9781,"name":"uint256","nodeType":"ElementaryTypeName","src":"4484:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4431:71:28"},"src":"4404:99:28"},{"constant":false,"documentation":{"id":9785,"nodeType":"StructuredDocumentation","src":"4685:80:28","text":"@notice The ERC-721 NFT contract whose tokens this staking contract manages."},"functionSelector":"d56d229d","id":9788,"mutability":"immutable","name":"nftContract","nameLocation":"4795:11:28","nodeType":"VariableDeclaration","scope":10372,"src":"4770:36:28","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC721_$2686","typeString":"contract IERC721"},"typeName":{"id":9787,"nodeType":"UserDefinedTypeName","pathNode":{"id":9786,"name":"IERC721","nameLocations":["4770:7:28"],"nodeType":"IdentifierPath","referencedDeclaration":2686,"src":"4770:7:28"},"referencedDeclaration":2686,"src":"4770:7:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC721_$2686","typeString":"contract IERC721"}},"visibility":"public"},{"constant":false,"documentation":{"id":9789,"nodeType":"StructuredDocumentation","src":"4813:81:28","text":"@dev Maps tokenId → original staker address. Zero address means not staked."},"id":9793,"mutability":"mutable","name":"_stakedBy","nameLocation":"4935:9:28","nodeType":"VariableDeclaration","scope":10372,"src":"4899:45:28","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"typeName":{"id":9792,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":9790,"name":"uint256","nodeType":"ElementaryTypeName","src":"4907:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"4899:27:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":9791,"name":"address","nodeType":"ElementaryTypeName","src":"4918:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"private"},{"constant":false,"documentation":{"id":9794,"nodeType":"StructuredDocumentation","src":"4951:72:28","text":"@dev Maps tokenId → block.timestamp at which the token was staked."},"id":9798,"mutability":"mutable","name":"_stakedAt","nameLocation":"5064:9:28","nodeType":"VariableDeclaration","scope":10372,"src":"5028:45:28","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_uint256_$","typeString":"mapping(uint256 => uint256)"},"typeName":{"id":9797,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":9795,"name":"uint256","nodeType":"ElementaryTypeName","src":"5036:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"5028:27:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_uint256_$","typeString":"mapping(uint256 => uint256)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":9796,"name":"uint256","nodeType":"ElementaryTypeName","src":"5047:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"private"},{"constant":false,"documentation":{"id":9799,"nodeType":"StructuredDocumentation","src":"5080:68:28","text":"@dev Maps staker address → list of currently staked token IDs."},"id":9804,"mutability":"mutable","name":"_walletTokenIds","nameLocation":"5191:15:28","nodeType":"VariableDeclaration","scope":10372,"src":"5153:53:28","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_array$_t_uint256_$dyn_storage_$","typeString":"mapping(address => uint256[])"},"typeName":{"id":9803,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":9800,"name":"address","nodeType":"ElementaryTypeName","src":"5161:7:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"5153:29:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_array$_t_uint256_$dyn_storage_$","typeString":"mapping(address => uint256[])"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"baseType":{"id":9801,"name":"uint256","nodeType":"ElementaryTypeName","src":"5172:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9802,"nodeType":"ArrayTypeName","src":"5172:9:28","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"visibility":"private"},{"constant":false,"documentation":{"id":9805,"nodeType":"StructuredDocumentation","src":"5213:76:28","text":"@dev Maps tokenId → index in _walletTokenIds[staker] for O(1) removal."},"id":9809,"mutability":"mutable","name":"_walletTokenIndex","nameLocation":"5330:17:28","nodeType":"VariableDeclaration","scope":10372,"src":"5294:53:28","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_uint256_$","typeString":"mapping(uint256 => uint256)"},"typeName":{"id":9808,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":9806,"name":"uint256","nodeType":"ElementaryTypeName","src":"5302:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"5294:27:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_uint256_$","typeString":"mapping(uint256 => uint256)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":9807,"name":"uint256","nodeType":"ElementaryTypeName","src":"5313:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"private"},{"body":{"id":9843,"nodeType":"Block","src":"5785:145:28","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":9832,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":9825,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9820,"name":"nftContract_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9812,"src":"5799:12:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":9823,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5823:1:28","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":9822,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5815:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9821,"name":"address","nodeType":"ElementaryTypeName","src":"5815:7:28","typeDescriptions":{}}},"id":9824,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5815:10:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5799:26:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":9831,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9826,"name":"initialOwner_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9814,"src":"5829:13:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":9829,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5854:1:28","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":9828,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5846:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9827,"name":"address","nodeType":"ElementaryTypeName","src":"5846:7:28","typeDescriptions":{}}},"id":9830,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5846:10:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5829:27:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"5799:57:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9836,"nodeType":"IfStatement","src":"5795:83:28","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":9833,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9734,"src":"5865:11:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":9834,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5865:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9835,"nodeType":"RevertStatement","src":"5858:20:28"}},{"expression":{"id":9841,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9837,"name":"nftContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9788,"src":"5888:11:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC721_$2686","typeString":"contract IERC721"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":9839,"name":"nftContract_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9812,"src":"5910:12:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":9838,"name":"IERC721","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2686,"src":"5902:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC721_$2686_$","typeString":"type(contract IERC721)"}},"id":9840,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5902:21:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC721_$2686","typeString":"contract IERC721"}},"src":"5888:35:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC721_$2686","typeString":"contract IERC721"}},"id":9842,"nodeType":"ExpressionStatement","src":"5888:35:28"}]},"documentation":{"id":9810,"nodeType":"StructuredDocumentation","src":"5536:164:28","text":"@param nftContract_ Address of the TricksforBoosterNFT contract.\n @param initialOwner_ Initial contract owner. Mainnet deployments should use a multisig."},"id":9844,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":9817,"name":"initialOwner_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9814,"src":"5770:13:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":9818,"kind":"baseConstructorSpecifier","modifierName":{"id":9816,"name":"Ownable","nameLocations":["5762:7:28"],"nodeType":"IdentifierPath","referencedDeclaration":526,"src":"5762:7:28"},"nodeType":"ModifierInvocation","src":"5762:22:28"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":9815,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9812,"mutability":"mutable","name":"nftContract_","nameLocation":"5725:12:28","nodeType":"VariableDeclaration","scope":9844,"src":"5717:20:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9811,"name":"address","nodeType":"ElementaryTypeName","src":"5717:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9814,"mutability":"mutable","name":"initialOwner_","nameLocation":"5747:13:28","nodeType":"VariableDeclaration","scope":9844,"src":"5739:21:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9813,"name":"address","nodeType":"ElementaryTypeName","src":"5739:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5716:45:28"},"returnParameters":{"id":9819,"nodeType":"ParameterList","parameters":[],"src":"5785:0:28"},"scope":10372,"src":"5705:225:28","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":9904,"nodeType":"Block","src":"6449:362:28","statements":[{"assignments":[9855],"declarations":[{"constant":false,"id":9855,"mutability":"mutable","name":"caller","nameLocation":"6467:6:28","nodeType":"VariableDeclaration","scope":9904,"src":"6459:14:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9854,"name":"address","nodeType":"ElementaryTypeName","src":"6459:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":9858,"initialValue":{"expression":{"id":9856,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967281,"src":"6476:3:28","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":9857,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6480:6:28","memberName":"sender","nodeType":"MemberAccess","src":"6476:10:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"6459:27:28"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":9866,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":9859,"name":"_stakedBy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9793,"src":"6500:9:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":9861,"indexExpression":{"id":9860,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9847,"src":"6510:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6500:18:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":9864,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6530:1:28","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":9863,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6522:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9862,"name":"address","nodeType":"ElementaryTypeName","src":"6522:7:28","typeDescriptions":{}}},"id":9865,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6522:10:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6500:32:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9870,"nodeType":"IfStatement","src":"6496:65:28","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":9867,"name":"TokenAlreadyStaked","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9725,"src":"6541:18:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":9868,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6541:20:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9869,"nodeType":"RevertStatement","src":"6534:27:28"}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":9876,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":9873,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9847,"src":"6595:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":9871,"name":"nftContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9788,"src":"6575:11:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC721_$2686","typeString":"contract IERC721"}},"id":9872,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6587:7:28","memberName":"ownerOf","nodeType":"MemberAccess","referencedDeclaration":2619,"src":"6575:19:28","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_uint256_$returns$_t_address_$","typeString":"function (uint256) view external returns (address)"}},"id":9874,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6575:28:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":9875,"name":"caller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9855,"src":"6607:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6575:38:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9880,"nodeType":"IfStatement","src":"6571:66:28","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":9877,"name":"NotTokenOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9722,"src":"6622:13:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":9878,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6622:15:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9879,"nodeType":"RevertStatement","src":"6615:22:28"}},{"expression":{"arguments":[{"id":9882,"name":"caller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9855,"src":"6661:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9883,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9847,"src":"6669:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9881,"name":"_recordStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10283,"src":"6648:12:28","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":9884,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6648:29:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9885,"nodeType":"ExpressionStatement","src":"6648:29:28"},{"expression":{"arguments":[{"id":9889,"name":"caller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9855,"src":"6712:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":9892,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967268,"src":"6728:4:28","typeDescriptions":{"typeIdentifier":"t_contract$_TricksforBoosterStaking_$10372","typeString":"contract TricksforBoosterStaking"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_TricksforBoosterStaking_$10372","typeString":"contract TricksforBoosterStaking"}],"id":9891,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6720:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9890,"name":"address","nodeType":"ElementaryTypeName","src":"6720:7:28","typeDescriptions":{}}},"id":9893,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6720:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9894,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9847,"src":"6735:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":9886,"name":"nftContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9788,"src":"6687:11:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC721_$2686","typeString":"contract IERC721"}},"id":9888,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6699:12:28","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":2651,"src":"6687:24:28","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256) external"}},"id":9895,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6687:56:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9896,"nodeType":"ExpressionStatement","src":"6687:56:28"},{"eventCall":{"arguments":[{"id":9898,"name":"caller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9855,"src":"6771:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9899,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9847,"src":"6779:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":9900,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967292,"src":"6788:5:28","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":9901,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6794:9:28","memberName":"timestamp","nodeType":"MemberAccess","src":"6788:15:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9897,"name":"TokenStaked","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9755,"src":"6759:11:28","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,uint256)"}},"id":9902,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6759:45:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9903,"nodeType":"EmitStatement","src":"6754:50:28"}]},"documentation":{"id":9845,"nodeType":"StructuredDocumentation","src":"6114:262:28","text":"@notice Stakes a Booster NFT. The caller must have first approved this contract\n (or set approval for all) on the NFT contract.\n Custody of the token is transferred to this contract.\n @param tokenId The token ID to stake."},"functionSelector":"a694fc3a","id":9905,"implemented":true,"kind":"function","modifiers":[{"id":9850,"kind":"modifierInvocation","modifierName":{"id":9849,"name":"nonReentrant","nameLocations":["6422:12:28"],"nodeType":"IdentifierPath","referencedDeclaration":4110,"src":"6422:12:28"},"nodeType":"ModifierInvocation","src":"6422:12:28"},{"id":9852,"kind":"modifierInvocation","modifierName":{"id":9851,"name":"whenNotPaused","nameLocations":["6435:13:28"],"nodeType":"IdentifierPath","referencedDeclaration":3992,"src":"6435:13:28"},"nodeType":"ModifierInvocation","src":"6435:13:28"}],"name":"stake","nameLocation":"6390:5:28","nodeType":"FunctionDefinition","parameters":{"id":9848,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9847,"mutability":"mutable","name":"tokenId","nameLocation":"6404:7:28","nodeType":"VariableDeclaration","scope":9905,"src":"6396:15:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9846,"name":"uint256","nodeType":"ElementaryTypeName","src":"6396:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6395:17:28"},"returnParameters":{"id":9853,"nodeType":"ParameterList","parameters":[],"src":"6449:0:28"},"scope":10372,"src":"6381:430:28","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[2703],"body":{"id":9972,"nodeType":"Block","src":"7681:372:28","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":9929,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":9923,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967281,"src":"7695:3:28","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":9924,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7699:6:28","memberName":"sender","nodeType":"MemberAccess","src":"7695:10:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"id":9927,"name":"nftContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9788,"src":"7717:11:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC721_$2686","typeString":"contract IERC721"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC721_$2686","typeString":"contract IERC721"}],"id":9926,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7709:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9925,"name":"address","nodeType":"ElementaryTypeName","src":"7709:7:28","typeDescriptions":{}}},"id":9928,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7709:20:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7695:34:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9933,"nodeType":"IfStatement","src":"7691:71:28","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":9930,"name":"UnsupportedNFTContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9737,"src":"7738:22:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":9931,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7738:24:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9932,"nodeType":"RevertStatement","src":"7731:31:28"}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":9939,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9934,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9910,"src":"7776:4:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":9937,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7792:1:28","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":9936,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7784:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9935,"name":"address","nodeType":"ElementaryTypeName","src":"7784:7:28","typeDescriptions":{}}},"id":9938,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7784:10:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7776:18:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9943,"nodeType":"IfStatement","src":"7772:44:28","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":9940,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9734,"src":"7803:11:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":9941,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7803:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9942,"nodeType":"RevertStatement","src":"7796:20:28"}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":9951,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":9944,"name":"_stakedBy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9793,"src":"7830:9:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":9946,"indexExpression":{"id":9945,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9912,"src":"7840:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7830:18:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":9949,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7860:1:28","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":9948,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7852:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9947,"name":"address","nodeType":"ElementaryTypeName","src":"7852:7:28","typeDescriptions":{}}},"id":9950,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7852:10:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7830:32:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9955,"nodeType":"IfStatement","src":"7826:65:28","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":9952,"name":"TokenAlreadyStaked","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9725,"src":"7871:18:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":9953,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7871:20:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9954,"nodeType":"RevertStatement","src":"7864:27:28"}},{"expression":{"arguments":[{"id":9957,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9910,"src":"7915:4:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9958,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9912,"src":"7921:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9956,"name":"_recordStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10283,"src":"7902:12:28","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":9959,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7902:27:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9960,"nodeType":"ExpressionStatement","src":"7902:27:28"},{"eventCall":{"arguments":[{"id":9962,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9910,"src":"7956:4:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9963,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9912,"src":"7962:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":9964,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967292,"src":"7971:5:28","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":9965,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7977:9:28","memberName":"timestamp","nodeType":"MemberAccess","src":"7971:15:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9961,"name":"TokenStaked","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9755,"src":"7944:11:28","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,uint256)"}},"id":9966,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7944:43:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9967,"nodeType":"EmitStatement","src":"7939:48:28"},{"expression":{"expression":{"expression":{"id":9968,"name":"IERC721Receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2704,"src":"8005:15:28","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC721Receiver_$2704_$","typeString":"type(contract IERC721Receiver)"}},"id":9969,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8021:16:28","memberName":"onERC721Received","nodeType":"MemberAccess","referencedDeclaration":2703,"src":"8005:32:28","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_calldata_ptr_$returns$_t_bytes4_$","typeString":"function IERC721Receiver.onERC721Received(address,address,uint256,bytes calldata) returns (bytes4)"}},"id":9970,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8038:8:28","memberName":"selector","nodeType":"MemberAccess","src":"8005:41:28","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"functionReturnParameters":9922,"id":9971,"nodeType":"Return","src":"7998:48:28"}]},"documentation":{"id":9906,"nodeType":"StructuredDocumentation","src":"6817:660:28","text":"@notice Handles the receipt of a Booster NFT transferred via safeTransferFrom.\n Only accepts tokens from the configured nftContract; reverts for all others.\n Records `from` as the staker and emits TokenStaked — functionally equivalent\n to calling stake() but triggered by safeTransferFrom rather than approve+stake.\n Not available while paused (mirrors stake() pause behaviour).\n @param from The address that previously owned the token (recorded as staker).\n @param tokenId The token ID being transferred.\n @return The ERC-721 receiver magic value confirming acceptance."},"functionSelector":"150b7a02","id":9973,"implemented":true,"kind":"function","modifiers":[{"id":9917,"kind":"modifierInvocation","modifierName":{"id":9916,"name":"nonReentrant","nameLocations":["7637:12:28"],"nodeType":"IdentifierPath","referencedDeclaration":4110,"src":"7637:12:28"},"nodeType":"ModifierInvocation","src":"7637:12:28"},{"id":9919,"kind":"modifierInvocation","modifierName":{"id":9918,"name":"whenNotPaused","nameLocations":["7650:13:28"],"nodeType":"IdentifierPath","referencedDeclaration":3992,"src":"7650:13:28"},"nodeType":"ModifierInvocation","src":"7650:13:28"}],"name":"onERC721Received","nameLocation":"7491:16:28","nodeType":"FunctionDefinition","parameters":{"id":9915,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9908,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9973,"src":"7517:7:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9907,"name":"address","nodeType":"ElementaryTypeName","src":"7517:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9910,"mutability":"mutable","name":"from","nameLocation":"7557:4:28","nodeType":"VariableDeclaration","scope":9973,"src":"7549:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9909,"name":"address","nodeType":"ElementaryTypeName","src":"7549:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9912,"mutability":"mutable","name":"tokenId","nameLocation":"7579:7:28","nodeType":"VariableDeclaration","scope":9973,"src":"7571:15:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9911,"name":"uint256","nodeType":"ElementaryTypeName","src":"7571:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9914,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9973,"src":"7596:14:28","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":9913,"name":"bytes","nodeType":"ElementaryTypeName","src":"7596:5:28","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"7507:120:28"},"returnParameters":{"id":9922,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9921,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9973,"src":"7673:6:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":9920,"name":"bytes4","nodeType":"ElementaryTypeName","src":"7673:6:28","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"7672:8:28"},"scope":10372,"src":"7482:571:28","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":10030,"nodeType":"Block","src":"8339:381:28","statements":[{"assignments":[9982],"declarations":[{"constant":false,"id":9982,"mutability":"mutable","name":"originalStaker","nameLocation":"8357:14:28","nodeType":"VariableDeclaration","scope":10030,"src":"8349:22:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9981,"name":"address","nodeType":"ElementaryTypeName","src":"8349:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":9986,"initialValue":{"baseExpression":{"id":9983,"name":"_stakedBy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9793,"src":"8374:9:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":9985,"indexExpression":{"id":9984,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9976,"src":"8384:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8374:18:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"8349:43:28"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":9992,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9987,"name":"originalStaker","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9982,"src":"8406:14:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":9990,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8432:1:28","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":9989,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8424:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9988,"name":"address","nodeType":"ElementaryTypeName","src":"8424:7:28","typeDescriptions":{}}},"id":9991,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8424:10:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8406:28:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9996,"nodeType":"IfStatement","src":"8402:57:28","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":9993,"name":"TokenNotStaked","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9728,"src":"8443:14:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":9994,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8443:16:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9995,"nodeType":"RevertStatement","src":"8436:23:28"}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":10000,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9997,"name":"originalStaker","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9982,"src":"8473:14:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":9998,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967281,"src":"8491:3:28","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":9999,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8495:6:28","memberName":"sender","nodeType":"MemberAccess","src":"8491:10:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8473:28:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10004,"nodeType":"IfStatement","src":"8469:60:28","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":10001,"name":"NotOriginalStaker","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9731,"src":"8510:17:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":10002,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8510:19:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10003,"nodeType":"RevertStatement","src":"8503:26:28"}},{"expression":{"arguments":[{"id":10006,"name":"originalStaker","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9982,"src":"8552:14:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10007,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9976,"src":"8568:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10005,"name":"_clearStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10307,"src":"8540:11:28","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":10008,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8540:36:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10009,"nodeType":"ExpressionStatement","src":"8540:36:28"},{"expression":{"arguments":[{"arguments":[{"id":10015,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967268,"src":"8619:4:28","typeDescriptions":{"typeIdentifier":"t_contract$_TricksforBoosterStaking_$10372","typeString":"contract TricksforBoosterStaking"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_TricksforBoosterStaking_$10372","typeString":"contract TricksforBoosterStaking"}],"id":10014,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8611:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10013,"name":"address","nodeType":"ElementaryTypeName","src":"8611:7:28","typeDescriptions":{}}},"id":10016,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8611:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":10017,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967281,"src":"8626:3:28","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":10018,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8630:6:28","memberName":"sender","nodeType":"MemberAccess","src":"8626:10:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10019,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9976,"src":"8638:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":10010,"name":"nftContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9788,"src":"8586:11:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC721_$2686","typeString":"contract IERC721"}},"id":10012,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8598:12:28","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":2651,"src":"8586:24:28","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256) external"}},"id":10020,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8586:60:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10021,"nodeType":"ExpressionStatement","src":"8586:60:28"},{"eventCall":{"arguments":[{"expression":{"id":10023,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967281,"src":"8676:3:28","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":10024,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8680:6:28","memberName":"sender","nodeType":"MemberAccess","src":"8676:10:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10025,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9976,"src":"8688:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":10026,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967292,"src":"8697:5:28","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":10027,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8703:9:28","memberName":"timestamp","nodeType":"MemberAccess","src":"8697:15:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10022,"name":"TokenUnstaked","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9764,"src":"8662:13:28","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,uint256)"}},"id":10028,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8662:51:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10029,"nodeType":"EmitStatement","src":"8657:56:28"}]},"documentation":{"id":9974,"nodeType":"StructuredDocumentation","src":"8059:219:28","text":"@notice Unstakes a Booster NFT and returns it to the original staker.\n Always available — not gated by pause — so players can always recover assets.\n @param tokenId The token ID to unstake."},"functionSelector":"2e17de78","id":10031,"implemented":true,"kind":"function","modifiers":[{"id":9979,"kind":"modifierInvocation","modifierName":{"id":9978,"name":"nonReentrant","nameLocations":["8326:12:28"],"nodeType":"IdentifierPath","referencedDeclaration":4110,"src":"8326:12:28"},"nodeType":"ModifierInvocation","src":"8326:12:28"}],"name":"unstake","nameLocation":"8292:7:28","nodeType":"FunctionDefinition","parameters":{"id":9977,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9976,"mutability":"mutable","name":"tokenId","nameLocation":"8308:7:28","nodeType":"VariableDeclaration","scope":10031,"src":"8300:15:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9975,"name":"uint256","nodeType":"ElementaryTypeName","src":"8300:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8299:17:28"},"returnParameters":{"id":9980,"nodeType":"ParameterList","parameters":[],"src":"8339:0:28"},"scope":10372,"src":"8283:437:28","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":10100,"nodeType":"Block","src":"9562:466:28","statements":[{"assignments":[10044],"declarations":[{"constant":false,"id":10044,"mutability":"mutable","name":"originalStaker","nameLocation":"9580:14:28","nodeType":"VariableDeclaration","scope":10100,"src":"9572:22:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10043,"name":"address","nodeType":"ElementaryTypeName","src":"9572:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":10048,"initialValue":{"baseExpression":{"id":10045,"name":"_stakedBy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9793,"src":"9597:9:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":10047,"indexExpression":{"id":10046,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10034,"src":"9607:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9597:18:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"9572:43:28"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":10054,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10049,"name":"originalStaker","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10044,"src":"9629:14:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":10052,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9655:1:28","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":10051,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9647:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10050,"name":"address","nodeType":"ElementaryTypeName","src":"9647:7:28","typeDescriptions":{}}},"id":10053,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9647:10:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9629:28:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10058,"nodeType":"IfStatement","src":"9625:57:28","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":10055,"name":"TokenNotStaked","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9728,"src":"9666:14:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":10056,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9666:16:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10057,"nodeType":"RevertStatement","src":"9659:23:28"}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":10064,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10059,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10036,"src":"9696:9:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":10062,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9717:1:28","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":10061,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9709:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10060,"name":"address","nodeType":"ElementaryTypeName","src":"9709:7:28","typeDescriptions":{}}},"id":10063,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9709:10:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9696:23:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10068,"nodeType":"IfStatement","src":"9692:49:28","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":10065,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9734,"src":"9728:11:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":10066,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9728:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10067,"nodeType":"RevertStatement","src":"9721:20:28"}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":10071,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10069,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10036,"src":"9755:9:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":10070,"name":"originalStaker","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10044,"src":"9768:14:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9755:27:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10075,"nodeType":"IfStatement","src":"9751:67:28","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":10072,"name":"InvalidEmergencyRecipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9740,"src":"9791:25:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":10073,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9791:27:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10074,"nodeType":"RevertStatement","src":"9784:34:28"}},{"expression":{"arguments":[{"id":10077,"name":"originalStaker","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10044,"src":"9841:14:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10078,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10034,"src":"9857:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10076,"name":"_clearStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10307,"src":"9829:11:28","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":10079,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9829:36:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10080,"nodeType":"ExpressionStatement","src":"9829:36:28"},{"expression":{"arguments":[{"arguments":[{"id":10086,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967268,"src":"9908:4:28","typeDescriptions":{"typeIdentifier":"t_contract$_TricksforBoosterStaking_$10372","typeString":"contract TricksforBoosterStaking"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_TricksforBoosterStaking_$10372","typeString":"contract TricksforBoosterStaking"}],"id":10085,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9900:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10084,"name":"address","nodeType":"ElementaryTypeName","src":"9900:7:28","typeDescriptions":{}}},"id":10087,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9900:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10088,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10036,"src":"9915:9:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10089,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10034,"src":"9926:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":10081,"name":"nftContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9788,"src":"9875:11:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC721_$2686","typeString":"contract IERC721"}},"id":10083,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9887:12:28","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":2651,"src":"9875:24:28","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256) external"}},"id":10090,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9875:59:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10091,"nodeType":"ExpressionStatement","src":"9875:59:28"},{"eventCall":{"arguments":[{"id":10093,"name":"originalStaker","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10044,"src":"9969:14:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10094,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10034,"src":"9985:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":10095,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10036,"src":"9994:9:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":10096,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967292,"src":"10005:5:28","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":10097,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10011:9:28","memberName":"timestamp","nodeType":"MemberAccess","src":"10005:15:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10092,"name":"EmergencyWithdrawn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9775,"src":"9950:18:28","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256,address,uint256)"}},"id":10098,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9950:71:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10099,"nodeType":"EmitStatement","src":"9945:76:28"}]},"documentation":{"id":10032,"nodeType":"StructuredDocumentation","src":"8927:535:28","text":"@notice Emergency withdrawal of a staked token by the contract owner.\n Use only in exceptional circumstances (e.g., critical contract bug).\n This is the only admin path that moves a user's staked NFT without their\n direct action. It is explicitly named, emits EmergencyWithdrawn, and is\n documented in this contract and the project's architecture documentation.\n @param tokenId The token ID to withdraw.\n @param recipient The address to send the token to."},"functionSelector":"2f940c70","id":10101,"implemented":true,"kind":"function","modifiers":[{"id":10039,"kind":"modifierInvocation","modifierName":{"id":10038,"name":"onlyOwner","nameLocations":["9539:9:28"],"nodeType":"IdentifierPath","referencedDeclaration":437,"src":"9539:9:28"},"nodeType":"ModifierInvocation","src":"9539:9:28"},{"id":10041,"kind":"modifierInvocation","modifierName":{"id":10040,"name":"nonReentrant","nameLocations":["9549:12:28"],"nodeType":"IdentifierPath","referencedDeclaration":4110,"src":"9549:12:28"},"nodeType":"ModifierInvocation","src":"9549:12:28"}],"name":"emergencyWithdraw","nameLocation":"9476:17:28","nodeType":"FunctionDefinition","parameters":{"id":10037,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10034,"mutability":"mutable","name":"tokenId","nameLocation":"9502:7:28","nodeType":"VariableDeclaration","scope":10101,"src":"9494:15:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10033,"name":"uint256","nodeType":"ElementaryTypeName","src":"9494:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10036,"mutability":"mutable","name":"recipient","nameLocation":"9519:9:28","nodeType":"VariableDeclaration","scope":10101,"src":"9511:17:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10035,"name":"address","nodeType":"ElementaryTypeName","src":"9511:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9493:36:28"},"returnParameters":{"id":10042,"nodeType":"ParameterList","parameters":[],"src":"9562:0:28"},"scope":10372,"src":"9467:561:28","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":10166,"nodeType":"Block","src":"10444:362:28","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":10118,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10113,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10106,"src":"10458:9:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":10116,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10479:1:28","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":10115,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10471:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10114,"name":"address","nodeType":"ElementaryTypeName","src":"10471:7:28","typeDescriptions":{}}},"id":10117,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10471:10:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"10458:23:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10122,"nodeType":"IfStatement","src":"10454:49:28","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":10119,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9734,"src":"10490:11:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":10120,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10490:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10121,"nodeType":"RevertStatement","src":"10483:20:28"}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":10130,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":10123,"name":"_stakedBy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9793,"src":"10517:9:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":10125,"indexExpression":{"id":10124,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10104,"src":"10527:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10517:18:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":10128,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10547:1:28","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":10127,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10539:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10126,"name":"address","nodeType":"ElementaryTypeName","src":"10539:7:28","typeDescriptions":{}}},"id":10129,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10539:10:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"10517:32:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10134,"nodeType":"IfStatement","src":"10513:61:28","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":10131,"name":"TokenIsTracked","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9743,"src":"10558:14:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":10132,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10558:16:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10133,"nodeType":"RevertStatement","src":"10551:23:28"}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":10143,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":10137,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10104,"src":"10608:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":10135,"name":"nftContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9788,"src":"10588:11:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC721_$2686","typeString":"contract IERC721"}},"id":10136,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10600:7:28","memberName":"ownerOf","nodeType":"MemberAccess","referencedDeclaration":2619,"src":"10588:19:28","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_uint256_$returns$_t_address_$","typeString":"function (uint256) view external returns (address)"}},"id":10138,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10588:28:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"id":10141,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967268,"src":"10628:4:28","typeDescriptions":{"typeIdentifier":"t_contract$_TricksforBoosterStaking_$10372","typeString":"contract TricksforBoosterStaking"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_TricksforBoosterStaking_$10372","typeString":"contract TricksforBoosterStaking"}],"id":10140,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10620:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10139,"name":"address","nodeType":"ElementaryTypeName","src":"10620:7:28","typeDescriptions":{}}},"id":10142,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10620:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"10588:45:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10147,"nodeType":"IfStatement","src":"10584:72:28","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":10144,"name":"TokenNotHeld","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9746,"src":"10642:12:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":10145,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10642:14:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10146,"nodeType":"RevertStatement","src":"10635:21:28"}},{"expression":{"arguments":[{"arguments":[{"id":10153,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967268,"src":"10700:4:28","typeDescriptions":{"typeIdentifier":"t_contract$_TricksforBoosterStaking_$10372","typeString":"contract TricksforBoosterStaking"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_TricksforBoosterStaking_$10372","typeString":"contract TricksforBoosterStaking"}],"id":10152,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10692:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10151,"name":"address","nodeType":"ElementaryTypeName","src":"10692:7:28","typeDescriptions":{}}},"id":10154,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10692:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10155,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10106,"src":"10707:9:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10156,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10104,"src":"10718:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":10148,"name":"nftContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9788,"src":"10667:11:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC721_$2686","typeString":"contract IERC721"}},"id":10150,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10679:12:28","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":2651,"src":"10667:24:28","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256) external"}},"id":10157,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10667:59:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10158,"nodeType":"ExpressionStatement","src":"10667:59:28"},{"eventCall":{"arguments":[{"id":10160,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10106,"src":"10763:9:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10161,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10104,"src":"10774:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":10162,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967292,"src":"10783:5:28","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":10163,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10789:9:28","memberName":"timestamp","nodeType":"MemberAccess","src":"10783:15:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10159,"name":"UntrackedTokenRescued","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9784,"src":"10741:21:28","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,uint256)"}},"id":10164,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10741:58:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10165,"nodeType":"EmitStatement","src":"10736:63:28"}]},"documentation":{"id":10102,"nodeType":"StructuredDocumentation","src":"10034:307:28","text":"@notice Recovers an NFT that was sent directly with transferFrom and therefore did\n not invoke onERC721Received or create a staking record.\n @param tokenId The untracked token held by this contract.\n @param recipient The non-zero address that receives the recovered token."},"functionSelector":"0fa6f642","id":10167,"implemented":true,"kind":"function","modifiers":[{"id":10109,"kind":"modifierInvocation","modifierName":{"id":10108,"name":"onlyOwner","nameLocations":["10421:9:28"],"nodeType":"IdentifierPath","referencedDeclaration":437,"src":"10421:9:28"},"nodeType":"ModifierInvocation","src":"10421:9:28"},{"id":10111,"kind":"modifierInvocation","modifierName":{"id":10110,"name":"nonReentrant","nameLocations":["10431:12:28"],"nodeType":"IdentifierPath","referencedDeclaration":4110,"src":"10431:12:28"},"nodeType":"ModifierInvocation","src":"10431:12:28"}],"name":"rescueUntrackedToken","nameLocation":"10355:20:28","nodeType":"FunctionDefinition","parameters":{"id":10107,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10104,"mutability":"mutable","name":"tokenId","nameLocation":"10384:7:28","nodeType":"VariableDeclaration","scope":10167,"src":"10376:15:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10103,"name":"uint256","nodeType":"ElementaryTypeName","src":"10376:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10106,"mutability":"mutable","name":"recipient","nameLocation":"10401:9:28","nodeType":"VariableDeclaration","scope":10167,"src":"10393:17:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10105,"name":"address","nodeType":"ElementaryTypeName","src":"10393:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10375:36:28"},"returnParameters":{"id":10112,"nodeType":"ParameterList","parameters":[],"src":"10444:0:28"},"scope":10372,"src":"10346:460:28","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":10176,"nodeType":"Block","src":"11102:25:28","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":10173,"name":"_pause","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4050,"src":"11112:6:28","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":10174,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11112:8:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10175,"nodeType":"ExpressionStatement","src":"11112:8:28"}]},"documentation":{"id":10168,"nodeType":"StructuredDocumentation","src":"10988:73:28","text":"@notice Pauses new staking. Unstaking remains available while paused."},"functionSelector":"8456cb59","id":10177,"implemented":true,"kind":"function","modifiers":[{"id":10171,"kind":"modifierInvocation","modifierName":{"id":10170,"name":"onlyOwner","nameLocations":["11092:9:28"],"nodeType":"IdentifierPath","referencedDeclaration":437,"src":"11092:9:28"},"nodeType":"ModifierInvocation","src":"11092:9:28"}],"name":"pause","nameLocation":"11075:5:28","nodeType":"FunctionDefinition","parameters":{"id":10169,"nodeType":"ParameterList","parameters":[],"src":"11080:2:28"},"returnParameters":{"id":10172,"nodeType":"ParameterList","parameters":[],"src":"11102:0:28"},"scope":10372,"src":"11066:61:28","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":10186,"nodeType":"Block","src":"11205:27:28","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":10183,"name":"_unpause","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4066,"src":"11215:8:28","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":10184,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11215:10:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10185,"nodeType":"ExpressionStatement","src":"11215:10:28"}]},"documentation":{"id":10178,"nodeType":"StructuredDocumentation","src":"11133:29:28","text":"@notice Unpauses staking."},"functionSelector":"3f4ba83a","id":10187,"implemented":true,"kind":"function","modifiers":[{"id":10181,"kind":"modifierInvocation","modifierName":{"id":10180,"name":"onlyOwner","nameLocations":["11195:9:28"],"nodeType":"IdentifierPath","referencedDeclaration":437,"src":"11195:9:28"},"nodeType":"ModifierInvocation","src":"11195:9:28"}],"name":"unpause","nameLocation":"11176:7:28","nodeType":"FunctionDefinition","parameters":{"id":10179,"nodeType":"ParameterList","parameters":[],"src":"11183:2:28"},"returnParameters":{"id":10182,"nodeType":"ParameterList","parameters":[],"src":"11205:0:28"},"scope":10372,"src":"11167:65:28","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":10204,"nodeType":"Block","src":"11637:56:28","statements":[{"expression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":10202,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":10195,"name":"_stakedBy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9793,"src":"11654:9:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":10197,"indexExpression":{"id":10196,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10190,"src":"11664:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11654:18:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":10200,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11684:1:28","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":10199,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11676:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10198,"name":"address","nodeType":"ElementaryTypeName","src":"11676:7:28","typeDescriptions":{}}},"id":10201,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11676:10:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"11654:32:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":10194,"id":10203,"nodeType":"Return","src":"11647:39:28"}]},"documentation":{"id":10188,"nodeType":"StructuredDocumentation","src":"11458:110:28","text":"@notice Returns true if the given token is currently staked.\n @param tokenId The token ID to query."},"functionSelector":"baa51f86","id":10205,"implemented":true,"kind":"function","modifiers":[],"name":"isStaked","nameLocation":"11582:8:28","nodeType":"FunctionDefinition","parameters":{"id":10191,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10190,"mutability":"mutable","name":"tokenId","nameLocation":"11599:7:28","nodeType":"VariableDeclaration","scope":10205,"src":"11591:15:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10189,"name":"uint256","nodeType":"ElementaryTypeName","src":"11591:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11590:17:28"},"returnParameters":{"id":10194,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10193,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10205,"src":"11631:4:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":10192,"name":"bool","nodeType":"ElementaryTypeName","src":"11631:4:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"11630:6:28"},"scope":10372,"src":"11573:120:28","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":10217,"nodeType":"Block","src":"11959:42:28","statements":[{"expression":{"baseExpression":{"id":10213,"name":"_stakedBy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9793,"src":"11976:9:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":10215,"indexExpression":{"id":10214,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10208,"src":"11986:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11976:18:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":10212,"id":10216,"nodeType":"Return","src":"11969:25:28"}]},"documentation":{"id":10206,"nodeType":"StructuredDocumentation","src":"11699:183:28","text":"@notice Returns the original staker of a currently staked token.\n Returns the zero address if the token is not staked.\n @param tokenId The token ID to query."},"functionSelector":"1dcac94d","id":10218,"implemented":true,"kind":"function","modifiers":[],"name":"stakedOwnerOf","nameLocation":"11896:13:28","nodeType":"FunctionDefinition","parameters":{"id":10209,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10208,"mutability":"mutable","name":"tokenId","nameLocation":"11918:7:28","nodeType":"VariableDeclaration","scope":10218,"src":"11910:15:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10207,"name":"uint256","nodeType":"ElementaryTypeName","src":"11910:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11909:17:28"},"returnParameters":{"id":10212,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10211,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10218,"src":"11950:7:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10210,"name":"address","nodeType":"ElementaryTypeName","src":"11950:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11949:9:28"},"scope":10372,"src":"11887:114:28","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":10230,"nodeType":"Block","src":"12262:42:28","statements":[{"expression":{"baseExpression":{"id":10226,"name":"_stakedAt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9798,"src":"12279:9:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_uint256_$","typeString":"mapping(uint256 => uint256)"}},"id":10228,"indexExpression":{"id":10227,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10221,"src":"12289:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12279:18:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":10225,"id":10229,"nodeType":"Return","src":"12272:25:28"}]},"documentation":{"id":10219,"nodeType":"StructuredDocumentation","src":"12007:181:28","text":"@notice Returns the block timestamp at which a token was staked.\n Returns zero if the token is not currently staked.\n @param tokenId The token ID to query."},"functionSelector":"1b3253b0","id":10231,"implemented":true,"kind":"function","modifiers":[],"name":"stakedAtOf","nameLocation":"12202:10:28","nodeType":"FunctionDefinition","parameters":{"id":10222,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10221,"mutability":"mutable","name":"tokenId","nameLocation":"12221:7:28","nodeType":"VariableDeclaration","scope":10231,"src":"12213:15:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10220,"name":"uint256","nodeType":"ElementaryTypeName","src":"12213:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12212:17:28"},"returnParameters":{"id":10225,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10224,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10231,"src":"12253:7:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10223,"name":"uint256","nodeType":"ElementaryTypeName","src":"12253:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12252:9:28"},"scope":10372,"src":"12193:111:28","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":10244,"nodeType":"Block","src":"12841:47:28","statements":[{"expression":{"baseExpression":{"id":10240,"name":"_walletTokenIds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9804,"src":"12858:15:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_array$_t_uint256_$dyn_storage_$","typeString":"mapping(address => uint256[] storage ref)"}},"id":10242,"indexExpression":{"id":10241,"name":"wallet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10234,"src":"12874:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12858:23:28","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"functionReturnParameters":10239,"id":10243,"nodeType":"Return","src":"12851:30:28"}]},"documentation":{"id":10232,"nodeType":"StructuredDocumentation","src":"12310:438:28","text":"@notice Returns the list of token IDs currently staked by the given wallet.\n @dev Ordering is not guaranteed. Tokens are stored in an array with swap-and-pop\n removal: when a token is unstaked or emergency-withdrawn, the last element\n in the array takes its position. Do not rely on index stability across\n state-changing transactions.\n @param wallet The address to query."},"functionSelector":"2b4bc300","id":10245,"implemented":true,"kind":"function","modifiers":[],"name":"getWalletStakedTokens","nameLocation":"12762:21:28","nodeType":"FunctionDefinition","parameters":{"id":10235,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10234,"mutability":"mutable","name":"wallet","nameLocation":"12792:6:28","nodeType":"VariableDeclaration","scope":10245,"src":"12784:14:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10233,"name":"address","nodeType":"ElementaryTypeName","src":"12784:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12783:16:28"},"returnParameters":{"id":10239,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10238,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10245,"src":"12823:16:28","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":10236,"name":"uint256","nodeType":"ElementaryTypeName","src":"12823:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10237,"nodeType":"ArrayTypeName","src":"12823:9:28","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"12822:18:28"},"scope":10372,"src":"12753:135:28","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":10282,"nodeType":"Block","src":"13222:206:28","statements":[{"expression":{"id":10257,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":10253,"name":"_stakedBy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9793,"src":"13232:9:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":10255,"indexExpression":{"id":10254,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10250,"src":"13242:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"13232:18:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":10256,"name":"staker","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10248,"src":"13253:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"13232:27:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":10258,"nodeType":"ExpressionStatement","src":"13232:27:28"},{"expression":{"id":10264,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":10259,"name":"_stakedAt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9798,"src":"13269:9:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_uint256_$","typeString":"mapping(uint256 => uint256)"}},"id":10261,"indexExpression":{"id":10260,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10250,"src":"13279:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"13269:18:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":10262,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967292,"src":"13290:5:28","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":10263,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13296:9:28","memberName":"timestamp","nodeType":"MemberAccess","src":"13290:15:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13269:36:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10265,"nodeType":"ExpressionStatement","src":"13269:36:28"},{"expression":{"id":10273,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":10266,"name":"_walletTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9809,"src":"13315:17:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_uint256_$","typeString":"mapping(uint256 => uint256)"}},"id":10268,"indexExpression":{"id":10267,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10250,"src":"13333:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"13315:26:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"baseExpression":{"id":10269,"name":"_walletTokenIds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9804,"src":"13344:15:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_array$_t_uint256_$dyn_storage_$","typeString":"mapping(address => uint256[] storage ref)"}},"id":10271,"indexExpression":{"id":10270,"name":"staker","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10248,"src":"13360:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13344:23:28","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":10272,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13368:6:28","memberName":"length","nodeType":"MemberAccess","src":"13344:30:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13315:59:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10274,"nodeType":"ExpressionStatement","src":"13315:59:28"},{"expression":{"arguments":[{"id":10279,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10250,"src":"13413:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":10275,"name":"_walletTokenIds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9804,"src":"13384:15:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_array$_t_uint256_$dyn_storage_$","typeString":"mapping(address => uint256[] storage ref)"}},"id":10277,"indexExpression":{"id":10276,"name":"staker","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10248,"src":"13400:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13384:23:28","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":10278,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13408:4:28","memberName":"push","nodeType":"MemberAccess","src":"13384:28:28","typeDescriptions":{"typeIdentifier":"t_function_arraypush_nonpayable$_t_array$_t_uint256_$dyn_storage_ptr_$_t_uint256_$returns$__$attached_to$_t_array$_t_uint256_$dyn_storage_ptr_$","typeString":"function (uint256[] storage pointer,uint256)"}},"id":10280,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13384:37:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10281,"nodeType":"ExpressionStatement","src":"13384:37:28"}]},"documentation":{"id":10246,"nodeType":"StructuredDocumentation","src":"13081:72:28","text":"@dev Records all staking state for a token being staked by `staker`."},"id":10283,"implemented":true,"kind":"function","modifiers":[],"name":"_recordStake","nameLocation":"13167:12:28","nodeType":"FunctionDefinition","parameters":{"id":10251,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10248,"mutability":"mutable","name":"staker","nameLocation":"13188:6:28","nodeType":"VariableDeclaration","scope":10283,"src":"13180:14:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10247,"name":"address","nodeType":"ElementaryTypeName","src":"13180:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10250,"mutability":"mutable","name":"tokenId","nameLocation":"13204:7:28","nodeType":"VariableDeclaration","scope":10283,"src":"13196:15:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10249,"name":"uint256","nodeType":"ElementaryTypeName","src":"13196:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13179:33:28"},"returnParameters":{"id":10252,"nodeType":"ParameterList","parameters":[],"src":"13222:0:28"},"scope":10372,"src":"13158:270:28","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":10306,"nodeType":"Block","src":"13577:121:28","statements":[{"expression":{"id":10294,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"13587:25:28","subExpression":{"baseExpression":{"id":10291,"name":"_stakedBy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9793,"src":"13594:9:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":10293,"indexExpression":{"id":10292,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10288,"src":"13604:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"13594:18:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10295,"nodeType":"ExpressionStatement","src":"13587:25:28"},{"expression":{"id":10299,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"13622:25:28","subExpression":{"baseExpression":{"id":10296,"name":"_stakedAt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9798,"src":"13629:9:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_uint256_$","typeString":"mapping(uint256 => uint256)"}},"id":10298,"indexExpression":{"id":10297,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10288,"src":"13639:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"13629:18:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10300,"nodeType":"ExpressionStatement","src":"13622:25:28"},{"expression":{"arguments":[{"id":10302,"name":"staker","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10286,"src":"13675:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10303,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10288,"src":"13683:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10301,"name":"_removeFromWallet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10371,"src":"13657:17:28","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":10304,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13657:34:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10305,"nodeType":"ExpressionStatement","src":"13657:34:28"}]},"documentation":{"id":10284,"nodeType":"StructuredDocumentation","src":"13434:75:28","text":"@dev Clears all staking state for a token being unstaked from `staker`."},"id":10307,"implemented":true,"kind":"function","modifiers":[],"name":"_clearStake","nameLocation":"13523:11:28","nodeType":"FunctionDefinition","parameters":{"id":10289,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10286,"mutability":"mutable","name":"staker","nameLocation":"13543:6:28","nodeType":"VariableDeclaration","scope":10307,"src":"13535:14:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10285,"name":"address","nodeType":"ElementaryTypeName","src":"13535:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10288,"mutability":"mutable","name":"tokenId","nameLocation":"13559:7:28","nodeType":"VariableDeclaration","scope":10307,"src":"13551:15:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10287,"name":"uint256","nodeType":"ElementaryTypeName","src":"13551:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13534:33:28"},"returnParameters":{"id":10290,"nodeType":"ParameterList","parameters":[],"src":"13577:0:28"},"scope":10372,"src":"13514:184:28","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":10370,"nodeType":"Block","src":"13868:423:28","statements":[{"assignments":[10319],"declarations":[{"constant":false,"id":10319,"mutability":"mutable","name":"tokens","nameLocation":"13896:6:28","nodeType":"VariableDeclaration","scope":10370,"src":"13878:24:28","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":10317,"name":"uint256","nodeType":"ElementaryTypeName","src":"13878:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10318,"nodeType":"ArrayTypeName","src":"13878:9:28","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":10323,"initialValue":{"baseExpression":{"id":10320,"name":"_walletTokenIds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9804,"src":"13905:15:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_array$_t_uint256_$dyn_storage_$","typeString":"mapping(address => uint256[] storage ref)"}},"id":10322,"indexExpression":{"id":10321,"name":"staker","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10310,"src":"13921:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13905:23:28","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"nodeType":"VariableDeclarationStatement","src":"13878:50:28"},{"assignments":[10325],"declarations":[{"constant":false,"id":10325,"mutability":"mutable","name":"index","nameLocation":"13946:5:28","nodeType":"VariableDeclaration","scope":10370,"src":"13938:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10324,"name":"uint256","nodeType":"ElementaryTypeName","src":"13938:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":10329,"initialValue":{"baseExpression":{"id":10326,"name":"_walletTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9809,"src":"13954:17:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_uint256_$","typeString":"mapping(uint256 => uint256)"}},"id":10328,"indexExpression":{"id":10327,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10312,"src":"13972:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13954:26:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"13938:42:28"},{"assignments":[10331],"declarations":[{"constant":false,"id":10331,"mutability":"mutable","name":"lastIndex","nameLocation":"13998:9:28","nodeType":"VariableDeclaration","scope":10370,"src":"13990:17:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10330,"name":"uint256","nodeType":"ElementaryTypeName","src":"13990:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":10336,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10335,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":10332,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10319,"src":"14010:6:28","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[] storage pointer"}},"id":10333,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14017:6:28","memberName":"length","nodeType":"MemberAccess","src":"14010:13:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":10334,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14026:1:28","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"14010:17:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"13990:37:28"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10339,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10337,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10325,"src":"14042:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":10338,"name":"lastIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10331,"src":"14051:9:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14042:18:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10359,"nodeType":"IfStatement","src":"14038:181:28","trueBody":{"id":10358,"nodeType":"Block","src":"14062:157:28","statements":[{"assignments":[10341],"declarations":[{"constant":false,"id":10341,"mutability":"mutable","name":"lastTokenId","nameLocation":"14084:11:28","nodeType":"VariableDeclaration","scope":10358,"src":"14076:19:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10340,"name":"uint256","nodeType":"ElementaryTypeName","src":"14076:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":10345,"initialValue":{"baseExpression":{"id":10342,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10319,"src":"14098:6:28","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[] storage pointer"}},"id":10344,"indexExpression":{"id":10343,"name":"lastIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10331,"src":"14105:9:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14098:17:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"14076:39:28"},{"expression":{"id":10350,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":10346,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10319,"src":"14129:6:28","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[] storage pointer"}},"id":10348,"indexExpression":{"id":10347,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10325,"src":"14136:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"14129:13:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":10349,"name":"lastTokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10341,"src":"14145:11:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14129:27:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10351,"nodeType":"ExpressionStatement","src":"14129:27:28"},{"expression":{"id":10356,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":10352,"name":"_walletTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9809,"src":"14170:17:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_uint256_$","typeString":"mapping(uint256 => uint256)"}},"id":10354,"indexExpression":{"id":10353,"name":"lastTokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10341,"src":"14188:11:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"14170:30:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":10355,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10325,"src":"14203:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14170:38:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10357,"nodeType":"ExpressionStatement","src":"14170:38:28"}]}},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":10360,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10319,"src":"14229:6:28","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[] storage pointer"}},"id":10362,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14236:3:28","memberName":"pop","nodeType":"MemberAccess","src":"14229:10:28","typeDescriptions":{"typeIdentifier":"t_function_arraypop_nonpayable$_t_array$_t_uint256_$dyn_storage_ptr_$returns$__$attached_to$_t_array$_t_uint256_$dyn_storage_ptr_$","typeString":"function (uint256[] storage pointer)"}},"id":10363,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14229:12:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10364,"nodeType":"ExpressionStatement","src":"14229:12:28"},{"expression":{"id":10368,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"14251:33:28","subExpression":{"baseExpression":{"id":10365,"name":"_walletTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9809,"src":"14258:17:28","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_uint256_$","typeString":"mapping(uint256 => uint256)"}},"id":10367,"indexExpression":{"id":10366,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10312,"src":"14276:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"14258:26:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10369,"nodeType":"ExpressionStatement","src":"14251:33:28"}]},"documentation":{"id":10308,"nodeType":"StructuredDocumentation","src":"13704:90:28","text":"@dev Removes tokenId from _walletTokenIds[staker] using swap-and-pop for O(1) removal."},"id":10371,"implemented":true,"kind":"function","modifiers":[],"name":"_removeFromWallet","nameLocation":"13808:17:28","nodeType":"FunctionDefinition","parameters":{"id":10313,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10310,"mutability":"mutable","name":"staker","nameLocation":"13834:6:28","nodeType":"VariableDeclaration","scope":10371,"src":"13826:14:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10309,"name":"address","nodeType":"ElementaryTypeName","src":"13826:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10312,"mutability":"mutable","name":"tokenId","nameLocation":"13850:7:28","nodeType":"VariableDeclaration","scope":10371,"src":"13842:15:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10311,"name":"uint256","nodeType":"ElementaryTypeName","src":"13842:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13825:33:28"},"returnParameters":{"id":10314,"nodeType":"ParameterList","parameters":[],"src":"13868:0:28"},"scope":10372,"src":"13799:492:28","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":10373,"src":"1462:12831:28","usedErrors":[392,397,3981,3984,4087,9722,9725,9728,9731,9734,9737,9740,9743,9746],"usedEvents":[403,541,3973,3978,9755,9764,9775,9784]}],"src":"32:14262:28"},"id":28},"contracts/test/ReentrantERC721.sol":{"ast":{"absolutePath":"contracts/test/ReentrantERC721.sol","exportedSymbols":{"IReentrantStakingTarget":[10380],"ReentrantERC721":[10484]},"id":10485,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":10374,"literals":["solidity","^","0.8",".26"],"nodeType":"PragmaDirective","src":"32:24:29"},{"abstract":false,"baseContracts":[],"canonicalName":"IReentrantStakingTarget","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":10380,"linearizedBaseContracts":[10380],"name":"IReentrantStakingTarget","nameLocation":"68:23:29","nodeType":"ContractDefinition","nodes":[{"functionSelector":"a694fc3a","id":10379,"implemented":false,"kind":"function","modifiers":[],"name":"stake","nameLocation":"107:5:29","nodeType":"FunctionDefinition","parameters":{"id":10377,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10376,"mutability":"mutable","name":"tokenId","nameLocation":"121:7:29","nodeType":"VariableDeclaration","scope":10379,"src":"113:15:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10375,"name":"uint256","nodeType":"ElementaryTypeName","src":"113:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"112:17:29"},"returnParameters":{"id":10378,"nodeType":"ParameterList","parameters":[],"src":"138:0:29"},"scope":10380,"src":"98:41:29","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":10485,"src":"58:83:29","usedErrors":[],"usedEvents":[]},{"abstract":false,"baseContracts":[],"canonicalName":"ReentrantERC721","contractDependencies":[],"contractKind":"contract","documentation":{"id":10381,"nodeType":"StructuredDocumentation","src":"143:72:29","text":"@dev Test-only NFT double that calls stake again from transferFrom."},"fullyImplemented":true,"id":10484,"linearizedBaseContracts":[10484],"name":"ReentrantERC721","nameLocation":"224:15:29","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":10385,"mutability":"mutable","name":"_owners","nameLocation":"296:7:29","nodeType":"VariableDeclaration","scope":10484,"src":"246:57:29","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"typeName":{"id":10384,"keyName":"tokenId","keyNameLocation":"262:7:29","keyType":{"id":10382,"name":"uint256","nodeType":"ElementaryTypeName","src":"254:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"246:41:29","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"valueName":"owner","valueNameLocation":"281:5:29","valueType":{"id":10383,"name":"address","nodeType":"ElementaryTypeName","src":"273:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"private"},{"constant":false,"functionSelector":"4cf088d9","id":10388,"mutability":"immutable","name":"staking","nameLocation":"350:7:29","nodeType":"VariableDeclaration","scope":10484,"src":"309:48:29","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IReentrantStakingTarget_$10380","typeString":"contract IReentrantStakingTarget"},"typeName":{"id":10387,"nodeType":"UserDefinedTypeName","pathNode":{"id":10386,"name":"IReentrantStakingTarget","nameLocations":["309:23:29"],"nodeType":"IdentifierPath","referencedDeclaration":10380,"src":"309:23:29"},"referencedDeclaration":10380,"src":"309:23:29","typeDescriptions":{"typeIdentifier":"t_contract$_IReentrantStakingTarget_$10380","typeString":"contract IReentrantStakingTarget"}},"visibility":"public"},{"constant":false,"functionSelector":"d7751b85","id":10390,"mutability":"mutable","name":"attackEnabled","nameLocation":"375:13:29","nodeType":"VariableDeclaration","scope":10484,"src":"363:25:29","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":10389,"name":"bool","nodeType":"ElementaryTypeName","src":"363:4:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"public"},{"body":{"id":10401,"nodeType":"Block","src":"425:60:29","statements":[{"expression":{"id":10399,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10395,"name":"staking","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10388,"src":"435:7:29","typeDescriptions":{"typeIdentifier":"t_contract$_IReentrantStakingTarget_$10380","typeString":"contract IReentrantStakingTarget"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":10397,"name":"staking_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10392,"src":"469:8:29","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":10396,"name":"IReentrantStakingTarget","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10380,"src":"445:23:29","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IReentrantStakingTarget_$10380_$","typeString":"type(contract IReentrantStakingTarget)"}},"id":10398,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"445:33:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IReentrantStakingTarget_$10380","typeString":"contract IReentrantStakingTarget"}},"src":"435:43:29","typeDescriptions":{"typeIdentifier":"t_contract$_IReentrantStakingTarget_$10380","typeString":"contract IReentrantStakingTarget"}},"id":10400,"nodeType":"ExpressionStatement","src":"435:43:29"}]},"id":10402,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":10393,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10392,"mutability":"mutable","name":"staking_","nameLocation":"415:8:29","nodeType":"VariableDeclaration","scope":10402,"src":"407:16:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10391,"name":"address","nodeType":"ElementaryTypeName","src":"407:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"406:18:29"},"returnParameters":{"id":10394,"nodeType":"ParameterList","parameters":[],"src":"425:0:29"},"scope":10484,"src":"395:90:29","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":10415,"nodeType":"Block","src":"543:38:29","statements":[{"expression":{"id":10413,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":10409,"name":"_owners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10385,"src":"553:7:29","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":10411,"indexExpression":{"id":10410,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10406,"src":"561:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"553:16:29","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":10412,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10404,"src":"572:2:29","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"553:21:29","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":10414,"nodeType":"ExpressionStatement","src":"553:21:29"}]},"functionSelector":"40c10f19","id":10416,"implemented":true,"kind":"function","modifiers":[],"name":"mint","nameLocation":"500:4:29","nodeType":"FunctionDefinition","parameters":{"id":10407,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10404,"mutability":"mutable","name":"to","nameLocation":"513:2:29","nodeType":"VariableDeclaration","scope":10416,"src":"505:10:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10403,"name":"address","nodeType":"ElementaryTypeName","src":"505:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10406,"mutability":"mutable","name":"tokenId","nameLocation":"525:7:29","nodeType":"VariableDeclaration","scope":10416,"src":"517:15:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10405,"name":"uint256","nodeType":"ElementaryTypeName","src":"517:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"504:29:29"},"returnParameters":{"id":10408,"nodeType":"ParameterList","parameters":[],"src":"543:0:29"},"scope":10484,"src":"491:90:29","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":10432,"nodeType":"Block","src":"620:75:29","statements":[{"expression":{"id":10421,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10419,"name":"attackEnabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10390,"src":"630:13:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":10420,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"646:4:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"630:20:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10422,"nodeType":"ExpressionStatement","src":"630:20:29"},{"expression":{"id":10430,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":10423,"name":"_owners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10385,"src":"660:7:29","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":10425,"indexExpression":{"hexValue":"393939","id":10424,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"668:3:29","typeDescriptions":{"typeIdentifier":"t_rational_999_by_1","typeString":"int_const 999"},"value":"999"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"660:12:29","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":10428,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4294967268,"src":"683:4:29","typeDescriptions":{"typeIdentifier":"t_contract$_ReentrantERC721_$10484","typeString":"contract ReentrantERC721"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ReentrantERC721_$10484","typeString":"contract ReentrantERC721"}],"id":10427,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"675:7:29","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10426,"name":"address","nodeType":"ElementaryTypeName","src":"675:7:29","typeDescriptions":{}}},"id":10429,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"675:13:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"660:28:29","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":10431,"nodeType":"ExpressionStatement","src":"660:28:29"}]},"functionSelector":"21f16193","id":10433,"implemented":true,"kind":"function","modifiers":[],"name":"enableAttack","nameLocation":"596:12:29","nodeType":"FunctionDefinition","parameters":{"id":10417,"nodeType":"ParameterList","parameters":[],"src":"608:2:29"},"returnParameters":{"id":10418,"nodeType":"ParameterList","parameters":[],"src":"620:0:29"},"scope":10484,"src":"587:108:29","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":10444,"nodeType":"Block","src":"767:40:29","statements":[{"expression":{"baseExpression":{"id":10440,"name":"_owners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10385,"src":"784:7:29","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":10442,"indexExpression":{"id":10441,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10435,"src":"792:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"784:16:29","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":10439,"id":10443,"nodeType":"Return","src":"777:23:29"}]},"functionSelector":"6352211e","id":10445,"implemented":true,"kind":"function","modifiers":[],"name":"ownerOf","nameLocation":"710:7:29","nodeType":"FunctionDefinition","parameters":{"id":10436,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10435,"mutability":"mutable","name":"tokenId","nameLocation":"726:7:29","nodeType":"VariableDeclaration","scope":10445,"src":"718:15:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10434,"name":"uint256","nodeType":"ElementaryTypeName","src":"718:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"717:17:29"},"returnParameters":{"id":10439,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10438,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10445,"src":"758:7:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10437,"name":"address","nodeType":"ElementaryTypeName","src":"758:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"757:9:29"},"scope":10484,"src":"701:106:29","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":10482,"nodeType":"Block","src":"887:202:29","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":10459,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":10455,"name":"_owners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10385,"src":"905:7:29","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":10457,"indexExpression":{"id":10456,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10451,"src":"913:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"905:16:29","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":10458,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10447,"src":"925:4:29","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"905:24:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"77726f6e67206f776e6572","id":10460,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"931:13:29","typeDescriptions":{"typeIdentifier":"t_stringliteral_1910a1b31627cb44672fa41011dea21df90d76304ea37cd5fe77e38d944205f7","typeString":"literal_string \"wrong owner\""},"value":"wrong owner"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_1910a1b31627cb44672fa41011dea21df90d76304ea37cd5fe77e38d944205f7","typeString":"literal_string \"wrong owner\""}],"id":10454,"name":"require","nodeType":"Identifier","overloadedDeclarations":[4294967278,4294967278,4294967278],"referencedDeclaration":4294967278,"src":"897:7:29","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":10461,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"897:48:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10462,"nodeType":"ExpressionStatement","src":"897:48:29"},{"condition":{"id":10463,"name":"attackEnabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10390,"src":"959:13:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10475,"nodeType":"IfStatement","src":"955:97:29","trueBody":{"id":10474,"nodeType":"Block","src":"974:78:29","statements":[{"expression":{"id":10466,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10464,"name":"attackEnabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10390,"src":"988:13:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"66616c7365","id":10465,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1004:5:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"988:21:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10467,"nodeType":"ExpressionStatement","src":"988:21:29"},{"expression":{"arguments":[{"hexValue":"393939","id":10471,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1037:3:29","typeDescriptions":{"typeIdentifier":"t_rational_999_by_1","typeString":"int_const 999"},"value":"999"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_999_by_1","typeString":"int_const 999"}],"expression":{"id":10468,"name":"staking","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10388,"src":"1023:7:29","typeDescriptions":{"typeIdentifier":"t_contract$_IReentrantStakingTarget_$10380","typeString":"contract IReentrantStakingTarget"}},"id":10470,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1031:5:29","memberName":"stake","nodeType":"MemberAccess","referencedDeclaration":10379,"src":"1023:13:29","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256) external"}},"id":10472,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1023:18:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10473,"nodeType":"ExpressionStatement","src":"1023:18:29"}]}},{"expression":{"id":10480,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":10476,"name":"_owners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10385,"src":"1061:7:29","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":10478,"indexExpression":{"id":10477,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10451,"src":"1069:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1061:16:29","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":10479,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10449,"src":"1080:2:29","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1061:21:29","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":10481,"nodeType":"ExpressionStatement","src":"1061:21:29"}]},"functionSelector":"23b872dd","id":10483,"implemented":true,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"822:12:29","nodeType":"FunctionDefinition","parameters":{"id":10452,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10447,"mutability":"mutable","name":"from","nameLocation":"843:4:29","nodeType":"VariableDeclaration","scope":10483,"src":"835:12:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10446,"name":"address","nodeType":"ElementaryTypeName","src":"835:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10449,"mutability":"mutable","name":"to","nameLocation":"857:2:29","nodeType":"VariableDeclaration","scope":10483,"src":"849:10:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10448,"name":"address","nodeType":"ElementaryTypeName","src":"849:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10451,"mutability":"mutable","name":"tokenId","nameLocation":"869:7:29","nodeType":"VariableDeclaration","scope":10483,"src":"861:15:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10450,"name":"uint256","nodeType":"ElementaryTypeName","src":"861:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"834:43:29"},"returnParameters":{"id":10453,"nodeType":"ParameterList","parameters":[],"src":"887:0:29"},"scope":10484,"src":"813:276:29","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":10485,"src":"215:876:29","usedErrors":[],"usedEvents":[]}],"src":"32:1060:29"},"id":29}}}} diff --git a/artifacts/contracts/TricksforBoosterNFT.sol/TricksforBoosterNFT.json b/artifacts/contracts/TricksforBoosterNFT.sol/TricksforBoosterNFT.json index 4a52338..00c365a 100644 --- a/artifacts/contracts/TricksforBoosterNFT.sol/TricksforBoosterNFT.json +++ b/artifacts/contracts/TricksforBoosterNFT.sol/TricksforBoosterNFT.json @@ -1,5 +1,5 @@ { - "_format": "hh-sol-artifact-1", + "_format": "hh3-artifact-1", "contractName": "TricksforBoosterNFT", "sourceName": "contracts/TricksforBoosterNFT.sol", "abi": [ @@ -34,6 +34,21 @@ "internalType": "uint96", "name": "royaltyFeeBasisPoints_", "type": "uint96" + }, + { + "internalType": "address", + "name": "initialAdmin_", + "type": "address" + }, + { + "internalType": "address", + "name": "initialMinter_", + "type": "address" + }, + { + "internalType": "uint48", + "name": "defaultAdminDelay_", + "type": "uint48" } ], "stateMutability": "nonpayable", @@ -44,6 +59,33 @@ "name": "AccessControlBadConfirmation", "type": "error" }, + { + "inputs": [ + { + "internalType": "uint48", + "name": "schedule", + "type": "uint48" + } + ], + "name": "AccessControlEnforcedDefaultAdminDelay", + "type": "error" + }, + { + "inputs": [], + "name": "AccessControlEnforcedDefaultAdminRules", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "defaultAdmin", + "type": "address" + } + ], + "name": "AccessControlInvalidDefaultAdmin", + "type": "error" + }, { "inputs": [ { @@ -237,6 +279,22 @@ "name": "ExpectedPause", "type": "error" }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "bits", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "SafeCastOverflowedUintDowncast", + "type": "error" + }, { "inputs": [], "name": "ZeroAddress", @@ -292,6 +350,113 @@ "name": "ApprovalForAll", "type": "event" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "previousURI", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "newURI", + "type": "string" + } + ], + "name": "BaseURIUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "previousURI", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "newURI", + "type": "string" + } + ], + "name": "ContractURIUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "DefaultAdminDelayChangeCanceled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint48", + "name": "newDelay", + "type": "uint48" + }, + { + "indexed": false, + "internalType": "uint48", + "name": "effectSchedule", + "type": "uint48" + } + ], + "name": "DefaultAdminDelayChangeScheduled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "DefaultAdminTransferCanceled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "newAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint48", + "name": "acceptSchedule", + "type": "uint48" + } + ], + "name": "DefaultAdminTransferScheduled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint96", + "name": "feeBasisPoints", + "type": "uint96" + } + ], + "name": "DefaultRoyaltyUpdated", + "type": "event" + }, { "anonymous": false, "inputs": [ @@ -444,6 +609,13 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "acceptDefaultAdminTransfer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -481,6 +653,52 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "baseURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "beginDefaultAdminTransfer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "cancelDefaultAdminTransfer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint48", + "name": "newDelay", + "type": "uint48" + } + ], + "name": "changeDefaultAdminDelay", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [], "name": "contractURI", @@ -494,6 +712,45 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "defaultAdmin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "defaultAdminDelay", + "outputs": [ + { + "internalType": "uint48", + "name": "", + "type": "uint48" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "defaultAdminDelayIncreaseWait", + "outputs": [ + { + "internalType": "uint48", + "name": "", + "type": "uint48" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -611,6 +868,19 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -650,6 +920,42 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "pendingDefaultAdmin", + "outputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + }, + { + "internalType": "uint48", + "name": "schedule", + "type": "uint48" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pendingDefaultAdminDelay", + "outputs": [ + { + "internalType": "uint48", + "name": "newDelay", + "type": "uint48" + }, + { + "internalType": "uint48", + "name": "schedule", + "type": "uint48" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -659,7 +965,7 @@ }, { "internalType": "address", - "name": "callerConfirmation", + "name": "account", "type": "address" } ], @@ -686,6 +992,13 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [], + "name": "rollbackDefaultAdminDelay", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -928,8 +1241,11 @@ "type": "function" } ], - "bytecode": "0x608060405234801561000f575f80fd5b50604051611d96380380611d9683398101604081905261002e916102f9565b85855f61003b8382610457565b5060016100488282610457565b5050506001600160a01b0382166100725760405163d92e233d60e01b815260040160405180910390fd5b600a61007e8582610457565b50600b61008b8482610457565b5061009682826100d7565b6100a05f3361017e565b506100cb7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a63361017e565b50505050505050610511565b6127106001600160601b03821681101561011b57604051636f483d0960e01b81526001600160601b0383166004820152602481018290526044015b60405180910390fd5b6001600160a01b03831661014457604051635b6cc80560e11b81525f6004820152602401610112565b50604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600655565b5f8281526008602090815260408083206001600160a01b038516845290915281205460ff16610222575f8381526008602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101da3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610225565b505f5b92915050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f83011261024e575f80fd5b81516001600160401b038111156102675761026761022b565b604051601f8201601f19908116603f011681016001600160401b03811182821017156102955761029561022b565b6040528181528382016020018510156102ac575f80fd5b8160208501602083015e5f918101602001919091529392505050565b80516001600160a01b03811681146102de575f80fd5b919050565b80516001600160601b03811681146102de575f80fd5b5f805f805f8060c0878903121561030e575f80fd5b86516001600160401b03811115610323575f80fd5b61032f89828a0161023f565b602089015190975090506001600160401b0381111561034c575f80fd5b61035889828a0161023f565b604089015190965090506001600160401b03811115610375575f80fd5b61038189828a0161023f565b606089015190955090506001600160401b0381111561039e575f80fd5b6103aa89828a0161023f565b9350506103b9608088016102c8565b91506103c760a088016102e3565b90509295509295509295565b600181811c908216806103e757607f821691505b60208210810361040557634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561045257805f5260205f20601f840160051c810160208510156104305750805b601f840160051c820191505b8181101561044f575f815560010161043c565b50505b505050565b81516001600160401b038111156104705761047061022b565b6104848161047e84546103d3565b8461040b565b6020601f8211600181146104b6575f831561049f5750848201515b5f19600385901b1c1916600184901b17845561044f565b5f84815260208120601f198516915b828110156104e557878501518255602094850194600190920191016104c5565b508482101561050257868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b6118788061051e5f395ff3fe608060405234801561000f575f80fd5b50600436106101c6575f3560e01c80636352211e116100fe578063a217fddf1161009e578063d53913931161006e578063d5391393146103dd578063d547741f14610404578063e8a3d48514610417578063e985e9c51461041f575f80fd5b8063a217fddf1461039d578063a22cb465146103a4578063b88d4fde146103b7578063c87b56dd146103ca575f80fd5b806391d14854116100d957806391d148541461035c578063938e3d7b1461036f57806395d89b4114610382578063a14481941461038a575f80fd5b80636352211e1461032e57806370a08231146103415780638456cb5914610354575f80fd5b80632a55205a116101695780633f4ba83a116101445780633f4ba83a146102f557806342842e0e146102fd57806355f804b3146103105780635c975abb14610323575f80fd5b80632a55205a1461029d5780632f2ff15d146102cf57806336568abe146102e2575f80fd5b8063081812fc116101a4578063081812fc1461021c578063095ea7b31461024757806323b872dd1461025a578063248a9ca31461026d575f80fd5b806301ffc9a7146101ca57806302fa7c47146101f257806306fdde0314610207575b5f80fd5b6101dd6101d8366004611301565b610432565b60405190151581526020015b60405180910390f35b610205610200366004611337565b610442565b005b61020f61045b565b6040516101e991906113a5565b61022f61022a3660046113b7565b6104ea565b6040516001600160a01b0390911681526020016101e9565b6102056102553660046113ce565b610511565b6102056102683660046113f6565b610520565b61028f61027b3660046113b7565b5f9081526008602052604090206001015490565b6040519081526020016101e9565b6102b06102ab366004611430565b6105ae565b604080516001600160a01b0390931683526020830191909152016101e9565b6102056102dd366004611450565b610631565b6102056102f0366004611450565b610655565b610205610688565b61020561030b3660046113f6565b61069d565b61020561031e36600461147a565b6106b7565b60095460ff166101dd565b61022f61033c3660046113b7565b6106ce565b61028f61034f3660046114e8565b6106d8565b61020561071d565b6101dd61036a366004611450565b61072f565b61020561037d36600461147a565b610759565b61020f610770565b6102056103983660046113ce565b61077f565b61028f5f81565b6102056103b2366004611501565b6107bb565b6102056103c5366004611543565b6107c6565b61020f6103d83660046113b7565b6107de565b61028f7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b610205610412366004611450565b610843565b61020f610867565b6101dd61042d366004611620565b610876565b5f61043c826108a3565b92915050565b5f61044c816108c7565b61045683836108d1565b505050565b60605f805461046990611648565b80601f016020809104026020016040519081016040528092919081815260200182805461049590611648565b80156104e05780601f106104b7576101008083540402835291602001916104e0565b820191905f5260205f20905b8154815290600101906020018083116104c357829003601f168201915b5050505050905090565b5f6104f482610973565b505f828152600460205260409020546001600160a01b031661043c565b61051c8282336109ab565b5050565b6001600160a01b03821661054e57604051633250574960e11b81525f60048201526024015b60405180910390fd5b5f61055a8383336109b8565b9050836001600160a01b0316816001600160a01b0316146105a8576040516364283d7b60e01b81526001600160a01b0380861660048301526024820184905282166044820152606401610545565b50505050565b5f82815260076020526040812080548291906001600160a01b03811690600160a01b90046001600160601b0316816106015750506006546001600160a01b03811690600160a01b90046001600160601b03165b5f6127106106186001600160601b03841689611680565b61062291906116a3565b92989297509195505050505050565b5f8281526008602052604090206001015461064b816108c7565b6105a88383610aaa565b6001600160a01b038116331461067e5760405163334bd91960e11b815260040160405180910390fd5b6104568282610b3b565b5f610692816108c7565b61069a610ba6565b50565b61045683838360405180602001604052805f8152506107c6565b5f6106c1816108c7565b600a6105a8838583611706565b5f61043c82610973565b5f6001600160a01b038216610702576040516322718ad960e21b81525f6004820152602401610545565b506001600160a01b03165f9081526003602052604090205490565b5f610727816108c7565b61069a610bf8565b5f9182526008602090815260408084206001600160a01b0393909316845291905290205460ff1690565b5f610763816108c7565b600b6105a8838583611706565b60606001805461046990611648565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a66107a9816108c7565b6107b1610c35565b6104568383610c5b565b61051c338383610c74565b6107d1848484610520565b6105a83385858585610d3b565b60606107e982610973565b505f6107f3610e63565b90505f8151116108115760405180602001604052805f81525061083c565b8061081b84610e72565b60405160200161082c9291906117d7565b6040516020818303038152906040525b9392505050565b5f8281526008602052604090206001015461085d816108c7565b6105a88383610b3b565b6060600b805461046990611648565b6001600160a01b039182165f90815260056020908152604080832093909416825291909152205460ff1690565b5f6001600160e01b03198216637965db0b60e01b148061043c575061043c82610f02565b61069a8133610f26565b6127106001600160601b03821681101561091057604051636f483d0960e01b81526001600160601b038316600482015260248101829052604401610545565b6001600160a01b03831661093957604051635b6cc80560e11b81525f6004820152602401610545565b50604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600655565b5f818152600260205260408120546001600160a01b03168061043c57604051637e27328960e01b815260048101849052602401610545565b6104568383836001610f5f565b5f828152600260205260408120546001600160a01b03908116908316156109e4576109e4818486611063565b6001600160a01b03811615610a1e576109ff5f855f80610f5f565b6001600160a01b0381165f90815260036020526040902080545f190190555b6001600160a01b03851615610a4c576001600160a01b0385165f908152600360205260409020805460010190555b5f8481526002602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b5f610ab5838361072f565b610b34575f8381526008602090815260408083206001600160a01b03861684529091529020805460ff19166001179055610aec3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161043c565b505f61043c565b5f610b46838361072f565b15610b34575f8381526008602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161043c565b610bae6110c7565b6009805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b610c00610c35565b6009805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610bdb3390565b60095460ff1615610c595760405163d93c066560e01b815260040160405180910390fd5b565b61051c828260405180602001604052805f8152506110ea565b6001600160a01b038316610c9d5760405163a9fbf51f60e01b81525f6004820152602401610545565b6001600160a01b038216610ccf57604051630b61174360e31b81526001600160a01b0383166004820152602401610545565b6001600160a01b038381165f81815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383163b15610e5c57604051630a85bd0160e11b81526001600160a01b0384169063150b7a0290610d7d9088908890879087906004016117eb565b6020604051808303815f875af1925050508015610db7575060408051601f3d908101601f19168201909252610db491810190611827565b60015b610e1e573d808015610de4576040519150601f19603f3d011682016040523d82523d5f602084013e610de9565b606091505b5080515f03610e1657604051633250574960e11b81526001600160a01b0385166004820152602401610545565b805160208201fd5b6001600160e01b03198116630a85bd0160e11b14610e5a57604051633250574960e11b81526001600160a01b0385166004820152602401610545565b505b5050505050565b6060600a805461046990611648565b60605f610e7e83611101565b60010190505f8167ffffffffffffffff811115610e9d57610e9d61152f565b6040519080825280601f01601f191660200182016040528015610ec7576020820181803683370190505b5090508181016020015b5f19016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084610ed157509392505050565b5f6001600160e01b0319821663152a902d60e11b148061043c575061043c826111d8565b610f30828261072f565b61051c5760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610545565b8080610f7357506001600160a01b03821615155b15611034575f610f8284610973565b90506001600160a01b03831615801590610fae5750826001600160a01b0316816001600160a01b031614155b8015610fc15750610fbf8184610876565b155b15610fea5760405163a9fbf51f60e01b81526001600160a01b0384166004820152602401610545565b81156110325783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b50505f90815260046020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b61106e838383611227565b610456576001600160a01b03831661109c57604051637e27328960e01b815260048101829052602401610545565b60405163177e802f60e01b81526001600160a01b038316600482015260248101829052604401610545565b60095460ff16610c5957604051638dfc202b60e01b815260040160405180910390fd5b6110f4838361128b565b610456335f858585610d3b565b5f8072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b831061113f5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef8100000000831061116b576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061118957662386f26fc10000830492506010015b6305f5e10083106111a1576305f5e100830492506008015b61271083106111b557612710830492506004015b606483106111c7576064830492506002015b600a831061043c5760010192915050565b5f6001600160e01b031982166380ac58cd60e01b148061120857506001600160e01b03198216635b5e139f60e01b145b8061043c57506301ffc9a760e01b6001600160e01b031983161461043c565b5f6001600160a01b038316158015906112835750826001600160a01b0316846001600160a01b0316148061126057506112608484610876565b8061128357505f828152600460205260409020546001600160a01b038481169116145b949350505050565b6001600160a01b0382166112b457604051633250574960e11b81525f6004820152602401610545565b5f6112c083835f6109b8565b90506001600160a01b03811615610456576040516339e3563760e11b81525f6004820152602401610545565b6001600160e01b03198116811461069a575f80fd5b5f60208284031215611311575f80fd5b813561083c816112ec565b80356001600160a01b0381168114611332575f80fd5b919050565b5f8060408385031215611348575f80fd5b6113518361131c565b915060208301356001600160601b038116811461136c575f80fd5b809150509250929050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f61083c6020830184611377565b5f602082840312156113c7575f80fd5b5035919050565b5f80604083850312156113df575f80fd5b6113e88361131c565b946020939093013593505050565b5f805f60608486031215611408575f80fd5b6114118461131c565b925061141f6020850161131c565b929592945050506040919091013590565b5f8060408385031215611441575f80fd5b50508035926020909101359150565b5f8060408385031215611461575f80fd5b823591506114716020840161131c565b90509250929050565b5f806020838503121561148b575f80fd5b823567ffffffffffffffff8111156114a1575f80fd5b8301601f810185136114b1575f80fd5b803567ffffffffffffffff8111156114c7575f80fd5b8560208284010111156114d8575f80fd5b6020919091019590945092505050565b5f602082840312156114f8575f80fd5b61083c8261131c565b5f8060408385031215611512575f80fd5b61151b8361131c565b91506020830135801515811461136c575f80fd5b634e487b7160e01b5f52604160045260245ffd5b5f805f8060808587031215611556575f80fd5b61155f8561131c565b935061156d6020860161131c565b925060408501359150606085013567ffffffffffffffff81111561158f575f80fd5b8501601f8101871361159f575f80fd5b803567ffffffffffffffff8111156115b9576115b961152f565b604051601f8201601f19908116603f0116810167ffffffffffffffff811182821017156115e8576115e861152f565b6040528181528282016020018910156115ff575f80fd5b816020840160208301375f6020838301015280935050505092959194509250565b5f8060408385031215611631575f80fd5b61163a8361131c565b91506114716020840161131c565b600181811c9082168061165c57607f821691505b60208210810361167a57634e487b7160e01b5f52602260045260245ffd5b50919050565b808202811582820484141761043c57634e487b7160e01b5f52601160045260245ffd5b5f826116bd57634e487b7160e01b5f52601260045260245ffd5b500490565b601f82111561045657805f5260205f20601f840160051c810160208510156116e75750805b601f840160051c820191505b81811015610e5c575f81556001016116f3565b67ffffffffffffffff83111561171e5761171e61152f565b6117328361172c8354611648565b836116c2565b5f601f841160018114611763575f851561174c5750838201355b5f19600387901b1c1916600186901b178355610e5c565b5f83815260208120601f198716915b828110156117925786850135825560209485019460019092019101611772565b50868210156117ae575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b5f81518060208401855e5f93019283525090919050565b5f6112836117e583866117c0565b846117c0565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f9061181d90830184611377565b9695505050505050565b5f60208284031215611837575f80fd5b815161083c816112ec56fea26469706673582212207238c505a1ea5c35d674187833114639c9f91d9f6906aa465815b4fc0e859feb64736f6c634300081a0033", - "deployedBytecode": "0x608060405234801561000f575f80fd5b50600436106101c6575f3560e01c80636352211e116100fe578063a217fddf1161009e578063d53913931161006e578063d5391393146103dd578063d547741f14610404578063e8a3d48514610417578063e985e9c51461041f575f80fd5b8063a217fddf1461039d578063a22cb465146103a4578063b88d4fde146103b7578063c87b56dd146103ca575f80fd5b806391d14854116100d957806391d148541461035c578063938e3d7b1461036f57806395d89b4114610382578063a14481941461038a575f80fd5b80636352211e1461032e57806370a08231146103415780638456cb5914610354575f80fd5b80632a55205a116101695780633f4ba83a116101445780633f4ba83a146102f557806342842e0e146102fd57806355f804b3146103105780635c975abb14610323575f80fd5b80632a55205a1461029d5780632f2ff15d146102cf57806336568abe146102e2575f80fd5b8063081812fc116101a4578063081812fc1461021c578063095ea7b31461024757806323b872dd1461025a578063248a9ca31461026d575f80fd5b806301ffc9a7146101ca57806302fa7c47146101f257806306fdde0314610207575b5f80fd5b6101dd6101d8366004611301565b610432565b60405190151581526020015b60405180910390f35b610205610200366004611337565b610442565b005b61020f61045b565b6040516101e991906113a5565b61022f61022a3660046113b7565b6104ea565b6040516001600160a01b0390911681526020016101e9565b6102056102553660046113ce565b610511565b6102056102683660046113f6565b610520565b61028f61027b3660046113b7565b5f9081526008602052604090206001015490565b6040519081526020016101e9565b6102b06102ab366004611430565b6105ae565b604080516001600160a01b0390931683526020830191909152016101e9565b6102056102dd366004611450565b610631565b6102056102f0366004611450565b610655565b610205610688565b61020561030b3660046113f6565b61069d565b61020561031e36600461147a565b6106b7565b60095460ff166101dd565b61022f61033c3660046113b7565b6106ce565b61028f61034f3660046114e8565b6106d8565b61020561071d565b6101dd61036a366004611450565b61072f565b61020561037d36600461147a565b610759565b61020f610770565b6102056103983660046113ce565b61077f565b61028f5f81565b6102056103b2366004611501565b6107bb565b6102056103c5366004611543565b6107c6565b61020f6103d83660046113b7565b6107de565b61028f7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b610205610412366004611450565b610843565b61020f610867565b6101dd61042d366004611620565b610876565b5f61043c826108a3565b92915050565b5f61044c816108c7565b61045683836108d1565b505050565b60605f805461046990611648565b80601f016020809104026020016040519081016040528092919081815260200182805461049590611648565b80156104e05780601f106104b7576101008083540402835291602001916104e0565b820191905f5260205f20905b8154815290600101906020018083116104c357829003601f168201915b5050505050905090565b5f6104f482610973565b505f828152600460205260409020546001600160a01b031661043c565b61051c8282336109ab565b5050565b6001600160a01b03821661054e57604051633250574960e11b81525f60048201526024015b60405180910390fd5b5f61055a8383336109b8565b9050836001600160a01b0316816001600160a01b0316146105a8576040516364283d7b60e01b81526001600160a01b0380861660048301526024820184905282166044820152606401610545565b50505050565b5f82815260076020526040812080548291906001600160a01b03811690600160a01b90046001600160601b0316816106015750506006546001600160a01b03811690600160a01b90046001600160601b03165b5f6127106106186001600160601b03841689611680565b61062291906116a3565b92989297509195505050505050565b5f8281526008602052604090206001015461064b816108c7565b6105a88383610aaa565b6001600160a01b038116331461067e5760405163334bd91960e11b815260040160405180910390fd5b6104568282610b3b565b5f610692816108c7565b61069a610ba6565b50565b61045683838360405180602001604052805f8152506107c6565b5f6106c1816108c7565b600a6105a8838583611706565b5f61043c82610973565b5f6001600160a01b038216610702576040516322718ad960e21b81525f6004820152602401610545565b506001600160a01b03165f9081526003602052604090205490565b5f610727816108c7565b61069a610bf8565b5f9182526008602090815260408084206001600160a01b0393909316845291905290205460ff1690565b5f610763816108c7565b600b6105a8838583611706565b60606001805461046990611648565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a66107a9816108c7565b6107b1610c35565b6104568383610c5b565b61051c338383610c74565b6107d1848484610520565b6105a83385858585610d3b565b60606107e982610973565b505f6107f3610e63565b90505f8151116108115760405180602001604052805f81525061083c565b8061081b84610e72565b60405160200161082c9291906117d7565b6040516020818303038152906040525b9392505050565b5f8281526008602052604090206001015461085d816108c7565b6105a88383610b3b565b6060600b805461046990611648565b6001600160a01b039182165f90815260056020908152604080832093909416825291909152205460ff1690565b5f6001600160e01b03198216637965db0b60e01b148061043c575061043c82610f02565b61069a8133610f26565b6127106001600160601b03821681101561091057604051636f483d0960e01b81526001600160601b038316600482015260248101829052604401610545565b6001600160a01b03831661093957604051635b6cc80560e11b81525f6004820152602401610545565b50604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600655565b5f818152600260205260408120546001600160a01b03168061043c57604051637e27328960e01b815260048101849052602401610545565b6104568383836001610f5f565b5f828152600260205260408120546001600160a01b03908116908316156109e4576109e4818486611063565b6001600160a01b03811615610a1e576109ff5f855f80610f5f565b6001600160a01b0381165f90815260036020526040902080545f190190555b6001600160a01b03851615610a4c576001600160a01b0385165f908152600360205260409020805460010190555b5f8481526002602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b5f610ab5838361072f565b610b34575f8381526008602090815260408083206001600160a01b03861684529091529020805460ff19166001179055610aec3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161043c565b505f61043c565b5f610b46838361072f565b15610b34575f8381526008602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161043c565b610bae6110c7565b6009805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b610c00610c35565b6009805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610bdb3390565b60095460ff1615610c595760405163d93c066560e01b815260040160405180910390fd5b565b61051c828260405180602001604052805f8152506110ea565b6001600160a01b038316610c9d5760405163a9fbf51f60e01b81525f6004820152602401610545565b6001600160a01b038216610ccf57604051630b61174360e31b81526001600160a01b0383166004820152602401610545565b6001600160a01b038381165f81815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383163b15610e5c57604051630a85bd0160e11b81526001600160a01b0384169063150b7a0290610d7d9088908890879087906004016117eb565b6020604051808303815f875af1925050508015610db7575060408051601f3d908101601f19168201909252610db491810190611827565b60015b610e1e573d808015610de4576040519150601f19603f3d011682016040523d82523d5f602084013e610de9565b606091505b5080515f03610e1657604051633250574960e11b81526001600160a01b0385166004820152602401610545565b805160208201fd5b6001600160e01b03198116630a85bd0160e11b14610e5a57604051633250574960e11b81526001600160a01b0385166004820152602401610545565b505b5050505050565b6060600a805461046990611648565b60605f610e7e83611101565b60010190505f8167ffffffffffffffff811115610e9d57610e9d61152f565b6040519080825280601f01601f191660200182016040528015610ec7576020820181803683370190505b5090508181016020015b5f19016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084610ed157509392505050565b5f6001600160e01b0319821663152a902d60e11b148061043c575061043c826111d8565b610f30828261072f565b61051c5760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610545565b8080610f7357506001600160a01b03821615155b15611034575f610f8284610973565b90506001600160a01b03831615801590610fae5750826001600160a01b0316816001600160a01b031614155b8015610fc15750610fbf8184610876565b155b15610fea5760405163a9fbf51f60e01b81526001600160a01b0384166004820152602401610545565b81156110325783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b50505f90815260046020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b61106e838383611227565b610456576001600160a01b03831661109c57604051637e27328960e01b815260048101829052602401610545565b60405163177e802f60e01b81526001600160a01b038316600482015260248101829052604401610545565b60095460ff16610c5957604051638dfc202b60e01b815260040160405180910390fd5b6110f4838361128b565b610456335f858585610d3b565b5f8072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b831061113f5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef8100000000831061116b576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061118957662386f26fc10000830492506010015b6305f5e10083106111a1576305f5e100830492506008015b61271083106111b557612710830492506004015b606483106111c7576064830492506002015b600a831061043c5760010192915050565b5f6001600160e01b031982166380ac58cd60e01b148061120857506001600160e01b03198216635b5e139f60e01b145b8061043c57506301ffc9a760e01b6001600160e01b031983161461043c565b5f6001600160a01b038316158015906112835750826001600160a01b0316846001600160a01b0316148061126057506112608484610876565b8061128357505f828152600460205260409020546001600160a01b038481169116145b949350505050565b6001600160a01b0382166112b457604051633250574960e11b81525f6004820152602401610545565b5f6112c083835f6109b8565b90506001600160a01b03811615610456576040516339e3563760e11b81525f6004820152602401610545565b6001600160e01b03198116811461069a575f80fd5b5f60208284031215611311575f80fd5b813561083c816112ec565b80356001600160a01b0381168114611332575f80fd5b919050565b5f8060408385031215611348575f80fd5b6113518361131c565b915060208301356001600160601b038116811461136c575f80fd5b809150509250929050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f61083c6020830184611377565b5f602082840312156113c7575f80fd5b5035919050565b5f80604083850312156113df575f80fd5b6113e88361131c565b946020939093013593505050565b5f805f60608486031215611408575f80fd5b6114118461131c565b925061141f6020850161131c565b929592945050506040919091013590565b5f8060408385031215611441575f80fd5b50508035926020909101359150565b5f8060408385031215611461575f80fd5b823591506114716020840161131c565b90509250929050565b5f806020838503121561148b575f80fd5b823567ffffffffffffffff8111156114a1575f80fd5b8301601f810185136114b1575f80fd5b803567ffffffffffffffff8111156114c7575f80fd5b8560208284010111156114d8575f80fd5b6020919091019590945092505050565b5f602082840312156114f8575f80fd5b61083c8261131c565b5f8060408385031215611512575f80fd5b61151b8361131c565b91506020830135801515811461136c575f80fd5b634e487b7160e01b5f52604160045260245ffd5b5f805f8060808587031215611556575f80fd5b61155f8561131c565b935061156d6020860161131c565b925060408501359150606085013567ffffffffffffffff81111561158f575f80fd5b8501601f8101871361159f575f80fd5b803567ffffffffffffffff8111156115b9576115b961152f565b604051601f8201601f19908116603f0116810167ffffffffffffffff811182821017156115e8576115e861152f565b6040528181528282016020018910156115ff575f80fd5b816020840160208301375f6020838301015280935050505092959194509250565b5f8060408385031215611631575f80fd5b61163a8361131c565b91506114716020840161131c565b600181811c9082168061165c57607f821691505b60208210810361167a57634e487b7160e01b5f52602260045260245ffd5b50919050565b808202811582820484141761043c57634e487b7160e01b5f52601160045260245ffd5b5f826116bd57634e487b7160e01b5f52601260045260245ffd5b500490565b601f82111561045657805f5260205f20601f840160051c810160208510156116e75750805b601f840160051c820191505b81811015610e5c575f81556001016116f3565b67ffffffffffffffff83111561171e5761171e61152f565b6117328361172c8354611648565b836116c2565b5f601f841160018114611763575f851561174c5750838201355b5f19600387901b1c1916600186901b178355610e5c565b5f83815260208120601f198716915b828110156117925786850135825560209485019460019092019101611772565b50868210156117ae575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b5f81518060208401855e5f93019283525090919050565b5f6112836117e583866117c0565b846117c0565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f9061181d90830184611377565b9695505050505050565b5f60208284031215611837575f80fd5b815161083c816112ec56fea26469706673582212207238c505a1ea5c35d674187833114639c9f91d9f6906aa465815b4fc0e859feb64736f6c634300081a0033", + "bytecode": "0x608060405234801561000f575f80fd5b5060405161295238038061295283398101604081905261002e916103f0565b80838a8a5f61003d8382610580565b50600161004a8282610580565b5050506001600160a01b03811661007b57604051636116401160e11b81525f60048201526024015b60405180910390fd5b600980546001600160d01b0316600160d01b65ffffffffffff8516021790556100a45f82610151565b5050506001600160a01b03851615806100c457506001600160a01b038316155b806100d657506001600160a01b038216155b156100f45760405163d92e233d60e01b815260040160405180910390fd5b600c6101008882610580565b50600d61010d8782610580565b5061011885856101c0565b6101427f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a683610151565b5050505050505050505061063a565b5f826101ad575f61016a600a546001600160a01b031690565b6001600160a01b03161461019157604051631fe1e13d60e11b815260040160405180910390fd5b600a80546001600160a01b0319166001600160a01b0384161790555b6101b78383610262565b90505b92915050565b6127106001600160601b0382168110156101ff57604051636f483d0960e01b81526001600160601b038316600482015260248101829052604401610072565b6001600160a01b03831661022857604051635b6cc80560e11b81525f6004820152602401610072565b50604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600655565b5f8281526008602090815260408083206001600160a01b038516845290915281205460ff16610306575f8381526008602090815260408083206001600160a01b03861684529091529020805460ff191660011790556102be3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101ba565b505f6101ba565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112610330575f80fd5b81516001600160401b038111156103495761034961030d565b604051601f8201601f19908116603f011681016001600160401b03811182821017156103775761037761030d565b60405281815283820160200185101561038e575f80fd5b8160208501602083015e5f918101602001919091529392505050565b80516001600160a01b03811681146103c0575f80fd5b919050565b80516001600160601b03811681146103c0575f80fd5b805165ffffffffffff811681146103c0575f80fd5b5f805f805f805f805f6101208a8c031215610409575f80fd5b89516001600160401b0381111561041e575f80fd5b61042a8c828d01610321565b60208c0151909a5090506001600160401b03811115610447575f80fd5b6104538c828d01610321565b60408c015190995090506001600160401b03811115610470575f80fd5b61047c8c828d01610321565b60608c015190985090506001600160401b03811115610499575f80fd5b6104a58c828d01610321565b9650506104b460808b016103aa565b94506104c260a08b016103c5565b93506104d060c08b016103aa565b92506104de60e08b016103aa565b91506104ed6101008b016103db565b90509295985092959850929598565b600181811c9082168061051057607f821691505b60208210810361052e57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561057b57805f5260205f20601f840160051c810160208510156105595750805b601f840160051c820191505b81811015610578575f8155600101610565565b50505b505050565b81516001600160401b038111156105995761059961030d565b6105ad816105a784546104fc565b84610534565b6020601f8211600181146105df575f83156105c85750848201515b5f19600385901b1c1916600184901b178455610578565b5f84815260208120601f198516915b8281101561060e57878501518255602094850194600190920191016105ee565b508482101561062b57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b61230b806106475f395ff3fe608060405234801561000f575f80fd5b506004361061024a575f3560e01c806370a0823111610140578063a22cb465116100bf578063cf6eefb711610084578063cf6eefb714610503578063d539139314610531578063d547741f14610558578063d602b9fd1461056b578063e8a3d48514610573578063e985e9c51461057b575f80fd5b8063a22cb465146104ba578063b88d4fde146104cd578063c87b56dd146104e0578063cc8463c8146104f3578063cefc1429146104fb575f80fd5b8063938e3d7b11610105578063938e3d7b1461045e57806395d89b4114610471578063a144819414610479578063a1eda53c1461048c578063a217fddf146104b3575f80fd5b806370a08231146104175780638456cb591461042a57806384ef8ffc146104325780638da5cb5b1461044357806391d148541461044b575f80fd5b80632f2ff15d116101cc5780635c975abb116101915780635c975abb146103cb578063634e93da146103d65780636352211e146103e9578063649a5ec7146103fc5780636c0360eb1461040f575f80fd5b80632f2ff15d1461037757806336568abe1461038a5780633f4ba83a1461039d57806342842e0e146103a557806355f804b3146103b8575f80fd5b8063095ea7b311610212578063095ea7b3146102e75780630aa6220b146102fa57806323b872dd14610302578063248a9ca3146103155780632a55205a14610345575f80fd5b806301ffc9a71461024e578063022d63fb1461027657806302fa7c471461029257806306fdde03146102a7578063081812fc146102bc575b5f80fd5b61026161025c366004611ce7565b61058e565b60405190151581526020015b60405180910390f35b620697805b60405165ffffffffffff909116815260200161026d565b6102a56102a0366004611d1d565b61059e565b005b6102af610625565b60405161026d9190611d8b565b6102cf6102ca366004611d9d565b6106b4565b6040516001600160a01b03909116815260200161026d565b6102a56102f5366004611db4565b6106db565b6102a56106ea565b6102a5610310366004611ddc565b6106ff565b610337610323366004611d9d565b5f9081526008602052604090206001015490565b60405190815260200161026d565b610358610353366004611e16565b61078d565b604080516001600160a01b03909316835260208301919091520161026d565b6102a5610385366004611e36565b610810565b6102a5610398366004611e36565b610838565b6102a56108de565b6102a56103b3366004611ddc565b6108f0565b6102a56103c6366004611e60565b61090f565b600b5460ff16610261565b6102a56103e4366004611ece565b6109f8565b6102cf6103f7366004611d9d565b610a0b565b6102a561040a366004611ee7565b610a15565b6102af610a28565b610337610425366004611ece565b610a37565b6102a5610a7c565b600a546001600160a01b03166102cf565b6102cf610a8e565b610261610459366004611e36565b610aa6565b6102a561046c366004611e60565b610ad0565b6102af610bab565b6102a5610487366004611db4565b610bba565b610494610bf6565b6040805165ffffffffffff93841681529290911660208301520161026d565b6103375f81565b6102a56104c8366004611f0c565b610c48565b6102a56104db366004611f4e565b610c53565b6102af6104ee366004611d9d565b610c6b565b61027b610cd0565b6102a5610d2e565b61050b610d6d565b604080516001600160a01b03909316835265ffffffffffff90911660208301520161026d565b6103377f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b6102a5610566366004611e36565b610d8e565b6102a5610db6565b6102af610dc8565b61026161058936600461202b565b610dd7565b5f61059882610e04565b92915050565b5f6105a881610e28565b6001600160a01b0383166105cf5760405163d92e233d60e01b815260040160405180910390fd5b6105d98383610e32565b6040516001600160601b03831681526001600160a01b038416907fe12d7d5bdb8218a22277dca8f854dd4573a1cea3d3e4808dc567df9eb1c14bf49060200160405180910390a2505050565b60605f805461063390612053565b80601f016020809104026020016040519081016040528092919081815260200182805461065f90612053565b80156106aa5780601f10610681576101008083540402835291602001916106aa565b820191905f5260205f20905b81548152906001019060200180831161068d57829003601f168201915b5050505050905090565b5f6106be82610ed4565b505f828152600460205260409020546001600160a01b0316610598565b6106e6828233610f0c565b5050565b5f6106f481610e28565b6106fc610f19565b50565b6001600160a01b03821661072d57604051633250574960e11b81525f60048201526024015b60405180910390fd5b5f610739838333610f25565b9050836001600160a01b0316816001600160a01b031614610787576040516364283d7b60e01b81526001600160a01b0380861660048301526024820184905282166044820152606401610724565b50505050565b5f82815260076020526040812080548291906001600160a01b03811690600160a01b90046001600160601b0316816107e05750506006546001600160a01b03811690600160a01b90046001600160601b03165b5f6127106107f76001600160601b0384168961209f565b61080191906120b6565b92989297509195505050505050565b8161082e57604051631fe1e13d60e11b815260040160405180910390fd5b6106e68282611017565b811580156108535750600a546001600160a01b038281169116145b156108d4575f80610862610d6d565b90925090506001600160a01b038216151580610884575065ffffffffffff8116155b8061089757504265ffffffffffff821610155b156108bf576040516319ca5ebb60e01b815265ffffffffffff82166004820152602401610724565b50506009805465ffffffffffff60a01b191690555b6106e6828261103b565b5f6108e881610e28565b6106fc61106e565b61090a83838360405180602001604052805f815250610c53565b505050565b5f61091981610e28565b5f600c805461092790612053565b80601f016020809104026020016040519081016040528092919081815260200182805461095390612053565b801561099e5780601f106109755761010080835404028352916020019161099e565b820191905f5260205f20905b81548152906001019060200180831161098157829003601f168201915b505050505090508383600c91826109b6929190612119565b507f309b29ded109b9e28fb9885757b3e0096eb75c51d23aa4635d68bcd569f6adc18185856040516109ea939291906121d3565b60405180910390a150505050565b5f610a0281610e28565b6106e6826110c0565b5f61059882610ed4565b5f610a1f81610e28565b6106e682611132565b6060600c805461063390612053565b5f6001600160a01b038216610a61576040516322718ad960e21b81525f6004820152602401610724565b506001600160a01b03165f9081526003602052604090205490565b5f610a8681610e28565b6106fc6111a1565b5f610aa1600a546001600160a01b031690565b905090565b5f9182526008602090815260408084206001600160a01b0393909316845291905290205460ff1690565b5f610ada81610e28565b5f600d8054610ae890612053565b80601f0160208091040260200160405190810160405280929190818152602001828054610b1490612053565b8015610b5f5780601f10610b3657610100808354040283529160200191610b5f565b820191905f5260205f20905b815481529060010190602001808311610b4257829003601f168201915b505050505090508383600d9182610b77929190612119565b507fc9c7c3fe08b88b4df9d4d47ef47d2c43d55c025a0ba88ca442580ed9e7348a168185856040516109ea939291906121d3565b60606001805461063390612053565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6610be481610e28565b610bec6111de565b61090a8383611202565b600a545f90600160d01b900465ffffffffffff168015158015610c2157504265ffffffffffff821610155b610c2c575f80610c40565b600a54600160a01b900465ffffffffffff16815b915091509091565b6106e633838361121b565b610c5e8484846106ff565b61078733858585856112e2565b6060610c7682610ed4565b505f610c80610a28565b90505f815111610c9e5760405180602001604052805f815250610cc9565b80610ca88461140a565b604051602001610cb992919061222e565b6040516020818303038152906040525b9392505050565b600a545f90600160d01b900465ffffffffffff168015158015610cfa57504265ffffffffffff8216105b610d1557600954600160d01b900465ffffffffffff16610d28565b600a54600160a01b900465ffffffffffff165b91505090565b5f610d37610d6d565b509050336001600160a01b03821614610d6557604051636116401160e11b8152336004820152602401610724565b6106fc61149a565b6009546001600160a01b03811691600160a01b90910465ffffffffffff1690565b81610dac57604051631fe1e13d60e11b815260040160405180910390fd5b6106e68282611530565b5f610dc081610e28565b6106fc611554565b6060600d805461063390612053565b6001600160a01b039182165f90815260056020908152604080832093909416825291909152205460ff1690565b5f6001600160e01b031982166318a4c3c360e11b148061059857506105988261155e565b6106fc8133611582565b6127106001600160601b038216811015610e7157604051636f483d0960e01b81526001600160601b038316600482015260248101829052604401610724565b6001600160a01b038316610e9a57604051635b6cc80560e11b81525f6004820152602401610724565b50604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600655565b5f818152600260205260408120546001600160a01b03168061059857604051637e27328960e01b815260048101849052602401610724565b61090a83838360016115bb565b610f235f806116bf565b565b5f828152600260205260408120546001600160a01b0390811690831615610f5157610f5181848661177e565b6001600160a01b03811615610f8b57610f6c5f855f806115bb565b6001600160a01b0381165f90815260036020526040902080545f190190555b6001600160a01b03851615610fb9576001600160a01b0385165f908152600360205260409020805460010190555b5f8481526002602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b5f8281526008602052604090206001015461103181610e28565b61078783836117e2565b6001600160a01b03811633146110645760405163334bd91960e11b815260040160405180910390fd5b61090a8282611848565b611076611884565b600b805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b5f6110c9610cd0565b6110d2426118a7565b6110dc9190612242565b90506110e882826118dd565b60405165ffffffffffff821681526001600160a01b038316907f3377dc44241e779dd06afab5b788a35ca5f3b778836e2990bdb26a2a4b2e5ed69060200160405180910390a25050565b5f61113c8261195a565b611145426118a7565b61114f9190612242565b905061115b82826116bf565b6040805165ffffffffffff8085168252831660208201527ff1038c18cf84a56e432fdbfaf746924b7ea511dfe03a6506a0ceba4888788d9b910160405180910390a15050565b6111a96111de565b600b805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586110a33390565b600b5460ff1615610f235760405163d93c066560e01b815260040160405180910390fd5b6106e6828260405180602001604052805f8152506119a1565b6001600160a01b0383166112445760405163a9fbf51f60e01b81525f6004820152602401610724565b6001600160a01b03821661127657604051630b61174360e31b81526001600160a01b0383166004820152602401610724565b6001600160a01b038381165f81815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383163b1561140357604051630a85bd0160e11b81526001600160a01b0384169063150b7a0290611324908890889087908790600401612260565b6020604051808303815f875af192505050801561135e575060408051601f3d908101601f1916820190925261135b9181019061229c565b60015b6113c5573d80801561138b576040519150601f19603f3d011682016040523d82523d5f602084013e611390565b606091505b5080515f036113bd57604051633250574960e11b81526001600160a01b0385166004820152602401610724565b805160208201fd5b6001600160e01b03198116630a85bd0160e11b1461140157604051633250574960e11b81526001600160a01b0385166004820152602401610724565b505b5050505050565b60605f611416836119b8565b60010190505f8167ffffffffffffffff81111561143557611435611f3a565b6040519080825280601f01601f19166020018201604052801561145f576020820181803683370190505b5090508181016020015b5f19016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461146957509392505050565b5f806114a4610d6d565b915091506114b98165ffffffffffff16151590565b15806114cd57504265ffffffffffff821610155b156114f5576040516319ca5ebb60e01b815265ffffffffffff82166004820152602401610724565b6115105f61150b600a546001600160a01b031690565b611848565b5061151b5f836117e2565b5050600980546001600160d01b031916905550565b5f8281526008602052604090206001015461154a81610e28565b6107878383611848565b610f235f806118dd565b5f6001600160e01b03198216637965db0b60e01b1480610598575061059882611a8f565b61158c8282610aa6565b6106e65760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610724565b80806115cf57506001600160a01b03821615155b15611690575f6115de84610ed4565b90506001600160a01b0383161580159061160a5750826001600160a01b0316816001600160a01b031614155b801561161d575061161b8184610dd7565b155b156116465760405163a9fbf51f60e01b81526001600160a01b0384166004820152602401610724565b811561168e5783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b50505f90815260046020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b600a54600160d01b900465ffffffffffff168015611741574265ffffffffffff8216101561171857600a54600980546001600160d01b0316600160a01b90920465ffffffffffff16600160d01b02919091179055611741565b6040517f2b1fa2edafe6f7b9e97c1a9e0c3660e645beb2dcaa2d45bdbf9beaf5472e1ec5905f90a15b50600a80546001600160a01b0316600160a01b65ffffffffffff948516026001600160d01b031617600160d01b9290931691909102919091179055565b611789838383611ab3565b61090a576001600160a01b0383166117b757604051637e27328960e01b815260048101829052602401610724565b60405163177e802f60e01b81526001600160a01b038316600482015260248101829052604401610724565b5f8261183e575f6117fb600a546001600160a01b031690565b6001600160a01b03161461182257604051631fe1e13d60e11b815260040160405180910390fd5b600a80546001600160a01b0319166001600160a01b0384161790555b610cc98383611b17565b5f821580156118645750600a546001600160a01b038381169116145b1561187a57600a80546001600160a01b03191690555b610cc98383611ba8565b600b5460ff16610f2357604051638dfc202b60e01b815260040160405180910390fd5b5f65ffffffffffff8211156118d9576040516306dfcc6560e41b81526030600482015260248101839052604401610724565b5090565b5f6118e6610d6d565b6009805465ffffffffffff8616600160a01b026001600160d01b03199091166001600160a01b03881617179055915061192890508165ffffffffffff16151590565b1561090a576040517f8886ebfc4259abdbc16601dd8fb5678e54878f47b3c34836cfc51154a9605109905f90a1505050565b5f80611964610cd0565b90508065ffffffffffff168365ffffffffffff161161198c5761198783826122b7565b610cc9565b610cc965ffffffffffff841662069780611c13565b6119ab8383611c22565b61090a335f8585856112e2565b5f8072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106119f65772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310611a22576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310611a4057662386f26fc10000830492506010015b6305f5e1008310611a58576305f5e100830492506008015b6127108310611a6c57612710830492506004015b60648310611a7e576064830492506002015b600a83106105985760010192915050565b5f6001600160e01b0319821663152a902d60e11b1480610598575061059882611c83565b5f6001600160a01b03831615801590611b0f5750826001600160a01b0316846001600160a01b03161480611aec5750611aec8484610dd7565b80611b0f57505f828152600460205260409020546001600160a01b038481169116145b949350505050565b5f611b228383610aa6565b611ba1575f8381526008602090815260408083206001600160a01b03861684529091529020805460ff19166001179055611b593390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610598565b505f610598565b5f611bb38383610aa6565b15611ba1575f8381526008602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610598565b5f828218828410028218610cc9565b6001600160a01b038216611c4b57604051633250574960e11b81525f6004820152602401610724565b5f611c5783835f610f25565b90506001600160a01b0381161561090a576040516339e3563760e11b81525f6004820152602401610724565b5f6001600160e01b031982166380ac58cd60e01b1480611cb357506001600160e01b03198216635b5e139f60e01b145b8061059857506301ffc9a760e01b6001600160e01b0319831614610598565b6001600160e01b0319811681146106fc575f80fd5b5f60208284031215611cf7575f80fd5b8135610cc981611cd2565b80356001600160a01b0381168114611d18575f80fd5b919050565b5f8060408385031215611d2e575f80fd5b611d3783611d02565b915060208301356001600160601b0381168114611d52575f80fd5b809150509250929050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610cc96020830184611d5d565b5f60208284031215611dad575f80fd5b5035919050565b5f8060408385031215611dc5575f80fd5b611dce83611d02565b946020939093013593505050565b5f805f60608486031215611dee575f80fd5b611df784611d02565b9250611e0560208501611d02565b929592945050506040919091013590565b5f8060408385031215611e27575f80fd5b50508035926020909101359150565b5f8060408385031215611e47575f80fd5b82359150611e5760208401611d02565b90509250929050565b5f8060208385031215611e71575f80fd5b823567ffffffffffffffff811115611e87575f80fd5b8301601f81018513611e97575f80fd5b803567ffffffffffffffff811115611ead575f80fd5b856020828401011115611ebe575f80fd5b6020919091019590945092505050565b5f60208284031215611ede575f80fd5b610cc982611d02565b5f60208284031215611ef7575f80fd5b813565ffffffffffff81168114610cc9575f80fd5b5f8060408385031215611f1d575f80fd5b611f2683611d02565b915060208301358015158114611d52575f80fd5b634e487b7160e01b5f52604160045260245ffd5b5f805f8060808587031215611f61575f80fd5b611f6a85611d02565b9350611f7860208601611d02565b925060408501359150606085013567ffffffffffffffff811115611f9a575f80fd5b8501601f81018713611faa575f80fd5b803567ffffffffffffffff811115611fc457611fc4611f3a565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715611ff357611ff3611f3a565b60405281815282820160200189101561200a575f80fd5b816020840160208301375f6020838301015280935050505092959194509250565b5f806040838503121561203c575f80fd5b61204583611d02565b9150611e5760208401611d02565b600181811c9082168061206757607f821691505b60208210810361208557634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176105985761059861208b565b5f826120d057634e487b7160e01b5f52601260045260245ffd5b500490565b601f82111561090a57805f5260205f20601f840160051c810160208510156120fa5750805b601f840160051c820191505b81811015611403575f8155600101612106565b67ffffffffffffffff83111561213157612131611f3a565b6121458361213f8354612053565b836120d5565b5f601f841160018114612176575f851561215f5750838201355b5f19600387901b1c1916600186901b178355611403565b5f83815260208120601f198716915b828110156121a55786850135825560209485019460019092019101612185565b50868210156121c1575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b604081525f6121e56040830186611d5d565b8281036020840152838152838560208301375f602085830101526020601f19601f860116820101915050949350505050565b5f81518060208401855e5f93019283525090919050565b5f611b0f61223c8386612217565b84612217565b65ffffffffffff81811683821601908111156105985761059861208b565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f9061229290830184611d5d565b9695505050505050565b5f602082840312156122ac575f80fd5b8151610cc981611cd2565b65ffffffffffff82811682821603908111156105985761059861208b56fea26469706673582212206c61f9cbc8861ecf23317af095dbbbb42c5ff32ed8e4a71b91c7a2a6aa06803564736f6c634300081a0033", + "deployedBytecode": "0x608060405234801561000f575f80fd5b506004361061024a575f3560e01c806370a0823111610140578063a22cb465116100bf578063cf6eefb711610084578063cf6eefb714610503578063d539139314610531578063d547741f14610558578063d602b9fd1461056b578063e8a3d48514610573578063e985e9c51461057b575f80fd5b8063a22cb465146104ba578063b88d4fde146104cd578063c87b56dd146104e0578063cc8463c8146104f3578063cefc1429146104fb575f80fd5b8063938e3d7b11610105578063938e3d7b1461045e57806395d89b4114610471578063a144819414610479578063a1eda53c1461048c578063a217fddf146104b3575f80fd5b806370a08231146104175780638456cb591461042a57806384ef8ffc146104325780638da5cb5b1461044357806391d148541461044b575f80fd5b80632f2ff15d116101cc5780635c975abb116101915780635c975abb146103cb578063634e93da146103d65780636352211e146103e9578063649a5ec7146103fc5780636c0360eb1461040f575f80fd5b80632f2ff15d1461037757806336568abe1461038a5780633f4ba83a1461039d57806342842e0e146103a557806355f804b3146103b8575f80fd5b8063095ea7b311610212578063095ea7b3146102e75780630aa6220b146102fa57806323b872dd14610302578063248a9ca3146103155780632a55205a14610345575f80fd5b806301ffc9a71461024e578063022d63fb1461027657806302fa7c471461029257806306fdde03146102a7578063081812fc146102bc575b5f80fd5b61026161025c366004611ce7565b61058e565b60405190151581526020015b60405180910390f35b620697805b60405165ffffffffffff909116815260200161026d565b6102a56102a0366004611d1d565b61059e565b005b6102af610625565b60405161026d9190611d8b565b6102cf6102ca366004611d9d565b6106b4565b6040516001600160a01b03909116815260200161026d565b6102a56102f5366004611db4565b6106db565b6102a56106ea565b6102a5610310366004611ddc565b6106ff565b610337610323366004611d9d565b5f9081526008602052604090206001015490565b60405190815260200161026d565b610358610353366004611e16565b61078d565b604080516001600160a01b03909316835260208301919091520161026d565b6102a5610385366004611e36565b610810565b6102a5610398366004611e36565b610838565b6102a56108de565b6102a56103b3366004611ddc565b6108f0565b6102a56103c6366004611e60565b61090f565b600b5460ff16610261565b6102a56103e4366004611ece565b6109f8565b6102cf6103f7366004611d9d565b610a0b565b6102a561040a366004611ee7565b610a15565b6102af610a28565b610337610425366004611ece565b610a37565b6102a5610a7c565b600a546001600160a01b03166102cf565b6102cf610a8e565b610261610459366004611e36565b610aa6565b6102a561046c366004611e60565b610ad0565b6102af610bab565b6102a5610487366004611db4565b610bba565b610494610bf6565b6040805165ffffffffffff93841681529290911660208301520161026d565b6103375f81565b6102a56104c8366004611f0c565b610c48565b6102a56104db366004611f4e565b610c53565b6102af6104ee366004611d9d565b610c6b565b61027b610cd0565b6102a5610d2e565b61050b610d6d565b604080516001600160a01b03909316835265ffffffffffff90911660208301520161026d565b6103377f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b6102a5610566366004611e36565b610d8e565b6102a5610db6565b6102af610dc8565b61026161058936600461202b565b610dd7565b5f61059882610e04565b92915050565b5f6105a881610e28565b6001600160a01b0383166105cf5760405163d92e233d60e01b815260040160405180910390fd5b6105d98383610e32565b6040516001600160601b03831681526001600160a01b038416907fe12d7d5bdb8218a22277dca8f854dd4573a1cea3d3e4808dc567df9eb1c14bf49060200160405180910390a2505050565b60605f805461063390612053565b80601f016020809104026020016040519081016040528092919081815260200182805461065f90612053565b80156106aa5780601f10610681576101008083540402835291602001916106aa565b820191905f5260205f20905b81548152906001019060200180831161068d57829003601f168201915b5050505050905090565b5f6106be82610ed4565b505f828152600460205260409020546001600160a01b0316610598565b6106e6828233610f0c565b5050565b5f6106f481610e28565b6106fc610f19565b50565b6001600160a01b03821661072d57604051633250574960e11b81525f60048201526024015b60405180910390fd5b5f610739838333610f25565b9050836001600160a01b0316816001600160a01b031614610787576040516364283d7b60e01b81526001600160a01b0380861660048301526024820184905282166044820152606401610724565b50505050565b5f82815260076020526040812080548291906001600160a01b03811690600160a01b90046001600160601b0316816107e05750506006546001600160a01b03811690600160a01b90046001600160601b03165b5f6127106107f76001600160601b0384168961209f565b61080191906120b6565b92989297509195505050505050565b8161082e57604051631fe1e13d60e11b815260040160405180910390fd5b6106e68282611017565b811580156108535750600a546001600160a01b038281169116145b156108d4575f80610862610d6d565b90925090506001600160a01b038216151580610884575065ffffffffffff8116155b8061089757504265ffffffffffff821610155b156108bf576040516319ca5ebb60e01b815265ffffffffffff82166004820152602401610724565b50506009805465ffffffffffff60a01b191690555b6106e6828261103b565b5f6108e881610e28565b6106fc61106e565b61090a83838360405180602001604052805f815250610c53565b505050565b5f61091981610e28565b5f600c805461092790612053565b80601f016020809104026020016040519081016040528092919081815260200182805461095390612053565b801561099e5780601f106109755761010080835404028352916020019161099e565b820191905f5260205f20905b81548152906001019060200180831161098157829003601f168201915b505050505090508383600c91826109b6929190612119565b507f309b29ded109b9e28fb9885757b3e0096eb75c51d23aa4635d68bcd569f6adc18185856040516109ea939291906121d3565b60405180910390a150505050565b5f610a0281610e28565b6106e6826110c0565b5f61059882610ed4565b5f610a1f81610e28565b6106e682611132565b6060600c805461063390612053565b5f6001600160a01b038216610a61576040516322718ad960e21b81525f6004820152602401610724565b506001600160a01b03165f9081526003602052604090205490565b5f610a8681610e28565b6106fc6111a1565b5f610aa1600a546001600160a01b031690565b905090565b5f9182526008602090815260408084206001600160a01b0393909316845291905290205460ff1690565b5f610ada81610e28565b5f600d8054610ae890612053565b80601f0160208091040260200160405190810160405280929190818152602001828054610b1490612053565b8015610b5f5780601f10610b3657610100808354040283529160200191610b5f565b820191905f5260205f20905b815481529060010190602001808311610b4257829003601f168201915b505050505090508383600d9182610b77929190612119565b507fc9c7c3fe08b88b4df9d4d47ef47d2c43d55c025a0ba88ca442580ed9e7348a168185856040516109ea939291906121d3565b60606001805461063390612053565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6610be481610e28565b610bec6111de565b61090a8383611202565b600a545f90600160d01b900465ffffffffffff168015158015610c2157504265ffffffffffff821610155b610c2c575f80610c40565b600a54600160a01b900465ffffffffffff16815b915091509091565b6106e633838361121b565b610c5e8484846106ff565b61078733858585856112e2565b6060610c7682610ed4565b505f610c80610a28565b90505f815111610c9e5760405180602001604052805f815250610cc9565b80610ca88461140a565b604051602001610cb992919061222e565b6040516020818303038152906040525b9392505050565b600a545f90600160d01b900465ffffffffffff168015158015610cfa57504265ffffffffffff8216105b610d1557600954600160d01b900465ffffffffffff16610d28565b600a54600160a01b900465ffffffffffff165b91505090565b5f610d37610d6d565b509050336001600160a01b03821614610d6557604051636116401160e11b8152336004820152602401610724565b6106fc61149a565b6009546001600160a01b03811691600160a01b90910465ffffffffffff1690565b81610dac57604051631fe1e13d60e11b815260040160405180910390fd5b6106e68282611530565b5f610dc081610e28565b6106fc611554565b6060600d805461063390612053565b6001600160a01b039182165f90815260056020908152604080832093909416825291909152205460ff1690565b5f6001600160e01b031982166318a4c3c360e11b148061059857506105988261155e565b6106fc8133611582565b6127106001600160601b038216811015610e7157604051636f483d0960e01b81526001600160601b038316600482015260248101829052604401610724565b6001600160a01b038316610e9a57604051635b6cc80560e11b81525f6004820152602401610724565b50604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600655565b5f818152600260205260408120546001600160a01b03168061059857604051637e27328960e01b815260048101849052602401610724565b61090a83838360016115bb565b610f235f806116bf565b565b5f828152600260205260408120546001600160a01b0390811690831615610f5157610f5181848661177e565b6001600160a01b03811615610f8b57610f6c5f855f806115bb565b6001600160a01b0381165f90815260036020526040902080545f190190555b6001600160a01b03851615610fb9576001600160a01b0385165f908152600360205260409020805460010190555b5f8481526002602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b5f8281526008602052604090206001015461103181610e28565b61078783836117e2565b6001600160a01b03811633146110645760405163334bd91960e11b815260040160405180910390fd5b61090a8282611848565b611076611884565b600b805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b5f6110c9610cd0565b6110d2426118a7565b6110dc9190612242565b90506110e882826118dd565b60405165ffffffffffff821681526001600160a01b038316907f3377dc44241e779dd06afab5b788a35ca5f3b778836e2990bdb26a2a4b2e5ed69060200160405180910390a25050565b5f61113c8261195a565b611145426118a7565b61114f9190612242565b905061115b82826116bf565b6040805165ffffffffffff8085168252831660208201527ff1038c18cf84a56e432fdbfaf746924b7ea511dfe03a6506a0ceba4888788d9b910160405180910390a15050565b6111a96111de565b600b805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586110a33390565b600b5460ff1615610f235760405163d93c066560e01b815260040160405180910390fd5b6106e6828260405180602001604052805f8152506119a1565b6001600160a01b0383166112445760405163a9fbf51f60e01b81525f6004820152602401610724565b6001600160a01b03821661127657604051630b61174360e31b81526001600160a01b0383166004820152602401610724565b6001600160a01b038381165f81815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383163b1561140357604051630a85bd0160e11b81526001600160a01b0384169063150b7a0290611324908890889087908790600401612260565b6020604051808303815f875af192505050801561135e575060408051601f3d908101601f1916820190925261135b9181019061229c565b60015b6113c5573d80801561138b576040519150601f19603f3d011682016040523d82523d5f602084013e611390565b606091505b5080515f036113bd57604051633250574960e11b81526001600160a01b0385166004820152602401610724565b805160208201fd5b6001600160e01b03198116630a85bd0160e11b1461140157604051633250574960e11b81526001600160a01b0385166004820152602401610724565b505b5050505050565b60605f611416836119b8565b60010190505f8167ffffffffffffffff81111561143557611435611f3a565b6040519080825280601f01601f19166020018201604052801561145f576020820181803683370190505b5090508181016020015b5f19016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461146957509392505050565b5f806114a4610d6d565b915091506114b98165ffffffffffff16151590565b15806114cd57504265ffffffffffff821610155b156114f5576040516319ca5ebb60e01b815265ffffffffffff82166004820152602401610724565b6115105f61150b600a546001600160a01b031690565b611848565b5061151b5f836117e2565b5050600980546001600160d01b031916905550565b5f8281526008602052604090206001015461154a81610e28565b6107878383611848565b610f235f806118dd565b5f6001600160e01b03198216637965db0b60e01b1480610598575061059882611a8f565b61158c8282610aa6565b6106e65760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610724565b80806115cf57506001600160a01b03821615155b15611690575f6115de84610ed4565b90506001600160a01b0383161580159061160a5750826001600160a01b0316816001600160a01b031614155b801561161d575061161b8184610dd7565b155b156116465760405163a9fbf51f60e01b81526001600160a01b0384166004820152602401610724565b811561168e5783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b50505f90815260046020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b600a54600160d01b900465ffffffffffff168015611741574265ffffffffffff8216101561171857600a54600980546001600160d01b0316600160a01b90920465ffffffffffff16600160d01b02919091179055611741565b6040517f2b1fa2edafe6f7b9e97c1a9e0c3660e645beb2dcaa2d45bdbf9beaf5472e1ec5905f90a15b50600a80546001600160a01b0316600160a01b65ffffffffffff948516026001600160d01b031617600160d01b9290931691909102919091179055565b611789838383611ab3565b61090a576001600160a01b0383166117b757604051637e27328960e01b815260048101829052602401610724565b60405163177e802f60e01b81526001600160a01b038316600482015260248101829052604401610724565b5f8261183e575f6117fb600a546001600160a01b031690565b6001600160a01b03161461182257604051631fe1e13d60e11b815260040160405180910390fd5b600a80546001600160a01b0319166001600160a01b0384161790555b610cc98383611b17565b5f821580156118645750600a546001600160a01b038381169116145b1561187a57600a80546001600160a01b03191690555b610cc98383611ba8565b600b5460ff16610f2357604051638dfc202b60e01b815260040160405180910390fd5b5f65ffffffffffff8211156118d9576040516306dfcc6560e41b81526030600482015260248101839052604401610724565b5090565b5f6118e6610d6d565b6009805465ffffffffffff8616600160a01b026001600160d01b03199091166001600160a01b03881617179055915061192890508165ffffffffffff16151590565b1561090a576040517f8886ebfc4259abdbc16601dd8fb5678e54878f47b3c34836cfc51154a9605109905f90a1505050565b5f80611964610cd0565b90508065ffffffffffff168365ffffffffffff161161198c5761198783826122b7565b610cc9565b610cc965ffffffffffff841662069780611c13565b6119ab8383611c22565b61090a335f8585856112e2565b5f8072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106119f65772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310611a22576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310611a4057662386f26fc10000830492506010015b6305f5e1008310611a58576305f5e100830492506008015b6127108310611a6c57612710830492506004015b60648310611a7e576064830492506002015b600a83106105985760010192915050565b5f6001600160e01b0319821663152a902d60e11b1480610598575061059882611c83565b5f6001600160a01b03831615801590611b0f5750826001600160a01b0316846001600160a01b03161480611aec5750611aec8484610dd7565b80611b0f57505f828152600460205260409020546001600160a01b038481169116145b949350505050565b5f611b228383610aa6565b611ba1575f8381526008602090815260408083206001600160a01b03861684529091529020805460ff19166001179055611b593390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610598565b505f610598565b5f611bb38383610aa6565b15611ba1575f8381526008602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610598565b5f828218828410028218610cc9565b6001600160a01b038216611c4b57604051633250574960e11b81525f6004820152602401610724565b5f611c5783835f610f25565b90506001600160a01b0381161561090a576040516339e3563760e11b81525f6004820152602401610724565b5f6001600160e01b031982166380ac58cd60e01b1480611cb357506001600160e01b03198216635b5e139f60e01b145b8061059857506301ffc9a760e01b6001600160e01b0319831614610598565b6001600160e01b0319811681146106fc575f80fd5b5f60208284031215611cf7575f80fd5b8135610cc981611cd2565b80356001600160a01b0381168114611d18575f80fd5b919050565b5f8060408385031215611d2e575f80fd5b611d3783611d02565b915060208301356001600160601b0381168114611d52575f80fd5b809150509250929050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610cc96020830184611d5d565b5f60208284031215611dad575f80fd5b5035919050565b5f8060408385031215611dc5575f80fd5b611dce83611d02565b946020939093013593505050565b5f805f60608486031215611dee575f80fd5b611df784611d02565b9250611e0560208501611d02565b929592945050506040919091013590565b5f8060408385031215611e27575f80fd5b50508035926020909101359150565b5f8060408385031215611e47575f80fd5b82359150611e5760208401611d02565b90509250929050565b5f8060208385031215611e71575f80fd5b823567ffffffffffffffff811115611e87575f80fd5b8301601f81018513611e97575f80fd5b803567ffffffffffffffff811115611ead575f80fd5b856020828401011115611ebe575f80fd5b6020919091019590945092505050565b5f60208284031215611ede575f80fd5b610cc982611d02565b5f60208284031215611ef7575f80fd5b813565ffffffffffff81168114610cc9575f80fd5b5f8060408385031215611f1d575f80fd5b611f2683611d02565b915060208301358015158114611d52575f80fd5b634e487b7160e01b5f52604160045260245ffd5b5f805f8060808587031215611f61575f80fd5b611f6a85611d02565b9350611f7860208601611d02565b925060408501359150606085013567ffffffffffffffff811115611f9a575f80fd5b8501601f81018713611faa575f80fd5b803567ffffffffffffffff811115611fc457611fc4611f3a565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715611ff357611ff3611f3a565b60405281815282820160200189101561200a575f80fd5b816020840160208301375f6020838301015280935050505092959194509250565b5f806040838503121561203c575f80fd5b61204583611d02565b9150611e5760208401611d02565b600181811c9082168061206757607f821691505b60208210810361208557634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176105985761059861208b565b5f826120d057634e487b7160e01b5f52601260045260245ffd5b500490565b601f82111561090a57805f5260205f20601f840160051c810160208510156120fa5750805b601f840160051c820191505b81811015611403575f8155600101612106565b67ffffffffffffffff83111561213157612131611f3a565b6121458361213f8354612053565b836120d5565b5f601f841160018114612176575f851561215f5750838201355b5f19600387901b1c1916600186901b178355611403565b5f83815260208120601f198716915b828110156121a55786850135825560209485019460019092019101612185565b50868210156121c1575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b604081525f6121e56040830186611d5d565b8281036020840152838152838560208301375f602085830101526020601f19601f860116820101915050949350505050565b5f81518060208401855e5f93019283525090919050565b5f611b0f61223c8386612217565b84612217565b65ffffffffffff81811683821601908111156105985761059861208b565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f9061229290830184611d5d565b9695505050505050565b5f602082840312156122ac575f80fd5b8151610cc981611cd2565b65ffffffffffff82811682821603908111156105985761059861208b56fea26469706673582212206c61f9cbc8861ecf23317af095dbbbb42c5ff32ed8e4a71b91c7a2a6aa06803564736f6c634300081a0033", "linkReferences": {}, - "deployedLinkReferences": {} + "deployedLinkReferences": {}, + "immutableReferences": {}, + "inputSourceName": "contracts/TricksforBoosterNFT.sol", + "buildInfoId": "solc-0_8_26-2940a0bf7433fbb858475891fd4d03553b51db3322b46d171911ad73848093b6" } diff --git a/artifacts/contracts/TricksforBoosterStaking.sol/TricksforBoosterStaking.json b/artifacts/contracts/TricksforBoosterStaking.sol/TricksforBoosterStaking.json index 96e4d10..55ab9ef 100644 --- a/artifacts/contracts/TricksforBoosterStaking.sol/TricksforBoosterStaking.json +++ b/artifacts/contracts/TricksforBoosterStaking.sol/TricksforBoosterStaking.json @@ -1,5 +1,5 @@ { - "_format": "hh-sol-artifact-1", + "_format": "hh3-artifact-1", "contractName": "TricksforBoosterStaking", "sourceName": "contracts/TricksforBoosterStaking.sol", "abi": [ @@ -9,6 +9,11 @@ "internalType": "address", "name": "nftContract_", "type": "address" + }, + { + "internalType": "address", + "name": "initialOwner_", + "type": "address" } ], "stateMutability": "nonpayable", @@ -24,6 +29,11 @@ "name": "ExpectedPause", "type": "error" }, + { + "inputs": [], + "name": "InvalidEmergencyRecipient", + "type": "error" + }, { "inputs": [], "name": "NotOriginalStaker", @@ -66,6 +76,16 @@ "name": "TokenAlreadyStaked", "type": "error" }, + { + "inputs": [], + "name": "TokenIsTracked", + "type": "error" + }, + { + "inputs": [], + "name": "TokenNotHeld", + "type": "error" + }, { "inputs": [], "name": "TokenNotStaked", @@ -112,6 +132,25 @@ "name": "EmergencyWithdrawn", "type": "event" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferStarted", + "type": "event" + }, { "anonymous": false, "inputs": [ @@ -207,6 +246,38 @@ "name": "Unpaused", "type": "event" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "rescuedAt", + "type": "uint256" + } + ], + "name": "UntrackedTokenRescued", + "type": "event" + }, + { + "inputs": [], + "name": "acceptOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -343,6 +414,19 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "pendingOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "renounceOwnership", @@ -350,6 +434,24 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + } + ], + "name": "rescueUntrackedToken", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -435,8 +537,46 @@ "type": "function" } ], - "bytecode": "0x60a060405234801561000f575f80fd5b50604051610fba380380610fba83398101604081905261002e91610108565b338061005357604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b61005c816100b9565b5060017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00556001600160a01b0381166100a85760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0316608052610135565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f60208284031215610118575f80fd5b81516001600160a01b038116811461012e575f80fd5b9392505050565b608051610e4a6101705f395f8181610261015281816102b2015281816104bd015281816106260152818161076c01526108540152610e4a5ff3fe608060405234801561000f575f80fd5b50600436106100f0575f3560e01c80635c975abb11610093578063a694fc3a11610063578063a694fc3a1461021f578063baa51f8614610232578063d56d229d1461025c578063f2fde38b14610283575f80fd5b80635c975abb146101e2578063715018a6146101ff5780638456cb59146102075780638da5cb5b1461020f575f80fd5b80632b4bc300116100ce5780632b4bc300146101925780632e17de78146101b25780632f940c70146101c75780633f4ba83a146101da575f80fd5b8063150b7a02146100f45780631b3253b0146101255780631dcac94d14610152575b5f80fd5b610107610102366004610c4a565b610296565b6040516001600160e01b031990911681526020015b60405180910390f35b610144610133366004610ce3565b5f9081526002602052604090205490565b60405190815260200161011c565b61017a610160366004610ce3565b5f908152600160205260409020546001600160a01b031690565b6040516001600160a01b03909116815260200161011c565b6101a56101a0366004610cfa565b6103c2565b60405161011c9190610d1c565b6101c56101c0366004610ce3565b61042b565b005b6101c56101d5366004610d5e565b61056e565b6101c56106e6565b5f54600160a01b900460ff165b604051901515815260200161011c565b6101c56106f8565b6101c5610709565b5f546001600160a01b031661017a565b6101c561022d366004610ce3565b610719565b6101ef610240366004610ce3565b5f908152600160205260409020546001600160a01b0316151590565b61017a7f000000000000000000000000000000000000000000000000000000000000000081565b6101c5610291366004610cfa565b6108e7565b5f61029f610926565b6102a7610941565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146102f05760405163de1db39560e01b815260040160405180910390fd5b6001600160a01b0385166103175760405163d92e233d60e01b815260040160405180910390fd5b5f848152600160205260409020546001600160a01b03161561034c576040516316e9ad8f60e01b815260040160405180910390fd5b610356858561096b565b83856001600160a01b03167f6173e4d2d9dd52aae0ed37afed3adcf924a490639b759ca93d32dc43366c17d24260405161039291815260200190565b60405180910390a350630a85bd0160e11b6103b960015f80516020610df583398151915255565b95945050505050565b6001600160a01b0381165f9081526003602090815260409182902080548351818402810184019094528084526060939283018282801561041f57602002820191905f5260205f20905b81548152602001906001019080831161040b575b50505050509050919050565b610433610926565b5f818152600160205260409020546001600160a01b03168061046857604051630a49bbc360e21b815260040160405180910390fd5b6001600160a01b0381163314610491576040516332dc95cb60e01b815260040160405180910390fd5b61049b81836109cf565b6040516323b872dd60e01b8152306004820152336024820152604481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906323b872dd906064015f604051808303815f87803b158015610506575f80fd5b505af1158015610518573d5f803e3d5ffd5b50506040514281528492503391507f563fc70fca9d440d883299c76a721644d5aca7c45df98aeb5292c4cb823579bf906020015b60405180910390a35061056b60015f80516020610df583398151915255565b50565b6105766109ff565b61057e610926565b5f828152600160205260409020546001600160a01b03166105b257604051630a49bbc360e21b815260040160405180910390fd5b6001600160a01b0381166105d95760405163d92e233d60e01b815260040160405180910390fd5b5f828152600160205260409020546001600160a01b03166105fa81846109cf565b6040516323b872dd60e01b81523060048201526001600160a01b038381166024830152604482018590527f000000000000000000000000000000000000000000000000000000000000000016906323b872dd906064015f604051808303815f87803b158015610667575f80fd5b505af1158015610679573d5f803e3d5ffd5b50505050816001600160a01b031683826001600160a01b03167ff4408f2b7cb3bb2b43ddb3715579eae68a12af5f2e6d938537db2be5e72f5f7d426040516106c391815260200190565b60405180910390a4506106e260015f80516020610df583398151915255565b5050565b6106ee6109ff565b6106f6610a2b565b565b6107006109ff565b6106f65f610a7f565b6107116109ff565b6106f6610ace565b610721610926565b610729610941565b5f8181526001602052604090205433906001600160a01b031615610760576040516316e9ad8f60e01b815260040160405180910390fd5b806001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636352211e846040518263ffffffff1660e01b81526004016107b891815260200190565b602060405180830381865afa1580156107d3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107f79190610d8c565b6001600160a01b03161461081e576040516359dc379f60e01b815260040160405180910390fd5b610828818361096b565b6040516323b872dd60e01b81526001600160a01b038281166004830152306024830152604482018490527f000000000000000000000000000000000000000000000000000000000000000016906323b872dd906064015f604051808303815f87803b158015610895575f80fd5b505af11580156108a7573d5f803e3d5ffd5b5050505081816001600160a01b03167f6173e4d2d9dd52aae0ed37afed3adcf924a490639b759ca93d32dc43366c17d24260405161054c91815260200190565b6108ef6109ff565b6001600160a01b03811661091d57604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b61056b81610a7f565b61092e610b10565b60025f80516020610df583398151915255565b5f54600160a01b900460ff16156106f65760405163d93c066560e01b815260040160405180910390fd5b5f81815260016020818152604080842080546001600160a01b039097166001600160a01b0319909716871790556002825280842042905594835260038082528584208054868652600484529685208790559082529185018255908252902090910155565b5f81815260016020908152604080832080546001600160a01b031916905560029091528120556106e28282610b3f565b5f546001600160a01b031633146106f65760405163118cdaa760e01b8152336004820152602401610914565b610a33610c0d565b5f805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610ad6610941565b5f805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610a623390565b5f80516020610df5833981519152546002036106f657604051633ee5aeb560e01b815260040160405180910390fd5b6001600160a01b0382165f9081526003602090815260408083208484526004909252822054815491929091610b7690600190610da7565b9050808214610bcf575f838281548110610b9257610b92610dcc565b905f5260205f200154905080848481548110610bb057610bb0610dcc565b5f91825260208083209091019290925591825260049052604090208290555b82805480610bdf57610bdf610de0565b600190038181905f5260205f20015f9055905560045f8581526020019081526020015f205f90555050505050565b5f54600160a01b900460ff166106f657604051638dfc202b60e01b815260040160405180910390fd5b6001600160a01b038116811461056b575f80fd5b5f805f805f60808688031215610c5e575f80fd5b8535610c6981610c36565b94506020860135610c7981610c36565b935060408601359250606086013567ffffffffffffffff811115610c9b575f80fd5b8601601f81018813610cab575f80fd5b803567ffffffffffffffff811115610cc1575f80fd5b886020828401011115610cd2575f80fd5b959894975092955050506020019190565b5f60208284031215610cf3575f80fd5b5035919050565b5f60208284031215610d0a575f80fd5b8135610d1581610c36565b9392505050565b602080825282518282018190525f918401906040840190835b81811015610d53578351835260209384019390920191600101610d35565b509095945050505050565b5f8060408385031215610d6f575f80fd5b823591506020830135610d8181610c36565b809150509250929050565b5f60208284031215610d9c575f80fd5b8151610d1581610c36565b81810381811115610dc657634e487b7160e01b5f52601160045260245ffd5b92915050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52603160045260245ffdfe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a2646970667358221220f4770994b9f68ec0b0692b8939e920d0d93d3b4695a022272f8a00a9d353165964736f6c634300081a0033", - "deployedBytecode": "0x608060405234801561000f575f80fd5b50600436106100f0575f3560e01c80635c975abb11610093578063a694fc3a11610063578063a694fc3a1461021f578063baa51f8614610232578063d56d229d1461025c578063f2fde38b14610283575f80fd5b80635c975abb146101e2578063715018a6146101ff5780638456cb59146102075780638da5cb5b1461020f575f80fd5b80632b4bc300116100ce5780632b4bc300146101925780632e17de78146101b25780632f940c70146101c75780633f4ba83a146101da575f80fd5b8063150b7a02146100f45780631b3253b0146101255780631dcac94d14610152575b5f80fd5b610107610102366004610c4a565b610296565b6040516001600160e01b031990911681526020015b60405180910390f35b610144610133366004610ce3565b5f9081526002602052604090205490565b60405190815260200161011c565b61017a610160366004610ce3565b5f908152600160205260409020546001600160a01b031690565b6040516001600160a01b03909116815260200161011c565b6101a56101a0366004610cfa565b6103c2565b60405161011c9190610d1c565b6101c56101c0366004610ce3565b61042b565b005b6101c56101d5366004610d5e565b61056e565b6101c56106e6565b5f54600160a01b900460ff165b604051901515815260200161011c565b6101c56106f8565b6101c5610709565b5f546001600160a01b031661017a565b6101c561022d366004610ce3565b610719565b6101ef610240366004610ce3565b5f908152600160205260409020546001600160a01b0316151590565b61017a7f000000000000000000000000000000000000000000000000000000000000000081565b6101c5610291366004610cfa565b6108e7565b5f61029f610926565b6102a7610941565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146102f05760405163de1db39560e01b815260040160405180910390fd5b6001600160a01b0385166103175760405163d92e233d60e01b815260040160405180910390fd5b5f848152600160205260409020546001600160a01b03161561034c576040516316e9ad8f60e01b815260040160405180910390fd5b610356858561096b565b83856001600160a01b03167f6173e4d2d9dd52aae0ed37afed3adcf924a490639b759ca93d32dc43366c17d24260405161039291815260200190565b60405180910390a350630a85bd0160e11b6103b960015f80516020610df583398151915255565b95945050505050565b6001600160a01b0381165f9081526003602090815260409182902080548351818402810184019094528084526060939283018282801561041f57602002820191905f5260205f20905b81548152602001906001019080831161040b575b50505050509050919050565b610433610926565b5f818152600160205260409020546001600160a01b03168061046857604051630a49bbc360e21b815260040160405180910390fd5b6001600160a01b0381163314610491576040516332dc95cb60e01b815260040160405180910390fd5b61049b81836109cf565b6040516323b872dd60e01b8152306004820152336024820152604481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906323b872dd906064015f604051808303815f87803b158015610506575f80fd5b505af1158015610518573d5f803e3d5ffd5b50506040514281528492503391507f563fc70fca9d440d883299c76a721644d5aca7c45df98aeb5292c4cb823579bf906020015b60405180910390a35061056b60015f80516020610df583398151915255565b50565b6105766109ff565b61057e610926565b5f828152600160205260409020546001600160a01b03166105b257604051630a49bbc360e21b815260040160405180910390fd5b6001600160a01b0381166105d95760405163d92e233d60e01b815260040160405180910390fd5b5f828152600160205260409020546001600160a01b03166105fa81846109cf565b6040516323b872dd60e01b81523060048201526001600160a01b038381166024830152604482018590527f000000000000000000000000000000000000000000000000000000000000000016906323b872dd906064015f604051808303815f87803b158015610667575f80fd5b505af1158015610679573d5f803e3d5ffd5b50505050816001600160a01b031683826001600160a01b03167ff4408f2b7cb3bb2b43ddb3715579eae68a12af5f2e6d938537db2be5e72f5f7d426040516106c391815260200190565b60405180910390a4506106e260015f80516020610df583398151915255565b5050565b6106ee6109ff565b6106f6610a2b565b565b6107006109ff565b6106f65f610a7f565b6107116109ff565b6106f6610ace565b610721610926565b610729610941565b5f8181526001602052604090205433906001600160a01b031615610760576040516316e9ad8f60e01b815260040160405180910390fd5b806001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636352211e846040518263ffffffff1660e01b81526004016107b891815260200190565b602060405180830381865afa1580156107d3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107f79190610d8c565b6001600160a01b03161461081e576040516359dc379f60e01b815260040160405180910390fd5b610828818361096b565b6040516323b872dd60e01b81526001600160a01b038281166004830152306024830152604482018490527f000000000000000000000000000000000000000000000000000000000000000016906323b872dd906064015f604051808303815f87803b158015610895575f80fd5b505af11580156108a7573d5f803e3d5ffd5b5050505081816001600160a01b03167f6173e4d2d9dd52aae0ed37afed3adcf924a490639b759ca93d32dc43366c17d24260405161054c91815260200190565b6108ef6109ff565b6001600160a01b03811661091d57604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b61056b81610a7f565b61092e610b10565b60025f80516020610df583398151915255565b5f54600160a01b900460ff16156106f65760405163d93c066560e01b815260040160405180910390fd5b5f81815260016020818152604080842080546001600160a01b039097166001600160a01b0319909716871790556002825280842042905594835260038082528584208054868652600484529685208790559082529185018255908252902090910155565b5f81815260016020908152604080832080546001600160a01b031916905560029091528120556106e28282610b3f565b5f546001600160a01b031633146106f65760405163118cdaa760e01b8152336004820152602401610914565b610a33610c0d565b5f805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610ad6610941565b5f805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610a623390565b5f80516020610df5833981519152546002036106f657604051633ee5aeb560e01b815260040160405180910390fd5b6001600160a01b0382165f9081526003602090815260408083208484526004909252822054815491929091610b7690600190610da7565b9050808214610bcf575f838281548110610b9257610b92610dcc565b905f5260205f200154905080848481548110610bb057610bb0610dcc565b5f91825260208083209091019290925591825260049052604090208290555b82805480610bdf57610bdf610de0565b600190038181905f5260205f20015f9055905560045f8581526020019081526020015f205f90555050505050565b5f54600160a01b900460ff166106f657604051638dfc202b60e01b815260040160405180910390fd5b6001600160a01b038116811461056b575f80fd5b5f805f805f60808688031215610c5e575f80fd5b8535610c6981610c36565b94506020860135610c7981610c36565b935060408601359250606086013567ffffffffffffffff811115610c9b575f80fd5b8601601f81018813610cab575f80fd5b803567ffffffffffffffff811115610cc1575f80fd5b886020828401011115610cd2575f80fd5b959894975092955050506020019190565b5f60208284031215610cf3575f80fd5b5035919050565b5f60208284031215610d0a575f80fd5b8135610d1581610c36565b9392505050565b602080825282518282018190525f918401906040840190835b81811015610d53578351835260209384019390920191600101610d35565b509095945050505050565b5f8060408385031215610d6f575f80fd5b823591506020830135610d8181610c36565b809150509250929050565b5f60208284031215610d9c575f80fd5b8151610d1581610c36565b81810381811115610dc657634e487b7160e01b5f52601160045260245ffd5b92915050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52603160045260245ffdfe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a2646970667358221220f4770994b9f68ec0b0692b8939e920d0d93d3b4695a022272f8a00a9d353165964736f6c634300081a0033", + "bytecode": "0x60a060405234801561000f575f80fd5b5060405161132638038061132683398101604081905261002e9161015d565b806001600160a01b03811661005c57604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b610065816100d7565b5060017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00556001600160a01b03821615806100a757506001600160a01b038116155b156100c55760405163d92e233d60e01b815260040160405180910390fd5b506001600160a01b031660805261018e565b600180546001600160a01b03191690556100f0816100f3565b50565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b0381168114610158575f80fd5b919050565b5f806040838503121561016e575f80fd5b61017783610142565b915061018560208401610142565b90509250929050565b60805161114f6101d75f395f818161029e0152818161037001528181610417015281816104f7015281816106f70152818161086e01528181610a050152610ad8015261114f5ff3fe608060405234801561000f575f80fd5b5060043610610111575f3560e01c8063715018a61161009e578063a694fc3a1161006e578063a694fc3a1461025c578063baa51f861461026f578063d56d229d14610299578063e30c3978146102c0578063f2fde38b146102d1575f80fd5b8063715018a61461023457806379ba50971461023c5780638456cb59146102445780638da5cb5b1461024c575f80fd5b80632b4bc300116100e45780632b4bc300146101c85780632e17de78146101e85780632f940c70146101fb5780633f4ba83a1461020e5780635c975abb14610216575f80fd5b80630fa6f64214610115578063150b7a021461012a5780631b3253b01461015b5780631dcac94d14610188575b5f80fd5b610128610123366004610f2b565b6102e4565b005b61013d610138366004610f59565b6104db565b6040516001600160e01b031990911681526020015b60405180910390f35b61017a610169366004610ff2565b5f9081526003602052604090205490565b604051908152602001610152565b6101b0610196366004610ff2565b5f908152600260205260409020546001600160a01b031690565b6040516001600160a01b039091168152602001610152565b6101db6101d6366004611009565b610607565b604051610152919061102b565b6101286101f6366004610ff2565b610670565b610128610209366004610f2b565b6107af565b610128610939565b600154600160a01b900460ff165b6040519015158152602001610152565b61012861094b565b61012861095c565b6101286109a2565b5f546001600160a01b03166101b0565b61012861026a366004610ff2565b6109b2565b61022461027d366004610ff2565b5f908152600260205260409020546001600160a01b0316151590565b6101b07f000000000000000000000000000000000000000000000000000000000000000081565b6001546001600160a01b03166101b0565b6101286102df366004611009565b610b7a565b6102ec610bea565b6102f4610c16565b6001600160a01b03811661031b5760405163d92e233d60e01b815260040160405180910390fd5b5f828152600260205260409020546001600160a01b031615610350576040516382d272e360e01b815260040160405180910390fd5b6040516331a9108f60e11b81526004810183905230906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa1580156103b5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103d9919061106d565b6001600160a01b03161461040057604051636bcd243760e11b815260040160405180910390fd5b6040516323b872dd60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906323b872dd9061045090309085908790600401611088565b5f604051808303815f87803b158015610467575f80fd5b505af1158015610479573d5f803e3d5ffd5b5050505081816001600160a01b03167fc27a1277308b3908a0fb998812a60b1da8911b8583f20bf8f98e5246db8c47ef426040516104b991815260200190565b60405180910390a36104d760015f805160206110fa83398151915255565b5050565b5f6104e4610c16565b6104ec610c31565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105355760405163de1db39560e01b815260040160405180910390fd5b6001600160a01b03851661055c5760405163d92e233d60e01b815260040160405180910390fd5b5f848152600260205260409020546001600160a01b031615610591576040516316e9ad8f60e01b815260040160405180910390fd5b61059b8585610c5c565b83856001600160a01b03167f6173e4d2d9dd52aae0ed37afed3adcf924a490639b759ca93d32dc43366c17d2426040516105d791815260200190565b60405180910390a350630a85bd0160e11b6105fe60015f805160206110fa83398151915255565b95945050505050565b6001600160a01b0381165f9081526004602090815260409182902080548351818402810184019094528084526060939283018282801561066457602002820191905f5260205f20905b815481526020019060010190808311610650575b50505050509050919050565b610678610c16565b5f818152600260205260409020546001600160a01b0316806106ad57604051630a49bbc360e21b815260040160405180910390fd5b6001600160a01b03811633146106d6576040516332dc95cb60e01b815260040160405180910390fd5b6106e08183610cc0565b6040516323b872dd60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906323b872dd9061073090309033908790600401611088565b5f604051808303815f87803b158015610747575f80fd5b505af1158015610759573d5f803e3d5ffd5b50506040514281528492503391507f563fc70fca9d440d883299c76a721644d5aca7c45df98aeb5292c4cb823579bf906020015b60405180910390a3506107ac60015f805160206110fa83398151915255565b50565b6107b7610bea565b6107bf610c16565b5f828152600260205260409020546001600160a01b0316806107f457604051630a49bbc360e21b815260040160405180910390fd5b6001600160a01b03821661081b5760405163d92e233d60e01b815260040160405180910390fd5b806001600160a01b0316826001600160a01b03161461084d5760405163c56a390560e01b815260040160405180910390fd5b6108578184610cc0565b6040516323b872dd60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906323b872dd906108a790309086908890600401611088565b5f604051808303815f87803b1580156108be575f80fd5b505af11580156108d0573d5f803e3d5ffd5b50505050816001600160a01b031683826001600160a01b03167ff4408f2b7cb3bb2b43ddb3715579eae68a12af5f2e6d938537db2be5e72f5f7d4260405161091a91815260200190565b60405180910390a4506104d760015f805160206110fa83398151915255565b610941610bea565b610949610cf0565b565b610953610bea565b6109495f610d45565b60015433906001600160a01b031681146109995760405163118cdaa760e01b81526001600160a01b03821660048201526024015b60405180910390fd5b6107ac81610d45565b6109aa610bea565b610949610d5e565b6109ba610c16565b6109c2610c31565b5f8181526002602052604090205433906001600160a01b0316156109f9576040516316e9ad8f60e01b815260040160405180910390fd5b806001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636352211e846040518263ffffffff1660e01b8152600401610a5191815260200190565b602060405180830381865afa158015610a6c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a90919061106d565b6001600160a01b031614610ab7576040516359dc379f60e01b815260040160405180910390fd5b610ac18183610c5c565b6040516323b872dd60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906323b872dd90610b1190849030908790600401611088565b5f604051808303815f87803b158015610b28575f80fd5b505af1158015610b3a573d5f803e3d5ffd5b5050505081816001600160a01b03167f6173e4d2d9dd52aae0ed37afed3adcf924a490639b759ca93d32dc43366c17d24260405161078d91815260200190565b610b82610bea565b600180546001600160a01b0383166001600160a01b03199091168117909155610bb25f546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b5f546001600160a01b031633146109495760405163118cdaa760e01b8152336004820152602401610990565b610c1e610da1565b60025f805160206110fa83398151915255565b600154600160a01b900460ff16156109495760405163d93c066560e01b815260040160405180910390fd5b5f81815260026020908152604080832080546001600160a01b039096166001600160a01b0319909616861790556003825280832042905593825260048082528483208054858552600584529584208690559082526001850181558252902090910155565b5f81815260026020908152604080832080546001600160a01b031916905560039091528120556104d78282610dd0565b610cf8610e9e565b6001805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600180546001600160a01b03191690556107ac81610ec8565b610d66610c31565b6001805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610d283390565b5f805160206110fa8339815191525460020361094957604051633ee5aeb560e01b815260040160405180910390fd5b6001600160a01b0382165f9081526004602090815260408083208484526005909252822054815491929091610e07906001906110ac565b9050808214610e60575f838281548110610e2357610e236110d1565b905f5260205f200154905080848481548110610e4157610e416110d1565b5f91825260208083209091019290925591825260059052604090208290555b82805480610e7057610e706110e5565b600190038181905f5260205f20015f9055905560055f8581526020019081526020015f205f90555050505050565b600154600160a01b900460ff1661094957604051638dfc202b60e01b815260040160405180910390fd5b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146107ac575f80fd5b5f8060408385031215610f3c575f80fd5b823591506020830135610f4e81610f17565b809150509250929050565b5f805f805f60808688031215610f6d575f80fd5b8535610f7881610f17565b94506020860135610f8881610f17565b935060408601359250606086013567ffffffffffffffff811115610faa575f80fd5b8601601f81018813610fba575f80fd5b803567ffffffffffffffff811115610fd0575f80fd5b886020828401011115610fe1575f80fd5b959894975092955050506020019190565b5f60208284031215611002575f80fd5b5035919050565b5f60208284031215611019575f80fd5b813561102481610f17565b9392505050565b602080825282518282018190525f918401906040840190835b81811015611062578351835260209384019390920191600101611044565b509095945050505050565b5f6020828403121561107d575f80fd5b815161102481610f17565b6001600160a01b039384168152919092166020820152604081019190915260600190565b818103818111156110cb57634e487b7160e01b5f52601160045260245ffd5b92915050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52603160045260245ffdfe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a2646970667358221220f8e5afe3df2897c05bd05e17e152d07acba805eed0e132300174b368b573437b64736f6c634300081a0033", + "deployedBytecode": "0x608060405234801561000f575f80fd5b5060043610610111575f3560e01c8063715018a61161009e578063a694fc3a1161006e578063a694fc3a1461025c578063baa51f861461026f578063d56d229d14610299578063e30c3978146102c0578063f2fde38b146102d1575f80fd5b8063715018a61461023457806379ba50971461023c5780638456cb59146102445780638da5cb5b1461024c575f80fd5b80632b4bc300116100e45780632b4bc300146101c85780632e17de78146101e85780632f940c70146101fb5780633f4ba83a1461020e5780635c975abb14610216575f80fd5b80630fa6f64214610115578063150b7a021461012a5780631b3253b01461015b5780631dcac94d14610188575b5f80fd5b610128610123366004610f2b565b6102e4565b005b61013d610138366004610f59565b6104db565b6040516001600160e01b031990911681526020015b60405180910390f35b61017a610169366004610ff2565b5f9081526003602052604090205490565b604051908152602001610152565b6101b0610196366004610ff2565b5f908152600260205260409020546001600160a01b031690565b6040516001600160a01b039091168152602001610152565b6101db6101d6366004611009565b610607565b604051610152919061102b565b6101286101f6366004610ff2565b610670565b610128610209366004610f2b565b6107af565b610128610939565b600154600160a01b900460ff165b6040519015158152602001610152565b61012861094b565b61012861095c565b6101286109a2565b5f546001600160a01b03166101b0565b61012861026a366004610ff2565b6109b2565b61022461027d366004610ff2565b5f908152600260205260409020546001600160a01b0316151590565b6101b07f000000000000000000000000000000000000000000000000000000000000000081565b6001546001600160a01b03166101b0565b6101286102df366004611009565b610b7a565b6102ec610bea565b6102f4610c16565b6001600160a01b03811661031b5760405163d92e233d60e01b815260040160405180910390fd5b5f828152600260205260409020546001600160a01b031615610350576040516382d272e360e01b815260040160405180910390fd5b6040516331a9108f60e11b81526004810183905230906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa1580156103b5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103d9919061106d565b6001600160a01b03161461040057604051636bcd243760e11b815260040160405180910390fd5b6040516323b872dd60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906323b872dd9061045090309085908790600401611088565b5f604051808303815f87803b158015610467575f80fd5b505af1158015610479573d5f803e3d5ffd5b5050505081816001600160a01b03167fc27a1277308b3908a0fb998812a60b1da8911b8583f20bf8f98e5246db8c47ef426040516104b991815260200190565b60405180910390a36104d760015f805160206110fa83398151915255565b5050565b5f6104e4610c16565b6104ec610c31565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105355760405163de1db39560e01b815260040160405180910390fd5b6001600160a01b03851661055c5760405163d92e233d60e01b815260040160405180910390fd5b5f848152600260205260409020546001600160a01b031615610591576040516316e9ad8f60e01b815260040160405180910390fd5b61059b8585610c5c565b83856001600160a01b03167f6173e4d2d9dd52aae0ed37afed3adcf924a490639b759ca93d32dc43366c17d2426040516105d791815260200190565b60405180910390a350630a85bd0160e11b6105fe60015f805160206110fa83398151915255565b95945050505050565b6001600160a01b0381165f9081526004602090815260409182902080548351818402810184019094528084526060939283018282801561066457602002820191905f5260205f20905b815481526020019060010190808311610650575b50505050509050919050565b610678610c16565b5f818152600260205260409020546001600160a01b0316806106ad57604051630a49bbc360e21b815260040160405180910390fd5b6001600160a01b03811633146106d6576040516332dc95cb60e01b815260040160405180910390fd5b6106e08183610cc0565b6040516323b872dd60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906323b872dd9061073090309033908790600401611088565b5f604051808303815f87803b158015610747575f80fd5b505af1158015610759573d5f803e3d5ffd5b50506040514281528492503391507f563fc70fca9d440d883299c76a721644d5aca7c45df98aeb5292c4cb823579bf906020015b60405180910390a3506107ac60015f805160206110fa83398151915255565b50565b6107b7610bea565b6107bf610c16565b5f828152600260205260409020546001600160a01b0316806107f457604051630a49bbc360e21b815260040160405180910390fd5b6001600160a01b03821661081b5760405163d92e233d60e01b815260040160405180910390fd5b806001600160a01b0316826001600160a01b03161461084d5760405163c56a390560e01b815260040160405180910390fd5b6108578184610cc0565b6040516323b872dd60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906323b872dd906108a790309086908890600401611088565b5f604051808303815f87803b1580156108be575f80fd5b505af11580156108d0573d5f803e3d5ffd5b50505050816001600160a01b031683826001600160a01b03167ff4408f2b7cb3bb2b43ddb3715579eae68a12af5f2e6d938537db2be5e72f5f7d4260405161091a91815260200190565b60405180910390a4506104d760015f805160206110fa83398151915255565b610941610bea565b610949610cf0565b565b610953610bea565b6109495f610d45565b60015433906001600160a01b031681146109995760405163118cdaa760e01b81526001600160a01b03821660048201526024015b60405180910390fd5b6107ac81610d45565b6109aa610bea565b610949610d5e565b6109ba610c16565b6109c2610c31565b5f8181526002602052604090205433906001600160a01b0316156109f9576040516316e9ad8f60e01b815260040160405180910390fd5b806001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636352211e846040518263ffffffff1660e01b8152600401610a5191815260200190565b602060405180830381865afa158015610a6c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a90919061106d565b6001600160a01b031614610ab7576040516359dc379f60e01b815260040160405180910390fd5b610ac18183610c5c565b6040516323b872dd60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906323b872dd90610b1190849030908790600401611088565b5f604051808303815f87803b158015610b28575f80fd5b505af1158015610b3a573d5f803e3d5ffd5b5050505081816001600160a01b03167f6173e4d2d9dd52aae0ed37afed3adcf924a490639b759ca93d32dc43366c17d24260405161078d91815260200190565b610b82610bea565b600180546001600160a01b0383166001600160a01b03199091168117909155610bb25f546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b5f546001600160a01b031633146109495760405163118cdaa760e01b8152336004820152602401610990565b610c1e610da1565b60025f805160206110fa83398151915255565b600154600160a01b900460ff16156109495760405163d93c066560e01b815260040160405180910390fd5b5f81815260026020908152604080832080546001600160a01b039096166001600160a01b0319909616861790556003825280832042905593825260048082528483208054858552600584529584208690559082526001850181558252902090910155565b5f81815260026020908152604080832080546001600160a01b031916905560039091528120556104d78282610dd0565b610cf8610e9e565b6001805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600180546001600160a01b03191690556107ac81610ec8565b610d66610c31565b6001805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610d283390565b5f805160206110fa8339815191525460020361094957604051633ee5aeb560e01b815260040160405180910390fd5b6001600160a01b0382165f9081526004602090815260408083208484526005909252822054815491929091610e07906001906110ac565b9050808214610e60575f838281548110610e2357610e236110d1565b905f5260205f200154905080848481548110610e4157610e416110d1565b5f91825260208083209091019290925591825260059052604090208290555b82805480610e7057610e706110e5565b600190038181905f5260205f20015f9055905560055f8581526020019081526020015f205f90555050505050565b600154600160a01b900460ff1661094957604051638dfc202b60e01b815260040160405180910390fd5b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146107ac575f80fd5b5f8060408385031215610f3c575f80fd5b823591506020830135610f4e81610f17565b809150509250929050565b5f805f805f60808688031215610f6d575f80fd5b8535610f7881610f17565b94506020860135610f8881610f17565b935060408601359250606086013567ffffffffffffffff811115610faa575f80fd5b8601601f81018813610fba575f80fd5b803567ffffffffffffffff811115610fd0575f80fd5b886020828401011115610fe1575f80fd5b959894975092955050506020019190565b5f60208284031215611002575f80fd5b5035919050565b5f60208284031215611019575f80fd5b813561102481610f17565b9392505050565b602080825282518282018190525f918401906040840190835b81811015611062578351835260209384019390920191600101611044565b509095945050505050565b5f6020828403121561107d575f80fd5b815161102481610f17565b6001600160a01b039384168152919092166020820152604081019190915260600190565b818103818111156110cb57634e487b7160e01b5f52601160045260245ffd5b92915050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52603160045260245ffdfe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a2646970667358221220f8e5afe3df2897c05bd05e17e152d07acba805eed0e132300174b368b573437b64736f6c634300081a0033", "linkReferences": {}, - "deployedLinkReferences": {} + "deployedLinkReferences": {}, + "immutableReferences": { + "9788": [ + { + "length": 32, + "start": 670 + }, + { + "length": 32, + "start": 880 + }, + { + "length": 32, + "start": 1047 + }, + { + "length": 32, + "start": 1271 + }, + { + "length": 32, + "start": 1783 + }, + { + "length": 32, + "start": 2158 + }, + { + "length": 32, + "start": 2565 + }, + { + "length": 32, + "start": 2776 + } + ] + }, + "inputSourceName": "contracts/TricksforBoosterStaking.sol", + "buildInfoId": "solc-0_8_26-2940a0bf7433fbb858475891fd4d03553b51db3322b46d171911ad73848093b6" } diff --git a/artifacts/contracts/test/ReentrantERC721.sol/ReentrantERC721.json b/artifacts/contracts/test/ReentrantERC721.sol/ReentrantERC721.json new file mode 100644 index 0000000..158647e --- /dev/null +++ b/artifacts/contracts/test/ReentrantERC721.sol/ReentrantERC721.json @@ -0,0 +1,129 @@ +{ + "_format": "hh3-artifact-1", + "contractName": "ReentrantERC721", + "sourceName": "contracts/test/ReentrantERC721.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "staking_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "attackEnabled", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "enableAttack", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "mint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "ownerOf", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "staking", + "outputs": [ + { + "internalType": "contract IReentrantStakingTarget", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x60a0604052348015600e575f80fd5b506040516103ec3803806103ec833981016040819052602b91603b565b6001600160a01b03166080526066565b5f60208284031215604a575f80fd5b81516001600160a01b0381168114605f575f80fd5b9392505050565b6080516103676100855f395f8181610105015261020f01526103675ff3fe608060405234801561000f575f80fd5b5060043610610060575f3560e01c806321f161931461006457806323b872dd146100b257806340c10f19146100c55780634cf088d9146101005780636352211e14610144578063d7751b851461016c575b5f80fd5b6100b06001805460ff1916811790556103e75f9081526020527f332eac5de6beffe8ee7761a0342c75594c3acb5fdde0a2555227e56aa65d414180546001600160a01b03191630179055565b005b6100b06100c03660046102b8565b610189565b6100b06100d33660046102f2565b5f90815260208190526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b6101277f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61012761015236600461031a565b5f908152602081905260409020546001600160a01b031690565b6001546101799060ff1681565b604051901515815260200161013b565b5f818152602081905260409020546001600160a01b038481169116146101e35760405162461bcd60e51b815260206004820152600b60248201526a3bb937b7339037bbb732b960a91b604482015260640160405180910390fd5b60015460ff161561026f576001805460ff1916905560405163534a7e1d60e11b81526103e760048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a694fc3a906024015f604051808303815f87803b158015610258575f80fd5b505af115801561026a573d5f803e3d5ffd5b505050505b5f90815260208190526040902080546001600160a01b0319166001600160a01b039290921691909117905550565b80356001600160a01b03811681146102b3575f80fd5b919050565b5f805f606084860312156102ca575f80fd5b6102d38461029d565b92506102e16020850161029d565b929592945050506040919091013590565b5f8060408385031215610303575f80fd5b61030c8361029d565b946020939093013593505050565b5f6020828403121561032a575f80fd5b503591905056fea2646970667358221220be094efbcfd99befb0cdd910374618b8ffce949b88e6c540d277bc50eb87bb4064736f6c634300081a0033", + "deployedBytecode": "0x608060405234801561000f575f80fd5b5060043610610060575f3560e01c806321f161931461006457806323b872dd146100b257806340c10f19146100c55780634cf088d9146101005780636352211e14610144578063d7751b851461016c575b5f80fd5b6100b06001805460ff1916811790556103e75f9081526020527f332eac5de6beffe8ee7761a0342c75594c3acb5fdde0a2555227e56aa65d414180546001600160a01b03191630179055565b005b6100b06100c03660046102b8565b610189565b6100b06100d33660046102f2565b5f90815260208190526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b6101277f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61012761015236600461031a565b5f908152602081905260409020546001600160a01b031690565b6001546101799060ff1681565b604051901515815260200161013b565b5f818152602081905260409020546001600160a01b038481169116146101e35760405162461bcd60e51b815260206004820152600b60248201526a3bb937b7339037bbb732b960a91b604482015260640160405180910390fd5b60015460ff161561026f576001805460ff1916905560405163534a7e1d60e11b81526103e760048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a694fc3a906024015f604051808303815f87803b158015610258575f80fd5b505af115801561026a573d5f803e3d5ffd5b505050505b5f90815260208190526040902080546001600160a01b0319166001600160a01b039290921691909117905550565b80356001600160a01b03811681146102b3575f80fd5b919050565b5f805f606084860312156102ca575f80fd5b6102d38461029d565b92506102e16020850161029d565b929592945050506040919091013590565b5f8060408385031215610303575f80fd5b61030c8361029d565b946020939093013593505050565b5f6020828403121561032a575f80fd5b503591905056fea2646970667358221220be094efbcfd99befb0cdd910374618b8ffce949b88e6c540d277bc50eb87bb4064736f6c634300081a0033", + "linkReferences": {}, + "deployedLinkReferences": {}, + "immutableReferences": { + "10388": [ + { + "length": 32, + "start": 261 + }, + { + "length": 32, + "start": 527 + } + ] + }, + "inputSourceName": "contracts/test/ReentrantERC721.sol", + "buildInfoId": "solc-0_8_26-2940a0bf7433fbb858475891fd4d03553b51db3322b46d171911ad73848093b6" +} diff --git a/contracts/TricksforBoosterNFT.sol b/contracts/TricksforBoosterNFT.sol index ebe0a21..65635f2 100644 --- a/contracts/TricksforBoosterNFT.sol +++ b/contracts/TricksforBoosterNFT.sol @@ -3,7 +3,7 @@ pragma solidity ^0.8.26; import "@openzeppelin/contracts/token/ERC721/ERC721.sol"; import "@openzeppelin/contracts/token/common/ERC2981.sol"; -import "@openzeppelin/contracts/access/AccessControl.sol"; +import "@openzeppelin/contracts/access/extensions/AccessControlDefaultAdminRules.sol"; import "@openzeppelin/contracts/utils/Pausable.sol"; /// @title TricksforBoosterNFT @@ -11,7 +11,7 @@ import "@openzeppelin/contracts/utils/Pausable.sol"; /// OpenSea-compatible: supports tokenURI, contractURI, and ERC-2981 royalties. /// Minting is role-gated (MINTER_ROLE) and can be paused by the default admin. /// @dev Does not include staking logic — staking is handled by TricksforBoosterStaking. -contract TricksforBoosterNFT is ERC721, ERC2981, AccessControl, Pausable { +contract TricksforBoosterNFT is ERC721, ERC2981, AccessControlDefaultAdminRules, Pausable { // ------------------------------------------------------------------------- // Roles // ------------------------------------------------------------------------- @@ -26,6 +26,14 @@ contract TricksforBoosterNFT is ERC721, ERC2981, AccessControl, Pausable { /// @notice Zero address supplied where a non-zero address is required. error ZeroAddress(); + // ------------------------------------------------------------------------- + // Events + // ------------------------------------------------------------------------- + + event BaseURIUpdated(string previousURI, string newURI); + event ContractURIUpdated(string previousURI, string newURI); + event DefaultRoyaltyUpdated(address indexed receiver, uint96 feeBasisPoints); + // ------------------------------------------------------------------------- // State // ------------------------------------------------------------------------- @@ -43,20 +51,27 @@ contract TricksforBoosterNFT is ERC721, ERC2981, AccessControl, Pausable { /// @param contractMetadataURI_ URI for OpenSea collection-level metadata /// @param royaltyReceiver_ Address that receives royalty payments /// @param royaltyFeeBasisPoints_ Royalty fee in basis points (10 000 = 100%) + /// @param initialAdmin_ Initial default administrator + /// @param initialMinter_ Initial account authorized to mint + /// @param defaultAdminDelay_ Delay in seconds for default-admin transfers constructor( string memory name_, string memory symbol_, string memory baseURI_, string memory contractMetadataURI_, address royaltyReceiver_, - uint96 royaltyFeeBasisPoints_ - ) ERC721(name_, symbol_) { - if (royaltyReceiver_ == address(0)) revert ZeroAddress(); + uint96 royaltyFeeBasisPoints_, + address initialAdmin_, + address initialMinter_, + uint48 defaultAdminDelay_ + ) ERC721(name_, symbol_) AccessControlDefaultAdminRules(defaultAdminDelay_, initialAdmin_) { + if (royaltyReceiver_ == address(0) || initialAdmin_ == address(0) || initialMinter_ == address(0)) { + revert ZeroAddress(); + } _baseTokenURI = baseURI_; _contractMetadataURI = contractMetadataURI_; _setDefaultRoyalty(royaltyReceiver_, royaltyFeeBasisPoints_); - _grantRole(DEFAULT_ADMIN_ROLE, msg.sender); - _grantRole(MINTER_ROLE, msg.sender); + _grantRole(MINTER_ROLE, initialMinter_); } // ------------------------------------------------------------------------- @@ -78,20 +93,26 @@ contract TricksforBoosterNFT is ERC721, ERC2981, AccessControl, Pausable { /// @notice Updates the base URI used to construct per-token metadata URIs. /// @param baseURI_ New base URI string. function setBaseURI(string calldata baseURI_) external onlyRole(DEFAULT_ADMIN_ROLE) { + string memory previousURI = _baseTokenURI; _baseTokenURI = baseURI_; + emit BaseURIUpdated(previousURI, baseURI_); } /// @notice Updates the collection-level metadata URI (OpenSea contractURI extension). /// @param contractMetadataURI_ New collection metadata URI. function setContractURI(string calldata contractMetadataURI_) external onlyRole(DEFAULT_ADMIN_ROLE) { + string memory previousURI = _contractMetadataURI; _contractMetadataURI = contractMetadataURI_; + emit ContractURIUpdated(previousURI, contractMetadataURI_); } /// @notice Updates the default royalty receiver and fee for all tokens. /// @param receiver Address that receives royalty payments. /// @param feeBasisPoints Royalty fee in basis points (10 000 = 100%). function setRoyaltyInfo(address receiver, uint96 feeBasisPoints) external onlyRole(DEFAULT_ADMIN_ROLE) { + if (receiver == address(0)) revert ZeroAddress(); _setDefaultRoyalty(receiver, feeBasisPoints); + emit DefaultRoyaltyUpdated(receiver, feeBasisPoints); } /// @notice Pauses minting. Does not affect transfers. @@ -113,6 +134,11 @@ contract TricksforBoosterNFT is ERC721, ERC2981, AccessControl, Pausable { return _contractMetadataURI; } + /// @notice Returns the base URI used to construct token metadata URLs. + function baseURI() external view returns (string memory) { + return _baseTokenURI; + } + // ------------------------------------------------------------------------- // Internal overrides // ------------------------------------------------------------------------- @@ -130,7 +156,7 @@ contract TricksforBoosterNFT is ERC721, ERC2981, AccessControl, Pausable { function supportsInterface(bytes4 interfaceId) public view - override(ERC721, ERC2981, AccessControl) + override(ERC721, ERC2981, AccessControlDefaultAdminRules) returns (bool) { return super.supportsInterface(interfaceId); diff --git a/contracts/TricksforBoosterStaking.sol b/contracts/TricksforBoosterStaking.sol index 348022a..00b8bc6 100644 --- a/contracts/TricksforBoosterStaking.sol +++ b/contracts/TricksforBoosterStaking.sol @@ -4,6 +4,7 @@ pragma solidity ^0.8.26; import "@openzeppelin/contracts/token/ERC721/IERC721.sol"; import "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; +import "@openzeppelin/contracts/access/Ownable2Step.sol"; import "@openzeppelin/contracts/utils/ReentrancyGuard.sol"; import "@openzeppelin/contracts/utils/Pausable.sol"; @@ -26,7 +27,7 @@ import "@openzeppelin/contracts/utils/Pausable.sol"; /// @dev Pause gates new staking only. Unstaking is always available so players can /// always recover their assets. emergencyWithdraw is an explicit, named, and /// event-emitting admin path — it is not hidden. -contract TricksforBoosterStaking is Ownable, ReentrancyGuard, Pausable, IERC721Receiver { +contract TricksforBoosterStaking is Ownable2Step, ReentrancyGuard, Pausable, IERC721Receiver { // ------------------------------------------------------------------------- // Errors // ------------------------------------------------------------------------- @@ -49,6 +50,15 @@ contract TricksforBoosterStaking is Ownable, ReentrancyGuard, Pausable, IERC721R /// @notice Token received from an unsupported NFT contract. error UnsupportedNFTContract(); + /// @notice Emergency withdrawals can only return a tracked token to its original staker. + error InvalidEmergencyRecipient(); + + /// @notice Rescue is only available for tokens that have no staking record. + error TokenIsTracked(); + + /// @notice Rescue requires the staking contract to currently hold the token. + error TokenNotHeld(); + // ------------------------------------------------------------------------- // Events (integration-critical — do not rename, reorder, or re-index) // ------------------------------------------------------------------------- @@ -79,6 +89,9 @@ contract TricksforBoosterStaking is Ownable, ReentrancyGuard, Pausable, IERC721R uint256 withdrawnAt ); + /// @notice Emitted when an untracked NFT sent with transferFrom is recovered by the owner. + event UntrackedTokenRescued(address indexed recipient, uint256 indexed tokenId, uint256 rescuedAt); + // ------------------------------------------------------------------------- // State // ------------------------------------------------------------------------- @@ -103,8 +116,9 @@ contract TricksforBoosterStaking is Ownable, ReentrancyGuard, Pausable, IERC721R // ------------------------------------------------------------------------- /// @param nftContract_ Address of the TricksforBoosterNFT contract. - constructor(address nftContract_) Ownable(msg.sender) { - if (nftContract_ == address(0)) revert ZeroAddress(); + /// @param initialOwner_ Initial contract owner. Mainnet deployments should use a multisig. + constructor(address nftContract_, address initialOwner_) Ownable(initialOwner_) { + if (nftContract_ == address(0) || initialOwner_ == address(0)) revert ZeroAddress(); nftContract = IERC721(nftContract_); } @@ -177,16 +191,30 @@ contract TricksforBoosterStaking is Ownable, ReentrancyGuard, Pausable, IERC721R /// @param tokenId The token ID to withdraw. /// @param recipient The address to send the token to. function emergencyWithdraw(uint256 tokenId, address recipient) external onlyOwner nonReentrant { - if (_stakedBy[tokenId] == address(0)) revert TokenNotStaked(); + address originalStaker = _stakedBy[tokenId]; + if (originalStaker == address(0)) revert TokenNotStaked(); if (recipient == address(0)) revert ZeroAddress(); + if (recipient != originalStaker) revert InvalidEmergencyRecipient(); - address originalStaker = _stakedBy[tokenId]; _clearStake(originalStaker, tokenId); nftContract.transferFrom(address(this), recipient, tokenId); emit EmergencyWithdrawn(originalStaker, tokenId, recipient, block.timestamp); } + /// @notice Recovers an NFT that was sent directly with transferFrom and therefore did + /// not invoke onERC721Received or create a staking record. + /// @param tokenId The untracked token held by this contract. + /// @param recipient The non-zero address that receives the recovered token. + function rescueUntrackedToken(uint256 tokenId, address recipient) external onlyOwner nonReentrant { + if (recipient == address(0)) revert ZeroAddress(); + if (_stakedBy[tokenId] != address(0)) revert TokenIsTracked(); + if (nftContract.ownerOf(tokenId) != address(this)) revert TokenNotHeld(); + + nftContract.transferFrom(address(this), recipient, tokenId); + emit UntrackedTokenRescued(recipient, tokenId, block.timestamp); + } + // ------------------------------------------------------------------------- // Pause // ------------------------------------------------------------------------- diff --git a/contracts/test/ReentrantERC721.sol b/contracts/test/ReentrantERC721.sol new file mode 100644 index 0000000..e31c16d --- /dev/null +++ b/contracts/test/ReentrantERC721.sol @@ -0,0 +1,39 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.26; + +interface IReentrantStakingTarget { + function stake(uint256 tokenId) external; +} + +/// @dev Test-only NFT double that calls stake again from transferFrom. +contract ReentrantERC721 { + mapping(uint256 tokenId => address owner) private _owners; + IReentrantStakingTarget public immutable staking; + bool public attackEnabled; + + constructor(address staking_) { + staking = IReentrantStakingTarget(staking_); + } + + function mint(address to, uint256 tokenId) external { + _owners[tokenId] = to; + } + + function enableAttack() external { + attackEnabled = true; + _owners[999] = address(this); + } + + function ownerOf(uint256 tokenId) external view returns (address) { + return _owners[tokenId]; + } + + function transferFrom(address from, address to, uint256 tokenId) external { + require(_owners[tokenId] == from, "wrong owner"); + if (attackEnabled) { + attackEnabled = false; + staking.stake(999); + } + _owners[tokenId] = to; + } +} diff --git a/deployments/README.md b/deployments/README.md index 86eb1af..26ac1f0 100644 --- a/deployments/README.md +++ b/deployments/README.md @@ -54,14 +54,23 @@ Each network folder contains one JSON file per deployed contract: "transactionHash": "0x...", "blockNumber": 12345678, "deployedAt": "2025-01-01T00:00:00Z", - "constructorArgs": [] + "constructorArgs": [], + "chainId": 11155111, + "deployer": "0x...", + "transactionStatus": "success", + "sourceCommit": "...", + "compiler": "solc 0.8.26", + "compilerSettings": "optimizer=true,runs=200,evmVersion=cancun", + "creationCodeHash": "0x...", + "runtimeCodeHash": "0x..." } ``` ## Important Notes - Do **not** commit private keys or mnemonics to this folder. -- ABI and BIN artifacts are stored in `/artifacts/contracts/` (generated by `npx hardhat compile`) — not here. +- ABI, bytecode, and Hardhat 3 build information are generated by `npm run compile`; `npm run artifacts:check` fails on drift. - The NFT contract is always deployed before the staking contract. The staking contract constructor requires the NFT contract address. -- The `config/` files contain only non-secret parameters. Secrets (`RPC_URL`, `DEPLOYER_PRIVATE_KEY`) are always stored as GitHub Environment secrets and never committed. +- The required admin/minter/staking-owner addresses are supplied by protected GitHub Environment variables. Mainnet staking ownership and administration should use multisigs. +- A rerun reuses addresses whose manifests still point to live bytecode. Creating replacements requires an explicit `--force`. - See [`docs/github-environments-setup.md`](../docs/github-environments-setup.md) for GitHub configuration instructions. diff --git a/deployments/config/avalanche-fuji/deployment-params.json b/deployments/config/avalanche-fuji/deployment-params.json index a2aaa01..3938da5 100644 --- a/deployments/config/avalanche-fuji/deployment-params.json +++ b/deployments/config/avalanche-fuji/deployment-params.json @@ -3,8 +3,12 @@ "Network": "avalanche-fuji", "ChainId": 43113, "DeploymentsOutputPath": "deployments", + "AdminAddress": "", + "MinterAddress": "", + "StakingOwnerAddress": "", + "DefaultAdminDelay": 0, "Nft": { - "Name": "TricksforBooster", + "Name": "Tricksfor Boosters - Avalanche", "Symbol": "TFB", "BaseUri": "https://nft-preview.tricksfor.com/avalanche/metadata/", "ContractMetadataUri": "https://nft-preview.tricksfor.com/avalanche/contract/collection.json", diff --git a/deployments/config/avalanche-fuji/nft-manifest.json b/deployments/config/avalanche-fuji/nft-manifest.json index d85110f..89ff5f9 100644 --- a/deployments/config/avalanche-fuji/nft-manifest.json +++ b/deployments/config/avalanche-fuji/nft-manifest.json @@ -1,6 +1,6 @@ { "manifestVersion": "1.0", - "collectionName": "Tricksfor Booster NFT", + "collectionName": "Tricksfor Boosters - Avalanche", "chain": "Avalanche", "chainKey": "avalanche", "network": "avalanche-fuji", diff --git a/deployments/config/avalanche-mainnet/deployment-params.json b/deployments/config/avalanche-mainnet/deployment-params.json index 3eb634a..1e8d908 100644 --- a/deployments/config/avalanche-mainnet/deployment-params.json +++ b/deployments/config/avalanche-mainnet/deployment-params.json @@ -3,8 +3,12 @@ "Network": "avalanche-mainnet", "ChainId": 43114, "DeploymentsOutputPath": "deployments", + "AdminAddress": "", + "MinterAddress": "", + "StakingOwnerAddress": "", + "DefaultAdminDelay": 172800, "Nft": { - "Name": "TricksforBooster", + "Name": "Tricksfor Boosters - Avalanche", "Symbol": "TFB", "BaseUri": "https://nft.tricksfor.com/avalanche/metadata/", "ContractMetadataUri": "https://nft.tricksfor.com/avalanche/contract/collection.json", diff --git a/deployments/config/avalanche-mainnet/nft-manifest.json b/deployments/config/avalanche-mainnet/nft-manifest.json index 2e5bb39..338c04f 100644 --- a/deployments/config/avalanche-mainnet/nft-manifest.json +++ b/deployments/config/avalanche-mainnet/nft-manifest.json @@ -1,6 +1,6 @@ { "manifestVersion": "1.0", - "collectionName": "Tricksfor Booster NFT", + "collectionName": "Tricksfor Boosters - Avalanche", "chain": "Avalanche", "chainKey": "avalanche", "network": "avalanche-mainnet", diff --git a/deployments/config/bsc-mainnet/deployment-params.json b/deployments/config/bsc-mainnet/deployment-params.json index 1251c4f..ccadb57 100644 --- a/deployments/config/bsc-mainnet/deployment-params.json +++ b/deployments/config/bsc-mainnet/deployment-params.json @@ -3,8 +3,12 @@ "Network": "bsc-mainnet", "ChainId": 56, "DeploymentsOutputPath": "deployments", + "AdminAddress": "", + "MinterAddress": "", + "StakingOwnerAddress": "", + "DefaultAdminDelay": 172800, "Nft": { - "Name": "TricksforBooster", + "Name": "Tricksfor Boosters - BSC", "Symbol": "TFB", "BaseUri": "https://nft.tricksfor.com/bsc/metadata/", "ContractMetadataUri": "https://nft.tricksfor.com/bsc/contract/collection.json", diff --git a/deployments/config/bsc-mainnet/nft-manifest.json b/deployments/config/bsc-mainnet/nft-manifest.json index 55dd6c0..bc31726 100644 --- a/deployments/config/bsc-mainnet/nft-manifest.json +++ b/deployments/config/bsc-mainnet/nft-manifest.json @@ -1,6 +1,6 @@ { "manifestVersion": "1.0", - "collectionName": "Tricksfor Booster NFT", + "collectionName": "Tricksfor Boosters - BSC", "chain": "BNB Smart Chain", "chainKey": "bsc", "network": "bsc-mainnet", diff --git a/deployments/config/bsc-testnet/deployment-params.json b/deployments/config/bsc-testnet/deployment-params.json index d5c8b6e..70e3b7d 100644 --- a/deployments/config/bsc-testnet/deployment-params.json +++ b/deployments/config/bsc-testnet/deployment-params.json @@ -3,8 +3,12 @@ "Network": "bsc-testnet", "ChainId": 97, "DeploymentsOutputPath": "deployments", + "AdminAddress": "", + "MinterAddress": "", + "StakingOwnerAddress": "", + "DefaultAdminDelay": 0, "Nft": { - "Name": "TricksforBooster", + "Name": "Tricksfor Boosters - BSC", "Symbol": "TFB", "BaseUri": "https://nft-preview.tricksfor.com/bsc/metadata/", "ContractMetadataUri": "https://nft-preview.tricksfor.com/bsc/contract/collection.json", diff --git a/deployments/config/bsc-testnet/nft-manifest.json b/deployments/config/bsc-testnet/nft-manifest.json index 15e6fd0..3c8ef1d 100644 --- a/deployments/config/bsc-testnet/nft-manifest.json +++ b/deployments/config/bsc-testnet/nft-manifest.json @@ -1,6 +1,6 @@ { "manifestVersion": "1.0", - "collectionName": "Tricksfor Booster NFT", + "collectionName": "Tricksfor Boosters - BSC", "chain": "BNB Smart Chain", "chainKey": "bsc", "network": "bsc-testnet", diff --git a/deployments/config/ethereum-mainnet/deployment-params.json b/deployments/config/ethereum-mainnet/deployment-params.json index f27c9e7..9dee3fb 100644 --- a/deployments/config/ethereum-mainnet/deployment-params.json +++ b/deployments/config/ethereum-mainnet/deployment-params.json @@ -3,8 +3,12 @@ "Network": "ethereum-mainnet", "ChainId": 1, "DeploymentsOutputPath": "deployments", + "AdminAddress": "", + "MinterAddress": "", + "StakingOwnerAddress": "", + "DefaultAdminDelay": 172800, "Nft": { - "Name": "TricksforBooster", + "Name": "Tricksfor Boosters - Ethereum", "Symbol": "TFB", "BaseUri": "https://nft.tricksfor.com/ethereum/metadata/", "ContractMetadataUri": "https://nft.tricksfor.com/ethereum/contract/collection.json", diff --git a/deployments/config/ethereum-mainnet/nft-manifest.json b/deployments/config/ethereum-mainnet/nft-manifest.json index 5e0b9ed..52cf2d1 100644 --- a/deployments/config/ethereum-mainnet/nft-manifest.json +++ b/deployments/config/ethereum-mainnet/nft-manifest.json @@ -1,6 +1,6 @@ { "manifestVersion": "1.0", - "collectionName": "Tricksfor Booster NFT", + "collectionName": "Tricksfor Boosters - Ethereum", "chain": "Ethereum", "chainKey": "ethereum", "network": "ethereum-mainnet", diff --git a/deployments/config/ethereum-sepolia/deployment-params.json b/deployments/config/ethereum-sepolia/deployment-params.json index 9708cff..2436cd6 100644 --- a/deployments/config/ethereum-sepolia/deployment-params.json +++ b/deployments/config/ethereum-sepolia/deployment-params.json @@ -3,8 +3,12 @@ "Network": "ethereum-sepolia", "ChainId": 11155111, "DeploymentsOutputPath": "deployments", + "AdminAddress": "", + "MinterAddress": "", + "StakingOwnerAddress": "", + "DefaultAdminDelay": 0, "Nft": { - "Name": "TricksforBooster", + "Name": "Tricksfor Boosters - Ethereum", "Symbol": "TFB", "BaseUri": "https://nft-preview.tricksfor.com/ethereum/metadata/", "ContractMetadataUri": "https://nft-preview.tricksfor.com/ethereum/contract/collection.json", diff --git a/deployments/config/ethereum-sepolia/nft-manifest.json b/deployments/config/ethereum-sepolia/nft-manifest.json index 9c12bc9..fb6ea38 100644 --- a/deployments/config/ethereum-sepolia/nft-manifest.json +++ b/deployments/config/ethereum-sepolia/nft-manifest.json @@ -1,6 +1,6 @@ { "manifestVersion": "1.0", - "collectionName": "Tricksfor Booster NFT", + "collectionName": "Tricksfor Boosters - Ethereum", "chain": "Ethereum", "chainKey": "ethereum", "network": "ethereum-sepolia", diff --git a/deployments/config/optimism-mainnet/deployment-params.json b/deployments/config/optimism-mainnet/deployment-params.json index 91820e9..d539613 100644 --- a/deployments/config/optimism-mainnet/deployment-params.json +++ b/deployments/config/optimism-mainnet/deployment-params.json @@ -3,8 +3,12 @@ "Network": "optimism-mainnet", "ChainId": 10, "DeploymentsOutputPath": "deployments", + "AdminAddress": "", + "MinterAddress": "", + "StakingOwnerAddress": "", + "DefaultAdminDelay": 172800, "Nft": { - "Name": "TricksforBooster", + "Name": "Tricksfor Boosters - Optimism", "Symbol": "TFB", "BaseUri": "https://nft.tricksfor.com/optimism/metadata/", "ContractMetadataUri": "https://nft.tricksfor.com/optimism/contract/collection.json", diff --git a/deployments/config/optimism-mainnet/nft-manifest.json b/deployments/config/optimism-mainnet/nft-manifest.json index 6e32ea2..b61e386 100644 --- a/deployments/config/optimism-mainnet/nft-manifest.json +++ b/deployments/config/optimism-mainnet/nft-manifest.json @@ -1,6 +1,6 @@ { "manifestVersion": "1.0", - "collectionName": "Tricksfor Booster NFT", + "collectionName": "Tricksfor Boosters - Optimism", "chain": "Optimism", "chainKey": "optimism", "network": "optimism-mainnet", diff --git a/deployments/config/optimism-sepolia/deployment-params.json b/deployments/config/optimism-sepolia/deployment-params.json index 2d6c76d..d1b18b6 100644 --- a/deployments/config/optimism-sepolia/deployment-params.json +++ b/deployments/config/optimism-sepolia/deployment-params.json @@ -3,8 +3,12 @@ "Network": "optimism-sepolia", "ChainId": 11155420, "DeploymentsOutputPath": "deployments", + "AdminAddress": "", + "MinterAddress": "", + "StakingOwnerAddress": "", + "DefaultAdminDelay": 0, "Nft": { - "Name": "TricksforBooster", + "Name": "Tricksfor Boosters - Optimism", "Symbol": "TFB", "BaseUri": "https://nft-preview.tricksfor.com/optimism/metadata/", "ContractMetadataUri": "https://nft-preview.tricksfor.com/optimism/contract/collection.json", diff --git a/deployments/config/optimism-sepolia/nft-manifest.json b/deployments/config/optimism-sepolia/nft-manifest.json index aaab4ad..ce53b7d 100644 --- a/deployments/config/optimism-sepolia/nft-manifest.json +++ b/deployments/config/optimism-sepolia/nft-manifest.json @@ -1,6 +1,6 @@ { "manifestVersion": "1.0", - "collectionName": "Tricksfor Booster NFT", + "collectionName": "Tricksfor Boosters - Optimism", "chain": "Optimism", "chainKey": "optimism", "network": "optimism-sepolia", diff --git a/deployments/config/polygon-amoy/deployment-params.json b/deployments/config/polygon-amoy/deployment-params.json index 989c40b..9a30a2c 100644 --- a/deployments/config/polygon-amoy/deployment-params.json +++ b/deployments/config/polygon-amoy/deployment-params.json @@ -3,8 +3,12 @@ "Network": "polygon-amoy", "ChainId": 80002, "DeploymentsOutputPath": "deployments", + "AdminAddress": "", + "MinterAddress": "", + "StakingOwnerAddress": "", + "DefaultAdminDelay": 0, "Nft": { - "Name": "TricksforBooster", + "Name": "Tricksfor Boosters - Polygon", "Symbol": "TFB", "BaseUri": "https://nft-preview.tricksfor.com/polygon/metadata/", "ContractMetadataUri": "https://nft-preview.tricksfor.com/polygon/contract/collection.json", diff --git a/deployments/config/polygon-amoy/nft-manifest.json b/deployments/config/polygon-amoy/nft-manifest.json index ddc453c..deecc32 100644 --- a/deployments/config/polygon-amoy/nft-manifest.json +++ b/deployments/config/polygon-amoy/nft-manifest.json @@ -1,6 +1,6 @@ { "manifestVersion": "1.0", - "collectionName": "Tricksfor Booster NFT", + "collectionName": "Tricksfor Boosters - Polygon", "chain": "Polygon", "chainKey": "polygon", "network": "polygon-amoy", diff --git a/deployments/config/polygon-mainnet/deployment-params.json b/deployments/config/polygon-mainnet/deployment-params.json index e2356e5..74f2c4a 100644 --- a/deployments/config/polygon-mainnet/deployment-params.json +++ b/deployments/config/polygon-mainnet/deployment-params.json @@ -3,8 +3,12 @@ "Network": "polygon-mainnet", "ChainId": 137, "DeploymentsOutputPath": "deployments", + "AdminAddress": "", + "MinterAddress": "", + "StakingOwnerAddress": "", + "DefaultAdminDelay": 172800, "Nft": { - "Name": "TricksforBooster", + "Name": "Tricksfor Boosters - Polygon", "Symbol": "TFB", "BaseUri": "https://nft.tricksfor.com/polygon/metadata/", "ContractMetadataUri": "https://nft.tricksfor.com/polygon/contract/collection.json", diff --git a/deployments/config/polygon-mainnet/nft-manifest.json b/deployments/config/polygon-mainnet/nft-manifest.json index 999781a..f5bd125 100644 --- a/deployments/config/polygon-mainnet/nft-manifest.json +++ b/deployments/config/polygon-mainnet/nft-manifest.json @@ -1,6 +1,6 @@ { "manifestVersion": "1.0", - "collectionName": "Tricksfor Booster NFT", + "collectionName": "Tricksfor Boosters - Polygon", "chain": "Polygon", "chainKey": "polygon", "network": "polygon-mainnet", diff --git a/deployments/mint-plans/README.md b/deployments/mint-plans/README.md new file mode 100644 index 0000000..07e7572 --- /dev/null +++ b/deployments/mint-plans/README.md @@ -0,0 +1,24 @@ +# Mint plans + +Bulk minting is intentionally separate from deployment. A plan must be reviewed and committed +before the protected `mint-mainnet.yml` workflow can execute it. Token IDs are explicit, positive, +and unique; there is no on-chain supply cap, so the documented 600-token allocation remains an +off-chain release policy. + +```json +{ + "items": [ + { "tokenId": 1, "recipient": "0x1111111111111111111111111111111111111111" } + ] +} +``` + +Run a read-only validation first: + +```bash +Deployment__MintPlanPath=deployments/mint-plans/example.json \ +dotnet run --project src/Tricksfor.Blockchain.Booster.Deploy -- mint --dry-run +``` + +The runner is resumable: already-minted entries are skipped only when their current owner matches +the plan. Any ownership mismatch aborts the run. diff --git a/docs/README.md b/docs/README.md index 4057fd3..0163de1 100644 --- a/docs/README.md +++ b/docs/README.md @@ -8,7 +8,7 @@ This index provides a single entry point to all implementation guidance, referen | Document | Description | |---|---| -| [Booster NFT Staking Specification](booster-nft-staking-spec.md) *(coming soon)* | Full specification for the Booster NFT and staking contracts: state model, custody flow, event schema, and invariants | +| Booster NFT Staking Specification *(planned)* | A dedicated full specification has not yet been added; use the contract source, backend integration contract, architecture guardrails, and security review meanwhile | | [Backend Integration Contract](backend-integration-contract.md) | How backend services consume on-chain staking state: event semantics, read methods, consistency rules, and worked examples | --- @@ -17,10 +17,12 @@ This index provides a single entry point to all implementation guidance, referen | Document | Description | |---|---| -| [Release Operations Guide](release-operations.md) | Single operator reference for the release pipeline: required GitHub Environments, secrets, variables, deployment parameters, release tag conventions, network mapping, approval model, failure recovery, and artifact locations | +| [Deployment Operator Runbook](deployment.md) | Current source of truth, exact setup, testnet rollout, mainnet blockers/readiness, recovery, verification, NuGet, and minting | +| [Archived Release Operations Guide](release-operations.md) | Compatibility pointer explaining which former workflow assumptions are obsolete | | [GitHub Environments Setup](github-environments-setup.md) | Step-by-step GitHub UI configuration reference for environment secrets, variables, and protection rules | -| [Release Deployment Architecture](release-deployment-architecture.md) | Source-of-truth architecture for the release-driven multi-network deployment pipeline: trigger model, environment strategy, secrets model, network strategy (Ethereum, Polygon, Optimism, BNB Smart Chain, Avalanche), verification, NuGet publishing, versioning, and failure handling | -| [Deployment Instructions](deployment.md) *(coming soon)* | Step-by-step instructions for deploying both contracts to a target network, including constructor arguments, verification, and post-deployment checks | +| [Archived Release Deployment Architecture](release-deployment-architecture.md) | Compatibility pointer from the deleted all-in-one workflow to the current architecture | +| [Cloudflare Pages Setup](cloudflare-pages-setup.md) | Current Wrangler selected-chain upload model and unresolved branch/custom-domain routing requirement | +| [Verification Troubleshooting](verification-troubleshooting.md) | Current blocking verification behavior, safe reruns, and exact manual verification commands | --- @@ -82,6 +84,7 @@ This index provides a single entry point to all implementation guidance, referen | Document | Description | |---|---| | [Architecture Guardrails](ai/architecture-guardrails.md) | Architectural separation rules, event stability expectations, state model rules, testing expectations, security review expectations, and indexing compatibility requirements | +| [Automated Security Review — 2026-07-19](security-review-2026-07-19.md) | Reproducible Slither results, state-machine invariants, reviewed properties, and residual operational risks | --- diff --git a/docs/cloudflare-pages-setup.md b/docs/cloudflare-pages-setup.md index 4dd6386..2ea5e89 100644 --- a/docs/cloudflare-pages-setup.md +++ b/docs/cloudflare-pages-setup.md @@ -1,269 +1,176 @@ # Cloudflare Pages Setup -This guide describes how to create and configure a Cloudflare Pages project for hosting -Tricksfor Booster NFT metadata and images, and how to connect it to the release workflow. +This guide describes the Cloudflare configuration consumed by the current reusable deployment +workflow. Contract deployment instructions are in the +[Deployment Operator Runbook](deployment.md). -The static files live under [`nft-assets/`](../nft-assets/README.md) in this repository. -They are deployed to Cloudflare Pages by the `deploy-metadata` job in `release-deploy.yml` -before the smart contracts are deployed. +## 1. Current publishing model ---- +When `deploy_metadata=true`, `.github/workflows/_deploy.yml`: -## Table of Contents +1. validates the selected environment manifest; +2. generates its chain output under `nft-assets/{chainKey}/`; +3. validates the generated output; +4. stages only `{chainKey}/`, `_headers`, and `_redirects` under `site/`; +5. uses `cloudflare/wrangler-action@v3` to run: -1. [Prerequisites](#1-prerequisites) -2. [Create the Cloudflare Pages Project](#2-create-the-cloudflare-pages-project) -3. [Bind a Custom Domain](#3-bind-a-custom-domain) -4. [Configure GitHub Environments](#4-configure-github-environments) -5. [Variable and Secret Reference](#5-variable-and-secret-reference) -6. [How the Workflow Uses These Values](#6-how-the-workflow-uses-these-values) -7. [Manual Deployment (Optional)](#7-manual-deployment-optional) -8. [Multi-Chain Deployment Strategy](#8-multi-chain-deployment-strategy) + ```text + pages deploy site --project-name={CF_PAGES_PROJECT} --branch={deploy_env} + ``` ---- +The workflow does not use `cloudflare/pages-action`, upload the full `nft-assets` tree, or derive +contract URIs from the Pages response. -## 1. Prerequisites +## 2. Known routing requirement + +The checked-in contract and metadata configurations use fixed custom-domain URLs: + +| Stage | URL pattern | +| ------- | -------------------------------------------------- | +| Testnet | `https://nft-preview.tricksfor.com/{chainKey}/...` | +| Mainnet | `https://nft.tricksfor.com/{chainKey}/...` | + +The workflow uploads a branch named after the environment, for example `ethereum-sepolia`, while +the contract preflight requests the fixed custom-domain URL. + +Before relying on metadata deployment, explicitly prove how the custom domain serves the selected +branch. A Pages preview deployment is not automatically equivalent to the production custom domain. +If the fixed URL continues serving an older production branch, the upload can succeed while the +contract receives stale metadata. + +This repository does not currently document or provision a Worker/router that maps chain paths to +different Pages branches. Treat the Pages branch/custom-domain mapping as an operational blocker +until one of these designs is implemented and tested: + +- publish a complete multi-chain site atomically to the production branch; +- use separate hostnames/projects and configure each contract URI accordingly; or +- place an explicitly managed Cloudflare Worker/router in front of branch deployments. + +Do not assume `_redirects` selects a Pages deployment branch; it only rewrites paths within the site +that is already serving the request. + +## 3. Prerequisites - A Cloudflare account with Pages enabled. -- DNS for `nft.tricksfor.com` (or your custom domain) managed through Cloudflare. -- A Cloudflare API token with **Cloudflare Pages: Edit** permission. +- DNS for the intended metadata hostname managed in the relevant Cloudflare zone. +- Permission to create a Pages project and bind a custom domain. +- A scoped API token with Pages edit permission. +- An approved branch/domain routing design from Section 2. + +## 4. Create a Direct Upload project + +1. Open the Cloudflare dashboard. +2. Select **Workers & Pages → Create application → Pages**. +3. Select **Direct Upload** rather than Git integration. +4. Enter the approved project name. +5. Complete the initial project creation. +6. Record the project name exactly; it becomes `CF_PAGES_PROJECT`. +7. Record the account ID; it becomes `CLOUDFLARE_ACCOUNT_ID`. ---- +The current GitHub workflow, rather than Cloudflare Git integration, owns uploads. -## 2. Create the Cloudflare Pages Project +## 5. Create the API token -1. Log in to [Cloudflare dashboard](https://dash.cloudflare.com/). -2. Open **Workers & Pages → Create application → Pages**. -3. Choose **Direct Upload** (the workflow pushes files directly — do not connect via Git here). -4. Name the project (e.g. `tricksfor-nft`). - This name becomes `CF_PAGES_PROJECT` in your GitHub Environment variables. -5. Complete the wizard. The initial upload can be empty; the workflow will populate it. +1. Open **Cloudflare dashboard → My Profile → API Tokens → Create Token**. +2. Create a custom token scoped to the specific account. +3. Grant only the permission required to edit/deploy Cloudflare Pages projects. +4. Restrict account and resource scope as tightly as the deployment design permits. +5. Create the token and copy it once. +6. Store it as the selected GitHub Environment secret `CLOUDFLARE_API_TOKEN`. ---- +Do not store the token in repository files, workflow inputs, or shell scripts. -## 3. Bind a Custom Domain +## 6. Bind custom domains -1. In the Cloudflare Pages project, open **Custom domains → Set up a custom domain**. -2. Enter `nft.tricksfor.com` (or your chosen domain). -3. Follow the DNS verification steps. Because the domain is managed by Cloudflare, a CNAME - record pointing to `{project-name}.pages.dev` is created automatically. -4. Wait for the domain to become active (usually a few minutes). +After the routing model is selected: -The custom domain value (`nft.tricksfor.com`) becomes `NFT_BASE_DOMAIN` in your GitHub -Environment variables. +1. Open the Pages project. +2. Select **Custom domains → Set up a custom domain**. +3. Enter the approved hostname. +4. Complete the DNS ownership checks. +5. Wait for the domain to become active. +6. Confirm HTTPS is valid. +7. Confirm the expected branch/site is serving the hostname. -> **Note:** Custom domains are optional. Without one, assets are served from -> `https://{project-name}.pages.dev`. The workflow falls back to this URL if `NFT_BASE_DOMAIN` -> is not set. However, custom domain URLs are stable and recommended for mainnet deployments. +At minimum, keep preview/testnet metadata isolated from production metadata. A testnet upload must +never replace content used by a mainnet contract. ---- +## 7. Configure the GitHub Environment -## 4. Configure GitHub Environments +Under **Settings → Environments → {environment}**, add: -Add the following values to each GitHub Environment that will deploy to this Pages project -(see [`docs/github-environments-setup.md`](github-environments-setup.md) for the full -environment setup guide). +| Name | Type | Required for metadata deployment | +| ----------------------- | -------- | -------------------------------- | +| `CLOUDFLARE_API_TOKEN` | Secret | Yes | +| `CLOUDFLARE_ACCOUNT_ID` | Variable | Yes | +| `CF_PAGES_PROJECT` | Variable | Yes | -### New Environment Secret +`NFT_BASE_DOMAIN` is not consumed by the current workflow. Base and contract metadata URLs come +from the checked-in deployment parameter files and NFT manifests. -| Secret name | Description | -|------------------------|-----------------------------------------------------------------| -| `CLOUDFLARE_API_TOKEN` | Cloudflare API token with **Cloudflare Pages: Edit** permission | - -Add this under **Settings → Environments → {env-name} → Secrets**. - -### New Environment Variables - -| Variable name | Required | Description | Example | -|------------------------|----------|----------------------------------------------------------------------|------------------------------| -| `CLOUDFLARE_ACCOUNT_ID`| Yes | Cloudflare account ID (visible in the dashboard URL or account home) | `a1b2c3d4e5f6...` | -| `CF_PAGES_PROJECT` | Yes | Cloudflare Pages project name | `tricksfor-nft` | -| `NFT_BASE_DOMAIN` | No | Custom domain for the Pages site (without protocol or trailing slash)| `nft.tricksfor.com` | - -Add these under **Settings → Environments → {env-name} → Variables**. - -> **Why `CLOUDFLARE_ACCOUNT_ID` as a variable and not a secret?** -> The account ID is not sensitive — it is visible in the Cloudflare dashboard URL and does -> not grant any access on its own. Storing it as a variable keeps it auditable and avoids -> treating non-sensitive values as secrets. - ---- - -## 5. Variable and Secret Reference +## 8. Validate before contract deployment -### Summary table - -| Name | Type | Scope | Required | Purpose | -|------------------------|----------|-------------|----------|------------------------------------------------------| -| `CLOUDFLARE_API_TOKEN` | Secret | Environment | Yes | Authenticates the Pages deployment action | -| `CLOUDFLARE_ACCOUNT_ID`| Variable | Environment | Yes | Identifies the Cloudflare account | -| `CF_PAGES_PROJECT` | Variable | Environment | Yes | Names the Cloudflare Pages project to deploy to | -| `NFT_BASE_DOMAIN` | Variable | Environment | No | Resolves the final base URI; falls back to `*.pages.dev` | +For the selected environment: -### Creating the Cloudflare API token +1. Run metadata generation and validation locally or in CI. +2. Confirm the source image and collection image policy for the target stage. +3. Dispatch a metadata-enabled testnet deployment only after the branch routing design is in place. +4. Inspect the Wrangler output and record its deployment URL. +5. Request the exact configured token URL, for example: -1. Go to **Cloudflare dashboard → My Profile → API Tokens → Create Token**. -2. Use the **Edit Cloudflare Workers** template, or create a custom token with: - - **Account** → **Cloudflare Pages: Edit** - - Account Resource → include the specific account -3. Copy the token value and store it as the `CLOUDFLARE_API_TOKEN` environment secret in - GitHub. + ```bash + curl --fail --show-error --silent \ + https://nft-preview.tricksfor.com/ethereum/metadata/1 + ``` ---- +6. Request the exact configured collection URL: -## 6. How the Workflow Uses These Values + ```bash + curl --fail --show-error --silent \ + https://nft-preview.tricksfor.com/ethereum/contract/collection.json + ``` -When a GitHub Release is published, the `release-deploy.yml` workflow: +7. Confirm both responses come from the newly uploaded content, not only that they return HTTP 200. +8. Confirm token JSON image URLs resolve. +9. Confirm `_headers` and `_redirects` behave as expected. -1. **Runs tests** (`test` job). -2. **Validates NFT assets** (`validate-assets` job): - - Validates manifests, images, and source structure. No secrets required. -3. **Generates NFT static metadata** (`generate-nft-assets` job): - - Runs `node scripts/generate-nft-assets.js --env {env} --force` to produce the - chain-specific output tree under `nft-assets/{chainKey}/`. - - Uploads the generated output as a build artifact (`nft-generated-{env}-{tag}`). -4. **Deploys NFT assets** (`deploy-metadata` job): - - Checks out the repository. - - Downloads the generated artifact into `nft-assets/{chainKey}/`. - - Validates that `CF_PAGES_PROJECT` is set. - - Runs `cloudflare/pages-action@v1` to deploy the `nft-assets/` directory, including - `_headers`, `_redirects`, `{chainKey}/metadata/`, `{chainKey}/images/`, and `{chainKey}/contract/`. - - Resolves the final base URI and contract URI: - - If `NFT_BASE_DOMAIN` is set: `https://{NFT_BASE_DOMAIN}/{chainKey}/metadata/` - - Otherwise: `https://{CF_PAGES_PROJECT}.pages.dev/{chainKey}/metadata/` - - Outputs `base_token_uri` and `contract_uri`. -5. **Deploys contracts** (`deploy-contracts` job): - - Receives `base_token_uri` and `contract_uri` from `deploy-metadata`. - - Overrides the deployment runner config via `Deployment__Nft__BaseUri` and - `Deployment__Nft__ContractMetadataUri` environment variables. - - These resolved URLs are used as the NFT contract constructor arguments. +The Nethereum runner performs reachability checks before transactions, but it does not prove that a +200 response contains the intended release. Operators must compare content as well. -The `deploy-contracts` job only runs if `deploy-metadata` succeeds. This ensures contracts -are never deployed with unresolved or incorrect metadata URLs. +## 9. Production asset gate -### tokenURI and the `_redirects` rewrite +Mainnet metadata must not be published until: -The NFT contract uses the OpenZeppelin default `tokenURI(id) = {baseURI}{id}` — no `.json` -suffix. Static metadata files are named `{tokenId}.json`. The `nft-assets/_redirects` file -includes a Cloudflare Pages proxy rewrite: - -``` -/metadata/:id /metadata/:id.json 200 -``` +- all 33 source PNGs are final artwork rather than placeholders; +- `nft-assets/images/collection.png` exists and is final; +- every generated token and collection document validates; +- the collection `fee_recipient` matches the explicit on-chain royalty receiver; +- production and preview hosting are isolated; +- rollback and cache-purge procedures are documented; +- the exact production content is archived with the release. -This serves the `.json` file transparently at the extensionless URL the contract produces, -so `tokenURI(1) → https://{domain}/metadata/1` resolves to the content of `metadata/1.json`. +The current generator's placeholder `fee_recipient` is a mainnet blocker. Do not work around it by +manually editing generated output; update the source configuration/generator atomically and test it. -### URL flow diagram +## 10. Failure handling -``` -NFT_BASE_DOMAIN (env var) - │ - ▼ -deploy-metadata job - ├── cloudflare/pages-action (deploys nft-assets/ including _redirects) - └── resolve-urls step - ├── base_token_uri = https://{domain}/metadata/ - └── contract_uri = https://{domain}/contract/collection.json - │ - ▼ - deploy-contracts job - ├── Deployment__Nft__BaseUri = base_token_uri - └── Deployment__Nft__ContractMetadataUri = contract_uri - │ - ▼ - TricksforBoosterNFT constructor - ├── tokenURI(id) → https://{domain}/metadata/{id} - │ (rewritten to /metadata/{id}.json via _redirects) - └── contractURI() → https://{domain}/contract/collection.json -``` - ---- - -## 7. Manual Deployment (Optional) - -To deploy the `nft-assets/` directory manually without triggering a full release, use the -[Wrangler CLI](https://developers.cloudflare.com/workers/wrangler/): - -```bash -npm install -g wrangler - -# Authenticate -wrangler login - -# Deploy nft-assets/ to your Pages project -wrangler pages deploy nft-assets/ \ - --project-name tricksfor-nft -``` - -Or use the Cloudflare dashboard: **Workers & Pages → {project} → Deployments → Upload**. - -> Manual deployments are useful for verifying metadata before a release. The release -> workflow will overwrite manual uploads with the committed `nft-assets/` contents when -> a GitHub Release is published. - ---- - -## 8. Multi-Chain Deployment Strategy - -The Tricksfor Booster collection is deployed as a separate NFT contract on each supported -chain (Ethereum, Polygon, Optimism, BNB Smart Chain, Avalanche). Each chain's contract -references the same static metadata hosted on Cloudflare Pages. The release workflow -targets one GitHub Environment per chain/stage, and each environment can be configured -with its own Cloudflare Pages project and custom domain. - -### Testnet/mainnet isolation - -> **Every release deploys `nft-assets/` to Cloudflare Pages before deploying contracts.** -> If all environments share the same project (`tricksfor-nft`) and domain -> (`nft.tricksfor.com`), a testnet release will overwrite the metadata that production -> contracts are pointing to. Use a dedicated project and domain for non-production -> environments. - -| Category | `CF_PAGES_PROJECT` | `NFT_BASE_DOMAIN` | -|------------------|--------------------------|-------------------------------| -| All mainnet envs | `tricksfor-nft` | `nft.tricksfor.com` | -| All testnet envs | `tricksfor-nft-preview` | `nft-preview.tricksfor.com` | - -This isolation guarantees that: -- testnet releases never overwrite production metadata -- each mainnet chain's contract resolves to the same, authoritative `nft.tricksfor.com` URLs -- pre-release metadata can be verified on the preview domain before the contract is deployed - -### How per-chain URLs are resolved - -Because all mainnet environments share the same Cloudflare Pages project -(`tricksfor-nft`) and custom domain (`nft.tricksfor.com`), all mainnet contracts -produce identical metadata URLs regardless of which chain they are deployed to: +### Upload fails -| Contract parameter | Resolved value (mainnet) | -|--------------------|-----------------------------------------------------------| -| `BASE_TOKEN_URI` | `https://nft.tricksfor.com/metadata/` | -| `CONTRACT_URI` | `https://nft.tricksfor.com/contract/collection.json` | +Check token scope, account ID, project name, and Pages service availability. No contract transaction +has been sent if the workflow stopped at the upload step. -For testnet environments the same pattern applies using the preview domain: +### Upload succeeds but fixed URL is stale -| Contract parameter | Resolved value (testnet) | -|--------------------|------------------------------------------------------------------| -| `BASE_TOKEN_URI` | `https://nft-preview.tricksfor.com/metadata/` | -| `CONTRACT_URI` | `https://nft-preview.tricksfor.com/contract/collection.json` | - -### Creating a second Pages project for testnet +Stop the deployment. Fix branch/custom-domain routing or publish the correct production site. Do not +disable metadata reachability or change contract URIs ad hoc during an approved release. -Repeat the steps in [Section 2](#2-create-the-cloudflare-pages-project) and -[Section 3](#3-bind-a-custom-domain) for the testnet project: +### Wrong content is served -1. Create a new Pages project named `tricksfor-nft-preview`. -2. Bind the custom domain `nft-preview.tricksfor.com`. -3. Set `CF_PAGES_PROJECT=tricksfor-nft-preview` and - `NFT_BASE_DOMAIN=nft-preview.tricksfor.com` in every testnet GitHub Environment - (`ethereum-sepolia`, `polygon-amoy`, `optimism-sepolia`, `bsc-testnet`, `avalanche-fuji`). - -The `CLOUDFLARE_API_TOKEN` and `CLOUDFLARE_ACCOUNT_ID` values can be reused across all -environments — a single API token with **Cloudflare Pages: Edit** scope covers both projects. +Stop all deployments and minting. Preserve the bad deployment URL and workflow logs, restore the +approved content through the documented hosting process, purge caches when necessary, and verify +exact response bodies before resuming. -### Recommended per-environment configuration +### Metadata publication is intentionally skipped -See [`docs/release-operations.md`](release-operations.md#4-required-variables) — the -"Recommended variable values per environment" table — for the complete list of `CF_PAGES_PROJECT`, -`NFT_BASE_DOMAIN`, and other variable values for all ten supported environments. +Set `deploy_metadata=false` only when the exact URIs already contain the approved content. The +contract runner will still require token ID `1` and collection metadata to be reachable. diff --git a/docs/deployment.md b/docs/deployment.md new file mode 100644 index 0000000..3ce6db5 --- /dev/null +++ b/docs/deployment.md @@ -0,0 +1,397 @@ +# Deployment Operator Runbook + +This is the source of truth for building, configuring, deploying, verifying, and recording the +Tricksfor Booster contracts. The checked-in workflows are authoritative when this document and an +older design document disagree. + +The repository deploys two contracts per network: + +1. `TricksforBoosterNFT` +2. `TricksforBoosterStaking`, constructed with the deployed NFT address + +Deployment and bulk minting are separate operations. A contract deployment must never be treated as +authorization to mint the documented 600-token allocation. + +## 1. Current deployment status + +### Testnets + +The protected testnet workflow is suitable for controlled rollout, starting with Ethereum Sepolia. +It deploys metadata optionally, deploys or resumes both contracts, verifies them optionally, and +runs a state-changing mint/stake/unstake smoke flow. + +For the current smoke implementation, the testnet `MINTER_ADDRESS` must be the address derived from +`DEPLOYER_PRIVATE_KEY`. The smoke runner mints token ID `1` with that account. + +### Mainnets: blocked pending two corrections + +Do not execute `Deploy mainnet` until both of these issues are resolved and revalidated on every +testnet: + +1. The reusable deployment workflow currently runs the state-changing smoke command on mainnet. + It either mints production token ID `1` to the deployer or fails after deployment when the + configured minter is a different account. Mainnet needs a read-only smoke path. +2. Every deployment parameter file currently leaves `RoyaltyReceiver` empty, which makes the runner + use the deployer, while generated collection metadata uses a placeholder burn address for + `fee_recipient`. The explicit intended royalty receiver must drive both values. + +Mainnet metadata is also blocked until all 33 placeholder source images are replaced and +`nft-assets/images/collection.png` is supplied. + +## 2. Toolchain and validation + +Use Node.js 22, .NET 8, and the repository-pinned Solidity compiler 0.8.26. + +```bash +npm ci +npm run artifacts:check +npm test +npm run test:coverage +dotnet restore SmartContract.sln +dotnet build SmartContract.sln --configuration Release --no-restore +dotnet test SmartContract.sln --configuration Release --no-build +``` + +`npm run compile` is the artifact-generation command. It refreshes the Hardhat build information, +ABI, bytecode, and Nethereum bindings together. CI rejects artifact drift. + +Before any remote deployment, require a green `CI` run for the exact commit or release tag being +deployed. Do not deploy from a local dirty worktree. + +## 3. Supported environments + +| GitHub Environment | Chain | Chain ID | `NETWORK_KEY` | Admin delay | +| ------------------- | ----------------------- | -------: | ------------------ | ----------: | +| `ethereum-sepolia` | Ethereum Sepolia | 11155111 | `sepolia` | 0 | +| `ethereum-mainnet` | Ethereum | 1 | `mainnet` | 172800 | +| `polygon-amoy` | Polygon Amoy | 80002 | `polygon_amoy` | 0 | +| `polygon-mainnet` | Polygon | 137 | `polygon` | 172800 | +| `optimism-sepolia` | OP Sepolia | 11155420 | `optimism_sepolia` | 0 | +| `optimism-mainnet` | Optimism | 10 | `optimism` | 172800 | +| `bsc-testnet` | BNB Smart Chain Testnet | 97 | `bsc_testnet` | 0 | +| `bsc-mainnet` | BNB Smart Chain | 56 | `bsc` | 172800 | +| `avalanche-fuji` | Avalanche Fuji | 43113 | `avalanche_fuji` | 0 | +| `avalanche-mainnet` | Avalanche C-Chain | 43114 | `avalanche` | 172800 | + +Chain IDs and admin delays come from `deployments/config/{environment}/deployment-params.json`. +Hardhat network keys come from `hardhat.config.ts`. + +## 4. One-time GitHub configuration + +Follow [GitHub Environments Setup](github-environments-setup.md) for the click-by-click procedure. + +Create all ten environments under **Settings → Environments**. Mainnet environments must have: + +- required reviewers; +- deployment branch/tag restrictions appropriate to the repository release policy; +- an optional wait timer and a documented cancellation contact. + +### Environment secrets + +| Name | Required | Purpose | +| ---------------------- | --------------------------- | ---------------------------------------------- | +| `RPC_URL` | Always | Exact JSON-RPC endpoint for the selected chain | +| `DEPLOYER_PRIVATE_KEY` | Always | Funded transaction-signing account | +| `EXPLORER_API_KEY` | When `VERIFY_ENABLED=true` | Etherscan API V2-compatible verification key | +| `CLOUDFLARE_API_TOKEN` | When `deploy_metadata=true` | Pages direct-upload credential | + +### Environment variables + +| Name | Required | Purpose | +| ----------------------- | ---------------------------- | -------------------------------------------------- | +| `ADMIN_ADDRESS` | Always | Initial delayed NFT default administrator | +| `MINTER_ADDRESS` | Always | Initial NFT `MINTER_ROLE` holder | +| `STAKING_OWNER_ADDRESS` | Always | Initial `Ownable2Step` staking owner | +| `NETWORK_KEY` | When verification is enabled | Matching key from the supported-environments table | +| `VERIFY_ENABLED` | Recommended | Exact lowercase `true` enables verification | +| `CLOUDFLARE_ACCOUNT_ID` | When `deploy_metadata=true` | Cloudflare account identifier | +| `CF_PAGES_PROJECT` | When `deploy_metadata=true` | Target Pages project | + +All three privileged addresses must be non-zero, 20-byte hexadecimal addresses. On mainnet, +`ADMIN_ADDRESS` and `STAKING_OWNER_ADDRESS` must differ from the deployer and should be reviewed +multisigs. GitHub cannot determine whether an address is a multisig; reviewers must verify it. + +The current workflows do not use repository variable `DEPLOY_ENV`, environment variable `CHAIN_ID`, +`NFT_BASE_DOMAIN`, `NUGET_PUBLISH_ENABLED`, `EXPLORER_NAME`, or `EXPLORER_BASE_URL`. + +### Repository secret + +`NUGET_API_KEY` is required only by `Release NuGet package`. Contract deployment does not publish a +NuGet package. + +## 5. One-time Cloudflare configuration + +Follow [Cloudflare Pages Setup](cloudflare-pages-setup.md) before selecting +`deploy_metadata=true`. + +The current workflow: + +1. validates the common source image manifest; +2. generates only the selected chain output; +3. validates that output; +4. stages only `{chainKey}/`, `_headers`, and `_redirects`; +5. uploads `site/` with Wrangler to a branch named after the GitHub Environment. + +The checked-in contract parameters use fixed URLs under: + +- `https://nft-preview.tricksfor.com/{chainKey}/...` for testnets; +- `https://nft.tricksfor.com/{chainKey}/...` for mainnets. + +Before deploying contracts, prove that the Pages project, branch, custom domain, and routing setup +serves the newly uploaded branch at those exact URLs. The runner checks token ID `1` metadata and +collection metadata before it sends a transaction. Do not bypass this check outside isolated local +development. + +## 6. Wallet and balance preparation + +For each environment: + +1. Create a dedicated deployment account; never reuse a personal wallet. +2. Store its private key only as `DEPLOYER_PRIVATE_KEY` in the matching protected environment. +3. Derive and independently record its public address. +4. Fund it with enough native currency for two deployments plus the smoke transactions and margin. +5. Confirm the RPC endpoint returns the expected chain ID. +6. Confirm the privileged addresses with a second reviewer. + +The runner rejects a chain-ID mismatch, zero balance, failed fee estimation, malformed privileged +address, zero privileged address, and unreachable metadata. + +For testnets, obtain native tokens from a network-supported faucet. Faucet availability changes, so +the operator should use the network/provider's current official faucet documentation rather than a +hard-coded repository URL. + +## 7. Deployment parameter review + +Review `deployments/config/{environment}/deployment-params.json` at the exact source revision being +deployed. Confirm: + +- `Network` matches the selected GitHub Environment; +- `ChainId` matches the supported-environments table; +- collection name is `Tricksfor Boosters - {Chain}`; +- symbol is `TFB`; +- base URI and contract URI use the intended chain key and stage domain; +- royalty fee basis points are approved; +- default-admin delay is appropriate for the environment; +- the royalty receiver issue described in Section 1 has been resolved before mainnet. + +The checked-in admin, minter, and staking-owner fields are intentionally overridden by protected +environment variables. `RoyaltyReceiver` is not currently overridden by the workflow; an empty +value falls back to the deployer. Do not commit a private key. + +## 8. Ethereum Sepolia rollout + +Use Ethereum Sepolia as the first real deployment. + +### Pre-deployment checklist + +- [ ] CI is green for the selected commit. +- [ ] `ethereum-sepolia` exists as a GitHub Environment. +- [ ] `RPC_URL` is an Ethereum Sepolia endpoint. +- [ ] The deployer is funded with Sepolia ETH. +- [ ] `ADMIN_ADDRESS` is reviewed. +- [ ] `MINTER_ADDRESS` equals the deployer address for the current state-changing smoke flow. +- [ ] `STAKING_OWNER_ADDRESS` is reviewed. +- [ ] `NETWORK_KEY=sepolia`. +- [ ] `VERIFY_ENABLED=true` and `EXPLORER_API_KEY` is configured, or verification is explicitly waived. +- [ ] Cloudflare values are configured if metadata will be published. +- [ ] Token ID `1` and collection metadata URLs will be reachable after upload. +- [ ] No production private key or production address is being used. + +### Dispatch + +1. Open **GitHub → Actions → Deploy testnet**. +2. Select **Run workflow** from the intended source branch. Use the protected default branch for an + auditable rollout. +3. Select `ethereum-sepolia`. +4. Set `deploy_metadata=true` only when the Cloudflare branch/domain routing has been checked. +5. Leave `force=false` for a first deployment or ordinary resumable rerun. +6. Start the workflow and complete any configured environment approval. + +Testnet metadata currently permits placeholder images with explicit warnings. This is for technical +rollout only and does not make those assets production-ready. + +### Expected workflow sequence + +1. Checkout the selected commit. +2. Install Node.js and .NET dependencies. +3. Compile synchronized Solidity/Nethereum artifacts. +4. Build the .NET solution. +5. Optionally validate, generate, stage, and upload selected metadata. +6. Copy the selected deployment parameter file into the runner output. +7. Deploy or resume the NFT contract. +8. Deploy or resume the staking contract linked to the NFT. +9. Verify both contracts when enabled. +10. Mint token ID `1`, approve, stake, decode `TokenStaked`, unstake, decode `TokenUnstaked`, and + reconcile final custody. +11. Upload the environment deployment directory as a workflow artifact. + +### Review results + +Do not call the deployment successful until all of these are checked: + +- workflow summary contains both non-zero addresses; +- both deployment transaction receipts succeeded; +- deployed runtime bytecode exists at both addresses; +- NFT name, symbol, URIs, interfaces, royalty result, admin, minter, and pause state are correct; +- staking owner and NFT linkage are correct; +- verification transcripts show success when verification was enabled; +- `smoke-result.json` contains mint/approve/stake/unstake transaction hashes; +- exactly one matching `TokenStaked` and `TokenUnstaked` event was decoded; +- final token owner is the deployer and `isStaked(1)` is false; +- downloaded artifacts are stored with the test deployment record. + +## 9. Remaining testnet rollout + +After Ethereum Sepolia passes, repeat Section 8 one environment at a time: + +1. `polygon-amoy` +2. `optimism-sepolia` +3. `bsc-testnet` +4. `avalanche-fuji` + +Change the RPC endpoint, native faucet funding, and `NETWORK_KEY` for each environment. Never reuse a +previous environment's RPC URL without confirming the returned chain ID. + +Mainnet remains disabled until the same source revision succeeds on all five testnets and the +mainnet blockers in Section 1 are closed. + +## 10. Mainnet release procedure + +This procedure is a readiness checklist only while Section 1 remains unresolved. + +### Release prerequisites + +- [ ] State-changing mainnet smoke has been replaced by a read-only smoke command or excluded from mainnet. +- [ ] Explicit royalty receiver drives both on-chain royalty configuration and collection metadata. +- [ ] All 33 final source images are present and no placeholder is accepted. +- [ ] `nft-assets/images/collection.png` is present and final. +- [ ] Generated metadata validates for the selected mainnet. +- [ ] All five testnet rollouts passed using the release candidate source. +- [ ] CI is green for the exact stable tag commit. +- [ ] Contract/package version reflects the constructor breaking change. +- [ ] Mainnet admin and staking owner are approved multisigs and differ from the deployer. +- [ ] Minter and royalty recipient policies are approved. +- [ ] Deployment account contains only the native currency required for deployment plus margin. +- [ ] Incident contact, pause authority, and ownership-acceptance procedure are documented. + +### Create the stable release + +1. Create an annotated tag matching exactly `vMAJOR.MINOR.PATCH` on the approved commit. +2. Push the tag. +3. Create and publish the corresponding GitHub Release. +4. Confirm `Release NuGet package` succeeds or is intentionally handled before contract deployment. +5. Confirm the release contains the intended source commit and immutable release notes. + +### Dispatch one mainnet + +After the blockers are closed: + +1. Open **GitHub → Actions → Deploy mainnet**. +2. Select the protected default branch. +3. Select exactly one mainnet environment. +4. Enter the existing stable release tag. +5. Set `deploy_metadata=true` unless the exact production URLs are already populated and verified. +6. Leave `force=false`. +7. Start the workflow. +8. Required reviewers compare the selected environment, tag commit, chain ID, deployer, privileged + addresses, royalty receiver, URIs, and balance before approving. +9. Review manifests, verification transcripts, read-only smoke results, and explorer pages. +10. Confirm permanent deployment records were attached to the GitHub Release. +11. Confirm the final staking owner directly. Any later ownership transfer must complete the + `Ownable2Step` pending-owner acceptance process. + +Deploy only one mainnet at a time. Do not approve the next network until the previous deployment has +been independently reconciled. + +## 11. Resumability, reruns, and `force` + +Each contract receipt is written to its environment manifest. On rerun, the runner reuses a manifest +address only when live bytecode is still present. + +Use a normal rerun with `force=false` when: + +- metadata upload or verification temporarily failed; +- the workflow stopped after the NFT deployment; +- the workflow stopped after both deployments but before smoke or artifact upload; +- an RPC or explorer outage has been resolved. + +Use `force=true` only when all of the following are true: + +- replacement deployment is intentional; +- the exact existing addresses and downstream consumers have been identified; +- reviewers approve abandoning or superseding those addresses; +- release notes will preserve both old and new deployment records; +- duplicate production contracts will not confuse the backend, marketplace, or users. + +`force` creates replacement contracts; it does not upgrade or repair an existing deployment. + +If deployment succeeded but a later step failed, download the artifact before rerunning whenever +possible. A successful on-chain transaction cannot be rolled back by GitHub Actions. + +## 12. Verification + +When `VERIFY_ENABLED=true`, verification runs inside the reusable deployment job after both +contracts deploy. It uses the synchronized Hardhat production build information and constructor +arguments from each manifest. + +Verification is currently blocking: a failed verification step prevents the later smoke, summary, +and successful release attachment steps. The `always()` artifact upload should still preserve the +deployment directory. Follow [Verification Troubleshooting](verification-troubleshooting.md). + +## 13. Deployment records + +The workflow artifact contains `deployments/{environment}/`, including: + +- `TricksforBoosterNFT.json`; +- `TricksforBoosterStaking.json`; +- verification transcripts when enabled; +- `smoke-result.json` after a successful smoke flow. + +Manifests record chain, address, transaction status/hash/block/gas, deployer, source commit, +constructor arguments, compiler/settings, code hashes, and final roles/owner. They are also inputs to +resumability. Mainnet records are attached to the corresponding GitHub Release after a successful +run. + +Never delete or overwrite a material deployment record without preserving an immutable copy. + +## 14. NuGet release + +`Release NuGet package` is independent of chain deployment. It runs when a GitHub Release is +published or can be dispatched manually with a stable tag. It tests the solution, packs +`Tricksfor.Blockchain.Booster`, publishes with `NUGET_API_KEY`, uploads the package artifact, and +attaches the package to the release. + +Publishing the same stable release again is protected by `--skip-duplicate`, but operators should +still treat a published package version as immutable. + +## 15. Production minting + +Production minting uses **Execute reviewed mainnet mint plan**, not the deployment workflow. + +1. Create a token-to-recipient plan following `deployments/mint-plans/README.md`. +2. Commit and review the plan. +3. Dispatch the mint workflow with `dry_run=true`. +4. Review `mint-results.json` and resolve every ownership mismatch. +5. Obtain protected-environment approval for execution. +6. Dispatch again with `dry_run=false` only after explicit mint approval. +7. Preserve the final mint results with the release records. + +The runner skips an already-minted token only when its current owner matches the plan. Any mismatch +aborts the operation. + +## 16. Local development + +Start a local Hardhat node, then deploy with the local development key: + +```bash +npx hardhat node + +export DEPLOY_ENV=localhost +export Deployment__PrivateKey='' + +dotnet run --project src/Tricksfor.Blockchain.Booster.Deploy -- deploy +dotnet run --project src/Tricksfor.Blockchain.Booster.Deploy -- smoke +dotnet run --project src/Tricksfor.Blockchain.Booster.Deploy -- mint --dry-run +``` + +Never use a production private key in local shell history or committed configuration. diff --git a/docs/generate-assets.md b/docs/generate-assets.md index 019d9af..5b97354 100644 --- a/docs/generate-assets.md +++ b/docs/generate-assets.md @@ -230,8 +230,10 @@ Token IDs 1–600 are deterministic and fixed across all chains: } ``` -> **⚠ Important:** `fee_recipient` uses a placeholder burn address. Replace it with the actual -> royalty recipient address before mainnet deployment. +> **Important:** `fee_recipient` is currently generated as a placeholder burn address. Mainnet is +> blocked until an explicit approved royalty receiver is supplied through the authoritative source +> configuration and used by both metadata generation and contract deployment. Do not patch generated +> files manually. --- @@ -239,8 +241,9 @@ Token IDs 1–600 are deterministic and fixed across all chains: ### Validating generated output in CI -The `validate-generated-output` job in `release-deploy.yml` validates the pre-committed -`nft-assets/generated/` content automatically on every release: +The `metadata` job in `.github/workflows/ci.yml` validates every testnet manifest and common source +tree, generates each selected chain output, validates those outputs, runs the cross-chain output +validator, and checks metadata snapshots on pull requests and pushes to `main`. ```yaml - name: Validate generated NFT output @@ -265,13 +268,14 @@ Or for a single chain driven by a manifest committed to the repository: ### Release pipeline -The release pipeline (`release-deploy.yml`) uses `scripts/generate-nft-assets.js` for the -full manifest-driven release build (which also copies token images). The `generate-assets` -command produces the `nft-assets/generated/` metadata tree used for Cloudflare Pages and -contributor review. +The reusable protected deployment workflow uses `scripts/generate-nft-assets.js` for the selected +environment when `deploy_metadata=true`. It validates source inputs, generates one chain output, +validates that output, stages only that chain plus Cloudflare routing files, and uploads it with +Wrangler. Contract URLs remain the checked-in values; the workflow does not derive them from the +upload response. -For a full description of the release pipeline see -[`docs/release-deployment-architecture.md`](release-deployment-architecture.md). +For the current workflow and hosting requirements, see the +[Deployment Operator Runbook](deployment.md) and [Cloudflare Pages Setup](cloudflare-pages-setup.md). --- diff --git a/docs/github-environments-setup.md b/docs/github-environments-setup.md index 55a5709..998d2da 100644 --- a/docs/github-environments-setup.md +++ b/docs/github-environments-setup.md @@ -1,159 +1,147 @@ # GitHub Environments Setup -This document describes the required GitHub configuration for the release deployment workflow (`release-deploy.yml`). +This page is the current GitHub configuration reference for the manual testnet and mainnet +deployment workflows. The full operating sequence is in the +[Deployment Operator Runbook](deployment.md). + +## 1. Create the environments + +Open **Repository → Settings → Environments → New environment** and create: + +| Environment | Stage | Chain ID | `NETWORK_KEY` | +| ------------------- | ------- | -------: | ------------------ | +| `ethereum-sepolia` | Testnet | 11155111 | `sepolia` | +| `ethereum-mainnet` | Mainnet | 1 | `mainnet` | +| `polygon-amoy` | Testnet | 80002 | `polygon_amoy` | +| `polygon-mainnet` | Mainnet | 137 | `polygon` | +| `optimism-sepolia` | Testnet | 11155420 | `optimism_sepolia` | +| `optimism-mainnet` | Mainnet | 10 | `optimism` | +| `bsc-testnet` | Testnet | 97 | `bsc_testnet` | +| `bsc-mainnet` | Mainnet | 56 | `bsc` | +| `avalanche-fuji` | Testnet | 43113 | `avalanche_fuji` | +| `avalanche-mainnet` | Mainnet | 43114 | `avalanche` | -For the deployment architecture and design decisions, see [`docs/release-deployment-architecture.md`](release-deployment-architecture.md). +Environment names must match the `deploy_env` choices in `deploy-testnet.yml`, +`deploy-mainnet.yml`, and `mint-mainnet.yml` exactly. ---- +## 2. Configure protection rules -## Required GitHub Environments +For each mainnet environment: + +1. Open **Settings → Environments → {environment}**. +2. Enable **Required reviewers** and add the approved contract-release reviewers. +3. Prevent self-review when repository policy supports it. +4. Restrict deployment branches/tags to the approved release policy. +5. Optionally configure a wait timer as a cancellation window. +6. Save the protection rules. -Create one GitHub Environment per deploy target under **Settings → Environments**: +Testnet environments may omit reviewers, but they should still restrict deployments to trusted +branches. The `Deploy testnet` workflow is manual; testnets are not automatically deployed when a +release is published. -| Environment name | Chain | Stage | -|-------------------|-------------------|---------| -| `ethereum-sepolia` | Ethereum | Testnet | -| `ethereum-mainnet` | Ethereum | Mainnet | -| `polygon-amoy` | Polygon | Testnet | -| `polygon-mainnet` | Polygon | Mainnet | -| `optimism-sepolia` | Optimism | Testnet | -| `optimism-mainnet` | Optimism | Mainnet | -| `bsc-testnet` | BNB Smart Chain | Testnet | -| `bsc-mainnet` | BNB Smart Chain | Mainnet | -| `avalanche-fuji` | Avalanche | Testnet | -| `avalanche-mainnet` | Avalanche | Mainnet | +## 3. Add environment secrets + +In each environment, select **Environment secrets → Add secret**. + +| Secret | Required | Description | +| ---------------------- | -------------------------- | ----------------------------------------------------- | +| `RPC_URL` | Always | Full JSON-RPC URL, including provider key | +| `DEPLOYER_PRIVATE_KEY` | Always | 32-byte private key for the funded deployment account | +| `EXPLORER_API_KEY` | If verification is enabled | Etherscan API V2-compatible key | +| `CLOUDFLARE_API_TOKEN` | If metadata is published | Token scoped for Pages direct upload | + +Security requirements: + +- Never store these values as workflow inputs or repository files. +- Use a separate deployment account from personal and treasury accounts. +- Do not reuse a mainnet deployment key on testnets. +- Rotate a credential immediately if it appears in logs or shell history. +- Review provider/API-token scope before each mainnet release. + +## 4. Add environment variables + +In each environment, select **Environment variables → Add variable**. + +| Variable | Required | Description | +| ----------------------- | -------------------------- | ------------------------------------------- | +| `ADMIN_ADDRESS` | Always | Initial delayed NFT default administrator | +| `MINTER_ADDRESS` | Always | Initial NFT `MINTER_ROLE` holder | +| `STAKING_OWNER_ADDRESS` | Always | Initial staking owner | +| `NETWORK_KEY` | If verification is enabled | Exact value from the environment table | +| `VERIFY_ENABLED` | Recommended | Exact lowercase `true` enables verification | +| `CLOUDFLARE_ACCOUNT_ID` | If metadata is published | Cloudflare account ID | +| `CF_PAGES_PROJECT` | If metadata is published | Pages project receiving the staged site | + +Address rules: + +- All three addresses must be non-zero, 20-byte hexadecimal addresses. +- For the current state-changing testnet smoke flow, `MINTER_ADDRESS` must equal the address derived + from `DEPLOYER_PRIVATE_KEY`. +- On mainnet, `ADMIN_ADDRESS` and `STAKING_OWNER_ADDRESS` must differ from the deployer and should be + independently reviewed multisigs. +- Do not configure mainnet until the state-changing mainnet smoke and royalty-receiver blockers in + the deployment runbook are closed. + +## 5. Values not used by current workflows + +Do not add these values for the current workflow unless another integration independently requires +them: + +| Obsolete deployment value | Current source | +| -------------------------------- | --------------------------------------- | +| Repository variable `DEPLOY_ENV` | Manual workflow `deploy_env` input | +| Environment variable `CHAIN_ID` | Checked-in deployment parameter file | +| `NFT_BASE_DOMAIN` | Checked-in metadata/deployment URLs | +| `NUGET_PUBLISH_ENABLED` | NuGet publishing is a separate workflow | +| `EXPLORER_NAME` | Not consumed by the current workflow | +| `EXPLORER_BASE_URL` | Not consumed by the current workflow | + +## 6. Repository-level NuGet secret + +Open **Settings → Secrets and variables → Actions → Secrets → New repository secret** and add: + +| Secret | Required | Description | +| --------------- | ------------------------ | -------------------------------------------- | +| `NUGET_API_KEY` | When publishing releases | nuget.org key for `Tricksfor.SmartContracts` | + +This secret is consumed only by `release-package.yml`. `GITHUB_TOKEN` is supplied automatically by +GitHub Actions. + +## 7. Cloudflare configuration + +If `deploy_metadata=true`, complete [Cloudflare Pages Setup](cloudflare-pages-setup.md) and add the +Cloudflare secret and variables to the selected environment. + +The workflow deploys to a Pages branch named exactly after the environment. Confirm that the Pages +project and custom-domain routing serve that branch at the fixed URLs in the selected +`deployment-params.json` and `nft-manifest.json`. A successful upload alone does not prove that the +contract URLs resolve to the new deployment. + +## 8. Configuration review checklist ---- +Before the first deployment to an environment: -## Environment Protection Rules +- [ ] Environment name exactly matches a workflow choice. +- [ ] RPC URL returns the expected chain ID. +- [ ] Deployer public address is recorded without exposing its key. +- [ ] Deployer has enough native currency. +- [ ] Admin, minter, and staking owner addresses were independently checked. +- [ ] Current testnet minter/deployer requirement is satisfied. +- [ ] Mainnet reviewer protection is enabled where applicable. +- [ ] `NETWORK_KEY` matches the table. +- [ ] Explorer key is configured when verification is enabled. +- [ ] Cloudflare project/branch/custom-domain routing is proven when metadata is published. +- [ ] Repository `NUGET_API_KEY` is configured only if package publication is intended. + +## 9. Adding a network -### All `*-mainnet` environments - -Configure the following protections under **Settings → Environments → {env-name}**: - -- **Required reviewers**: add at least one named approver; the deployment will be paused until approved. -- **Deployment branches**: restrict to the repository's default branch (or a specific release branch pattern). -- **Wait timer** (optional): 5 minutes provides a cancellation window. - -### Testnet environments - -No approvals required. Auto-deploy on release. - ---- - -## Secrets (per environment) - -Set the following **Environment Secrets** for each environment: - -| Secret name | Description | -|----------------------|---------------------------------------------------| -| `RPC_URL` | JSON-RPC endpoint URL for the target network | -| `DEPLOYER_PRIVATE_KEY` | Hex-encoded private key of the deployer wallet | -| `EXPLORER_API_KEY` | Block explorer API key (required if `VERIFY_ENABLED=true`) | -| `CLOUDFLARE_API_TOKEN` | Cloudflare API token with **Cloudflare Pages: Edit** permission | - -> **Security:** These values must never be committed, logged, or passed as workflow inputs. They are injected exclusively via the GitHub Environment secrets mechanism. - ---- - -## Variables (per environment) - -Set the following **Environment Variables** for each environment: - -| Variable name | Required | Description | Example | -|-----------------------|----------|----------------------------------------------------------------|------------------------| -| `CHAIN_ID` | Yes | EVM chain ID for the target network | `11155111` | -| `NETWORK_KEY` | Yes | Hardhat network name for the `--network` flag during verification | `sepolia` | -| `CLOUDFLARE_ACCOUNT_ID` | Yes | Cloudflare account ID (visible in the dashboard URL) | `a1b2c3d4e5f6...` | -| `CF_PAGES_PROJECT` | Yes | Cloudflare Pages project name for NFT asset hosting | `tricksfor-nft` | -| `NFT_BASE_DOMAIN` | No | Custom domain for the Pages site (without protocol or trailing slash); falls back to `{project}.pages.dev` | `nft.tricksfor.com` | -| `VERIFY_ENABLED` | No | Set to `true` to enable block-explorer verification | `true` | -| `NUGET_PUBLISH_ENABLED` | No | Set to `true` to publish the NuGet package on deploy | `false` | -| `EXPLORER_NAME` | No | Human-readable block explorer name, written to the deployment manifest's `verification.explorerName` field | `Etherscan` | -| `EXPLORER_BASE_URL` | No | Block explorer contract browser URL prefix (without trailing slash), used to build `verification.explorerUrl` | `https://etherscan.io/address` | - -> **`DEPLOY_ENV` is not an environment variable.** It must be set as a **repository-level variable** under **Settings → Secrets and variables → Actions → Variables**. The `resolve-environment` job runs without an environment scope and cannot read per-environment variables; it reads `DEPLOY_ENV` exclusively from the repository level. - -`EXPLORER_NAME` and `EXPLORER_BASE_URL` are optional convenience fields. If not set, `verification.explorerName` and `verification.explorerUrl` in the manifest will be empty strings. They are useful for operators who want rich manifest output and have no impact on whether verification succeeds or fails. - -For Cloudflare Pages setup details, see [`docs/cloudflare-pages-setup.md`](cloudflare-pages-setup.md). - -### NETWORK_KEY values per environment - -| Environment name | `NETWORK_KEY` value | `EXPLORER_NAME` | `EXPLORER_BASE_URL` | -|--------------------|---------------------|------------------------------|---------------------------------------------| -| `ethereum-sepolia` | `sepolia` | `Etherscan (Sepolia)` | `https://sepolia.etherscan.io/address` | -| `ethereum-mainnet` | `mainnet` | `Etherscan` | `https://etherscan.io/address` | -| `polygon-amoy` | `polygon_amoy` | `PolygonScan (Amoy)` | `https://amoy.polygonscan.com/address` | -| `polygon-mainnet` | `polygon` | `PolygonScan` | `https://polygonscan.com/address` | -| `optimism-sepolia` | `optimism_sepolia` | `Optimism Explorer (Sepolia)`| `https://sepolia-optimism.etherscan.io/address` | -| `optimism-mainnet` | `optimism` | `Optimism Explorer` | `https://optimistic.etherscan.io/address` | -| `bsc-testnet` | `bsc_testnet` | `BscScan (Testnet)` | `https://testnet.bscscan.com/address` | -| `bsc-mainnet` | `bsc` | `BscScan` | `https://bscscan.com/address` | -| `avalanche-fuji` | `avalanche_fuji` | `Snowtrace (Fuji)` | `https://testnet.snowtrace.io/address` | -| `avalanche-mainnet` | `avalanche` | `Snowtrace` | `https://snowtrace.io/address` | - ---- - -## Repository-Level Secrets - -Set the following **Repository Secrets** under **Settings → Secrets and variables → Actions**: - -| Secret name | Description | -|----------------|---------------------------------------------------------------------| -| `NUGET_API_KEY` | nuget.org API key for publishing `Tricksfor.SmartContracts` | - ---- - -## Repository-Level Variables - -Set the following **Repository Variable** under **Settings → Secrets and variables → Actions → Variables**: - -| Variable name | Required | Description | -|---------------|----------|--------------------------------------------------------------------------------| -| `DEPLOY_ENV` | Yes | The target GitHub Environment for deployments (e.g. `ethereum-sepolia`). Must be set as a repository-level variable — the `resolve-environment` job runs without an environment scope and can only read repository-level variables. | - ---- - -## Deployment Parameter Files - -Non-secret constructor arguments (NFT name, symbol, URIs, royalty config) are stored in checked-in JSON files: - -``` -deployments/config/ -├── ethereum-sepolia/deployment-params.json -├── ethereum-mainnet/deployment-params.json -├── polygon-amoy/deployment-params.json -├── polygon-mainnet/deployment-params.json -├── optimism-sepolia/deployment-params.json -├── optimism-mainnet/deployment-params.json -├── bsc-testnet/deployment-params.json -├── bsc-mainnet/deployment-params.json -├── avalanche-fuji/deployment-params.json -└── avalanche-mainnet/deployment-params.json -``` - -Edit the appropriate file before deploying to update NFT name, symbol, base URI, contract URI, or royalty configuration for that network. See [`docs/release-deployment-architecture.md`](release-deployment-architecture.md#6-deployment-parameter-model) for the full parameter schema. - ---- - -## Triggering a Deployment - -1. Ensure the target GitHub Environment is configured with all required secrets and variables (including Cloudflare Pages credentials — see [`docs/cloudflare-pages-setup.md`](cloudflare-pages-setup.md)). -2. Ensure the `DEPLOY_ENV` **repository variable** is set to the desired environment name. `DEPLOY_ENV` must be a repository-level variable — the `resolve-environment` job runs without an environment scope and can only read repository-level variables. -3. Ensure all token metadata JSON files and images are present under `nft-assets/` before publishing the release. -4. Update `deployments/config/{env}/deployment-params.json` if NFT name, symbol, or royalty parameters need to change (base URI and contract URI are resolved from the `deploy-metadata` job automatically). -5. Publish a GitHub Release with the appropriate tag: - - Stable releases (`v1.2.3`) can target any environment, including mainnet. - - Pre-release tags (`v1.2.3-rc.1`, `v1.2.3-beta.1`) are restricted to testnet environments. -6. If the target is a mainnet environment, approve the deployment when prompted by GitHub's required reviewers gate. - ---- - -## Adding a New Network - -1. Create a GitHub Environment named `{chain}-{stage}` and populate its secrets and variables using the tables above (including `CLOUDFLARE_API_TOKEN`, `CLOUDFLARE_ACCOUNT_ID`, `CF_PAGES_PROJECT`, and optionally `NFT_BASE_DOMAIN`). -2. Add an entry to the network tables in this document. -3. Add a new `deployments/config/{chain}-{stage}/deployment-params.json` file. -4. Ensure the Hardhat network and verification configuration in `hardhat.config.ts` includes the new chain. -5. No changes to the workflow file are required. +Adding a network requires code and documentation changes; creating an environment alone is not +enough. + +1. Add the Hardhat network and chain ID. +2. Add the environment choice to the appropriate workflows. +3. Add `deployments/config/{environment}/deployment-params.json`. +4. Add `deployments/config/{environment}/nft-manifest.json`. +5. Add metadata routing and validation coverage. +6. Add the environment and network key to this guide. +7. Test compilation, verification, deployment, resume, and smoke behavior before enabling mainnet. diff --git a/docs/nft-asset-validation.md b/docs/nft-asset-validation.md index 1d302ae..eb4d364 100644 --- a/docs/nft-asset-validation.md +++ b/docs/nft-asset-validation.md @@ -365,26 +365,29 @@ Errors (✗) cause exit code `1` and block the release workflow. ## 8. Workflow Integration -Both validators run as jobs in `.github/workflows/release-deploy.yml`, before any deployment. -The job graph is: +Validation runs in both CI and the reusable protected deployment workflow: ``` -resolve-environment - └── test - └── validate-assets ← validates nft-assets/ and optional manifest - └── validate-generated-output ← validates all-chain counts and distribution - └── generate-nft-assets ← generates chain-specific output - └── deploy-metadata ← deploys to Cloudflare Pages only if validation passes - └── deploy-contracts +CI metadata job + → validate every testnet manifest and common source tree + → generate and validate every selected chain output + → validate cross-chain output and snapshots + +Protected deployment with deploy_metadata=true + → validate selected manifest/source + → generate selected chain + → validate selected output + → stage and upload selected metadata + → deploy contracts ``` -Neither validation job requires environment secrets — they read only files committed to the -repository (and the `deploy_env` output from `resolve-environment` for `validate-assets`). +Validation itself reads committed files and does not require secrets. Cloudflare upload and contract +deployment use the selected GitHub Environment only after validation succeeds. -If `validate-assets` or `validate-generated-output` fails: -- `generate-nft-assets` is skipped. -- `deploy-metadata` is skipped. -- `deploy-contracts` is skipped. +If selected source or output validation fails: + +- metadata upload is skipped; +- contract deployment is skipped; - No assets are deployed; no contracts are deployed. --- diff --git a/docs/nft-assets-contributor-guide.md b/docs/nft-assets-contributor-guide.md index 710d907..610d0da 100644 --- a/docs/nft-assets-contributor-guide.md +++ b/docs/nft-assets-contributor-guide.md @@ -14,7 +14,7 @@ modify anything under `nft-assets/` or `deployments/config/`. 3. [Generation](#3-generation) 4. [Validation](#4-validation) 5. [Cloudflare Pages Preparation](#5-cloudflare-pages-preparation) -6. [Release Integration](#6-release-integration) +6. [Protected Deployment Integration](#6-protected-deployment-integration) 7. [Quick Reference](#7-quick-reference) --- @@ -472,53 +472,44 @@ Use these printed values directly when configuring the contract deployment. ### Multi-chain setup -All chains share a single Cloudflare Pages project per environment tier: - -| Environment tier | `CF_PAGES_PROJECT` | `NFT_BASE_DOMAIN` | -|------------------|-------------------------|-----------------------------| -| Mainnet | `tricksfor-nft` | `nft.tricksfor.com` | -| Testnet/preview | `tricksfor-nft-preview` | `nft-preview.tricksfor.com` | - -Chain separation is achieved through the `/{chainKey}/` path prefix, not through separate -projects. +Generated URLs use a `/{chainKey}/` prefix. The current workflow uploads only the selected chain to +an environment-named Pages branch, so contributors must not assume the fixed custom domain serves +that branch. See [Cloudflare Pages Setup](cloudflare-pages-setup.md) before release use. --- -## 6. Release Integration +## 6. Protected Deployment Integration ### How the asset pipeline ties into the release workflow -The release workflow (`release-deploy.yml`) enforces a strict job dependency chain: +The reusable protected deployment workflow executes these steps in order when metadata publication +is selected: ``` -resolve-environment - └── test - └── validate-assets ← validates nft-assets/ and the deployment manifest - └── validate-generated-output ← validates all-chain counts and distribution - └── generate-nft-assets ← generates chain-specific output tree - └── deploy-metadata ← deploys nft-assets/ to Cloudflare Pages - └── deploy-contracts ← deploys smart contracts +validate selected source manifest + → generate selected chain output + → validate selected output + → stage selected chain and routing files + → upload with Wrangler + → deploy contracts ``` No step in this chain starts until all upstream steps succeed. ### What must succeed before smart contract deployment starts -The following must all pass before `deploy-contracts` runs: +The following must all pass before contract deployment starts: -1. **`test`** — all Hardhat tests pass. -2. **`validate-assets`** — `scripts/validate-nft-assets.js` exits 0 against the deployment - manifest for the target environment. -3. **`validate-generated-output`** — `scripts/validate-nft-output.js` exits 0 against - `nft-assets/generated/` across all chains. -4. **`generate-nft-assets`** — `scripts/generate-nft-assets.js --env {env} --force` completes - without errors. -5. **`deploy-metadata`** — the generated asset tree is successfully deployed to Cloudflare Pages - and live at `https://nft.tricksfor.com/{chainKey}/…`. +1. CI passes for the exact source revision. +2. `scripts/validate-nft-assets.js` accepts the selected source manifest. +3. `scripts/generate-nft-assets.js --env {env} --force` completes. +4. The selected generated output passes output validation. +5. Wrangler uploads the staged selected-chain site. +6. The exact fixed metadata URLs are reachable; operators must separately confirm their contents + match the upload. -The contract deployment receives the `BASE_TOKEN_URI` and `CONTRACT_URI` values produced by -`generate-nft-assets`. These URLs are live on Cloudflare Pages by the time the contract is -deployed, ensuring the contract is initialised with URLs that already serve real content. +The contract uses the URIs checked into `deployment-params.json`; they are not derived from the +Cloudflare upload response. ### What a contributor must do before opening a release PR @@ -530,10 +521,11 @@ deployed, ensuring the contract is initialised with URLs that already serve real `nft-assets/generated/`. 5. Run `npm run validate:output` and resolve all errors. 6. Run `npm run test:snapshots` to confirm no unexpected metadata drift. -7. Commit all changes (source images, manifest, generated output) in the same PR. +7. Commit the authoritative source images and manifests. Commit generated snapshots/output only + where repository policy specifically tracks them. -CI repeats steps 2–5 automatically on every release trigger. If CI validation fails, no -deployment occurs — the release must be fixed and re-triggered. +CI repeats the manifest/source, generation, output, and snapshot checks on pull requests and pushes +to `main`. If protected deployment validation fails, no metadata or contracts are deployed. --- diff --git a/docs/nft-metadata-generation.md b/docs/nft-metadata-generation.md index 13f713c..e541907 100644 --- a/docs/nft-metadata-generation.md +++ b/docs/nft-metadata-generation.md @@ -16,7 +16,7 @@ Pages deployment and contract deployment pipeline. - [5.1. Validation Sample](#51-validation-sample) 6. [Manifest Requirements](#6-manifest-requirements) 7. [Generated File Formats](#7-generated-file-formats) -8. [Release Workflow Integration](#8-release-workflow-integration) +8. [Protected Workflow Integration](#8-protected-workflow-integration) 9. [Multi-Chain Deployment](#9-multi-chain-deployment) 10. [Related Documents](#10-related-documents) @@ -29,7 +29,7 @@ from an authoritative asset manifest and deployed as static files to Cloudflare There are two generation pathways: -### Pathway A — Manifest-driven (release pipeline) +### Pathway A — Manifest-driven (protected deployment workflow) ``` nft-manifest.json (deployments/config/{env}/) @@ -42,14 +42,15 @@ scripts/generate-nft-assets.js └─► nft-assets/{chainKey}/images/{tokenId}.png (one per token, copied from source) │ ▼ -Cloudflare Pages deployment (deploy-metadata job) +Selected-chain staging and Cloudflare Pages direct upload │ ▼ -BASE_TOKEN_URI and CONTRACT_URI → contract deployment (deploy-contracts job) +Reachability check of checked-in contract URLs → contract deployment ``` -Generation runs before contract deployment. The contract is deployed with the exact URLs -that are live on Cloudflare Pages. +Generation runs before contract deployment. Base and contract URIs come from the selected checked-in +deployment parameter file. Operators must prove that Cloudflare branch/custom-domain routing serves +the newly uploaded content at those exact URLs. ### Pathway B — Standalone metadata generator (approved manifests) @@ -429,17 +430,18 @@ to this JSON file, served at `https://nft.tricksfor.com/{chainKey}/contract/coll } ``` -> **⚠ Important:** The `fee_recipient` field is a placeholder burn address. Replace it with the -> actual royalty recipient address before mainnet deployment. Using the burn address means OpenSea -> royalty payments are permanently lost. +> **Important:** The `fee_recipient` field is currently a placeholder burn address. Mainnet is +> blocked until an explicit approved royalty receiver is supplied through the authoritative source +> configuration and used by both metadata generation and contract deployment. Using the burn address +> would make marketplace royalty payments unrecoverable; do not patch generated files manually. #### `contractURI()` output per chain The table below summarises the `contractURI()` URL and resulting chain-specific fields for each supported chain. The `description` and `external_link` fields are identical across chains. `seller_fee_basis_points` is `500` in all generated files; only `name` and `image` are -chain-specific. `fee_recipient` is a placeholder in all generated files and **must** be replaced -with the actual royalty recipient address before mainnet deployment (see warning above). +chain-specific. `fee_recipient` remains a mainnet blocker in all generated files until the generator +and deployment configuration consume the same approved royalty receiver (see warning above). | `chainKey` | `CONTRACT_URI` | Collection `name` | Collection `image` | |---|---|---|---| @@ -459,23 +461,24 @@ node scripts/generate-nft-metadata.js --all-mainnet --force --- -## 8. Release Workflow Integration +## 8. Protected Workflow Integration -Metadata generation is built directly into the release workflow as a dedicated -`generate-nft-assets` job that runs after asset validation and before Cloudflare Pages -deployment. Developers do **not** need to generate or commit generated files locally. +Metadata generation is built into the reusable deployment job when `deploy_metadata=true`. +Developers do not need to commit the selected generated output solely for the deployment run. ``` -test - └── validate-assets (validates manifests, images, source structure) - └── generate-nft-assets (runs generate-nft-assets.js; uploads artifact) - └── deploy-metadata (downloads artifact; deploys to Cloudflare Pages) - └── deploy-contracts (contract deployment) - ├── verify-contracts - └── publish-nuget +validate source manifest + → generate selected chain + → validate selected output + → stage selected chain and routing files + → Wrangler Pages upload + → deploy or resume both contracts + → optional verification + → smoke test + → deployment artifact ``` -### Step-by-step release sequence +### Step-by-step deployment sequence 1. **Finalise the manifest** — ensure `deployments/config/{env}/nft-manifest.json` is complete and passes validation (`node scripts/validate-nft-assets.js --env {env}`). @@ -484,24 +487,17 @@ test updated source images under `nft-assets/source-images/`) to the release branch. The workflow generates all output files automatically — generated files do **not** need to be committed. -3. **Publish the release** — the `release-deploy.yml` workflow runs automatically and: - - Validates manifests and assets (`validate-assets` job). - - Generates all chain-specific metadata and image files (`generate-nft-assets` job). - - Uploads the generated output as the `nft-generated-{env}-{tag}` artifact. - - Deploys the generated output to Cloudflare Pages (`deploy-metadata` job). - - Derives `BASE_TOKEN_URI` and `CONTRACT_URI` from the live Pages deployment. - - Deploys contracts with the final stable metadata URLs (`deploy-contracts` job). - -4. **Derive contract parameters** — the `deploy-metadata` job resolves the final `BASE_TOKEN_URI` - and `CONTRACT_URI` from the Cloudflare Pages deployment and passes them as environment variable - overrides to `deploy-contracts`: - ```yaml - Deployment__Nft__BaseUri: https://nft.tricksfor.com/{chainKey}/metadata/ - Deployment__Nft__ContractMetadataUri: https://nft.tricksfor.com/{chainKey}/contract/collection.json - ``` - -The contract is always deployed with the URLs that are live on Cloudflare Pages, ensuring -on-chain URIs and hosted metadata are consistent from the moment the contract is deployed. +3. **Validate in CI** — ensure the `metadata` job passes for the exact source revision. + +4. **Dispatch the protected workflow** — use `Deploy testnet`, or after all mainnet blockers are + resolved, `Deploy mainnet`, with `deploy_metadata=true`. + +5. **Verify hosted content** — compare the exact configured token and collection URLs with the + generated release content. A successful Pages upload alone does not prove the fixed custom domain + serves the selected branch. + +6. **Deploy contracts** — the runner performs HTTP reachability checks before sending transactions + and then uses the base/contract URIs from `deployment-params.json`. ### Pre-release checklist @@ -517,14 +513,13 @@ Before publishing a release: ## 9. Multi-Chain Deployment -Each supported chain deployment generates its own output tree inside `nft-assets/`. All chains -share a single Cloudflare Pages project per environment tier; chain separation is achieved -through the per-chain subdirectory path prefix. +Each supported chain deployment generates its own output tree inside `nft-assets/`. The URL model +uses per-chain path prefixes, but the current workflow uploads one chain to an environment-named +Pages branch. Do not assume a shared custom domain serves that branch without an explicitly tested +routing design. -| Environment tier | Pages project | Domain | Chains served | -|---|---|---|---| -| All mainnet | `tricksfor-nft` | `nft.tricksfor.com` | `ethereum`, `polygon`, `optimism`, `bsc`, `avalanche` | -| All testnet | `tricksfor-nft-preview` | `nft-preview.tricksfor.com` | Same | +See [Cloudflare Pages Setup](cloudflare-pages-setup.md) for the unresolved branch/custom-domain +routing requirement and supported design options. To generate output for multiple chains in one repo state: @@ -555,5 +550,5 @@ the same content. Generation can be re-run at any time to regenerate or verify f | [`docs/nft-asset-validation.md`](nft-asset-validation.md) | Validation script documentation | | [`docs/nft-copy-spec.md`](nft-copy-spec.md) | Collection names, token names, and description templates | | [`docs/cloudflare-pages-setup.md`](cloudflare-pages-setup.md) | Cloudflare Pages project configuration | -| [`docs/release-deployment-architecture.md`](release-deployment-architecture.md) | Full release pipeline architecture | +| [`docs/deployment.md`](deployment.md) | Current protected deployment runbook | | [`nft-assets/README.md`](../nft-assets/README.md) | nft-assets directory overview | diff --git a/docs/nuget-packaging.md b/docs/nuget-packaging.md index a539e24..1b0262c 100644 --- a/docs/nuget-packaging.md +++ b/docs/nuget-packaging.md @@ -70,14 +70,13 @@ dotnet pack src/Tricksfor.Blockchain.Booster/Tricksfor.Blockchain.Booster.csproj | Git tag | NuGet version | Meaning | |---|---|---| | `v1.2.3` | `1.2.3` | Stable release — published to nuget.org | -| `v1.2.3-rc.1` | `1.2.3-rc.1` | Release candidate — published to GitHub Packages only | -| `v1.2.3-beta.2` | `1.2.3-beta.2` | Beta — published to GitHub Packages only | -| `v1.2.3-alpha.1` | `1.2.3-alpha.1` | Alpha — published to GitHub Packages only | +| `v1.2.3-rc.1` | `1.2.3-rc.1` | Not accepted by the current release workflow | +| `v1.2.3-beta.2` | `1.2.3-beta.2` | Not accepted by the current release workflow | +| `v1.2.3-alpha.1` | `1.2.3-alpha.1` | Not accepted by the current release workflow | -Pre-release packages are not published to nuget.org unless `NUGET_PUBLISH_ENABLED` is explicitly -configured and the tag matches the stable pattern. See -[release-deployment-architecture.md §8](./release-deployment-architecture.md#8-nuget-publishing-model) -for the publish gate logic. +The current `Release NuGet package` workflow accepts only stable `vMAJOR.MINOR.PATCH` tags and +publishes them to nuget.org. It does not publish pre-release packages or use an environment-level +publish flag. --- @@ -123,26 +122,18 @@ The following changes are **not** breaking (MINOR or PATCH): ## Publishing flow -Publishing is fully automated and triggered by a GitHub Release. The workflow is defined in -`.github/workflows/release-deploy.yml`. +Publishing is independent of contract deployment. The workflow is defined in +`.github/workflows/release-package.yml` and runs when a GitHub Release is published or is manually +dispatched with an existing stable tag. ``` -GitHub Release published - │ - ▼ - test job - │ - ▼ - deploy-contracts job (environment-scoped) - │ (propagates NUGET_PUBLISH_ENABLED from environment variable) - └─► publish-nuget job - │ - ├── validate version format (fail fast on bad tag) - ├── dotnet pack → .nupkg + .snupkg (version from release tag) - ├── upload .nupkg + .snupkg as workflow artifacts (always) - ├── dotnet nuget push .nupkg → nuget.org (stable releases) - ├── dotnet nuget push .snupkg → nuget.org symbol server (stable releases) - └── dotnet nuget push .nupkg → GitHub Packages (pre-release) +published GitHub Release or manual stable tag + → validate vMAJOR.MINOR.PATCH + → test SmartContract.sln + → pack .nupkg and .snupkg + → push to nuget.org with --skip-duplicate + → upload workflow artifact + → attach packages to the GitHub Release ``` ### Manual pack (local verification) @@ -178,11 +169,11 @@ The `.snupkg` contains the PDB file, which helps consumers debug the package and Source-level step-into debugging typically also requires SourceLink metadata to be configured during the build; the symbol package alone does not guarantee that experience. -It is pushed to the nuget.org symbol server as part of the stable release workflow and uploaded as a -workflow artifact on every run regardless of publish outcome. +It is included in the pack output, uploaded with the workflow artifact, and attached to the GitHub +Release. The current workflow pushes only the `.nupkg`; it does not separately push the `.snupkg` to +the nuget.org symbol server. Add and validate that publication step if hosted symbols are required. -GitHub Packages does not support the `.snupkg` format; only the main `.nupkg` is pushed to GitHub -Packages for pre-release versions. +The current workflow does not publish to GitHub Packages. --- @@ -191,12 +182,8 @@ Packages for pre-release versions. | Name | Type | Scope | Purpose | |---|---|---|---| | `NUGET_API_KEY` | Secret | Repository | API key for nuget.org push | -| `GITHUB_TOKEN` | Automatic | Repository | API key for GitHub Packages push | -| `NUGET_PUBLISH_ENABLED` | Variable | Environment | Set `true` to enable publishing for a given environment | +| `GITHUB_TOKEN` | Automatic | Repository | Read the tag/release and attach package files | -`NUGET_PUBLISH_ENABLED` is read from the GitHub Environment associated with the `deploy-contracts` -job. The `publish-nuget` job receives the value as a job output, so it honours the per-environment -setting without needing its own environment scope (and without triggering an extra approval gate on -mainnet environments). +No GitHub Environment or `NUGET_PUBLISH_ENABLED` variable is involved in package publication. See [github-environments-setup.md](./github-environments-setup.md) for configuration instructions. diff --git a/docs/release-deployment-architecture.md b/docs/release-deployment-architecture.md index cc012fa..732d5f7 100644 --- a/docs/release-deployment-architecture.md +++ b/docs/release-deployment-architecture.md @@ -1,720 +1,35 @@ -# Release-Driven Deployment Architecture +# Archived Release-Driven Deployment Architecture -This document is the source-of-truth design reference for the Tricksfor SmartContract deployment and NuGet publishing pipeline. All implementation issues for GitHub Actions workflows should reference this document directly. +This file previously described the deleted all-in-one `release-deploy.yml` design. It is retained as +a compatibility link only; its workflow model is no longer implemented. ---- +The current architecture is: -## Table of Contents +```text +pull request / push to main + → CI validation, tests, security analysis, metadata checks, package inspection -1. [Trigger Model](#1-trigger-model) -2. [Versioning Model](#2-versioning-model) -3. [Environment Model](#3-environment-model) -4. [Secrets Model](#4-secrets-model) -5. [Network Model](#5-network-model) -6. [Deployment Parameter Model](#6-deployment-parameter-model) -7. [Metadata Hosting Model](#7-metadata-hosting-model) -8. [Verification Model](#8-verification-model) -9. [NuGet Publishing Model](#9-nuget-publishing-model) -10. [Failure Handling Model](#10-failure-handling-model) +manual Deploy testnet + → one protected testnet → optional metadata → deploy/resume → optional verification → smoke ---- +published stable GitHub Release + → independent NuGet package workflow -## 1. Trigger Model - -### Primary trigger - -Workflows are triggered by the `release.published` GitHub event. No deployment or publishing action runs on push, pull-request, or manual dispatch unless explicitly required for a specific maintenance scenario. - -``` -GitHub Release published - │ - ▼ - release-deploy.yml - │ - ├─► deploy-contracts job (environment-scoped) - ├─► verify-contracts job (depends on deploy-contracts) - └─► publish-nuget job (depends on deploy-contracts) -``` - -### Release pattern rules - -| Tag pattern | Channel | Allowed deploy targets | -|---|---|---| -| `^v\d+\.\d+\.\d+$` (e.g. `v1.2.3`) | Stable | Any environment, including mainnet | -| `v*.*.*-rc.*` (e.g. `v1.2.3-rc.1`) | Release candidate | Testnet environments only | -| `v*.*.*-beta.*` | Beta | Testnet environments only | -| `v*.*.*-alpha.*` | Alpha | Testnet environments only | - -Mainnet environments (`ethereum-mainnet`, `polygon-mainnet`, `optimism-mainnet`, `bsc-mainnet`, `avalanche-mainnet`) must only be targeted by stable releases whose tags match `^v\d+\.\d+\.\d+$`. Workflows must enforce this by requiring `github.event.release.prerelease == false` **and** validating that the tag matches the stable regex, failing fast if either condition is not met. - -### Non-secret workflow selectors - -The following inputs are acceptable as release-level selectors (none of these are secrets): - -| Input | Source | Description | -|---|---|---| -| `target_environment` | Release title convention or tag-mapped config | Identifies which GitHub Environment to activate | -| `network_key` | Derived from `target_environment` | Short name identifying the target chain (e.g. `ethereum-mainnet`) | -| `enable_nuget_publish` | Environment variable `NUGET_PUBLISH_ENABLED` | Whether to publish the NuGet package | -| `enable_verify` | Environment variable `VERIFY_ENABLED` | Whether to run block-explorer verification | -| Version/tag | GitHub release tag | Version string used for manifests and NuGet package | - ---- - -## 2. Versioning Model - -### Source of version - -The version comes exclusively from the Git tag attached to the GitHub Release. The workflow extracts the version with: - -```yaml -version: ${{ github.ref_name }} # e.g. v1.2.3 (full tag, used for Git references) -``` - -The `v` prefix must be stripped for NuGet SemVer. Always derive `NUGET_VERSION` via the shell substitution below — do **not** pass the raw `${{ github.ref_name }}` directly to `dotnet pack`: - -```bash -NUGET_VERSION="${GITHUB_REF_NAME#v}" # strips leading 'v' → 1.2.3 -``` - -### Pre-release NuGet versions - -Pre-release tags (e.g. `v1.2.3-rc.1`) produce NuGet package versions with the pre-release suffix intact (e.g. `1.2.3-rc.1`), which NuGet interprets as pre-release and will not install by default without opting in. - -### Deployment manifest versioning - -Each deployment manifest file (`deployments/{network}/{ContractName}.json`) contains the following fields, matching the current `ContractDeploymentRecord` schema: - -- `contractName`: the Solidity contract name (e.g. `"TricksforBoosterNFT"`) -- `address`: the deployed contract address (checksummed hex) -- `transactionHash`: deployment transaction hash -- `blockNumber`: block number at deployment -- `deployedAt`: ISO-8601 UTC timestamp -- `constructorArgs`: constructor arguments in declaration order - -> **Note:** `releaseTag` is not part of the current manifest schema. Adding it would require a code change to `ContractDeploymentRecord`, `ManifestWriter`, and related tests. If this field is adopted in the future it must be implemented as an explicit schema change — update the record, the writer, the `deployments/README.md`, and all tests together as a single atomic change. - ---- - -## 3. Environment Model - -### One GitHub Environment per deploy target - -Each deployable target has a dedicated [GitHub Environment](https://docs.github.com/en/actions/deployment/targeting-different-environments). Environment names follow a strict `{chain}-{stage}` convention. - -| Environment name | Chain | Stage | -|---|---|---| -| `ethereum-sepolia` | Ethereum | Testnet | -| `ethereum-mainnet` | Ethereum | Mainnet | -| `polygon-amoy` | Polygon | Testnet | -| `polygon-mainnet` | Polygon | Mainnet | -| `optimism-sepolia` | Optimism | Testnet | -| `optimism-mainnet` | Optimism | Mainnet | -| `bsc-testnet` | BNB Smart Chain | Testnet | -| `bsc-mainnet` | BNB Smart Chain | Mainnet | -| `avalanche-fuji` | Avalanche | Testnet (Fuji) | -| `avalanche-mainnet` | Avalanche | Mainnet | - -### Environment protection rules - -All `*-mainnet` environments must be configured with: -- **Required reviewers**: at least one named approver must approve before the workflow runs -- **Deployment branches**: restricted to the repository's default branch -- **Wait timer**: optional (recommended: 5 minutes for a review window) - -Testnet environments do not require approvals and can auto-deploy. - -### How the target environment is resolved - -The release title or tag suffix maps to a target environment name. The mapping is maintained in a checked-in configuration file (see [Section 6](#6-deployment-parameter-model)): +manual Deploy mainnet + → one protected mainnet from an existing stable release tag +manual Execute reviewed mainnet mint plan + → dry-run or protected resumable mint execution ``` -deployments/config/{environment-name}/deployment-params.json -``` - -The workflow reads the `target_environment` selector from the release metadata or from a convention-based lookup. The environment name is passed directly to the `environment:` key of the GitHub Actions job. - ---- - -## 4. Secrets Model - -### Principle - -**No secret value is ever passed as a release input, workflow input, or workflow variable.** - -All sensitive values are stored exclusively in GitHub Environment secrets and accessed only within the job scoped to that environment. - -### Secret classification - -| Value | Classification | Storage location | -|---|---|---| -| Deployer wallet private key | **Secret** | GitHub Environment secret: `DEPLOYER_PRIVATE_KEY` | -| RPC endpoint URL | **Secret** | GitHub Environment secret: `RPC_URL` | -| Block explorer API key | **Secret** | GitHub Environment secret: `EXPLORER_API_KEY` | -| NuGet API key | **Secret** | GitHub Repository secret: `NUGET_API_KEY` | -| GitHub Packages token | **Secret** | GitHub-provided: `GITHUB_TOKEN` | - -### Non-secret configuration variables - -| Value | Classification | Storage location | -|---|---|---| -| Chain ID | **Non-secret** | GitHub Environment variable: `CHAIN_ID` | -| Explorer base URL | **Non-secret** | GitHub Environment variable: `EXPLORER_BASE_URL` | -| Whether verification is enabled | **Non-secret** | GitHub Environment variable: `VERIFY_ENABLED` | -| Whether NuGet publish is enabled | **Non-secret** | GitHub Environment variable: `NUGET_PUBLISH_ENABLED` | -| NFT name, symbol, URIs, royalty config | **Non-secret** | Checked-in deployment params file (see Section 6) | -| Admin/minter wallet addresses | **Non-secret** | Checked-in deployment params file (see Section 6) | - -### Repository-level vs. environment-level secrets - -- **Environment secrets** are preferred for all chain-specific secrets. They are only available during workflow runs that target the matching environment, limiting blast radius. -- **Repository secrets** are used only for values shared across all environments (e.g. `NUGET_API_KEY`). -- Organization secrets must not be used without explicit documentation of scope and justification. - -### Audit trail - -Every workflow run must emit a non-secret summary log that includes: -- target environment name -- chain ID (non-secret) -- deployer address (derived from private key but not the key itself) -- contract addresses deployed - -Secrets must never appear in log output. Workflows and deployment runners must not print secret values even in masked form. - -This prohibition explicitly includes `RPC_URL`: the raw RPC endpoint must never be written to startup logs, step logs, exception messages, or summaries. If endpoint diagnostics are needed, log only non-secret network metadata such as the configured environment name or chain ID, not the URL itself. - -> **Implementation note:** `Program.cs` currently logs `RPC URL: {config.RpcUrl}` at startup. Because `RPC_URL` is classified as a secret in this architecture, that log line must be removed before this pipeline is deployed. Log only completely non-secret metadata at startup — the configured environment name and chain ID are sufficient for diagnostics. - ---- - -## 5. Network Model - -### Supported chains - -| Chain | Chain ID (mainnet) | Chain ID (testnet) | Testnet name | Explorer (mainnet) | Explorer (testnet) | -|---|---|---|---|---|---| -| Ethereum | 1 | 11155111 | Sepolia | etherscan.io | sepolia.etherscan.io | -| Polygon | 137 | 80002 | Amoy | polygonscan.com | amoy.polygonscan.com | -| Optimism | 10 | 11155420 | OP Sepolia | optimistic.etherscan.io | sepolia-optimism.etherscan.io | -| BNB Smart Chain | 56 | 97 | BSC Testnet | bscscan.com | testnet.bscscan.com | -| Avalanche | 43114 | 43113 | Fuji | snowtrace.io | testnet.snowtrace.io | - -### Chain-specific value resolution - -Chain-specific secrets and variables are resolved entirely through the GitHub Environment mapped to the deploy target. The workflow does not contain any hardcoded chain parameters. Chain configuration flows through the following path: - -``` -GitHub Environment secrets/variables - │ - ▼ - Workflow job (environment: ) - │ - ▼ - Deployment runner (env vars: RPC_URL, CHAIN_ID, DEPLOYER_PRIVATE_KEY) -``` - -The deployment runner (`src/Tricksfor.Blockchain.Booster.Deploy`) reads all chain-specific values from environment variables using the `Deployment__*` prefix convention already implemented in `Program.cs`: - -- `Deployment__RpcUrl` → from `RPC_URL` environment secret -- `Deployment__ChainId` → from `CHAIN_ID` environment variable -- `Deployment__PrivateKey` → from `DEPLOYER_PRIVATE_KEY` environment secret -- `DEPLOY_ENV` → set to the **full `{chain}-{stage}` environment name** (e.g. `polygon-mainnet`) -- `Deployment__Network` → can be set separately if the manifest folder name should differ from `DEPLOY_ENV`; defaults to the value of `DEPLOY_ENV` - -> **Manifest folder naming:** In a multi-chain pipeline, using the full `{chain}-{stage}` name as `Deployment__Network` is the recommended approach. This avoids the ambiguity of short names (e.g., plain `mainnet` is not unique across Ethereum, Polygon, and BNB Smart Chain). The existing `deployments/README.md` shows short names (`sepolia`, `mainnet`) from the single-chain era; the multi-chain convention extends this to `ethereum-mainnet`, `polygon-amoy`, etc. When running the pipeline, `Deployment__Network` should be set explicitly to the `{chain}-{stage}` key so manifests are written to unambiguous paths (e.g. `deployments/polygon-mainnet/`). - -### Adding a new chain - -To add a new supported chain: -1. Create a GitHub Environment named `{chain}-{stage}` and populate its secrets and variables. -2. Add an entry to the network table in this document. -3. Add a corresponding `deployments/config/{environment-name}/deployment-params.json` file. -4. Add the explorer verification configuration for the new chain in the Hardhat config. - -No workflow file changes are required if the deployment runner and environment strategy are followed. - ---- - -## 6. Deployment Parameter Model - -### Strategy: checked-in parameter files + environment secrets - -Deployment parameters are split into two categories: - -| Category | Examples | Where stored | -|---|---|---| -| **Non-secret constructor args** | NFT name, symbol, base URI, contract URI, royalty receiver address, royalty basis points | Checked-in JSON file per environment | -| **Admin / role addresses** | Admin wallet, minter wallet, pauser wallet | Checked-in JSON file per environment | -| **Secrets** | Private key, RPC URL, explorer API key | GitHub Environment secrets (never committed) | - -### Parameter file location and format - -``` -deployments/config/ -├── ethereum-sepolia/ -│ └── deployment-params.json -├── ethereum-mainnet/ -│ └── deployment-params.json -├── polygon-amoy/ -│ └── deployment-params.json -├── polygon-mainnet/ -│ └── deployment-params.json -├── optimism-sepolia/ -│ └── deployment-params.json -├── optimism-mainnet/ -│ └── deployment-params.json -├── bsc-testnet/ -│ └── deployment-params.json -├── bsc-mainnet/ -│ └── deployment-params.json -├── avalanche-fuji/ -│ └── deployment-params.json -└── avalanche-mainnet/ - └── deployment-params.json -``` - -### Parameter file schema - -```json -{ - "Deployment": { - "Network": "ethereum-mainnet", - "ChainId": 1, - "DeploymentsOutputPath": "deployments", - "Nft": { - "Name": "TricksforBooster", - "Symbol": "TFB", - "BaseUri": "https://meta.tricksfor.gg/booster/", - "ContractMetadataUri": "https://meta.tricksfor.gg/booster/contract.json", - "RoyaltyReceiver": "0xYOUR_ROYALTY_RECEIVER_ADDRESS", - "RoyaltyFeeBasisPoints": 500 - } - } -} -``` - -`RoyaltyReceiver` may be left empty (`""`) if the deployer address should be used; `DeploymentRunner` already handles this default. - -### Workflow integration - -The deployment runner loads `appsettings.{DEPLOY_ENV}.json` from `AppContext.BaseDirectory` (the published binary output directory), not from the repository source tree. The `.csproj` currently only copies `appsettings.json` and `appsettings.localhost.json` to the output directory automatically. - -To make the per-environment params file available at runtime, the workflow must: -1. Publish the runner to an explicit output directory. -2. Copy the params file into that same output directory under the expected filename. -3. Run the published binary from that directory. - -```yaml -- name: Publish deployment runner - run: dotnet publish src/Tricksfor.Blockchain.Booster.Deploy \ - --configuration Release \ - --output ./runner-output - -- name: Copy deployment params - run: cp deployments/config/${{ env.DEPLOY_ENV }}/deployment-params.json \ - runner-output/appsettings.${{ env.DEPLOY_ENV }}.json - -- name: Run deployment - run: dotnet runner-output/Tricksfor.Blockchain.Booster.Deploy.dll - env: - DEPLOY_ENV: ${{ env.DEPLOY_ENV }} - Deployment__RpcUrl: ${{ secrets.RPC_URL }} - Deployment__PrivateKey: ${{ secrets.DEPLOYER_PRIVATE_KEY }} - Deployment__ChainId: ${{ vars.CHAIN_ID }} - Deployment__Network: ${{ env.DEPLOY_ENV }} -``` - -Secrets are injected via environment variables and take highest priority over any appsettings value. The `deployment-params.json` only needs to supply non-secret constructor arguments (`Nft.Name`, `Nft.Symbol`, `Nft.BaseUri`, etc.) that are not overridden by env vars. - ---- - -## 7. Metadata Hosting Model - -### Static metadata and images on Cloudflare Pages - -NFT token metadata and images for the Tricksfor Booster collection are static and hosted on -Cloudflare Pages. The repository stores all static assets under [`nft-assets/`](../nft-assets/README.md). - -``` -nft-assets/ -├── ethereum/ -│ ├── metadata/ ← token metadata JSON files for Ethereum (token IDs 1–600) -│ ├── images/ ← NFT images for Ethereum -│ └── contract/ ← collection metadata for Ethereum (collection.json) -├── polygon/ -├── optimism/ -├── bsc/ -├── avalanche/ -├── source-images/ ← 33 canonical source images, organised by theme (coin/dice/rps) -├── _headers ← Cloudflare Pages response headers -└── _redirects ← extensionless → .json rewrite rules -``` - -### URL conventions - -| Asset | URL | -|---|---| -| Token metadata | `https://nft.tricksfor.com/{chainKey}/metadata/{tokenId}.json` | -| Collection metadata | `https://nft.tricksfor.com/{chainKey}/contract/collection.json` | -| Token image | `https://nft.tricksfor.com/{chainKey}/images/{tokenId}.png` | - -### Contract parameter derivation - -Each chain deployment uses its own chain-specific base URLs: - -| Chain | `BASE_TOKEN_URI` | `CONTRACT_URI` | -|---|---|---| -| Ethereum | `https://nft.tricksfor.com/ethereum/metadata/` | `https://nft.tricksfor.com/ethereum/contract/collection.json` | -| Polygon | `https://nft.tricksfor.com/polygon/metadata/` | `https://nft.tricksfor.com/polygon/contract/collection.json` | -| Optimism | `https://nft.tricksfor.com/optimism/metadata/` | `https://nft.tricksfor.com/optimism/contract/collection.json` | -| BNB Smart Chain | `https://nft.tricksfor.com/bsc/metadata/` | `https://nft.tricksfor.com/bsc/contract/collection.json` | -| Avalanche | `https://nft.tricksfor.com/avalanche/metadata/` | `https://nft.tricksfor.com/avalanche/contract/collection.json` | - -### Metadata generation - -Before deploying a new chain, run `scripts/generate-nft-assets.js` to produce the static -files from the authoritative manifest: - -```bash -node scripts/generate-nft-assets.js --env {env} -``` - -The script writes files to `nft-assets/{chainKey}/` and prints the `BASE_TOKEN_URI` and -`CONTRACT_URI` values for the deployment. See [`docs/nft-metadata-generation.md`](nft-metadata-generation.md) -for the complete generation guide. - -### generate-nft-assets job - -The `generate-nft-assets` job runs between `validate-assets` and `deploy-metadata`. It has no -environment scope and does not consume any secrets. - -``` -test - └── validate-assets - └── generate-nft-assets (no environment scope; generates output; uploads artifact) - └── deploy-metadata (environment-scoped; Cloudflare Pages secrets) - └── deploy-contracts (environment-scoped; chain secrets) - ├── verify-contracts - └── publish-nuget -``` - -The job: -1. Runs `node scripts/generate-nft-assets.js --env {deploy_env} --force` to produce the - chain-specific output tree under `nft-assets/{chainKey}/`. -2. Reads the `chainKey` from `deployments/config/{env}/nft-manifest.json` and exposes it as a - job output (`chain_key`) for use by `deploy-metadata`. -3. Uploads `nft-assets/{chainKey}/` as the `nft-generated-{env}-{tag}` artifact with - `if: always()` — retained for 30 days even if the subsequent Pages deployment fails. - -If `generate-nft-assets` fails, `deploy-metadata` and all downstream jobs are skipped. - -### deploy-metadata job - -The `deploy-metadata` job in `release-deploy.yml` runs after `generate-nft-assets`: - -The job: -1. Downloads the `nft-generated-{env}-{tag}` artifact into `nft-assets/{chainKey}/`, overlaying - the freshly generated files on top of the checked-out repository. -2. Deploys `nft-assets/` to Cloudflare Pages via `cloudflare/pages-action@v1`. -3. Resolves the final base domain from `NFT_BASE_DOMAIN` (environment variable) or falls back to `{CF_PAGES_PROJECT}.pages.dev`. -4. Reads the `chainKey` from `deployments/config/{env}/nft-manifest.json` and outputs chain-specific `base_token_uri` and `contract_uri`. - -`deploy-contracts` receives these outputs and passes them as environment variable overrides -to the deployment runner: - -```yaml -Deployment__Nft__BaseUri: -Deployment__Nft__ContractMetadataUri: -``` - -These values take highest precedence over any value in `deployment-params.json`, ensuring -the contract is always deployed with the exact URLs that were verified live. - -### Required GitHub Environment configuration - -| Name | Type | Required | Description | -|---|---|---|---| -| `CLOUDFLARE_API_TOKEN` | Secret | Yes | Cloudflare API token with Cloudflare Pages: Edit | -| `CLOUDFLARE_ACCOUNT_ID` | Variable | Yes | Cloudflare account ID | -| `CF_PAGES_PROJECT` | Variable | Yes | Cloudflare Pages project name | -| `NFT_BASE_DOMAIN` | Variable | No | Custom domain; falls back to `{project}.pages.dev` | - -See [`docs/cloudflare-pages-setup.md`](cloudflare-pages-setup.md) for the full setup guide. - -### Chain-aware deployment strategy - -All mainnet chain deployments share a single production Cloudflare Pages project -(`tricksfor-nft`) and custom domain (`nft.tricksfor.com`). Chain separation is achieved -through the per-chain subdirectory structure (`/ethereum/`, `/polygon/`, etc.) within that -single project. - -| Environments | Recommended `CF_PAGES_PROJECT` | Recommended `NFT_BASE_DOMAIN` | -|------------------|--------------------------------|---------------------------------| -| `*-mainnet` | `tricksfor-nft` | `nft.tricksfor.com` | -| `*-sepolia`, `*-amoy`, `*-testnet`, `*-fuji` | `tricksfor-nft-preview` | `nft-preview.tricksfor.com` | - -The `BASE_TOKEN_URI` and `CONTRACT_URI` resolved by each run are therefore deterministic: -a mainnet Ethereum release always produces `https://nft.tricksfor.com/ethereum/metadata/` and -`https://nft.tricksfor.com/ethereum/contract/collection.json`, and a testnet release always -produces the equivalent preview URLs. - -See [`docs/cloudflare-pages-setup.md` § Multi-Chain Deployment Strategy](cloudflare-pages-setup.md#8-multi-chain-deployment-strategy) -and [`docs/release-operations.md` § Required Variables](release-operations.md#4-required-variables) -for the complete per-environment configuration reference. - -### Stability guarantee - -Once the custom domain is bound and the contract is deployed with those URLs: -- metadata paths are immutable (`/{chainKey}/metadata/{tokenId}.json`) -- image paths are immutable (`/{chainKey}/images/{tokenId}.png`) -- collection metadata path is immutable (`/{chainKey}/contract/collection.json`) -- Cloudflare Pages propagates new deployments to the same paths, preserving URL stability - ---- - -## 8. Verification Model - -### When verification runs - -Verification runs as a separate job that depends on the `deploy-contracts` job. It can be skipped per environment by setting `VERIFY_ENABLED=false` in the GitHub Environment variables. Verification is always skipped when deploying to `localhost` or any environment with `VERIFY_ENABLED` unset or set to `false`. - -### Tooling - -Contract verification uses [Hardhat Verify](https://hardhat.org/hardhat-runner/plugins/nomicfoundation-hardhat-verify) (via `@nomicfoundation/hardhat-verify`), which supports all five target chains through their Etherscan-compatible API endpoints. - -### Compiler artifact preservation - -The `artifacts/` directory (containing compiled contract JSON with ABI, bytecode, and compiler metadata) must be committed to the repository and used as-is during verification. The workflow must not recompile contracts during verification — it must use the same artifact that was used during deployment. - -Constructor arguments must be captured from the deployment manifest produced by step 4 of the deployment flow and passed to the verification command. The `ManifestWriter` already records `constructorArgs` in the manifest JSON. - -### Verification flow - -``` -deploy-contracts job completes - │ - ▼ -verify-contracts job starts - ├── npm ci (restore node_modules) - ├── Use committed artifacts/ exactly as produced for deployment - ├── Do not run: npx hardhat compile - ├── Read contract addresses from deployment manifests - ├── Read constructor args from deployment manifests - ├── Run: npx hardhat verify --no-compile --network {NETWORK_KEY} {NFT_ADDRESS} {NFT_ARGS...} - └── Run: npx hardhat verify --no-compile --network {NETWORK_KEY} {STAKING_ADDRESS} {STAKING_ARGS...} -``` - -### Explorer endpoints per chain - -| Environment | Hardhat network name | Explorer API base URL | -|---|---|---| -| `ethereum-sepolia` | `sepolia` | `https://api-sepolia.etherscan.io/api` | -| `ethereum-mainnet` | `mainnet` | `https://api.etherscan.io/api` | -| `polygon-amoy` | `polygon_amoy` | `https://api-amoy.polygonscan.com/api` | -| `polygon-mainnet` | `polygon` | `https://api.polygonscan.com/api` | -| `optimism-sepolia` | `optimism_sepolia` | `https://api-sepolia-optimism.etherscan.io/api` | -| `optimism-mainnet` | `optimism` | `https://api-optimistic.etherscan.io/api` | -| `bsc-testnet` | `bsc_testnet` | `https://api-testnet.bscscan.com/api` | -| `bsc-mainnet` | `bsc` | `https://api.bscscan.com/api` | -| `avalanche-fuji` | `avalanche_fuji` | `https://api-testnet.snowtrace.io/api` | -| `avalanche-mainnet` | `avalanche` | `https://api.snowtrace.io/api` | - -`EXPLORER_API_KEY` is intended to be provided from the GitHub Environment secret and exposed to Hardhat verification via `ETHERSCAN_API_KEY` (which the Hardhat Verify plugin reads by default for all Etherscan-compatible explorers). - -> **Implementation note:** the network names and explorer endpoints above are the target mapping for the release pipeline, but they are **not yet configured** in `hardhat.config.ts`. A required follow-up change is to add the corresponding `networks` entries and the `etherscan` / `verify` configuration block to `hardhat.config.ts` so that `npx hardhat verify --no-compile --network {NETWORK_KEY}` actually works for each of these chains. Until that change is in place, verification will fail for any network other than `localhost`. - -### What must be preserved for verification - -- Solidity compiler version (`0.8.26`) -- EVM target (`cancun`) -- Optimizer settings (must match `hardhat.config.ts`) -- Compiled `artifacts/` directory (committed to repository) -- Constructor arguments (from deployment manifest) - ---- - -## 9. NuGet Publishing Model - -### Package identity - -| Property | Value | -|---|---| -| Package ID | `Tricksfor.SmartContracts` | -| Project | `src/Tricksfor.Blockchain.Booster/Tricksfor.Blockchain.Booster.csproj` | -| Target framework | `net8.0` | -| Package source | nuget.org (primary) and/or GitHub Packages | - -See [docs/nuget-packaging.md](./nuget-packaging.md) for the full versioning strategy, -pre-release suffix rules, and breaking-change guidance. - -### What is included in the package - -| Included | Description | -|---|---| -| Nethereum event DTOs | C# classes matching all `TokenStaked`, `TokenUnstaked`, `EmergencyWithdrawn` event signatures | -| Nethereum function message types | C# classes for all public contract functions | -| Deployment messages | `TricksforBoosterNFTDeployment`, `TricksforBoosterStakingDeployment` | -| Contract service wrappers | `BoosterStakingService`, `BoosterNFTService` | -| Embedded ABI + bytecode | `TricksforBoosterNFTAbi`, `TricksforBoosterStakingAbi` | - -The package does **not** include: -- Deployment runner (`Tricksfor.Blockchain.Booster.Deploy`) -- Deployment manifests -- Private keys, RPC URLs, or any secrets - -### Versioning - -The NuGet package version is derived from the Git tag of the triggering release, with the leading `v` stripped: - -| Git tag | NuGet version | -|---|---| -| `v1.2.3` | `1.2.3` | -| `v1.2.3-rc.1` | `1.2.3-rc.1` | -| `v1.2.3-beta.2` | `1.2.3-beta.2` | - -The workflow injects the version at pack time: - -```bash -dotnet pack src/Tricksfor.Blockchain.Booster/Tricksfor.Blockchain.Booster.csproj \ - --configuration Release \ - --output ./nupkg \ - /p:PackageVersion="${GITHUB_REF_NAME#v}" -``` - -### Publishing targets - -**Primary target: nuget.org** - -```bash -# Main package -dotnet nuget push ./nupkg/*.nupkg \ - --api-key ${{ secrets.NUGET_API_KEY }} \ - --source https://api.nuget.org/v3/index.json - -# Symbol package (.snupkg) — pushed separately to the nuget.org symbol server -dotnet nuget push ./nupkg/*.snupkg \ - --api-key ${{ secrets.NUGET_API_KEY }} \ - --source https://api.nuget.org/v3/index.json -``` - -`NUGET_API_KEY` is a repository-level secret (not environment-scoped, as the same package serves all chains). - -**Secondary target: GitHub Packages (optional)** - -GitHub Packages may be used as a fallback or for pre-release packages. The `GITHUB_TOKEN` provided automatically by Actions is sufficient for publishing to GitHub Packages. Only the main `.nupkg` is pushed to GitHub Packages; the `.snupkg` format is not supported there. - -### Trusted Publishing - -nuget.org supports OIDC Trusted Publishing (Federated Credentials) for GitHub Actions. To migrate from the API key approach: - -1. Register the package on nuget.org and configure a Trusted Publisher under the package's settings, pointing to this repository and the `release-deploy.yml` workflow. -2. Add `id-token: write` to the workflow's top-level permissions. -3. Replace the `--api-key` flag with the OIDC token exchange step from the `NuGet/setup-nuget` action. - -This migration is forward-compatible and does not affect consumers. Until Trusted Publishing is configured on nuget.org, the `NUGET_API_KEY` secret approach remains in use. - -### Publish gate - -NuGet publishing is controlled by the `NUGET_PUBLISH_ENABLED` variable stored per-environment in GitHub Environment variables. This allows test environments to run the full pipeline without publishing a package. - -The value is read from the `deploy-contracts` job (which is environment-scoped) and forwarded as a job output to the `publish-nuget` job. This ensures per-environment control without requiring the `publish-nuget` job to hold an environment scope of its own (which would otherwise trigger a second approval gate on mainnet environments). - -The `publish-nuget` job additionally checks: - -1. The `NUGET_PUBLISH_ENABLED` variable is `true`. -2. The triggering release is not a GitHub draft release. -3. The release tag produces a valid semver version after stripping the leading `v`; the job fails fast if not. -4. The triggering release tag matches the stable pattern (`^v\d+\.\d+\.\d+$`) when publishing to nuget.org. - - Pre-release packages may be published to GitHub Packages but not to nuget.org unless explicitly enabled. - ---- - -## 10. Failure Handling Model - -### Job dependency graph - -``` -test - └── deploy-metadata - └── deploy-contracts - ├── verify-contracts - └── publish-nuget -``` - -All jobs are separate and independently retryable. `verify-contracts` and `publish-nuget` are set to `needs: [deploy-contracts]` but are independent of each other (`verify-contracts` does not block `publish-nuget`). - -### Metadata deployment fails - -If `deploy-metadata` fails, `deploy-contracts` is automatically skipped. The workflow: - -1. Marks the `deploy-metadata` job as failed. -2. Leaves no contract deployed (the failure is safe — no on-chain state was changed). -3. Allows the operator to investigate the Cloudflare Pages error and re-run the workflow by publishing a new release. - -### Deployment succeeds, verification fails - -Verification failure does **not** roll back the deployment. Contracts deployed on EVM chains cannot be undeployed. The workflow: - -1. Marks the `verify-contracts` job as failed. -2. Uploads the deployment manifest as a workflow artifact so addresses are recoverable. -3. Allows the operator to re-run only the `verify-contracts` job manually once the issue is resolved (e.g. missing API key, explorer outage). - -### Deployment succeeds, NuGet publish fails - -NuGet publish failure does **not** roll back the deployment. The workflow: - -1. Marks the `publish-nuget` job as failed. -2. Uploads the `.nupkg` file as a workflow artifact so the package can be pushed manually. -3. Allows the operator to re-run only the `publish-nuget` job manually. - -### Deployment fails - -If `deploy-contracts` fails, all dependent jobs (`verify-contracts`, `publish-nuget`) are automatically skipped. The workflow: - -1. Marks the `deploy-contracts` job as failed. -2. Retains any partial output artifacts (e.g. partially written manifests, transaction hashes) as workflow artifacts for post-mortem analysis. - -### Artifacts retained on every run - -Regardless of job outcome, the following artifacts are always uploaded: - -| Artifact | Job | Retention | -|---|---|---| -| Deployment manifests (`deployments/{network}/*.json`) | `deploy-contracts` | 90 days | -| NuGet package (`.nupkg` + `.snupkg`) | `publish-nuget` | 90 days | -| Verification transcript (stdout/stderr of verify commands) | `verify-contracts` | 30 days | - -### Manual retry guidance - -| Scenario | Action | -|---|---| -| Re-run verification after API key fix | Re-run `verify-contracts` job in the failed workflow run | -| Re-run NuGet publish after auth fix | Re-run `publish-nuget` job in the failed workflow run, or push the retained `.nupkg` artifact manually via `dotnet nuget push` | -| Re-deploy after RPC failure | Create a new release or trigger a manual deploy workflow if defined | -| Explorer outage during verification | Wait for explorer recovery, then re-run `verify-contracts` job | ---- +See: -## Summary: Decision Table +- [Deployment Operator Runbook](deployment.md) +- [GitHub Environments Setup](github-environments-setup.md) +- [Cloudflare Pages Setup](cloudflare-pages-setup.md) +- [Verification Troubleshooting](verification-troubleshooting.md) +- [NuGet Packaging](nuget-packaging.md) -| Concern | Decision | -|---|---| -| Workflow trigger | `release.published` event only | -| Pre-release → mainnet | **Blocked** (enforced in workflow) | -| Stable → testnet | Allowed | -| Secret injection | GitHub Environment secrets only | -| Non-secret config | Checked-in `deployment-params.json` per environment | -| Chain selection | One GitHub Environment per chain/stage | -| Mainnet approval | Required reviewers on all `*-mainnet` environments | -| NFT asset hosting | Cloudflare Pages, deployed from `nft-assets/` directory | -| Metadata base URI source | Resolved by `deploy-metadata` job from `NFT_BASE_DOMAIN` or `CF_PAGES_PROJECT` | -| Per-chain metadata isolation | Separate CF Pages projects per stage: `tricksfor-nft` (mainnet), `tricksfor-nft-preview` (testnet) | -| Contract deployment blocked by metadata | Yes — `deploy-contracts` requires `deploy-metadata` to succeed | -| Contract verification | Hardhat Verify, separate job, skippable per environment | -| NuGet package ID | `Tricksfor.SmartContracts` | -| NuGet version source | Git tag (strip leading `v`) | -| NuGet publish target | nuget.org (primary), GitHub Packages (optional) | -| Metadata deployment failure | **Blocking** — `deploy-contracts` does not run | -| Verification failure | Non-blocking, artifact retained, job retryable | -| NuGet publish failure | Non-blocking, `.nupkg` retained, job retryable | -| Deployment failure | Blocks dependent jobs, artifacts retained | +Do not recreate the old release-triggered deployment, repository-level `DEPLOY_ENV` selector, +environment-controlled NuGet publication, separate `verify-contracts` job, or archived Cloudflare +Pages action from old issue descriptions or external copies of this document. diff --git a/docs/release-operations.md b/docs/release-operations.md index 237f007..c50077e 100644 --- a/docs/release-operations.md +++ b/docs/release-operations.md @@ -1,693 +1,28 @@ -# Release Operations Guide - -This guide is the single operator reference for configuring, triggering, and recovering the -Tricksfor SmartContract release pipeline. It covers everything an operator needs to deploy -contracts, verify them on block explorers, and publish the NuGet integration package. - -For the underlying architecture and design decisions, see -[`docs/release-deployment-architecture.md`](release-deployment-architecture.md). -For per-step GitHub repository configuration, see -[`docs/github-environments-setup.md`](github-environments-setup.md). - ---- - -## Table of Contents - -1. [Prerequisites](#1-prerequisites) -2. [GitHub Environments](#2-github-environments) -3. [Required Secrets](#3-required-secrets) -4. [Required Variables](#4-required-variables) -5. [Deployment Parameters](#5-deployment-parameters) -6. [Release Tag Conventions](#6-release-tag-conventions) -7. [Release-to-Network Mapping](#7-release-to-network-mapping) -8. [Approval Model](#8-approval-model) -9. [Triggering a Deployment](#9-triggering-a-deployment) -10. [Workflow Job Graph](#10-workflow-job-graph) -11. [Failure Recovery](#11-failure-recovery) -12. [Artifacts](#12-artifacts) - ---- - -## 1. Prerequisites - -Before triggering any release, confirm that the following are in place: - -| Prerequisite | Where to verify | -|---|---| -| Target GitHub Environment exists | **Settings → Environments** | -| All required Environment Secrets are set (including `CLOUDFLARE_API_TOKEN`) | **Settings → Environments → {env} → Secrets** | -| All required Environment Variables are set (including `CLOUDFLARE_ACCOUNT_ID`, `CF_PAGES_PROJECT`) | **Settings → Environments → {env} → Variables** | -| Repository variable `DEPLOY_ENV` is set | **Settings → Secrets and variables → Actions → Variables** | -| `NUGET_API_KEY` repository secret is set (if publishing) | **Settings → Secrets and variables → Actions → Secrets** | -| Token metadata JSON files present under `nft-assets/metadata/` | `nft-assets/metadata/` directory in the repository | -| Token image files present under `nft-assets/images/` | `nft-assets/images/` directory in the repository | -| Collection metadata present at `nft-assets/contract/collection.json` | `nft-assets/contract/collection.json` | -| Deployment params file exists for the target environment | `deployments/config/{env}/deployment-params.json` | -| Hardhat network and explorer config exists for the target | `hardhat.config.ts` | -| Cloudflare Pages project created and custom domain bound (if applicable) | [`docs/cloudflare-pages-setup.md`](cloudflare-pages-setup.md) | - -If any of these are missing, the workflow will fail fast with a clear error message rather than -attempting a partial deployment. - ---- - -## 2. GitHub Environments - -Create one GitHub Environment per deploy target under **Settings → Environments**. Environment -names follow a strict `{chain}-{stage}` convention: - -| Environment name | Chain | Stage | Chain ID (mainnet) | Chain ID (testnet) | -|--------------------|-------------------|---------|--------------------|---------------------| -| `ethereum-sepolia` | Ethereum | Testnet | — | 11155111 | -| `ethereum-mainnet` | Ethereum | Mainnet | 1 | — | -| `polygon-amoy` | Polygon | Testnet | — | 80002 | -| `polygon-mainnet` | Polygon | Mainnet | 137 | — | -| `optimism-sepolia` | Optimism | Testnet | — | 11155420 | -| `optimism-mainnet` | Optimism | Mainnet | 10 | — | -| `bsc-testnet` | BNB Smart Chain | Testnet | — | 97 | -| `bsc-mainnet` | BNB Smart Chain | Mainnet | 56 | — | -| `avalanche-fuji` | Avalanche | Testnet | — | 43113 | -| `avalanche-mainnet`| Avalanche | Mainnet | 43114 | — | - -### Protection rules for mainnet environments - -All `*-mainnet` environments must be configured with: - -- **Required reviewers** — at least one named approver; the deployment is paused until approved. -- **Deployment branches** — restrict to the repository's default branch. -- **Wait timer** (optional) — 5 minutes provides a review and cancellation window. - -### Protection rules for testnet environments - -Testnet environments (`*-sepolia`, `*-amoy`, `*-testnet`, `*-fuji`) do not require approvals and -auto-deploy on every matching release event. - ---- - -## 3. Required Secrets - -### Environment secrets (per environment) - -Set the following under **Settings → Environments → {env-name} → Secrets**: - -| Secret name | Required | Description | -|-----------------------|-----------------------|--------------------------------------------------| -| `RPC_URL` | Always | JSON-RPC endpoint URL for the target network | -| `DEPLOYER_PRIVATE_KEY`| Always | Hex-encoded private key of the deployer wallet | -| `CLOUDFLARE_API_TOKEN`| Always | Cloudflare API token with **Cloudflare Pages: Edit** permission | -| `EXPLORER_API_KEY` | When `VERIFY_ENABLED=true` | API key for the block explorer's verification API | - -> **Security rule:** These values must never be committed, logged, or passed as workflow inputs. -> They are injected exclusively via the GitHub Environment secrets mechanism and are only available -> to jobs that run within the matching environment scope. The raw `RPC_URL` must never appear in -> log output — log only non-secret metadata (environment name, chain ID) at startup. - -### Repository secrets - -Set the following under **Settings → Secrets and variables → Actions → Secrets**: - -| Secret name | Required | Description | -|----------------|-----------------------|----------------------------------------------------------| -| `NUGET_API_KEY`| When publishing to nuget.org | API key for pushing packages to nuget.org | - -`GITHUB_TOKEN` is provided automatically by GitHub Actions and is sufficient for pushing to -GitHub Packages (pre-release packages). No additional secret is needed for that path. - ---- - -## 4. Required Variables - -### Environment variables (per environment) - -Set the following under **Settings → Environments → {env-name} → Variables**: - -| Variable name | Required | Description | Example value | -|------------------------|----------|--------------------------------------------------------------------|------------------------| -| `CHAIN_ID` | Yes | EVM chain ID for the target network | `11155111` | -| `NETWORK_KEY` | Yes | Hardhat network name for the `--network` flag during verification | `sepolia` | -| `CLOUDFLARE_ACCOUNT_ID`| Yes | Cloudflare account ID (visible in the dashboard URL) | `a1b2c3d4e5f6...` | -| `CF_PAGES_PROJECT` | Yes | Cloudflare Pages project name for NFT asset hosting | `tricksfor-nft` | -| `NFT_BASE_DOMAIN` | No | Custom domain for the Pages site (no protocol or trailing slash) | `nft.tricksfor.com` | -| `VERIFY_ENABLED` | No | Set to `true` to enable block-explorer verification | `true` | -| `NUGET_PUBLISH_ENABLED`| No | Set to `true` to publish the NuGet package on deploy | `false` | -| `EXPLORER_NAME` | No | Human-readable explorer name — written to the deployment manifest | `Etherscan` | -| `EXPLORER_BASE_URL` | No | Explorer contract browser URL prefix (no trailing slash) | `https://etherscan.io/address` | - -`EXPLORER_NAME` and `EXPLORER_BASE_URL` are optional. If not set, the `verification.explorerName` -and `verification.explorerUrl` fields in the deployment manifest will be empty strings. They have -no impact on whether verification succeeds. - -For Cloudflare Pages setup instructions see [`docs/cloudflare-pages-setup.md`](cloudflare-pages-setup.md). - -### Repository variable - -Set the following under **Settings → Secrets and variables → Actions → Variables**: - -| Variable name | Required | Description | -|---|---|---| -| `DEPLOY_ENV` | Yes | Target GitHub Environment for deployments. The `resolve-environment` job runs without an environment scope and reads this repository-level variable to determine which environment to activate. Must match one of the environment names listed in [Section 2](#2-github-environments). | - -> **Why a repository variable?** The `resolve-environment` job must execute before any -> environment is activated (it decides *which* environment to use). Repository variables are -> the only variables available to that job. - -### Recommended variable values per environment - -> **Use separate Cloudflare Pages projects and domains for testnet and mainnet environments.** -> Every release deploys to Cloudflare Pages before deploying contracts. If all environments -> share the same project (`tricksfor-nft`) and domain (`nft.tricksfor.com`), a testnet -> release will overwrite production metadata. Use `tricksfor-nft-preview` / -> `nft-preview.tricksfor.com` for all non-production environments to isolate them completely. - -| Environment name | `CHAIN_ID` | `NETWORK_KEY` | `CF_PAGES_PROJECT` | `NFT_BASE_DOMAIN` | `VERIFY_ENABLED` | `NUGET_PUBLISH_ENABLED` | `EXPLORER_NAME` | `EXPLORER_BASE_URL` | -|---------------------|------------|--------------------|--------------------------|-----------------------------|------------------|-------------------------|-------------------------------|--------------------------------------------------| -| `ethereum-sepolia` | `11155111` | `sepolia` | `tricksfor-nft-preview` | `nft-preview.tricksfor.com` | `true` | `false` | `Etherscan (Sepolia)` | `https://sepolia.etherscan.io/address` | -| `ethereum-mainnet` | `1` | `mainnet` | `tricksfor-nft` | `nft.tricksfor.com` | `true` | `true` | `Etherscan` | `https://etherscan.io/address` | -| `polygon-amoy` | `80002` | `polygon_amoy` | `tricksfor-nft-preview` | `nft-preview.tricksfor.com` | `true` | `false` | `PolygonScan (Amoy)` | `https://amoy.polygonscan.com/address` | -| `polygon-mainnet` | `137` | `polygon` | `tricksfor-nft` | `nft.tricksfor.com` | `true` | `true` | `PolygonScan` | `https://polygonscan.com/address` | -| `optimism-sepolia` | `11155420` | `optimism_sepolia` | `tricksfor-nft-preview` | `nft-preview.tricksfor.com` | `true` | `false` | `Optimism Explorer (Sepolia)` | `https://sepolia-optimism.etherscan.io/address` | -| `optimism-mainnet` | `10` | `optimism` | `tricksfor-nft` | `nft.tricksfor.com` | `true` | `true` | `Optimism Explorer` | `https://optimistic.etherscan.io/address` | -| `bsc-testnet` | `97` | `bsc_testnet` | `tricksfor-nft-preview` | `nft-preview.tricksfor.com` | `true` | `false` | `BscScan (Testnet)` | `https://testnet.bscscan.com/address` | -| `bsc-mainnet` | `56` | `bsc` | `tricksfor-nft` | `nft.tricksfor.com` | `true` | `true` | `BscScan` | `https://bscscan.com/address` | -| `avalanche-fuji` | `43113` | `avalanche_fuji` | `tricksfor-nft-preview` | `nft-preview.tricksfor.com` | `true` | `false` | `Snowtrace (Fuji)` | `https://testnet.snowtrace.io/address` | -| `avalanche-mainnet` | `43114` | `avalanche` | `tricksfor-nft` | `nft.tricksfor.com` | `true` | `true` | `Snowtrace` | `https://snowtrace.io/address` | - ---- - -## 5. Deployment Parameters - -Non-secret constructor arguments (NFT name, symbol, URIs, royalty config) are stored in -checked-in JSON files — one file per target environment: - -``` -deployments/config/ -├── ethereum-sepolia/deployment-params.json -├── ethereum-mainnet/deployment-params.json -├── polygon-amoy/deployment-params.json -├── polygon-mainnet/deployment-params.json -├── optimism-sepolia/deployment-params.json -├── optimism-mainnet/deployment-params.json -├── bsc-testnet/deployment-params.json -├── bsc-mainnet/deployment-params.json -├── avalanche-fuji/deployment-params.json -└── avalanche-mainnet/deployment-params.json -``` - -### File schema - -```json -{ - "Deployment": { - "Network": "ethereum-mainnet", - "ChainId": 1, - "DeploymentsOutputPath": "deployments", - "Nft": { - "Name": "TricksforBooster", - "Symbol": "TFB", - "BaseUri": "https://nft.tricksfor.com/metadata/", - "ContractMetadataUri": "https://nft.tricksfor.com/contract/collection.json", - "RoyaltyReceiver": "0xYOUR_ROYALTY_RECEIVER_ADDRESS", - "RoyaltyFeeBasisPoints": 500 - } - } -} -``` - -> **Note:** `BaseUri` and `ContractMetadataUri` in `deployment-params.json` serve as -> documentation defaults. During a release, the `deploy-metadata` workflow job resolves the -> final values from Cloudflare Pages and overrides them via environment variables -> (`Deployment__Nft__BaseUri`, `Deployment__Nft__ContractMetadataUri`). The contract is -> always deployed with the live Pages URLs regardless of what is written in this file. - -### Parameter reference - -| Parameter | Description | Secret? | Source | -|---|---|---|---| -| `Deployment.Network` | Deployment target name — should match `DEPLOY_ENV` | No | deployment-params.json | -| `Deployment.ChainId` | EVM chain ID — can also be set via `CHAIN_ID` env variable | No | deployment-params.json or `CHAIN_ID` variable | -| `Deployment.DeploymentsOutputPath` | Root folder where manifests are written | No | deployment-params.json | -| `Deployment.Nft.Name` | ERC-721 token name | No | deployment-params.json | -| `Deployment.Nft.Symbol` | ERC-721 token symbol | No | deployment-params.json | -| `Deployment.Nft.BaseUri` | Base URI for token metadata — **overridden at runtime** by `deploy-metadata` | No | `deploy-metadata` job output (falls back to deployment-params.json) | -| `Deployment.Nft.ContractMetadataUri` | OpenSea `contractURI()` value — **overridden at runtime** by `deploy-metadata` | No | `deploy-metadata` job output (falls back to deployment-params.json) | -| `Deployment.Nft.RoyaltyReceiver` | ERC-2981 royalty receiver address; leave `""` to use deployer address | No | deployment-params.json | -| `Deployment.Nft.RoyaltyFeeBasisPoints` | ERC-2981 royalty fee in basis points (500 = 5%) | No | deployment-params.json | -| RPC endpoint URL | JSON-RPC provider URL | **Secret** | `RPC_URL` environment secret | -| Deployer private key | Deployer wallet key | **Secret** | `DEPLOYER_PRIVATE_KEY` environment secret | -| Explorer API key | Block explorer API key | **Secret** | `EXPLORER_API_KEY` environment secret | - -> **Admin and minter addresses:** The current deployment runner uses the deployer wallet as the -> default admin. If your contract supports explicit admin or minter parameters, add them to the -> `Deployment.Nft` section of the params file. These addresses are not secrets and can be committed. - -### Priority order - -When the same value is present in multiple sources, the highest-priority source wins: - -1. Environment variables (`Deployment__RpcUrl`, `Deployment__PrivateKey`, `Deployment__ChainId`, `Deployment__Network`, `Deployment__Nft__BaseUri`, `Deployment__Nft__ContractMetadataUri`) -2. `appsettings.{DEPLOY_ENV}.json` (the per-environment params file copied into the runner output directory) -3. `appsettings.json` (default values bundled with the runner) - -Secrets and workflow-resolved values injected as environment variables always take precedence -over any file-based value. `BaseUri` and `ContractMetadataUri` are always injected by the -`deploy-metadata` job, so the values in `deployment-params.json` are treated as documentation -defaults only. - ---- - -## 6. Release Tag Conventions - -The workflow is triggered by publishing a GitHub Release. The release tag determines: - -- whether the release is stable or pre-release -- which environments it is allowed to target -- the NuGet package version - -### Tag format rules - -| Tag pattern | Channel | Allowed deploy targets | NuGet version | -|---|---|---|---| -| `v1.2.3` (exact: `^v\d+\.\d+\.\d+$`) | **Stable** | Any environment, including all mainnet | `1.2.3` | -| `v1.2.3-rc.1` | Release candidate | Testnet environments only | `1.2.3-rc.1` | -| `v1.2.3-beta.2` | Beta | Testnet environments only | `1.2.3-beta.2` | -| `v1.2.3-alpha.1` | Alpha | Testnet environments only | `1.2.3-alpha.1` | - -Any tag that does not match the stable regex (`^v\d+\.\d+\.\d+$`) is treated as a pre-release -and is blocked from targeting `*-mainnet` environments. The workflow fails fast if this rule -is violated. - -### NuGet version derivation - -The NuGet version is the release tag with the leading `v` stripped: - -``` -v1.2.3 → NuGet version 1.2.3 (stable; published to nuget.org) -v1.2.3-rc.1 → NuGet version 1.2.3-rc.1 (pre-release; published to GitHub Packages only) -``` - -### Publishing channel by tag type - -| Tag type | nuget.org | GitHub Packages | -|---|---|---| -| Stable (`v1.2.3`) | ✅ Published (when `NUGET_PUBLISH_ENABLED=true`) | — | -| Pre-release (`v1.2.3-rc.1`, etc.) | ❌ Not published | ✅ Published (when `NUGET_PUBLISH_ENABLED=true`) | - -### Tagging conventions - -- Always use the `v` prefix: `v1.0.0`, not `1.0.0`. -- Use semantic versioning (`MAJOR.MINOR.PATCH`) strictly. -- A MAJOR bump is required for any breaking change to an event schema, event parameter order, - or indexed flag. See [`docs/nuget-packaging.md`](nuget-packaging.md#breaking-change-strategy-for-event-and-interface-changes) for the full breaking-change checklist. -- Do not reuse tags. If a release needs to be corrected, cut a new patch release. - ---- - -## 7. Release-to-Network Mapping - -The target network is determined entirely by the `DEPLOY_ENV` repository variable. The value -must match a GitHub Environment name exactly. - -### Network reference table - -| `DEPLOY_ENV` value | Chain | Stage | Chain ID | Block explorer | -|---------------------|-------------------|---------|----------|----------------------------------| -| `ethereum-sepolia` | Ethereum | Testnet | 11155111 | sepolia.etherscan.io | -| `ethereum-mainnet` | Ethereum | Mainnet | 1 | etherscan.io | -| `polygon-amoy` | Polygon | Testnet | 80002 | amoy.polygonscan.com | -| `polygon-mainnet` | Polygon | Mainnet | 137 | polygonscan.com | -| `optimism-sepolia` | Optimism | Testnet | 11155420 | sepolia-optimism.etherscan.io | -| `optimism-mainnet` | Optimism | Mainnet | 10 | optimistic.etherscan.io | -| `bsc-testnet` | BNB Smart Chain | Testnet | 97 | testnet.bscscan.com | -| `bsc-mainnet` | BNB Smart Chain | Mainnet | 56 | bscscan.com | -| `avalanche-fuji` | Avalanche | Testnet | 43113 | testnet.snowtrace.io | -| `avalanche-mainnet` | Avalanche | Mainnet | 43114 | snowtrace.io | - -### Changing the deployment target - -To change which network the next release targets, update the `DEPLOY_ENV` repository variable: - -1. Go to **Settings → Secrets and variables → Actions → Variables**. -2. Edit `DEPLOY_ENV` and set it to the desired environment name (e.g. `polygon-mainnet`). -3. Ensure the target environment exists and is fully configured. -4. Publish the GitHub Release. - -Only one network is targeted per release. To deploy to multiple networks, publish separate -releases with the target `DEPLOY_ENV` repository variable updated between them. - -### Adding a new network - -1. Create a GitHub Environment named `{chain}-{stage}` with the required secrets and variables. -2. Add the entry to the reference table above in this document. -3. Add the entry to [`docs/github-environments-setup.md`](github-environments-setup.md). -4. Create `deployments/config/{chain}-{stage}/deployment-params.json` with the correct constructor arguments. -5. Ensure `hardhat.config.ts` has a matching `networks` entry and `etherscan.apiKey` / `customChains` entry. -6. No changes to the workflow file are required. - ---- - -## 8. Approval Model - -### Testnet environments - -No approval is required. Deployments proceed automatically when a release is published. - -### Mainnet environments - -All `*-mainnet` environments must be configured with **Required reviewers** in GitHub's -environment protection rules. When a stable release is published and `DEPLOY_ENV` points to a -mainnet environment: - -1. The `resolve-environment` and `test` jobs run automatically. -2. The `deploy-contracts` job is paused at the **environment approval gate** until at least one - required reviewer approves via the GitHub Actions UI. -3. If approval is not given within the configured timeout (default: 30 days), the workflow - expires. Publish a new release to restart the pipeline. -4. Once approved, `deploy-contracts`, `verify-contracts`, and `publish-nuget` run without further - approval prompts (the gate fires once per environment, not per job). - -### Recommended reviewer configuration - -| Environment type | Recommended required reviewers | -|---|---| -| `*-mainnet` | At least 2 named individuals from the core team | -| `*-testnet`/`*-sepolia`/etc. | None required | - -> The `publish-nuget` job does not hold its own environment scope. It receives -> `NUGET_PUBLISH_ENABLED` from `deploy-contracts` as a job output, so no second approval gate -> is triggered for NuGet publishing on mainnet environments. - ---- - -## 9. Triggering a Deployment - -### End-to-end checklist - -Before publishing the release: - -- [ ] Confirm `DEPLOY_ENV` repository variable points to the correct environment -- [ ] Confirm the target environment exists and is fully configured (secrets + variables, including `CLOUDFLARE_API_TOKEN`, `CLOUDFLARE_ACCOUNT_ID`, `CF_PAGES_PROJECT`) -- [ ] Confirm `nft-assets/metadata/` contains all token metadata JSON files for the collection -- [ ] Confirm `nft-assets/images/` contains all token image files -- [ ] Confirm `nft-assets/contract/collection.json` has the correct collection metadata (royalty recipient address must not be the zero address for mainnet) -- [ ] Confirm `deployments/config/{env}/deployment-params.json` has the correct NFT name, symbol, and royalty parameters -- [ ] Choose the correct tag type for the target: - - Testnet → pre-release tag (`v1.2.3-rc.1`) or stable tag (`v1.2.3`) both work - - Mainnet → stable tag only (`v1.2.3`) -- [ ] Draft or compose the release notes - -### Publishing the release - -1. Go to **Releases → Draft a new release**. -2. Enter the tag (e.g. `v1.2.3` for mainnet, `v1.2.3-rc.1` for testnet). -3. Select the target branch (default branch for mainnet; any for testnet). -4. For pre-release tags, check **This is a pre-release**. -5. Click **Publish release**. - -The `release-deploy.yml` workflow starts automatically. - -### Monitoring the deployment - -1. Go to **Actions → Release — Deploy Contracts** to view the running workflow. -2. Monitor the `resolve-environment` job for tag validation errors. -3. Monitor the `test` job for any test failures. -4. Monitor the `validate-assets` job — validates NFT manifests, images, and source structure. -5. Monitor the `generate-nft-assets` job — generates chain-specific metadata and images; uploads artifact. If this fails, `deploy-metadata` will not run. -6. Monitor the `deploy-metadata` job — if this fails, `deploy-contracts` will not run. -7. If deploying to mainnet, approve the pending deployment in the `deploy-metadata` and `deploy-contracts` jobs. -8. Check the `verify-contracts` and `publish-nuget` jobs after `deploy-contracts` completes. - ---- - -## 10. Workflow Job Graph - -``` -GitHub Release published - │ - ▼ -┌─────────────────────────┐ -│ resolve-environment │ Reads DEPLOY_ENV; validates tag format; -│ │ blocks pre-release tags from mainnet. -└────────────┬────────────┘ - │ - ▼ -┌─────────────────────────┐ -│ test │ Runs Hardhat tests + .NET integration tests. -│ │ Fails fast; does not consume secrets. -└────────────┬────────────┘ - │ - ▼ -┌─────────────────────────┐ -│ validate-assets │ Validates NFT manifests, images, and source -│ │ structure. Fails fast; no secrets required. -└────────────┬────────────┘ - │ - ▼ -┌─────────────────────────┐ -│ generate-nft-assets │ Generates chain-specific token metadata, -│ │ collection metadata, and image files from -│ │ the approved manifest. Uploads generated -│ │ output as a build artifact. No secrets. -└────────────┬────────────┘ - │ - ▼ -┌─────────────────────────┐ -│ deploy-metadata │ Environment-scoped. Downloads generated -│ (environment gate │ artifact. Deploys nft-assets/ to Cloudflare -│ for mainnet) │ Pages. Resolves BASE_TOKEN_URI and -│ │ CONTRACT_URI. Blocking. -└────────────┬────────────┘ - │ - ▼ -┌─────────────────────────┐ -│ deploy-contracts │ Environment-scoped. Injects RPC_URL, -│ (environment gate │ DEPLOYER_PRIVATE_KEY, resolved metadata URLs. -│ for mainnet) │ Runs deployment runner. -│ │ Writes deployment manifests. Uploads as artifacts. -└───────┬─────────────────┘ - │ │ - ▼ ▼ -┌──────────────┐ ┌───────────────────┐ -│ verify- │ │ publish-nuget │ -│ contracts │ │ │ -│ │ │ Packs + pushes │ -│ non-blocking│ │ Tricksfor.Smart │ -│ continue-on │ │ Contracts NuGet │ -│ -error │ │ package. │ -└──────────────┘ └───────────────────┘ -``` - -| Job | Environment scope | Blocks others | continue-on-error | -|---|---|---|---| -| `resolve-environment` | None | Yes | No | -| `test` | None | Yes | No | -| `validate-assets` | None | Yes | No | -| `generate-nft-assets` | None | Yes | No | -| `deploy-metadata` | `{DEPLOY_ENV}` | Yes | No | -| `deploy-contracts` | `{DEPLOY_ENV}` | Yes | No | -| `verify-contracts` | `{DEPLOY_ENV}` | No | Yes | -| `publish-nuget` | None | No | Yes | - ---- - -## 11. Failure Recovery - -### Asset generation fails (`generate-nft-assets`) - -When `generate-nft-assets` fails, `deploy-metadata` and all downstream jobs are automatically -skipped. No on-chain state is changed — this is a safe failure point. - -**Recovery steps:** - -1. Open the failed workflow run in **Actions**. -2. Check the `generate-nft-assets` job logs for the root cause: - - `Deployment manifest not found` → create `deployments/config/{env}/nft-manifest.json` (see `docs/nft-asset-manifest-spec.md`). - - `\"chainKey\" is missing or null` → add the `chainKey` field to the manifest. - - Script error during generation → inspect the logs for the specific error; fix the manifest or source images. -3. Note: even when the generation step fails, any partially generated output is uploaded as the - `nft-generated-{env}-{tag}` artifact (`if: always()`). -4. Fix the root cause, then re-run the `generate-nft-assets` job or publish a new release. - -### Metadata deployment fails (`deploy-metadata`) - -When `deploy-metadata` fails, `deploy-contracts` is automatically skipped. No on-chain state -is changed — this is a safe failure point. - -**Recovery steps:** - -1. Open the failed workflow run in **Actions**. -2. Check the `deploy-metadata` job logs for the root cause: - - `CF_PAGES_PROJECT not set` → configure the `CF_PAGES_PROJECT` environment variable. - - Cloudflare authentication error → verify `CLOUDFLARE_API_TOKEN` has **Cloudflare Pages: Edit** permission. - - `CLOUDFLARE_ACCOUNT_ID` mismatch → confirm the account ID value in the environment variables. -3. Fix the root cause, then re-run the `deploy-metadata` job (if the issue was transient) or - publish a new release. - -### Deployment fails (`deploy-contracts`) - -`verify-contracts` and `publish-nuget` are automatically skipped when `deploy-contracts` fails. - -**Recovery steps:** - -1. Open the failed workflow run in **Actions**. -2. Check the `deploy-contracts` job logs for the root cause: - - `DEPLOY_ENV` not set → update the repository variable and re-publish the release. - - `deployment-params.json` not found → create the missing file and re-publish the release. - - RPC error / connection refused → check `RPC_URL` in the environment secrets; re-run the job. - - Transaction revert → check constructor arguments in the params file; fix and re-publish. -3. Once the root cause is fixed, re-run the `deploy-contracts` job (if the issue was transient) - or publish a new release (if the params or config needed changing). - -> Contracts deployed on EVM chains cannot be undeployed. A failed mid-deployment run may have -> deployed one contract but not the other. Check the workflow log and any uploaded artifacts -> for partial manifests before re-deploying. - -### Verification fails (`verify-contracts`) - -Verification failure does **not** roll back the deployment. Contracts are live and correct. - -**Recovery steps:** - -1. Download the `verify-transcript-{env}-{tag}` artifact to read the `hardhat verify` output. -2. Fix the root cause: - - `Invalid API Key` → update `EXPLORER_API_KEY` in the environment secrets. - - `Unknown network` → update `NETWORK_KEY` in the environment variables. - - Explorer outage → wait for recovery; check the explorer's status page. -3. Re-run only the `verify-contracts` job: open the failed workflow run → **Re-run failed jobs**. - -For detailed per-scenario guidance, see [`docs/verification-troubleshooting.md`](verification-troubleshooting.md). - -**Manual verification (if the workflow run has expired):** - -```bash -npm ci -export RPC_URL="" -export ETHERSCAN_API_KEY="" - -./node_modules/.bin/hardhat verify --no-compile \ - --network \ - \ - [CONSTRUCTOR_ARG_1] [CONSTRUCTOR_ARG_2] ... -``` - -Constructor arguments are recorded in the deployment manifest under `constructorArgs`. - -### NuGet publish fails (`publish-nuget`) - -NuGet publish failure does **not** roll back the deployment or verification. - -**Recovery steps:** - -1. Check the `publish-nuget` job logs for the root cause: - - `Unauthorized` → update `NUGET_API_KEY` in the repository secrets. - - `Package already exists` → the package was already pushed; no action needed. - - `Invalid version format` → the release tag does not produce a valid NuGet version; re-tag. -2. Re-run only the `publish-nuget` job in the failed workflow run. - -**Manual NuGet push (using the retained artifact):** - -1. Download the `nuget-package-{tag}` artifact from the failed workflow run. -2. Push manually: - -```bash -dotnet nuget push Tricksfor.SmartContracts.{version}.nupkg \ - --api-key $NUGET_API_KEY \ - --source https://api.nuget.org/v3/index.json - -dotnet nuget push Tricksfor.SmartContracts.{version}.snupkg \ - --api-key $NUGET_API_KEY \ - --source https://api.nuget.org/v3/index.json -``` - -### Pre-release tag accidentally sent to mainnet - -The workflow blocks this at the `resolve-environment` step and exits with an error: - -``` -Pre-release tag 'v1.2.3-rc.1' cannot deploy to mainnet environment 'ethereum-mainnet'. -Only stable tags (vMAJOR.MINOR.PATCH) are allowed on mainnet. -``` - -**Recovery:** No deployment occurred. Update `DEPLOY_ENV` to a testnet environment and -re-publish, or cut a stable tag and re-publish to mainnet. - -### Wrong `DEPLOY_ENV` set - -If `DEPLOY_ENV` points to the wrong environment: - -1. The workflow has already run (or partially run) against the wrong target. -2. Fix `DEPLOY_ENV` in **Settings → Secrets and variables → Actions → Variables**. -3. Publish a new release with the correct tag. - ---- - -## 12. Artifacts - -All artifacts are uploaded under **Actions → {workflow run} → Artifacts**. - -### Generated NFT assets - -| Artifact name | Job | Retention | Contents | -|---|---|---|---| -| `nft-generated-{env}-{tag}` | `generate-nft-assets` | 30 days | `metadata/{id}.json` (600 token files), `contract/collection.json`, `images/{id}.png` — the complete chain-specific generated output for `{chainKey}` | - -Generated assets are uploaded with `if: always()` — they are retained even when the subsequent -Pages deployment fails, allowing manual re-deployment without re-running the full pipeline. - -### Deployment manifests - -| Artifact name | Job | Retention | Contents | -|---|---|---|---| -| `deployment-manifests-{env}-{tag}` | `deploy-contracts` | 90 days | `deployments/{env}/TricksforBoosterNFT.json`, `deployments/{env}/TricksforBoosterStaking.json` — contract addresses, transaction hashes, block numbers, constructor args | - -Manifests are uploaded with `if: always()` — they are retained even when the job fails, so -partial deployment information is never lost. - -### Verification artifacts - -| Artifact name | Job | Retention | Contents | -|---|---|---|---| -| `verify-transcript-{env}-{tag}` | `verify-contracts` | 30 days | Raw stdout/stderr from both `hardhat verify` runs | -| `verify-manifests-{env}-{tag}` | `verify-contracts` | 90 days | Updated manifests with `verification.status`, `verification.explorerUrl`, `verification.verifiedAt` fields | - -### NuGet package - -| Artifact name | Job | Retention | Contents | -|---|---|---|---| -| `nuget-package-{tag}` | `publish-nuget` | 90 days | `Tricksfor.SmartContracts.{version}.nupkg` + `Tricksfor.SmartContracts.{version}.snupkg` | - -The `.nupkg` and `.snupkg` are always uploaded regardless of whether the nuget.org push succeeded. -This allows manual recovery using `dotnet nuget push` without re-running the full pipeline. - -### Deployment manifest schema - -```json -{ - "contractName": "TricksforBoosterNFT", - "address": "0x...", - "transactionHash": "0x...", - "blockNumber": 12345678, - "deployedAt": "2025-01-01T00:00:00Z", - "constructorArgs": ["arg1", "arg2"], - "verification": { - "explorerName": "Etherscan", - "chainTarget": "ethereum-mainnet", - "explorerUrl": "https://etherscan.io/address/0x...", - "status": "verified", - "verifiedAt": "2025-01-01T00:01:00Z" - } -} -``` - -`verification` is added by the `verify-contracts` job and will be absent from manifests uploaded -by `deploy-contracts` directly. The `verify-manifests-*` artifact contains the updated version. - ---- - -## Related documents - -| Document | Purpose | -|---|---| -| [`docs/github-environments-setup.md`](github-environments-setup.md) | Step-by-step GitHub UI configuration reference | -| [`docs/release-deployment-architecture.md`](release-deployment-architecture.md) | Architecture design reference and decision record | -| [`docs/nuget-packaging.md`](nuget-packaging.md) | NuGet versioning strategy, breaking-change guidance, and publishing flow | -| [`docs/verification-troubleshooting.md`](verification-troubleshooting.md) | Detailed verification failure scenarios and recovery steps | +# Archived Release Operations Guide + +The all-in-one `release-deploy.yml` workflow documented here was removed. Its former procedures are +not valid for the current repository. + +Use these current references instead: + +- [Deployment Operator Runbook](deployment.md) — testnet and mainnet operating procedure +- [GitHub Environments Setup](github-environments-setup.md) — current secrets, variables, and approvals +- [Cloudflare Pages Setup](cloudflare-pages-setup.md) — current Wrangler upload and routing requirement +- [Verification Troubleshooting](verification-troubleshooting.md) — current blocking verification behavior +- [NuGet Packaging](nuget-packaging.md) — independent release-package workflow +- [`deployments/mint-plans/README.md`](../deployments/mint-plans/README.md) — reviewed mint plans + +The following former assumptions are explicitly obsolete: + +- publishing a GitHub Release no longer automatically deploys contracts; +- repository variable `DEPLOY_ENV` no longer selects a deployment; +- `CHAIN_ID`, `NFT_BASE_DOMAIN`, `NUGET_PUBLISH_ENABLED`, `EXPLORER_NAME`, and + `EXPLORER_BASE_URL` are not consumed by current deployment workflows; +- verification is not a separate non-blocking job; +- NuGet publication is independent of contract deployment; +- Cloudflare upload uses Wrangler and selected-chain staging rather than the archived Pages action + and full-tree upload. + +Current contract deployments are manual, one environment at a time, through `Deploy testnet` or +`Deploy mainnet`. Mainnet remains blocked by the readiness issues recorded in the deployment +runbook. diff --git a/docs/security-review-2026-07-19.md b/docs/security-review-2026-07-19.md new file mode 100644 index 0000000..1cbb5ef --- /dev/null +++ b/docs/security-review-2026-07-19.md @@ -0,0 +1,65 @@ +# Automated Security Review — 2026-07-19 + +## Scope + +This review covers `TricksforBoosterNFT.sol` and `TricksforBoosterStaking.sol` at commit parent +`9208089`, plus the Nethereum artifact synchronization and deployment validation relevant to those +contracts. Imported OpenZeppelin dependencies and the deliberately malicious test double are +compiled but excluded from project finding counts. + +## Automated analysis + +- Compiler: solc 0.8.26, optimizer enabled with 200 runs, Cancun EVM target. +- Slither: 0.11.5, 33 compiled contracts, 101 detectors, zero findings. +- Slither uses the exact split Hardhat build information produced by `npm run compile`, adapted to + the read-only combined shape expected by crytic-compile. It does not recompile the contracts. +- Hardhat: 98 passing tests. +- Coverage: NFT 100% lines/statements; staking 98.15% lines and 98.55% statements. +- State-machine test: 100 deterministic mixed operations over 12 tokens and four wallets, checking + custody, staking records, wallet-list uniqueness, pause rejection, transfers, both staking paths, + unstaking, emergency recovery, and repeated staking after every operation. + +## Security properties reviewed + +- `TokenStaked`, `TokenUnstaked`, and `EmergencyWithdrawn` retain their exact event ABI. +- Only `MINTER_ROLE` can mint; only the delayed default admin can change metadata, royalties, + minting pause state, or roles. +- Staking ownership transfer requires explicit acceptance through `Ownable2Step`. +- New staking is pauseable, while users can always unstake during a pause. +- State is recorded before ERC-721 custody transfer and every external custody path is protected by + `nonReentrant`; a malicious configured NFT callback is rejected and rolls state back. +- Emergency withdrawal can return a tracked NFT only to its recorded original staker. +- Untracked rescue is available only when the staking contract owns the NFT and no staking record + exists; it cannot be used against a tracked stake. +- Wallet token arrays use indexed swap-and-pop removal and remain unique under repeated mixed flows. + +## Residual and operational risks + +- The NFT administrator can change metadata and royalties, pause minting, and manage minters. Use a + reviewed multisig and a non-zero admin-transfer delay on mainnet. +- The staking owner can pause new stakes and choose the recipient of an untracked-token rescue. + This is necessary because a direct `transferFrom` does not expose a recoverable original sender. +- The 600-token limit, recipient policy, reward calculation, and game settlement remain off-chain + controls by design. Production minting therefore depends on review of the committed mint plan. +- The contracts are not upgradeable. Fixes require a new deployment and downstream address update. +- Metadata integrity remains operational: mainnet publication is blocked while placeholder artwork + or the collection image is missing, but administrators can later update the configured URIs. +- Automated analysis does not replace a third-party audit, economic review, key-management review, + or public-testnet rehearsal. + +## Reproduction + +```bash +npm ci +npm run compile +npm test +npm run test:coverage +npm run security:prepare +slither . \ + --hardhat-ignore-compile \ + --hardhat-artifacts-directory .slither-artifacts \ + --exclude-dependencies \ + --filter-paths 'contracts/test|node_modules' \ + --fail-medium \ + --json slither-report.json +``` diff --git a/docs/verification-troubleshooting.md b/docs/verification-troubleshooting.md index 575900f..ba53c5c 100644 --- a/docs/verification-troubleshooting.md +++ b/docs/verification-troubleshooting.md @@ -1,225 +1,176 @@ # Contract Verification Troubleshooting -This guide covers failure scenarios for the `verify-contracts` job in the release deployment workflow and explains how to recover without redeploying. +This guide matches the current reusable protected deployment workflow. For end-to-end operating +instructions, see the [Deployment Operator Runbook](deployment.md). -For the full verification design, see [`docs/release-deployment-architecture.md`](release-deployment-architecture.md#7-verification-model). +## 1. How verification currently works ---- +When GitHub Environment variable `VERIFY_ENABLED` is the exact string `true`, the reusable +deployment job: -## How Verification Works +1. reads both addresses and constructor arguments from the environment manifests; +2. uses the same Hardhat production build information that generated the Nethereum bytecode; +3. runs `npx hardhat verify --build-profile production` for the NFT; +4. runs the same command for staking; +5. writes raw output to `nft-verification.txt` and `staking-verification.txt`. -After a successful `deploy-contracts` job, the `verify-contracts` job: +Verification is a step in the deployment job, not a separate `verify-contracts` job. It is currently +blocking: if NFT verification fails, staking verification, smoke, summary, and successful release +attachment do not run. -1. Checks whether `VERIFY_ENABLED=true` is set in the target GitHub Environment. If not, the job exits early (green). -2. Downloads the deployment manifests produced by `deploy-contracts`. -3. Runs `hardhat verify --no-compile --network {NETWORK_KEY}` for both contracts. -4. Writes verification outcome (status, explorer name, explorer URL) back into each manifest. -5. Uploads updated manifests and raw verification transcripts as workflow artifacts. +The final artifact upload uses `if: always()` and should retain `deployments/{environment}/` even +after a verification failure. -Each contract is verified independently — if one fails the other is still attempted. +## 2. First response to a verification failure -The `verify-contracts` job is **non-blocking**: it does not roll back the deployment, and dependent jobs are not blocked by a verification failure. +1. Record the workflow run URL and failed command output. +2. Download `deployment-{environment}-{run-id}`. +3. Confirm both manifests exist and record both contract addresses. +4. Check both transaction receipts on the appropriate explorer/RPC. +5. Confirm runtime bytecode exists at both addresses. +6. Do not use `force`; the contracts do not need replacement merely because verification failed. +7. Correct the verification configuration or wait for the explorer to recover. +8. Rerun the failed deployment job with the same environment and `force=false`. ---- +The deployment runner will reuse manifest addresses only when live bytecode exists. The rerun then +attempts verification again before continuing to smoke and artifact publication. -## Retained Artifacts +## 3. Required configuration -When verification runs (`VERIFY_ENABLED=true`), these verification artifacts are uploaded regardless of whether verification succeeds or fails: +Under **Settings → Environments → {environment}**: -| Artifact name | Contents | Retention | -|---|---|---| -| `verify-transcript-{env}-{tag}` | Raw stdout/stderr from both `hardhat verify` runs | 30 days | -| `verify-manifests-{env}-{tag}` | Deployment manifests updated with `verification.*` fields | 90 days | +| Value | Type | Requirement | +| ------------------ | -------- | ------------------------------------- | +| `EXPLORER_API_KEY` | Secret | Valid Etherscan API V2-compatible key | +| `NETWORK_KEY` | Variable | Exact Hardhat network key | +| `VERIFY_ENABLED` | Variable | Exact lowercase `true` | +| `RPC_URL` | Secret | Endpoint for the same chain | -The original deployment manifests are uploaded by the `deploy-contracts` job unconditionally: +| Environment | `NETWORK_KEY` | +| ------------------- | ------------------ | +| `ethereum-sepolia` | `sepolia` | +| `ethereum-mainnet` | `mainnet` | +| `polygon-amoy` | `polygon_amoy` | +| `polygon-mainnet` | `polygon` | +| `optimism-sepolia` | `optimism_sepolia` | +| `optimism-mainnet` | `optimism` | +| `bsc-testnet` | `bsc_testnet` | +| `bsc-mainnet` | `bsc` | +| `avalanche-fuji` | `avalanche_fuji` | +| `avalanche-mainnet` | `avalanche` | -| Artifact name | Contents | Retention | -|---|---|---| -| `deployment-manifests-{env}-{tag}` | Original manifests from the `deploy-contracts` job | 90 days | +## 4. Common failures ---- +### Invalid or missing API key -## Common Failure Scenarios +Symptoms include `Invalid API Key`, `API key is required`, or authorization errors. -### Verification failed with "Invalid API Key" +1. Confirm `VERIFY_ENABLED=true` in the selected environment. +2. Replace `EXPLORER_API_KEY` with the approved key. +3. Confirm the key supports Etherscan API V2 and the intended chain. +4. Rerun the deployment with `force=false`. -**Symptom:** `hardhat verify` exits with an error like `Invalid API Key` or `API key is required`. +### Unknown network -**Cause:** `EXPLORER_API_KEY` is missing or incorrect in the target GitHub Environment. +The selected `NETWORK_KEY` does not match `hardhat.config.ts`. -**Resolution:** -1. Navigate to **Settings → Environments → {env-name} → Secrets**. -2. Create or update the `EXPLORER_API_KEY` secret with a valid API key for the target explorer. -3. Re-run the `verify-contracts` job: open the failed workflow run → **Re-run failed jobs → verify-contracts**. +1. Compare the value with the table above. +2. Correct the GitHub Environment variable. +3. Rerun with `force=false`. ---- +### Chain or RPC mismatch -### Verification failed with "Contract source code already verified" +If Hardhat connects to the wrong chain or cannot connect: -**Symptom:** `hardhat verify` exits with a message like `Already verified`. +1. Check `RPC_URL` in the selected environment. +2. Query its chain ID without printing the secret URL. +3. Compare it to the checked-in deployment configuration. +4. Correct the secret and rerun with `force=false`. -**Behavior:** This is not a real error. The contract is already verified on the explorer. The workflow step treats it as success (hardhat verify exits 0 for this case). No action needed. +### Constructor argument mismatch ---- +Verification must use the exact constructor arguments recorded in each manifest, in order. Do not +reconstruct or normalize them manually. Confirm that the manifest came from the same source commit +and contract deployment. -### Explorer API temporarily unavailable +### Bytecode/compiler mismatch -**Symptom:** `hardhat verify` times out or returns a 5xx/503 response. +1. Check out the exact `sourceCommit` recorded in the manifest. +2. Use Node.js 22 and `npm ci`. +3. Run `npm run artifacts:check`. +4. Confirm Solidity 0.8.26, optimizer enabled with 200 runs, and Cancun EVM settings. +5. Verify with `--build-profile production`. -**Cause:** The block explorer API is experiencing an outage or elevated latency. +If artifact sync fails at the recorded commit, preserve the evidence and do not guess at compiler +settings. -**Resolution:** -1. Check the explorer's status page: - - Etherscan: https://etherscan.statuspage.io - - PolygonScan: https://polygonscan.statuspage.io - - BscScan: https://bscscan.statuspage.io - - Snowtrace: https://snowtrace.statuspage.io -2. Once the explorer recovers, re-run only the `verify-contracts` job in the failed workflow run. +### Explorer outage or rate limit ---- +Wait for the provider to recover, then rerun with `force=false`. A temporary verification outage is +not a reason to redeploy contracts. -### One contract verified, one did not +### Already verified -**Symptom:** One verify step shows green, the other shows red in the workflow UI. +Confirm the explorer shows the expected contract at the manifest address with matching constructor +arguments. Treat an already-verified response as success only after that comparison. -**Behavior:** Both contracts are verified independently (`continue-on-error: true` on each step). A partial success is recorded in the manifests — the verified contract gets `"status": "verified"`, the failed one gets `"status": "failed"`. +### NFT verification succeeds and staking verification fails -**Resolution:** -- Fix the root cause for the failed contract (API key, explorer outage, etc.). -- Re-run the `verify-contracts` job. Both contracts will be re-attempted; already-verified contracts will receive the "Already verified" response and be treated as success. +Because the commands run sequentially, this state is possible. Correct the staking failure and +rerun with `force=false`; NFT verification should be idempotent. ---- +## 5. Manual verification -### VERIFY_ENABLED is not set - -**Symptom:** The `verify-contracts` job exits early with the message "Verification is disabled…" and shows yellow/skipped steps. - -**Cause:** The `VERIFY_ENABLED` environment variable is either unset or not set to `true` in the target GitHub Environment. - -**Resolution:** -1. Navigate to **Settings → Environments → {env-name} → Variables**. -2. Add `VERIFY_ENABLED` with value `true`. -3. Re-trigger verification by re-running the `verify-contracts` job. - ---- - -### NETWORK_KEY is missing or wrong - -**Symptom:** `hardhat verify` fails with an error like `Unknown network` or a connection error to localhost. - -**Cause:** The `NETWORK_KEY` variable is not set, or its value doesn't match a configured Hardhat network name. - -**Resolution:** -1. Check the correct `NETWORK_KEY` for the target environment in the table below. -2. Navigate to **Settings → Environments → {env-name} → Variables**. -3. Set `NETWORK_KEY` to the correct value. -4. Re-run the `verify-contracts` job. - -See [`docs/github-environments-setup.md`](github-environments-setup.md#network_key-values-per-environment) for the full variable table including `EXPLORER_NAME` and `EXPLORER_BASE_URL` values. - -| Environment name | `NETWORK_KEY` value | -|---------------------|---------------------| -| `ethereum-sepolia` | `sepolia` | -| `ethereum-mainnet` | `mainnet` | -| `polygon-amoy` | `polygon_amoy` | -| `polygon-mainnet` | `polygon` | -| `optimism-sepolia` | `optimism_sepolia` | -| `optimism-mainnet` | `optimism` | -| `bsc-testnet` | `bsc_testnet` | -| `bsc-mainnet` | `bsc` | -| `avalanche-fuji` | `avalanche_fuji` | -| `avalanche-mainnet` | `avalanche` | - ---- - -### Manifest not updated with verification status - -**Symptom:** The downloaded `verify-manifests-*` artifact does not contain a `verification` key. - -**Cause:** The "Write verification status to manifests" step failed or was skipped (e.g. the manifest file was not found in the expected location). - -**Behavior:** This does not affect whether the contract is actually verified on-chain. The `verify-transcript-*` artifact still contains the raw verification output and is the authoritative log. - -**Resolution:** -- Check the transcript artifact for the actual `hardhat verify` output. -- If the contract is verified, the absence of the `verification` field in the manifest is cosmetic only. - ---- - -## Manual Verification - -If automated verification cannot be retried (e.g. the workflow run has expired), you can verify manually: +Use manual verification only from the exact source revision recorded in the deployment manifest. +This does not update GitHub workflow artifacts automatically. ```bash -# Install dependencies npm ci +npm run compile -# Set secrets -export RPC_URL="" -export ETHERSCAN_API_KEY="" +export RPC_URL='' +export ETHERSCAN_API_KEY='' +export NETWORK_KEY='' +export DEPLOY_ENV='' -# Verify (replace values with those from the deployment manifest) -./node_modules/.bin/hardhat verify --no-compile \ - --network \ - \ - [CONSTRUCTOR_ARG_1] [CONSTRUCTOR_ARG_2] ... -``` +nft_manifest="deployments/$DEPLOY_ENV/TricksforBoosterNFT.json" +staking_manifest="deployments/$DEPLOY_ENV/TricksforBoosterStaking.json" -Constructor arguments are stored in the deployment manifest at `deployments/{env}/{ContractName}.json` under the `constructorArgs` array. +nft_address="$(jq -r .address "$nft_manifest")" +staking_address="$(jq -r .address "$staking_manifest")" +mapfile -t nft_args < <(jq -r '.constructorArgs[]' "$nft_manifest") +mapfile -t staking_args < <(jq -r '.constructorArgs[]' "$staking_manifest") ---- +npx hardhat verify --build-profile production \ + --network "$NETWORK_KEY" "$nft_address" "${nft_args[@]}" -## Deployment Manifest Verification Section +npx hardhat verify --build-profile production \ + --network "$NETWORK_KEY" "$staking_address" "${staking_args[@]}" +``` -After verification runs, each contract's manifest is updated with a `verification` object. The field values come from GitHub Environment variables set per deployment target: +After manual verification: -- `chainTarget` is the GitHub Environment name (`DEPLOY_ENV`), e.g. `polygon-mainnet`, uniquely identifying the deployment target. -- `explorerName` and `explorerUrl` are populated from the optional `EXPLORER_NAME` and `EXPLORER_BASE_URL` environment variables. They are empty strings if those variables are not configured. +1. save both command transcripts; +2. record the explorer contract URLs; +3. associate the transcripts with the deployment manifest and source commit; +4. attach them to the GitHub Release for mainnet; +5. rerun the protected workflow with `force=false` if smoke and workflow records still need to finish. -**Example — `polygon-mainnet` environment:** +## 6. Disabling verification -```json -{ - "contractName": "TricksforBoosterNFT", - "address": "0x...", - "transactionHash": "0x...", - "blockNumber": 12345678, - "deployedAt": "2025-01-01T00:00:00Z", - "constructorArgs": [], - "verification": { - "explorerName": "PolygonScan", - "chainTarget": "polygon-mainnet", - "explorerUrl": "https://polygonscan.com/address/0x...", - "status": "verified", - "verifiedAt": "2025-01-01T00:01:00Z" - } -} -``` +Setting `VERIFY_ENABLED` to anything other than exact lowercase `true` skips verification. This may +be acceptable for an isolated test, but it should be an explicit reviewed decision. Mainnet should +not be considered complete until both contracts are verified from synchronized production build +information. -**Example — `ethereum-mainnet` environment:** - -```json -{ - "contractName": "TricksforBoosterNFT", - "address": "0x...", - "transactionHash": "0x...", - "blockNumber": 12345678, - "deployedAt": "2025-01-01T00:00:00Z", - "constructorArgs": [], - "verification": { - "explorerName": "Etherscan", - "chainTarget": "ethereum-mainnet", - "explorerUrl": "https://etherscan.io/address/0x...", - "status": "verified", - "verifiedAt": "2025-01-01T00:01:00Z" - } -} -``` +## 7. Preserved evidence -Possible `status` values: +Keep these together: -| Value | Meaning | -|---|---| -| `verified` | `hardhat verify` exited 0 (verified or already verified) | -| `failed` | `hardhat verify` exited non-zero | -| `unknown` | Step outcome could not be determined | +- both deployment manifests; +- `nft-verification.txt`; +- `staking-verification.txt`; +- workflow run URL and source commit; +- explorer URLs; +- manual transcripts, if used; +- `smoke-result.json`, once the post-verification smoke completes. diff --git a/hardhat.config.ts b/hardhat.config.ts index 5da25dd..a5d1ac0 100644 --- a/hardhat.config.ts +++ b/hardhat.config.ts @@ -1,172 +1,57 @@ -import { HardhatUserConfig, subtask } from "hardhat/config"; -import "@nomicfoundation/hardhat-toolbox"; -import path from "path"; +import { configVariable, defineConfig } from "hardhat/config"; +import hardhatToolboxMochaEthers from "@nomicfoundation/hardhat-toolbox-mocha-ethers"; -// Override the solc build task to use the locally bundled solc compiler, -// avoiding network downloads in environments with restricted internet access. -subtask("compile:solidity:solc:get-build").setAction( - async ({ solcVersion }: { quiet: boolean; solcVersion: string }) => { - const solcPath = path.resolve( - __dirname, - "node_modules", - "solc", - "soljson.js" - ); - return { - compilerPath: solcPath, - isSolcJs: true, - version: solcVersion, - longVersion: solcVersion, - }; - } -); +const compiler = { + version: "0.8.26", + settings: { + optimizer: { enabled: true, runs: 200 }, + evmVersion: "cancun", + }, +}; -// RPC URLs for each network are injected at runtime via environment variables -// so that secrets are never committed. The verify workflow uses --no-compile -// and passes the network key from the GitHub Environment variable NETWORK_KEY. -// Returns an empty string when the variable is not set so that hardhat fails -// immediately with a connection error rather than silently falling back to -// localhost and misconfiguring non-local deployments or verifications. -const rpcUrl = (envVar: string): string => - process.env[envVar]?.trim() ?? ""; +const httpNetwork = (chainId: number, chainType: "l1" | "op" = "l1") => ({ + type: "http" as const, + chainType, + url: configVariable("RPC_URL"), + chainId, +}); -const config: HardhatUserConfig = { +export default defineConfig({ + plugins: [hardhatToolboxMochaEthers], solidity: { - version: "0.8.26", - settings: { - optimizer: { - enabled: true, - runs: 200, - }, - evmVersion: "cancun", + profiles: { + default: compiler, + production: compiler, }, }, paths: { sources: "./contracts", - tests: "./test", cache: "./cache", artifacts: "./artifacts", }, - networks: { - // Ethereum - sepolia: { - url: rpcUrl("RPC_URL"), - chainId: 11155111, - }, - mainnet: { - url: rpcUrl("RPC_URL"), - chainId: 1, - }, - // Polygon - polygon_amoy: { - url: rpcUrl("RPC_URL"), - chainId: 80002, - }, - polygon: { - url: rpcUrl("RPC_URL"), - chainId: 137, - }, - // Optimism - optimism_sepolia: { - url: rpcUrl("RPC_URL"), - chainId: 11155420, - }, - optimism: { - url: rpcUrl("RPC_URL"), - chainId: 10, - }, - // BNB Smart Chain - bsc_testnet: { - url: rpcUrl("RPC_URL"), - chainId: 97, - }, - bsc: { - url: rpcUrl("RPC_URL"), - chainId: 56, - }, - // Avalanche - avalanche_fuji: { - url: rpcUrl("RPC_URL"), - chainId: 43113, - }, - avalanche: { - url: rpcUrl("RPC_URL"), - chainId: 43114, + test: { + mocha: { + timeout: 40_000, }, }, - etherscan: { - // ETHERSCAN_API_KEY is set in the verify-contracts job from EXPLORER_API_KEY secret. - // Many explorers use the same Etherscan-compatible API; the apiKey field here can be - // overridden per-network via environment variable if required. - apiKey: { - mainnet: process.env.ETHERSCAN_API_KEY ?? "", - sepolia: process.env.ETHERSCAN_API_KEY ?? "", - polygon: process.env.ETHERSCAN_API_KEY ?? "", - polygon_amoy: process.env.ETHERSCAN_API_KEY ?? "", - // Optimism mainnet: hardhat-verify's built-in name is "optimisticEthereum" (chainId 10). - // Include both to cover built-in lookup and custom network name lookup. - optimism: process.env.ETHERSCAN_API_KEY ?? "", - optimisticEthereum: process.env.ETHERSCAN_API_KEY ?? "", - optimism_sepolia: process.env.ETHERSCAN_API_KEY ?? "", - bsc: process.env.ETHERSCAN_API_KEY ?? "", - bsc_testnet: process.env.ETHERSCAN_API_KEY ?? "", - avalanche: process.env.ETHERSCAN_API_KEY ?? "", - avalanche_fuji: process.env.ETHERSCAN_API_KEY ?? "", + typechain: { + outDir: "typechain-types", + }, + networks: { + sepolia: httpNetwork(11155111), + mainnet: httpNetwork(1), + polygon_amoy: httpNetwork(80002), + polygon: httpNetwork(137), + optimism_sepolia: httpNetwork(11155420, "op"), + optimism: httpNetwork(10, "op"), + bsc_testnet: httpNetwork(97), + bsc: httpNetwork(56), + avalanche_fuji: httpNetwork(43113), + avalanche: httpNetwork(43114), + }, + verify: { + etherscan: { + apiKey: configVariable("ETHERSCAN_API_KEY"), }, - customChains: [ - { - network: "polygon_amoy", - chainId: 80002, - urls: { - apiURL: "https://api-amoy.polygonscan.com/api", - browserURL: "https://amoy.polygonscan.com", - }, - }, - // Optimism mainnet: the hardhat-verify built-in entry uses "optimisticEthereum" - // (not "optimism"). Adding an explicit customChains entry ensures the plugin - // resolves the explorer URL correctly when --network optimism is used. - { - network: "optimism", - chainId: 10, - urls: { - apiURL: "https://api-optimistic.etherscan.io/api", - browserURL: "https://optimistic.etherscan.io", - }, - }, - { - network: "optimism_sepolia", - chainId: 11155420, - urls: { - apiURL: "https://api-sepolia-optimism.etherscan.io/api", - browserURL: "https://sepolia-optimism.etherscan.io", - }, - }, - { - network: "bsc_testnet", - chainId: 97, - urls: { - apiURL: "https://api-testnet.bscscan.com/api", - browserURL: "https://testnet.bscscan.com", - }, - }, - { - network: "avalanche_fuji", - chainId: 43113, - urls: { - apiURL: "https://api-testnet.snowtrace.io/api", - browserURL: "https://testnet.snowtrace.io", - }, - }, - { - network: "avalanche", - chainId: 43114, - urls: { - apiURL: "https://api.snowtrace.io/api", - browserURL: "https://snowtrace.io", - }, - }, - ], }, -}; - -export default config; +}); diff --git a/nft-assets/README.md b/nft-assets/README.md index 551d697..bc4629f 100644 --- a/nft-assets/README.md +++ b/nft-assets/README.md @@ -93,19 +93,20 @@ Each chain deployment consumes its own chain-specific base URLs: | BSC | `https://nft.tricksfor.com/bsc/metadata/` | `https://nft.tricksfor.com/bsc/contract/collection.json` | | Avalanche | `https://nft.tricksfor.com/avalanche/metadata/` | `https://nft.tricksfor.com/avalanche/contract/collection.json`| -Contract deployments must pass these chain-specific values as `Deployment__Nft__BaseUri` and -`Deployment__Nft__ContractMetadataUri`. The configured URLs must include the `/{chainKey}/` -path segment shown above so they match the generated Cloudflare Pages asset layout. +Contract deployments read these chain-specific values from +`deployments/config/{env}/deployment-params.json`. The configured URLs must include the +`/{chainKey}/` path segment shown above so they match the generated Pages asset layout. -The `deploy-metadata` job in `release-deploy.yml` reads the `chainKey` from -`deployments/config/{env}/nft-manifest.json` and constructs the chain-specific URLs -automatically, then passes them as output variables to the `deploy-contracts` job. +The current protected workflow reads `chainKey` from `nft-manifest.json`, stages and uploads only +that chain, and then uses the already checked-in contract URLs. It does not construct URLs from the +Cloudflare response. Confirm that Pages branch/custom-domain routing serves the uploaded content at +the configured URLs before deployment. --- -## Generating Static Assets (release pipeline) +## Generating Static Assets (protected deployment pipeline) -`scripts/generate-nft-assets.js` is used by the release pipeline to generate token metadata, +`scripts/generate-nft-assets.js` is used by the protected deployment workflow to generate token metadata, collection metadata, and token images from an authoritative deployment manifest: ```bash @@ -217,8 +218,10 @@ all valid values, and examples covering every game theme and booster tier. } ``` -The `fee_recipient` field uses `0x000000000000000000000000000000000000dEaD` as a placeholder. -**Before publishing to mainnet, replace it with the actual royalty recipient address.** +The `fee_recipient` field currently uses `0x000000000000000000000000000000000000dEaD` +as a placeholder. Mainnet is blocked until the authoritative generator/configuration accepts the +approved royalty receiver and the contract uses that same address. Do not patch generated files +manually. See [`docs/metadata/contract-example.json`](../docs/metadata/contract-example.json) for the field reference. @@ -241,4 +244,3 @@ Chain-specific subdirectories are served at their respective paths under the sha All chains share a single Cloudflare Pages project per environment tier. Chain separation is achieved through the per-chain subdirectory structure (`/ethereum/`, `/polygon/`, etc.) within that single project. - diff --git a/package-lock.json b/package-lock.json index 5bd125e..34f007e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,289 +11,469 @@ "generate-assets": "scripts/generate-nft-metadata.js" }, "devDependencies": { - "@nomicfoundation/hardhat-toolbox": "^5.0.0", - "@openzeppelin/contracts": "^5.3.0", - "hardhat": "^2.22.19" + "@nomicfoundation/hardhat-toolbox-mocha-ethers": "3.0.7", + "@openzeppelin/contracts": "5.6.1", + "hardhat": "3.10.0", + "solc": "0.8.26" + }, + "engines": { + "node": ">=22 <25" } }, "node_modules/@adraffy/ens-normalize": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz", - "integrity": "sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.11.1.tgz", + "integrity": "sha512-nhCBV3quEgesuf7c7KYfperqSS14T8bYuvJ8PcLJp6znkZpFc0AuW4qBtr8eKVyPPe/8RSr7sglCWPU5eaxwKQ==", "dev": true, "license": "MIT", "peer": true }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "node_modules/@esbuild/aix-ppc64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.1.tgz", + "integrity": "sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ==", + "cpu": [ + "ppc64" + ], "dev": true, "license": "MIT", - "peer": true, - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, + "optional": true, + "os": [ + "aix" + ], "engines": { - "node": ">=12" + "node": ">=18" } }, - "node_modules/@ethereumjs/rlp": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-5.0.2.tgz", - "integrity": "sha512-DziebCdg4JpGlEqEdGgXmjqcFoJi+JGulUXwEjsZGAscAQ7MyD/7LE/GVCP29vEQxKc7AAwjT3A2ywHp2xfoCA==", + "node_modules/@esbuild/android-arm": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.1.tgz", + "integrity": "sha512-0k2F129Xdio1TdJfzJ8sy1Q47vUD2NnwdhiAf7drUN1EBTfPf4hsFCtmMgu/6m8JSzsBrlmVjudMBQqOfG8usQ==", + "cpu": [ + "arm" + ], "dev": true, - "license": "MPL-2.0", - "bin": { - "rlp": "bin/rlp.cjs" - }, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], "engines": { "node": ">=18" } }, - "node_modules/@ethereumjs/util": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/@ethereumjs/util/-/util-9.1.0.tgz", - "integrity": "sha512-XBEKsYqLGXLah9PNJbgdkigthkG7TAGvlD/sH12beMXEyHDyigfcbdvHhmLyDWgDyOJn4QwiQUaF7yeuhnjdog==", + "node_modules/@esbuild/android-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.1.tgz", + "integrity": "sha512-34EGEbCIAgosYz6goLcopX6Mo7NyGv9tfwEM2/7Ce2VcVRk568iSvniGWcUXIy7wEDR1wzolcxcriFVrWYcwBg==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "MPL-2.0", - "dependencies": { - "@ethereumjs/rlp": "^5.0.2", - "ethereum-cryptography": "^2.2.1" - }, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], "engines": { "node": ">=18" } }, - "node_modules/@ethereumjs/util/node_modules/@noble/curves": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", - "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", + "node_modules/@esbuild/android-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.1.tgz", + "integrity": "sha512-dbwY7ltSMDWsRatcRpCnES4F+im88OCUgGZjy52shC7GqHRE/cYlxNbB4Z4UpJswpcc4Qxd2oE/ufM0p61IKng==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@noble/hashes": "1.4.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" } }, - "node_modules/@ethereumjs/util/node_modules/@noble/hashes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", - "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "node_modules/@esbuild/darwin-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.1.tgz", + "integrity": "sha512-TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" + "node": ">=18" } }, - "node_modules/@ethereumjs/util/node_modules/ethereum-cryptography": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz", - "integrity": "sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==", + "node_modules/@esbuild/darwin-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.1.tgz", + "integrity": "sha512-zfdzgK9ACBNZLI/CyHTOx81SyNbM6YXn7rxSgX97VjyiPl9W1i4Ka4fgKECEoFCKGpvBj5qArWIGgQjOwkgskQ==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@noble/curves": "1.4.2", - "@noble/hashes": "1.4.0", - "@scure/bip32": "1.4.0", - "@scure/bip39": "1.3.0" + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" } }, - "node_modules/@ethersproject/abi": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.8.0.tgz", - "integrity": "sha512-b9YS/43ObplgyV6SlyQsG53/vkSal0MNA1fskSC4mbnCMi8R+NkcH8K9FPYNESf6jUefBUniE4SOKms0E/KK1Q==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.1.tgz", + "integrity": "sha512-wG2EA8ENdEI0qhkSZMjfqrdY+ziCYCPMmtZjjIwOmXFjmyzEHn+UUxk5of+SYsjtfs3VpnlC7QLzSI5hY/rOAw==", + "cpu": [ + "arm64" ], + "dev": true, "license": "MIT", - "dependencies": { - "@ethersproject/address": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/constants": "^5.8.0", - "@ethersproject/hash": "^5.8.0", - "@ethersproject/keccak256": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/strings": "^5.8.0" + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" } }, - "node_modules/@ethersproject/abstract-provider": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.8.0.tgz", - "integrity": "sha512-wC9SFcmh4UK0oKuLJQItoQdzS/qZ51EJegK6EmAWlh+OptpQ/npECOR3QqECd8iGHC0RJb4WKbVdSfif4ammrg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } + "node_modules/@esbuild/freebsd-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.1.tgz", + "integrity": "sha512-i7dZ9vQgnvSCzi/rYCXNgtF/U+eKZNJBzu3eTQbRgHnM7tNSizLOkRFAl3qzVc/Op/u5YkHHa4pf/3DOYHthLQ==", + "cpu": [ + "x64" ], + "dev": true, "license": "MIT", - "dependencies": { - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/networks": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/transactions": "^5.8.0", - "@ethersproject/web": "^5.8.0" + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" } }, - "node_modules/@ethersproject/abstract-signer": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.8.0.tgz", - "integrity": "sha512-N0XhZTswXcmIZQdYtUnd79VJzvEwXQw6PK0dTl9VoYrEBxxCPXqS0Eod7q5TNKRxe1/5WUMuR0u0nqTF/avdCA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } + "node_modules/@esbuild/linux-arm": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.1.tgz", + "integrity": "sha512-qVXBOHQS+d5Y722GwJzJUtOLlX7km3CraOaGormF1pDtPd2C/l1SHRPgjLunLGe51Sh5YYWKMFDyV4SxgMQYTQ==", + "cpu": [ + "arm" ], + "dev": true, "license": "MIT", - "dependencies": { - "@ethersproject/abstract-provider": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" } }, - "node_modules/@ethersproject/address": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.8.0.tgz", - "integrity": "sha512-GhH/abcC46LJwshoN+uBNoKVFPxUuZm6dA257z0vZkKmU1+t8xTn8oK7B9qrj8W2rFRMch4gbJl6PmVxjxBEBA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } + "node_modules/@esbuild/linux-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.1.tgz", + "integrity": "sha512-yHs+0uc8+nvEAfAfxrWQKK5peSNzBc4PegcMO0EJ2hT71uA7vB8Ihg2e77R2P7SG5uYjPbHlLLmve4LLLRCf0g==", + "cpu": [ + "arm64" ], + "dev": true, "license": "MIT", - "dependencies": { - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/keccak256": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/rlp": "^5.8.0" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" } }, - "node_modules/@ethersproject/base64": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.8.0.tgz", - "integrity": "sha512-lN0oIwfkYj9LbPx4xEkie6rAMJtySbpOAFXSDVQaBnAzYfB4X2Qr+FXJGxMoc3Bxp2Sm8OwvzMrywxyw0gLjIQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } + "node_modules/@esbuild/linux-ia32": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.1.tgz", + "integrity": "sha512-d1z4ZuP0ajrfz/FhGT4vv278rX8KnPPJx8i5+AtK7TYbx9Le9F1hyzurZpkEyjkGa9dUGhQow4C1NmeGvqxN2w==", + "cpu": [ + "ia32" ], + "dev": true, "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.8.0" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" } }, - "node_modules/@ethersproject/basex": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.8.0.tgz", - "integrity": "sha512-PIgTszMlDRmNwW9nhS6iqtVfdTAKosA7llYXNmGPw4YAI1PUyMv28988wAb41/gHF/WqGdoLv0erHaRcHRKW2Q==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } + "node_modules/@esbuild/linux-loong64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.1.tgz", + "integrity": "sha512-M5sRjUVZrkm1OAPR3dlOYzNmN+loZKGVi1VUQGrwuqLcbR6qeAz+famMhjASeH3YVKvZz+zT1jlh/keC3Rj/lg==", + "cpu": [ + "loong64" ], + "dev": true, "license": "MIT", - "peer": true, - "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/properties": "^5.8.0" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" } }, - "node_modules/@ethersproject/bignumber": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.8.0.tgz", - "integrity": "sha512-ZyaT24bHaSeJon2tGPKIiHszWjD/54Sz8t57Toch475lCLljC6MgPmxk7Gtzz+ddNN5LuHea9qhAe0x3D+uYPA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } + "node_modules/@esbuild/linux-mips64el": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.1.tgz", + "integrity": "sha512-mRObBZeHh2OxcBFPWE/FjylkRgZdYuiTR3vaTozquCGOH14iP9oN4x4Ge81CoIDYQrXmIxpFumJBu5MtZpnQJQ==", + "cpu": [ + "mips64el" ], + "dev": true, "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "bn.js": "^5.2.1" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" } }, - "node_modules/@ethersproject/bytes": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.8.0.tgz", - "integrity": "sha512-vTkeohgJVCPVHu5c25XWaWQOZ4v+DkGoC42/TS2ond+PARCxTJvgTFUNDZovyQ/uAQ4EcpqqowKydcdmRKjg7A==", + "node_modules/@esbuild/linux-ppc64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.1.tgz", + "integrity": "sha512-slScBsMAb3GFDcdrCgLwZtPYRoH2H/youv10QiZyRjmsP48fznoveWytSgCI/R0ZcUgpc0ZhIUEx6LHts8yrfQ==", + "cpu": [ + "ppc64" + ], "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.1.tgz", + "integrity": "sha512-kw0owk1o0GFETUJyW0jc0G4Yzs0BHZn0JDZ8JRT088vjJYX777BAs1fDGxAC+q831qOs2DTC96mNsG2opdfyyQ==", + "cpu": [ + "riscv64" ], + "dev": true, "license": "MIT", - "dependencies": { - "@ethersproject/logger": "^5.8.0" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" } }, - "node_modules/@ethersproject/constants": { + "node_modules/@esbuild/linux-s390x": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.1.tgz", + "integrity": "sha512-/lAIjX8aYFRByhh6L5rYtPEDRqa9de/4V/juOXcta5frjvzXO4/sqEtyytse0g3zZFuWu5cDN0MkLz2qRDD2Ag==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.1.tgz", + "integrity": "sha512-u/anNYF2mmVOEDwLtnQ1wOr3EZ9sTNGLWrsYGYwHWzGA3Si84IOkHXlbWTD1NB+9/1lcnweYKO54uhxZydNzfA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.1.tgz", + "integrity": "sha512-oks0DYbLwWMmaakTsCb+zL4E+aHRVLom9IJZOAthMQEPiQmydXHkziYEsGYRx0uNV/IjEKGAV941JzH02pflqw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.1.tgz", + "integrity": "sha512-aeL6lAnN89Hz43Mlh1G8ARasbuoYvSITDEx0tHh5b7jJnHcssqgjy9Yx430GDpmCa6OyrKoS0aNRjKundRizGg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.1.tgz", + "integrity": "sha512-MEFJe5C3R8pwXdZ5Y21oo6m7ePiS0d9pWucn99O/wvyJZChoIQKrQDxKrGeW8F5+T0okTHesAmDeiHDTIq0V/Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.1.tgz", + "integrity": "sha512-i/ZLIOafE0Z8cI/XANJAixoJL/uRAoS2xOA3rb0xN+KK0K177cMAsQYkzHtBrtMXAKuAc7HGgcWiZ/sRC1Nxgw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.1.tgz", + "integrity": "sha512-ge+Z7EXFNt2BO1oAMsVpiQ8EwndV9i1xXerAeTIK7AtPs3bKFXQM7nlRxDSIUIMeueR1CNXxqztLzdNeReKBJg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.1.tgz", + "integrity": "sha512-BEjgtECkL3vY+SaSQ6nzVfiALUeFxpawyp8Jmf5PtYhf1Ug40N1h/hxlhts+f1FvSvarEigdxS3BlSMI2PJLcQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.1.tgz", + "integrity": "sha512-lCv9eK/H6ZJWbE7bh2nw54CZ9M2nupBxJcTsdk/QQnWkdSjKGuxmmH8/GWrlT1eMmZfn4dGcCjRte397WqfQXA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.1.tgz", + "integrity": "sha512-zvb/mB2bSCoJOpoCBgYKKpX6YM6mJBlBUVUtVj41DlZJVEB6/0CKlRYxP5wWl1C1ILiCoAU5wZZ4q1P3qeS6Eg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.1.tgz", + "integrity": "sha512-bm4Mowrv+GXMlpWX++EcXw/iLyd1o3+bJkC2DkWXYVvgZCqD/bSj9ctZeAMC3cIxgjRVR2Dufaiu4YPxr5gW1A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@ethersproject/abi": { "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.8.0.tgz", - "integrity": "sha512-wigX4lrf5Vu+axVTIvNsuL6YrV4O5AXl5ubcURKMEME5TnWBouUh0CDTWxZ2GpnRn1kcCgE7l8O5+VbV9QTTcg==", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.8.0.tgz", + "integrity": "sha512-b9YS/43ObplgyV6SlyQsG53/vkSal0MNA1fskSC4mbnCMi8R+NkcH8K9FPYNESf6jUefBUniE4SOKms0E/KK1Q==", "dev": true, "funding": [ { @@ -306,14 +486,23 @@ } ], "license": "MIT", + "peer": true, "dependencies": { - "@ethersproject/bignumber": "^5.8.0" + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/hash": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" } }, - "node_modules/@ethersproject/contracts": { + "node_modules/@ethersproject/abstract-provider": { "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.8.0.tgz", - "integrity": "sha512-0eFjGz9GtuAi6MZwhb4uvUM216F38xiuR0yYCjKJpNfSEy4HUM8hvqqBj9Jmm0IUz8l0xKEhWwLIhPgxNY0yvQ==", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.8.0.tgz", + "integrity": "sha512-wC9SFcmh4UK0oKuLJQItoQdzS/qZ51EJegK6EmAWlh+OptpQ/npECOR3QqECd8iGHC0RJb4WKbVdSfif4ammrg==", "dev": true, "funding": [ { @@ -328,22 +517,19 @@ "license": "MIT", "peer": true, "dependencies": { - "@ethersproject/abi": "^5.8.0", - "@ethersproject/abstract-provider": "^5.8.0", - "@ethersproject/abstract-signer": "^5.8.0", - "@ethersproject/address": "^5.8.0", "@ethersproject/bignumber": "^5.8.0", "@ethersproject/bytes": "^5.8.0", - "@ethersproject/constants": "^5.8.0", "@ethersproject/logger": "^5.8.0", + "@ethersproject/networks": "^5.8.0", "@ethersproject/properties": "^5.8.0", - "@ethersproject/transactions": "^5.8.0" + "@ethersproject/transactions": "^5.8.0", + "@ethersproject/web": "^5.8.0" } }, - "node_modules/@ethersproject/hash": { + "node_modules/@ethersproject/abstract-signer": { "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.8.0.tgz", - "integrity": "sha512-ac/lBcTbEWW/VGJij0CNSw/wPcw9bSRgCB0AIBz8CvED/jfvDoV9hsIIiWfvWmFEi8RcXtlNwp2jv6ozWOsooA==", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.8.0.tgz", + "integrity": "sha512-N0XhZTswXcmIZQdYtUnd79VJzvEwXQw6PK0dTl9VoYrEBxxCPXqS0Eod7q5TNKRxe1/5WUMuR0u0nqTF/avdCA==", "dev": true, "funding": [ { @@ -356,22 +542,19 @@ } ], "license": "MIT", + "peer": true, "dependencies": { - "@ethersproject/abstract-signer": "^5.8.0", - "@ethersproject/address": "^5.8.0", - "@ethersproject/base64": "^5.8.0", + "@ethersproject/abstract-provider": "^5.8.0", "@ethersproject/bignumber": "^5.8.0", "@ethersproject/bytes": "^5.8.0", - "@ethersproject/keccak256": "^5.8.0", "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/strings": "^5.8.0" + "@ethersproject/properties": "^5.8.0" } }, - "node_modules/@ethersproject/hdnode": { + "node_modules/@ethersproject/address": { "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.8.0.tgz", - "integrity": "sha512-4bK1VF6E83/3/Im0ERnnUeWOY3P1BZml4ZD3wcH8Ys0/d1h1xaFt6Zc+Dh9zXf9TapGro0T4wvO71UTCp3/uoA==", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.8.0.tgz", + "integrity": "sha512-GhH/abcC46LJwshoN+uBNoKVFPxUuZm6dA257z0vZkKmU1+t8xTn8oK7B9qrj8W2rFRMch4gbJl6PmVxjxBEBA==", "dev": true, "funding": [ { @@ -386,24 +569,17 @@ "license": "MIT", "peer": true, "dependencies": { - "@ethersproject/abstract-signer": "^5.8.0", - "@ethersproject/basex": "^5.8.0", "@ethersproject/bignumber": "^5.8.0", "@ethersproject/bytes": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", "@ethersproject/logger": "^5.8.0", - "@ethersproject/pbkdf2": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/sha2": "^5.8.0", - "@ethersproject/signing-key": "^5.8.0", - "@ethersproject/strings": "^5.8.0", - "@ethersproject/transactions": "^5.8.0", - "@ethersproject/wordlists": "^5.8.0" + "@ethersproject/rlp": "^5.8.0" } }, - "node_modules/@ethersproject/json-wallets": { + "node_modules/@ethersproject/base64": { "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.8.0.tgz", - "integrity": "sha512-HxblNck8FVUtNxS3VTEYJAcwiKYsBIF77W15HufqlBF9gGfhmYOJtYZp8fSDZtn9y5EaXTE87zDwzxRoTFk11w==", + "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.8.0.tgz", + "integrity": "sha512-lN0oIwfkYj9LbPx4xEkie6rAMJtySbpOAFXSDVQaBnAzYfB4X2Qr+FXJGxMoc3Bxp2Sm8OwvzMrywxyw0gLjIQ==", "dev": true, "funding": [ { @@ -418,33 +594,13 @@ "license": "MIT", "peer": true, "dependencies": { - "@ethersproject/abstract-signer": "^5.8.0", - "@ethersproject/address": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/hdnode": "^5.8.0", - "@ethersproject/keccak256": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/pbkdf2": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/random": "^5.8.0", - "@ethersproject/strings": "^5.8.0", - "@ethersproject/transactions": "^5.8.0", - "aes-js": "3.0.0", - "scrypt-js": "3.0.1" + "@ethersproject/bytes": "^5.8.0" } }, - "node_modules/@ethersproject/json-wallets/node_modules/aes-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", - "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/@ethersproject/keccak256": { + "node_modules/@ethersproject/bignumber": { "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.8.0.tgz", - "integrity": "sha512-A1pkKLZSz8pDaQ1ftutZoaN46I6+jvuqugx5KYNeQOPqq+JZ0Txm7dlWesCHB5cndJSu5vP2VKptKf7cksERng==", + "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.8.0.tgz", + "integrity": "sha512-ZyaT24bHaSeJon2tGPKIiHszWjD/54Sz8t57Toch475lCLljC6MgPmxk7Gtzz+ddNN5LuHea9qhAe0x3D+uYPA==", "dev": true, "funding": [ { @@ -457,15 +613,17 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "@ethersproject/bytes": "^5.8.0", - "js-sha3": "0.8.0" + "@ethersproject/logger": "^5.8.0", + "bn.js": "^5.2.1" } }, - "node_modules/@ethersproject/logger": { + "node_modules/@ethersproject/bytes": { "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.8.0.tgz", - "integrity": "sha512-Qe6knGmY+zPPWTC+wQrpitodgBfH7XoceCGL5bJVejmH+yCS3R8jJm8iiWuvWbG76RUmyEG53oqv6GMVWqunjA==", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.8.0.tgz", + "integrity": "sha512-vTkeohgJVCPVHu5c25XWaWQOZ4v+DkGoC42/TS2ond+PARCxTJvgTFUNDZovyQ/uAQ4EcpqqowKydcdmRKjg7A==", "dev": true, "funding": [ { @@ -477,12 +635,16 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT" + "license": "MIT", + "peer": true, + "dependencies": { + "@ethersproject/logger": "^5.8.0" + } }, - "node_modules/@ethersproject/networks": { + "node_modules/@ethersproject/constants": { "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.8.0.tgz", - "integrity": "sha512-egPJh3aPVAzbHwq8DD7Po53J4OUSsA1MjQp8Vf/OZPav5rlmWUaFLiq8cvQiGK0Z5K6LYzm29+VA/p4RL1FzNg==", + "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.8.0.tgz", + "integrity": "sha512-wigX4lrf5Vu+axVTIvNsuL6YrV4O5AXl5ubcURKMEME5TnWBouUh0CDTWxZ2GpnRn1kcCgE7l8O5+VbV9QTTcg==", "dev": true, "funding": [ { @@ -495,14 +657,15 @@ } ], "license": "MIT", + "peer": true, "dependencies": { - "@ethersproject/logger": "^5.8.0" + "@ethersproject/bignumber": "^5.8.0" } }, - "node_modules/@ethersproject/pbkdf2": { + "node_modules/@ethersproject/hash": { "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.8.0.tgz", - "integrity": "sha512-wuHiv97BrzCmfEaPbUFpMjlVg/IDkZThp9Ri88BpjRleg4iePJaj2SW8AIyE8cXn5V1tuAaMj6lzvsGJkGWskg==", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.8.0.tgz", + "integrity": "sha512-ac/lBcTbEWW/VGJij0CNSw/wPcw9bSRgCB0AIBz8CvED/jfvDoV9hsIIiWfvWmFEi8RcXtlNwp2jv6ozWOsooA==", "dev": true, "funding": [ { @@ -517,14 +680,21 @@ "license": "MIT", "peer": true, "dependencies": { + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/base64": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", "@ethersproject/bytes": "^5.8.0", - "@ethersproject/sha2": "^5.8.0" + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" } }, - "node_modules/@ethersproject/properties": { + "node_modules/@ethersproject/keccak256": { "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.8.0.tgz", - "integrity": "sha512-PYuiEoQ+FMaZZNGrStmN7+lWjlsoufGIHdww7454FIaGdbe/p5rnaCXTr5MtBYl3NkeoVhHZuyzChPeGeKIpQw==", + "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.8.0.tgz", + "integrity": "sha512-A1pkKLZSz8pDaQ1ftutZoaN46I6+jvuqugx5KYNeQOPqq+JZ0Txm7dlWesCHB5cndJSu5vP2VKptKf7cksERng==", "dev": true, "funding": [ { @@ -537,14 +707,16 @@ } ], "license": "MIT", + "peer": true, "dependencies": { - "@ethersproject/logger": "^5.8.0" + "@ethersproject/bytes": "^5.8.0", + "js-sha3": "0.8.0" } }, - "node_modules/@ethersproject/providers": { + "node_modules/@ethersproject/logger": { "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.8.0.tgz", - "integrity": "sha512-3Il3oTzEx3o6kzcg9ZzbE+oCZYyY+3Zh83sKkn4s1DZfTUjIegHnN2Cm0kbn9YFy45FDVcuCLLONhU7ny0SsCw==", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.8.0.tgz", + "integrity": "sha512-Qe6knGmY+zPPWTC+wQrpitodgBfH7XoceCGL5bJVejmH+yCS3R8jJm8iiWuvWbG76RUmyEG53oqv6GMVWqunjA==", "dev": true, "funding": [ { @@ -557,282 +729,12 @@ } ], "license": "MIT", - "peer": true, - "dependencies": { - "@ethersproject/abstract-provider": "^5.8.0", - "@ethersproject/abstract-signer": "^5.8.0", - "@ethersproject/address": "^5.8.0", - "@ethersproject/base64": "^5.8.0", - "@ethersproject/basex": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/constants": "^5.8.0", - "@ethersproject/hash": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/networks": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/random": "^5.8.0", - "@ethersproject/rlp": "^5.8.0", - "@ethersproject/sha2": "^5.8.0", - "@ethersproject/strings": "^5.8.0", - "@ethersproject/transactions": "^5.8.0", - "@ethersproject/web": "^5.8.0", - "bech32": "1.1.4", - "ws": "8.18.0" - } - }, - "node_modules/@ethersproject/providers/node_modules/ws": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", - "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/@ethersproject/random": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.8.0.tgz", - "integrity": "sha512-E4I5TDl7SVqyg4/kkA/qTfuLWAQGXmSOgYyO01So8hLfwgKvYK5snIlzxJMk72IFdG/7oh8yuSqY2KX7MMwg+A==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "peer": true, - "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0" - } - }, - "node_modules/@ethersproject/rlp": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.8.0.tgz", - "integrity": "sha512-LqZgAznqDbiEunaUvykH2JAoXTT9NV0Atqk8rQN9nx9SEgThA/WMx5DnW8a9FOufo//6FZOCHZ+XiClzgbqV9Q==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0" - } - }, - "node_modules/@ethersproject/sha2": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.8.0.tgz", - "integrity": "sha512-dDOUrXr9wF/YFltgTBYS0tKslPEKr6AekjqDW2dbn1L1xmjGR+9GiKu4ajxovnrDbwxAKdHjW8jNcwfz8PAz4A==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "peer": true, - "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "hash.js": "1.1.7" - } - }, - "node_modules/@ethersproject/signing-key": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.8.0.tgz", - "integrity": "sha512-LrPW2ZxoigFi6U6aVkFN/fa9Yx/+4AtIUe4/HACTvKJdhm0eeb107EVCIQcrLZkxaSIgc/eCrX8Q1GtbH+9n3w==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "bn.js": "^5.2.1", - "elliptic": "6.6.1", - "hash.js": "1.1.7" - } - }, - "node_modules/@ethersproject/solidity": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.8.0.tgz", - "integrity": "sha512-4CxFeCgmIWamOHwYN9d+QWGxye9qQLilpgTU0XhYs1OahkclF+ewO+3V1U0mvpiuQxm5EHHmv8f7ClVII8EHsA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "peer": true, - "dependencies": { - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/keccak256": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/sha2": "^5.8.0", - "@ethersproject/strings": "^5.8.0" - } - }, - "node_modules/@ethersproject/strings": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.8.0.tgz", - "integrity": "sha512-qWEAk0MAvl0LszjdfnZ2uC8xbR2wdv4cDabyHiBh3Cldq/T8dPH3V4BbBsAYJUeonwD+8afVXld274Ls+Y1xXg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/constants": "^5.8.0", - "@ethersproject/logger": "^5.8.0" - } - }, - "node_modules/@ethersproject/transactions": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.8.0.tgz", - "integrity": "sha512-UglxSDjByHG0TuU17bDfCemZ3AnKO2vYrL5/2n2oXvKzvb7Cz+W9gOWXKARjp2URVwcWlQlPOEQyAviKwT4AHg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/address": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/constants": "^5.8.0", - "@ethersproject/keccak256": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/rlp": "^5.8.0", - "@ethersproject/signing-key": "^5.8.0" - } - }, - "node_modules/@ethersproject/units": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.8.0.tgz", - "integrity": "sha512-lxq0CAnc5kMGIiWW4Mr041VT8IhNM+Pn5T3haO74XZWFulk7wH1Gv64HqE96hT4a7iiNMdOCFEBgaxWuk8ETKQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "peer": true, - "dependencies": { - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/constants": "^5.8.0", - "@ethersproject/logger": "^5.8.0" - } - }, - "node_modules/@ethersproject/wallet": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.8.0.tgz", - "integrity": "sha512-G+jnzmgg6UxurVKRKvw27h0kvG75YKXZKdlLYmAHeF32TGUzHkOFd7Zn6QHOTYRFWnfjtSSFjBowKo7vfrXzPA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "peer": true, - "dependencies": { - "@ethersproject/abstract-provider": "^5.8.0", - "@ethersproject/abstract-signer": "^5.8.0", - "@ethersproject/address": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/hash": "^5.8.0", - "@ethersproject/hdnode": "^5.8.0", - "@ethersproject/json-wallets": "^5.8.0", - "@ethersproject/keccak256": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/random": "^5.8.0", - "@ethersproject/signing-key": "^5.8.0", - "@ethersproject/transactions": "^5.8.0", - "@ethersproject/wordlists": "^5.8.0" - } + "peer": true }, - "node_modules/@ethersproject/web": { + "node_modules/@ethersproject/networks": { "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.8.0.tgz", - "integrity": "sha512-j7+Ksi/9KfGviws6Qtf9Q7KCqRhpwrYKQPs+JBA/rKVFF/yaWLHJEH3zfVP2plVu+eys0d2DlFmhoQJayFewcw==", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.8.0.tgz", + "integrity": "sha512-egPJh3aPVAzbHwq8DD7Po53J4OUSsA1MjQp8Vf/OZPav5rlmWUaFLiq8cvQiGK0Z5K6LYzm29+VA/p4RL1FzNg==", "dev": true, "funding": [ { @@ -841,4947 +743,1806 @@ }, { "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/base64": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/strings": "^5.8.0" - } - }, - "node_modules/@ethersproject/wordlists": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.8.0.tgz", - "integrity": "sha512-2df9bbXicZws2Sb5S6ET493uJ0Z84Fjr3pC4tu/qlnZERibZCeUVuqdtt+7Tv9xxhUxHoIekIA7avrKUWHrezg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "peer": true, - "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/hash": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/strings": "^5.8.0" - } - }, - "node_modules/@fastify/busboy": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", - "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@noble/curves": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", - "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@noble/hashes": "1.3.2" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@noble/hashes": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", - "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@noble/secp256k1": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz", - "integrity": "sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "license": "MIT" - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nomicfoundation/edr": { - "version": "0.12.0-next.23", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr/-/edr-0.12.0-next.23.tgz", - "integrity": "sha512-F2/6HZh8Q9RsgkOIkRrckldbhPjIZY7d4mT9LYuW68miwGQ5l7CkAgcz9fRRiurA0+YJhtsbx/EyrD9DmX9BOw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nomicfoundation/edr-darwin-arm64": "0.12.0-next.23", - "@nomicfoundation/edr-darwin-x64": "0.12.0-next.23", - "@nomicfoundation/edr-linux-arm64-gnu": "0.12.0-next.23", - "@nomicfoundation/edr-linux-arm64-musl": "0.12.0-next.23", - "@nomicfoundation/edr-linux-x64-gnu": "0.12.0-next.23", - "@nomicfoundation/edr-linux-x64-musl": "0.12.0-next.23", - "@nomicfoundation/edr-win32-x64-msvc": "0.12.0-next.23" - }, - "engines": { - "node": ">= 20" - } - }, - "node_modules/@nomicfoundation/edr-darwin-arm64": { - "version": "0.12.0-next.23", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.12.0-next.23.tgz", - "integrity": "sha512-Amh7mRoDzZyJJ4efqoePqdoZOzharmSOttZuJDlVE5yy07BoE8hL6ZRpa5fNYn0LCqn/KoWs8OHANWxhKDGhvQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 20" - } - }, - "node_modules/@nomicfoundation/edr-darwin-x64": { - "version": "0.12.0-next.23", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.12.0-next.23.tgz", - "integrity": "sha512-9wn489FIQm7m0UCD+HhktjWx6vskZzeZD9oDc2k9ZvbBzdXwPp5tiDqUBJ+eQpByAzCDfteAJwRn2lQCE0U+Iw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 20" - } - }, - "node_modules/@nomicfoundation/edr-linux-arm64-gnu": { - "version": "0.12.0-next.23", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.12.0-next.23.tgz", - "integrity": "sha512-nlk5EejSzEUfEngv0Jkhqq3/wINIfF2ED9wAofc22w/V1DV99ASh9l3/e/MIHOQFecIZ9MDqt0Em9/oDyB1Uew==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 20" - } - }, - "node_modules/@nomicfoundation/edr-linux-arm64-musl": { - "version": "0.12.0-next.23", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.12.0-next.23.tgz", - "integrity": "sha512-SJuPBp3Rc6vM92UtVTUxZQ/QlLhLfwTftt2XUiYohmGKB3RjGzpgduEFMCA0LEnucUckU6UHrJNFHiDm77C4PQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 20" - } - }, - "node_modules/@nomicfoundation/edr-linux-x64-gnu": { - "version": "0.12.0-next.23", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.12.0-next.23.tgz", - "integrity": "sha512-NU+Qs3u7Qt6t3bJFdmmjd5CsvgI2bPPzO31KifM2Ez96/jsXYho5debtTQnimlb5NAqiHTSlxjh/F8ROcptmeQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 20" - } - }, - "node_modules/@nomicfoundation/edr-linux-x64-musl": { - "version": "0.12.0-next.23", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.12.0-next.23.tgz", - "integrity": "sha512-F78fZA2h6/ssiCSZOovlgIu0dUeI7ItKPsDDF3UUlIibef052GCXmliMinC90jVPbrjUADMd1BUwjfI0Z8OllQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 20" - } - }, - "node_modules/@nomicfoundation/edr-win32-x64-msvc": { - "version": "0.12.0-next.23", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.12.0-next.23.tgz", - "integrity": "sha512-IfJZQJn7d/YyqhmguBIGoCKjE9dKjbu6V6iNEPApfwf5JyyjHYyyfkLU4rf7hygj57bfH4sl1jtQ6r8HnT62lw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 20" - } - }, - "node_modules/@nomicfoundation/hardhat-chai-matchers": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-chai-matchers/-/hardhat-chai-matchers-2.1.2.tgz", - "integrity": "sha512-NlUlde/ycXw2bLzA2gWjjbxQaD9xIRbAF30nsoEprAWzH8dXEI1ILZUKZMyux9n9iygEXTzN0SDVjE6zWDZi9g==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@types/chai-as-promised": "^7.1.3", - "chai-as-promised": "^7.1.1", - "deep-eql": "^4.0.1", - "ordinal": "^1.0.3" - }, - "peerDependencies": { - "@nomicfoundation/hardhat-ethers": "^3.1.0", - "chai": "^4.2.0", - "ethers": "^6.14.0", - "hardhat": "^2.26.0" - } - }, - "node_modules/@nomicfoundation/hardhat-ethers": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-ethers/-/hardhat-ethers-3.1.3.tgz", - "integrity": "sha512-208JcDeVIl+7Wu3MhFUUtiA8TJ7r2Rn3Wr+lSx9PfsDTKkbsAsWPY6N6wQ4mtzDv0/pB9nIbJhkjoHe1EsgNsA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "debug": "^4.1.1", - "lodash.isequal": "^4.5.0" - }, - "peerDependencies": { - "ethers": "^6.14.0", - "hardhat": "^2.28.0" - } - }, - "node_modules/@nomicfoundation/hardhat-ignition": { - "version": "0.15.16", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-ignition/-/hardhat-ignition-0.15.16.tgz", - "integrity": "sha512-T0JTnuib7QcpsWkHCPLT7Z6F483EjTdcdjb1e00jqS9zTGCPqinPB66LLtR/duDLdvgoiCVS6K8WxTQkA/xR1Q==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@nomicfoundation/ignition-core": "^0.15.15", - "@nomicfoundation/ignition-ui": "^0.15.13", - "chalk": "^4.0.0", - "debug": "^4.3.2", - "fs-extra": "^10.0.0", - "json5": "^2.2.3", - "prompts": "^2.4.2" - }, - "peerDependencies": { - "@nomicfoundation/hardhat-verify": "^2.1.0", - "hardhat": "^2.26.0" - } - }, - "node_modules/@nomicfoundation/hardhat-ignition-ethers": { - "version": "0.15.17", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-ignition-ethers/-/hardhat-ignition-ethers-0.15.17.tgz", - "integrity": "sha512-io6Wrp1dUsJ94xEI3pw6qkPfhc9TFA+e6/+o16yQ8pvBTFMjgK5x8wIHKrrIHr9L3bkuTMtmDjyN4doqO2IqFQ==", - "dev": true, - "license": "MIT", - "peer": true, - "peerDependencies": { - "@nomicfoundation/hardhat-ethers": "^3.1.0", - "@nomicfoundation/hardhat-ignition": "^0.15.16", - "@nomicfoundation/ignition-core": "^0.15.15", - "ethers": "^6.14.0", - "hardhat": "^2.26.0" - } - }, - "node_modules/@nomicfoundation/hardhat-network-helpers": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-network-helpers/-/hardhat-network-helpers-1.1.2.tgz", - "integrity": "sha512-p7HaUVDbLj7ikFivQVNhnfMHUBgiHYMwQWvGn9AriieuopGOELIrwj2KjyM2a6z70zai5YKO264Vwz+3UFJZPQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ethereumjs-util": "^7.1.4" - }, - "peerDependencies": { - "hardhat": "^2.26.0" - } - }, - "node_modules/@nomicfoundation/hardhat-toolbox": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-toolbox/-/hardhat-toolbox-5.0.0.tgz", - "integrity": "sha512-FnUtUC5PsakCbwiVNsqlXVIWG5JIb5CEZoSXbJUsEBun22Bivx2jhF1/q9iQbzuaGpJKFQyOhemPB2+XlEE6pQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "@nomicfoundation/hardhat-chai-matchers": "^2.0.0", - "@nomicfoundation/hardhat-ethers": "^3.0.0", - "@nomicfoundation/hardhat-ignition-ethers": "^0.15.0", - "@nomicfoundation/hardhat-network-helpers": "^1.0.0", - "@nomicfoundation/hardhat-verify": "^2.0.0", - "@typechain/ethers-v6": "^0.5.0", - "@typechain/hardhat": "^9.0.0", - "@types/chai": "^4.2.0", - "@types/mocha": ">=9.1.0", - "@types/node": ">=18.0.0", - "chai": "^4.2.0", - "ethers": "^6.4.0", - "hardhat": "^2.11.0", - "hardhat-gas-reporter": "^1.0.8", - "solidity-coverage": "^0.8.1", - "ts-node": ">=8.0.0", - "typechain": "^8.3.0", - "typescript": ">=4.5.0" - } - }, - "node_modules/@nomicfoundation/hardhat-verify": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-verify/-/hardhat-verify-2.1.3.tgz", - "integrity": "sha512-danbGjPp2WBhLkJdQy9/ARM3WQIK+7vwzE0urNem1qZJjh9f54Kf5f1xuQv8DvqewUAkuPxVt/7q4Grz5WjqSg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@ethersproject/abi": "^5.1.2", - "@ethersproject/address": "^5.0.2", - "cbor": "^8.1.0", - "debug": "^4.1.1", - "lodash.clonedeep": "^4.5.0", - "picocolors": "^1.1.0", - "semver": "^6.3.0", - "table": "^6.8.0", - "undici": "^5.14.0" - }, - "peerDependencies": { - "hardhat": "^2.26.0" - } - }, - "node_modules/@nomicfoundation/ignition-core": { - "version": "0.15.15", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ignition-core/-/ignition-core-0.15.15.tgz", - "integrity": "sha512-JdKFxYknTfOYtFXMN6iFJ1vALJPednuB+9p9OwGIRdoI6HYSh4ZBzyRURgyXtHFyaJ/SF9lBpsYV9/1zEpcYwg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@ethersproject/address": "5.6.1", - "@nomicfoundation/solidity-analyzer": "^0.1.1", - "cbor": "^9.0.0", - "debug": "^4.3.2", - "ethers": "^6.14.0", - "fs-extra": "^10.0.0", - "immer": "10.0.2", - "lodash": "4.17.21", - "ndjson": "2.0.0" - } - }, - "node_modules/@nomicfoundation/ignition-core/node_modules/@ethersproject/address": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.6.1.tgz", - "integrity": "sha512-uOgF0kS5MJv9ZvCz7x6T2EXJSzotiybApn4XlOgoTX0xdtyVIJ7pF+6cGPxiEq/dpBiTfMiw7Yc81JcwhSYA0Q==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "peer": true, - "dependencies": { - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/rlp": "^5.6.1" - } - }, - "node_modules/@nomicfoundation/ignition-core/node_modules/cbor": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/cbor/-/cbor-9.0.2.tgz", - "integrity": "sha512-JPypkxsB10s9QOWwa6zwPzqE1Md3vqpPc+cai4sAecuCsRyAtAl/pMyhPlMbT/xtPnm2dznJZYRLui57qiRhaQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "nofilter": "^3.1.0" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/@nomicfoundation/ignition-ui": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ignition-ui/-/ignition-ui-0.15.13.tgz", - "integrity": "sha512-HbTszdN1iDHCkUS9hLeooqnLEW2U45FaqFwFEYT8nIno2prFZhG+n68JEERjmfFCB5u0WgbuJwk3CgLoqtSL7Q==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/@nomicfoundation/solidity-analyzer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.2.tgz", - "integrity": "sha512-q4n32/FNKIhQ3zQGGw5CvPF6GTvDCpYwIf7bEY/dZTZbgfDsHyjJwURxUJf3VQuuJj+fDIFl4+KkBVbw4Ef6jA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 12" - }, - "optionalDependencies": { - "@nomicfoundation/solidity-analyzer-darwin-arm64": "0.1.2", - "@nomicfoundation/solidity-analyzer-darwin-x64": "0.1.2", - "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": "0.1.2", - "@nomicfoundation/solidity-analyzer-linux-arm64-musl": "0.1.2", - "@nomicfoundation/solidity-analyzer-linux-x64-gnu": "0.1.2", - "@nomicfoundation/solidity-analyzer-linux-x64-musl": "0.1.2", - "@nomicfoundation/solidity-analyzer-win32-x64-msvc": "0.1.2" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-darwin-arm64": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.2.tgz", - "integrity": "sha512-JaqcWPDZENCvm++lFFGjrDd8mxtf+CtLd2MiXvMNTBD33dContTZ9TWETwNFwg7JTJT5Q9HEecH7FA+HTSsIUw==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 12" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-darwin-x64": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.2.tgz", - "integrity": "sha512-fZNmVztrSXC03e9RONBT+CiksSeYcxI1wlzqyr0L7hsQlK1fzV+f04g2JtQ1c/Fe74ZwdV6aQBdd6Uwl1052sw==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 12" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-gnu": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.2.tgz", - "integrity": "sha512-3d54oc+9ZVBuB6nbp8wHylk4xh0N0Gc+bk+/uJae+rUgbOBwQSfuGIbAZt1wBXs5REkSmynEGcqx6DutoK0tPA==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 12" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-musl": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.2.tgz", - "integrity": "sha512-iDJfR2qf55vgsg7BtJa7iPiFAsYf2d0Tv/0B+vhtnI16+wfQeTbP7teookbGvAo0eJo7aLLm0xfS/GTkvHIucA==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 12" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-gnu": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.2.tgz", - "integrity": "sha512-9dlHMAt5/2cpWyuJ9fQNOUXFB/vgSFORg1jpjX1Mh9hJ/MfZXlDdHQ+DpFCs32Zk5pxRBb07yGvSHk9/fezL+g==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 12" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-musl": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.2.tgz", - "integrity": "sha512-GzzVeeJob3lfrSlDKQw2bRJ8rBf6mEYaWY+gW0JnTDHINA0s2gPR4km5RLIj1xeZZOYz4zRw+AEeYgLRqB2NXg==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 12" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-win32-x64-msvc": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.2.tgz", - "integrity": "sha512-Fdjli4DCcFHb4Zgsz0uEJXZ2K7VEO+w5KVv7HmT7WO10iODdU9csC2az4jrhEsRtiR9Gfd74FlG0NYlw1BMdyA==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 12" - } - }, - "node_modules/@openzeppelin/contracts": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-5.6.1.tgz", - "integrity": "sha512-Ly6SlsVJ3mj+b18W3R8gNufB7dTICT105fJhodGAGgyC2oqnBAhqSiNDJ8V8DLY05cCz81GLI0CU5vNYA1EC/w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@scure/base": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.2.6.tgz", - "integrity": "sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@scure/bip32": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.4.0.tgz", - "integrity": "sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@noble/curves": "~1.4.0", - "@noble/hashes": "~1.4.0", - "@scure/base": "~1.1.6" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@scure/bip32/node_modules/@noble/curves": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", - "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@noble/hashes": "1.4.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@scure/bip32/node_modules/@noble/hashes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", - "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@scure/bip32/node_modules/@scure/base": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", - "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@scure/bip39": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.3.0.tgz", - "integrity": "sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@noble/hashes": "~1.4.0", - "@scure/base": "~1.1.6" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@scure/bip39/node_modules/@noble/hashes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", - "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@scure/bip39/node_modules/@scure/base": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", - "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@sentry/core": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz", - "integrity": "sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sentry/hub": "5.30.0", - "@sentry/minimal": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/core/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true, - "license": "0BSD" - }, - "node_modules/@sentry/hub": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz", - "integrity": "sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/hub/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true, - "license": "0BSD" - }, - "node_modules/@sentry/minimal": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz", - "integrity": "sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sentry/hub": "5.30.0", - "@sentry/types": "5.30.0", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/minimal/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true, - "license": "0BSD" - }, - "node_modules/@sentry/node": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz", - "integrity": "sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sentry/core": "5.30.0", - "@sentry/hub": "5.30.0", - "@sentry/tracing": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "cookie": "^0.4.1", - "https-proxy-agent": "^5.0.0", - "lru_map": "^0.3.3", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/node/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true, - "license": "0BSD" - }, - "node_modules/@sentry/tracing": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz", - "integrity": "sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@sentry/hub": "5.30.0", - "@sentry/minimal": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/tracing/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true, - "license": "0BSD" - }, - "node_modules/@sentry/types": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz", - "integrity": "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/utils": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz", - "integrity": "sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sentry/types": "5.30.0", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/utils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true, - "license": "0BSD" - }, - "node_modules/@solidity-parser/parser": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.14.5.tgz", - "integrity": "sha512-6dKnHZn7fg/iQATVEzqyUOyEidbn05q7YA2mQ9hC0MMXhhV3/JrsxmFSYZAcr7j1yUP700LLhTruvJ3MiQmjJg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "antlr4ts": "^0.5.0-alpha.4" - } - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.12.tgz", - "integrity": "sha512-UCYBaeFvM11aU2y3YPZ//O5Rhj+xKyzy7mvcIoAjASbigy8mHMryP5cK7dgjlz2hWxh1g5pLw084E0a/wlUSFQ==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/@typechain/ethers-v6": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/@typechain/ethers-v6/-/ethers-v6-0.5.1.tgz", - "integrity": "sha512-F+GklO8jBWlsaVV+9oHaPh5NJdd6rAKN4tklGfInX1Q7h0xPgVLP39Jl3eCulPB5qexI71ZFHwbljx4ZXNfouA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "lodash": "^4.17.15", - "ts-essentials": "^7.0.1" - }, - "peerDependencies": { - "ethers": "6.x", - "typechain": "^8.3.2", - "typescript": ">=4.7.0" - } - }, - "node_modules/@typechain/hardhat": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/@typechain/hardhat/-/hardhat-9.1.0.tgz", - "integrity": "sha512-mtaUlzLlkqTlfPwB3FORdejqBskSnh+Jl8AIJGjXNAQfRQ4ofHADPl1+oU7Z3pAJzmZbUXII8MhOLQltcHgKnA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "fs-extra": "^9.1.0" - }, - "peerDependencies": { - "@typechain/ethers-v6": "^0.5.1", - "ethers": "^6.1.0", - "hardhat": "^2.9.9", - "typechain": "^8.3.2" - } - }, - "node_modules/@typechain/hardhat/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@types/bn.js": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.2.0.tgz", - "integrity": "sha512-DLbJ1BPqxvQhIGbeu8VbUC1DiAiahHtAYvA0ZEAa4P31F7IaArc8z3C3BRQdWX4mtLQuABG4yzp76ZrS02Ui1Q==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/chai": { - "version": "4.3.20", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.20.tgz", - "integrity": "sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/@types/chai-as-promised": { - "version": "7.1.8", - "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.8.tgz", - "integrity": "sha512-ThlRVIJhr69FLlh6IctTXFkmhtP3NpMZ2QGq69StYLyKZFp/HOp1VdKZj7RvfNWYYcJ1xlbLGLLWj1UvP5u/Gw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@types/chai": "*" - } - }, - "node_modules/@types/concat-stream": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz", - "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/form-data": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz", - "integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "node_modules/@types/minimatch": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", - "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/@types/mocha": { - "version": "10.0.10", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.10.tgz", - "integrity": "sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/@types/node": { - "version": "25.5.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.5.2.tgz", - "integrity": "sha512-tO4ZIRKNC+MDWV4qKVZe3Ql/woTnmHDr5JD8UI5hn2pwBrHEwOEMZK7WlNb5RKB6EoJ02gwmQS9OrjuFnZYdpg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "undici-types": "~7.18.0" - } - }, - "node_modules/@types/pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/prettier": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", - "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/@types/qs": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.15.0.tgz", - "integrity": "sha512-JawvT8iBVWpzTrz3EGw9BTQFg3BQNmwERdKE22vlTxawwtbyUSlMppvZYKLZzB5zgACXdXxbD3m1bXaMqP/9ow==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/@types/secp256k1": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.7.tgz", - "integrity": "sha512-Rcvjl6vARGAKRO6jHeKMatGrvOMGrR/AR11N1x2LqintPCyDZ7NBhrh238Z2VZc7aM7KIwnFpFQ7fnfK4H/9Qw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/abbrev": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", - "integrity": "sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q==", - "dev": true, - "license": "ISC", - "peer": true - }, - "node_modules/acorn": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", - "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", - "dev": true, - "license": "MIT", - "peer": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.3.5", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.5.tgz", - "integrity": "sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "acorn": "^8.11.0" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/adm-zip": { - "version": "0.4.16", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", - "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.3.0" - } - }, - "node_modules/aes-js": { - "version": "4.0.0-beta.5", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz", - "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ajv": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", - "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", - "dev": true, - "license": "BSD-3-Clause OR MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.4.2" - } - }, - "node_modules/ansi-align": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", - "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.1.0" - } - }, - "node_modules/ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/antlr4ts": { - "version": "0.5.0-alpha.4", - "resolved": "https://registry.npmjs.org/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz", - "integrity": "sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==", - "dev": true, - "license": "BSD-3-Clause", - "peer": true - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, - "license": "Python-2.0" - }, - "node_modules/array-back": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", - "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": "*" - } - }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true, - "license": "ISC", - "peer": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/available-typed-arrays": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "possible-typed-array-names": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/axios": { - "version": "1.14.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.14.0.tgz", - "integrity": "sha512-3Y8yrqLSwjuzpXuZ0oIYZ/XGgLwUIBU3uLvbcpb0pidD9ctpShJd43KSlEEkVQg6DS0G9NKyzOvBfUtDKEyHvQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "follow-redirects": "^1.15.11", - "form-data": "^4.0.5", - "proxy-from-env": "^2.1.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/base-x": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.11.tgz", - "integrity": "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, - "node_modules/bech32": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", - "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/blakejs": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", - "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/bn.js": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.3.tgz", - "integrity": "sha512-EAcmnPkxpntVL+DS7bO1zhcZNvCkxqtkd0ZY53h06GNQ3DEkkGZ/gKgmDv6DdZQGj9BgfSPKtJJ7Dp1GPP8f7w==", - "dev": true, - "license": "MIT" - }, - "node_modules/boxen": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", - "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-align": "^3.0.0", - "camelcase": "^6.2.0", - "chalk": "^4.1.0", - "cli-boxes": "^2.2.1", - "string-width": "^4.2.2", - "type-fest": "^0.20.2", - "widest-line": "^3.1.0", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/boxen/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/brace-expansion": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.3.tgz", - "integrity": "sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", - "dev": true, - "license": "MIT" - }, - "node_modules/browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true, - "license": "ISC" - }, - "node_modules/browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "base-x": "^3.0.2" - } - }, - "node_modules/bs58check": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", - "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "bs58": "^4.0.0", - "create-hash": "^1.1.0", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/call-bind": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", - "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "call-bind-apply-helpers": "^1.0.0", - "es-define-property": "^1.0.0", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/call-bound": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "get-intrinsic": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", - "dev": true, - "license": "Apache-2.0", - "peer": true - }, - "node_modules/cbor": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/cbor/-/cbor-8.1.0.tgz", - "integrity": "sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "nofilter": "^3.1.0" - }, - "engines": { - "node": ">=12.19" - } - }, - "node_modules/chai": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.5.0.tgz", - "integrity": "sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.3", - "deep-eql": "^4.1.3", - "get-func-name": "^2.0.2", - "loupe": "^2.3.6", - "pathval": "^1.1.1", - "type-detect": "^4.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chai-as-promised": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.2.tgz", - "integrity": "sha512-aBDHZxRzYnUYuIAIPBH2s511DjlKPzXNlXSGFC8CwmroWQLfrW0LtE1nK3MAwwNhJPa9raEjNCmRoFpG0Hurdw==", - "dev": true, - "license": "WTFPL", - "peer": true, - "dependencies": { - "check-error": "^1.0.2" - }, - "peerDependencies": { - "chai": ">= 2.1.2 < 6" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/charenc": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", - "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", - "dev": true, - "license": "BSD-3-Clause", - "peer": true, - "engines": { - "node": "*" - } - }, - "node_modules/check-error": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", - "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "get-func-name": "^2.0.2" - }, - "engines": { - "node": "*" - } - }, - "node_modules/chokidar": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", - "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", - "dev": true, - "license": "MIT", - "dependencies": { - "readdirp": "^4.0.1" - }, - "engines": { - "node": ">= 14.16.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/cipher-base": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.7.tgz", - "integrity": "sha512-Mz9QMT5fJe7bKI7MH31UilT5cEK5EHHRCccw/YRFsRY47AuNgaV6HY3rscp0/I4Q+tTW/5zoqpSeRRI54TkDWA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "inherits": "^2.0.4", - "safe-buffer": "^5.2.1", - "to-buffer": "^1.2.2" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/cli-boxes": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-table3": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.5.1.tgz", - "integrity": "sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "object-assign": "^4.1.0", - "string-width": "^2.1.1" - }, - "engines": { - "node": ">=6" - }, - "optionalDependencies": { - "colors": "^1.1.2" - } - }, - "node_modules/cli-table3/node_modules/ansi-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/cli-table3/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/cli-table3/node_modules/string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cli-table3/node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/command-exists": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", - "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", - "dev": true, - "license": "MIT" - }, - "node_modules/command-line-args": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", - "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "array-back": "^3.1.0", - "find-replace": "^3.0.0", - "lodash.camelcase": "^4.3.0", - "typical": "^4.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/command-line-usage": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.3.tgz", - "integrity": "sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "array-back": "^4.0.2", - "chalk": "^2.4.2", - "table-layout": "^1.0.2", - "typical": "^5.2.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/command-line-usage/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/command-line-usage/node_modules/array-back": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", - "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/command-line-usage/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/command-line-usage/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/command-line-usage/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/command-line-usage/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/command-line-usage/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/command-line-usage/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/command-line-usage/node_modules/typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 12" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "engines": [ - "node >= 0.8" - ], - "license": "MIT", - "peer": true, - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "node_modules/concat-stream/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/concat-stream/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/concat-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/concat-stream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "node_modules/create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/crypt": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", - "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", - "dev": true, - "license": "BSD-3-Clause", - "peer": true, - "engines": { - "node": "*" - } - }, - "node_modules/death": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/death/-/death-1.1.0.tgz", - "integrity": "sha512-vsV6S4KVHvTGxbEcij7hkWRv0It+sGGWVOM67dQde/o5Xjnr+KmLjxWJii2uEObIrt1CcM9w0Yaovx+iOlIL+w==", - "dev": true, - "peer": true - }, - "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/deep-eql": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz", - "integrity": "sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "type-detect": "^4.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/diff": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.2.tgz", - "integrity": "sha512-vtcDfH3TOjP8UekytvnHH1o1P4FcUdt4eQ1Y+Abap1tk/OB2MWQvcwS2ClCd1zuIhc3JKOx6p3kod8Vfys3E+A==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/difflib": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/difflib/-/difflib-0.2.4.tgz", - "integrity": "sha512-9YVwmMb0wQHQNr5J9m6BSj6fk4pfGITGQOOs+D9Fl+INODWFOfvhIU1hNv6GgR1RBoC/9NJcwu77zShxV0kT7w==", - "dev": true, - "peer": true, - "dependencies": { - "heap": ">= 0.2.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/elliptic": { - "version": "6.6.1", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", - "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", - "dev": true, - "license": "MIT", - "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.3", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.3.tgz", - "integrity": "sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==", - "dev": true, - "license": "MIT" - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/enquirer": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", - "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-colors": "^4.1.1", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/escodegen": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", - "integrity": "sha512-yhi5S+mNTOuRvyW4gWlg5W1byMaQGWWSYHXsuFZ7GBo7tpyOwi2EdzMP/QWxh9hwkD2m+wDVHJsxhRIj+v/b/A==", - "dev": true, - "license": "BSD-2-Clause", - "peer": true, - "dependencies": { - "esprima": "^2.7.1", - "estraverse": "^1.9.1", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=0.12.0" - }, - "optionalDependencies": { - "source-map": "~0.2.0" - } - }, - "node_modules/esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==", - "dev": true, - "license": "BSD-2-Clause", - "peer": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/estraverse": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", - "integrity": "sha512-25w1fMXQrGdoquWnScXZGckOv+Wes+JDnuN/+7ex3SauFRS72r2lFDec0EKPt2YD1wUJ/IrfEex+9yp4hfSOJA==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "license": "BSD-2-Clause", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eth-gas-reporter": { - "version": "0.2.27", - "resolved": "https://registry.npmjs.org/eth-gas-reporter/-/eth-gas-reporter-0.2.27.tgz", - "integrity": "sha512-femhvoAM7wL0GcI8ozTdxfuBtBFJ9qsyIAsmKVjlWAHUbdnnXHt+lKzz/kmldM5lA9jLuNHGwuIxorNpLbR1Zw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@solidity-parser/parser": "^0.14.0", - "axios": "^1.5.1", - "cli-table3": "^0.5.0", - "colors": "1.4.0", - "ethereum-cryptography": "^1.0.3", - "ethers": "^5.7.2", - "fs-readdir-recursive": "^1.1.0", - "lodash": "^4.17.14", - "markdown-table": "^1.1.3", - "mocha": "^10.2.0", - "req-cwd": "^2.0.0", - "sha1": "^1.1.1", - "sync-request": "^6.0.0" - }, - "peerDependencies": { - "@codechecks/client": "^0.1.0" - }, - "peerDependenciesMeta": { - "@codechecks/client": { - "optional": true - } - } - }, - "node_modules/eth-gas-reporter/node_modules/@noble/hashes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz", - "integrity": "sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "license": "MIT", - "peer": true - }, - "node_modules/eth-gas-reporter/node_modules/@scure/base": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", - "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", - "dev": true, - "license": "MIT", - "peer": true, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/eth-gas-reporter/node_modules/@scure/bip32": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.5.tgz", - "integrity": "sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "license": "MIT", - "peer": true, - "dependencies": { - "@noble/hashes": "~1.2.0", - "@noble/secp256k1": "~1.7.0", - "@scure/base": "~1.1.0" - } - }, - "node_modules/eth-gas-reporter/node_modules/@scure/bip39": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.1.tgz", - "integrity": "sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "license": "MIT", - "peer": true, - "dependencies": { - "@noble/hashes": "~1.2.0", - "@scure/base": "~1.1.0" - } - }, - "node_modules/eth-gas-reporter/node_modules/ethereum-cryptography": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz", - "integrity": "sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@noble/hashes": "1.2.0", - "@noble/secp256k1": "1.7.1", - "@scure/bip32": "1.1.5", - "@scure/bip39": "1.1.1" - } - }, - "node_modules/eth-gas-reporter/node_modules/ethers": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.8.0.tgz", - "integrity": "sha512-DUq+7fHrCg1aPDFCHx6UIPb3nmt2XMpM7Y/g2gLhsl3lIBqeAfOJIl1qEvRf2uq3BiKxmh6Fh5pfp2ieyek7Kg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "peer": true, - "dependencies": { - "@ethersproject/abi": "5.8.0", - "@ethersproject/abstract-provider": "5.8.0", - "@ethersproject/abstract-signer": "5.8.0", - "@ethersproject/address": "5.8.0", - "@ethersproject/base64": "5.8.0", - "@ethersproject/basex": "5.8.0", - "@ethersproject/bignumber": "5.8.0", - "@ethersproject/bytes": "5.8.0", - "@ethersproject/constants": "5.8.0", - "@ethersproject/contracts": "5.8.0", - "@ethersproject/hash": "5.8.0", - "@ethersproject/hdnode": "5.8.0", - "@ethersproject/json-wallets": "5.8.0", - "@ethersproject/keccak256": "5.8.0", - "@ethersproject/logger": "5.8.0", - "@ethersproject/networks": "5.8.0", - "@ethersproject/pbkdf2": "5.8.0", - "@ethersproject/properties": "5.8.0", - "@ethersproject/providers": "5.8.0", - "@ethersproject/random": "5.8.0", - "@ethersproject/rlp": "5.8.0", - "@ethersproject/sha2": "5.8.0", - "@ethersproject/signing-key": "5.8.0", - "@ethersproject/solidity": "5.8.0", - "@ethersproject/strings": "5.8.0", - "@ethersproject/transactions": "5.8.0", - "@ethersproject/units": "5.8.0", - "@ethersproject/wallet": "5.8.0", - "@ethersproject/web": "5.8.0", - "@ethersproject/wordlists": "5.8.0" - } - }, - "node_modules/ethereum-bloom-filters": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.2.0.tgz", - "integrity": "sha512-28hyiE7HVsWubqhpVLVmZXFd4ITeHi+BUu05o9isf0GUpMtzBUi+8/gFrGaGYzvGAJQmJ3JKj77Mk9G98T84rA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@noble/hashes": "^1.4.0" - } - }, - "node_modules/ethereum-bloom-filters/node_modules/@noble/hashes": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", - "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "node_modules/ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/ethers": { - "version": "6.16.0", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.16.0.tgz", - "integrity": "sha512-U1wulmetNymijEhpSEQ7Ct/P/Jw9/e7R1j5XIbPRydgV2DjLVMsULDlNksq3RQnFgKoLlZf88ijYtWEXcPa07A==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/ethers-io/" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "peer": true, - "dependencies": { - "@adraffy/ens-normalize": "1.10.1", - "@noble/curves": "1.2.0", - "@noble/hashes": "1.3.2", - "@types/node": "22.7.5", - "aes-js": "4.0.0-beta.5", - "tslib": "2.7.0", - "ws": "8.17.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/ethers/node_modules/@types/node": { - "version": "22.7.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz", - "integrity": "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "undici-types": "~6.19.2" - } - }, - "node_modules/ethers/node_modules/undici-types": { - "version": "6.19.8", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ethjs-unit": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", - "integrity": "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "bn.js": "4.11.6", - "number-to-bn": "1.7.0" - }, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } - }, - "node_modules/ethjs-unit/node_modules/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/fast-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/fast-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", - "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ], - "license": "BSD-3-Clause", - "peer": true - }, - "node_modules/fastq": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", - "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-replace": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", - "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "array-back": "^3.0.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true, - "license": "BSD-3-Clause", - "bin": { - "flat": "cli.js" - } - }, - "node_modules/follow-redirects": { - "version": "1.15.11", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", - "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "license": "MIT", - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/for-each": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", - "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-callable": "^1.2.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/form-data": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", - "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "hasown": "^2.0.2", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fp-ts": { - "version": "1.19.3", - "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz", - "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==", - "dev": true, - "license": "MIT" - }, - "node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/fs-readdir-recursive": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", - "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true, - "license": "ISC" - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true, - "license": "MIT", - "peer": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "license": "ISC", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-func-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", - "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": "*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-port": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", - "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/ghost-testrpc": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/ghost-testrpc/-/ghost-testrpc-0.0.2.tgz", - "integrity": "sha512-i08dAEgJ2g8z5buJIrCTduwPIhih3DP+hOCTyyryikfV8T0bNvHnGXO67i0DD1H4GBDETTclPy9njZbfluQYrQ==", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "chalk": "^2.4.2", - "node-emoji": "^1.10.0" - }, - "bin": { - "testrpc-sc": "index.js" - } - }, - "node_modules/ghost-testrpc/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ghost-testrpc/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ghost-testrpc/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/ghost-testrpc/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ghost-testrpc/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/ghost-testrpc/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/ghost-testrpc/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", - "dev": true, - "license": "ISC", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "peer": true, "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "@ethersproject/logger": "^5.8.0" } }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "node_modules/@ethersproject/properties": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.8.0.tgz", + "integrity": "sha512-PYuiEoQ+FMaZZNGrStmN7+lWjlsoufGIHdww7454FIaGdbe/p5rnaCXTr5MtBYl3NkeoVhHZuyzChPeGeKIpQw==", "dev": true, - "license": "ISC", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "peer": true, "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" + "@ethersproject/logger": "^5.8.0" } }, - "node_modules/global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "node_modules/@ethersproject/rlp": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.8.0.tgz", + "integrity": "sha512-LqZgAznqDbiEunaUvykH2JAoXTT9NV0Atqk8rQN9nx9SEgThA/WMx5DnW8a9FOufo//6FZOCHZ+XiClzgbqV9Q==", "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", "peer": true, "dependencies": { - "global-prefix": "^3.0.0" - }, - "engines": { - "node": ">=6" + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0" } }, - "node_modules/global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "node_modules/@ethersproject/signing-key": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.8.0.tgz", + "integrity": "sha512-LrPW2ZxoigFi6U6aVkFN/fa9Yx/+4AtIUe4/HACTvKJdhm0eeb107EVCIQcrLZkxaSIgc/eCrX8Q1GtbH+9n3w==", "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", "peer": true, "dependencies": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - }, - "engines": { - "node": ">=6" + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "bn.js": "^5.2.1", + "elliptic": "6.6.1", + "hash.js": "1.1.7" } }, - "node_modules/globby": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", - "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", + "node_modules/@ethersproject/strings": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.8.0.tgz", + "integrity": "sha512-qWEAk0MAvl0LszjdfnZ2uC8xbR2wdv4cDabyHiBh3Cldq/T8dPH3V4BbBsAYJUeonwD+8afVXld274Ls+Y1xXg==", "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", "peer": true, "dependencies": { - "@types/glob": "^7.1.1", - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.0.3", - "glob": "^7.1.3", - "ignore": "^5.1.1", - "merge2": "^1.2.3", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=8" + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/logger": "^5.8.0" } }, - "node_modules/globby/node_modules/brace-expansion": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.13.tgz", - "integrity": "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==", + "node_modules/@ethersproject/transactions": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.8.0.tgz", + "integrity": "sha512-UglxSDjByHG0TuU17bDfCemZ3AnKO2vYrL5/2n2oXvKzvb7Cz+W9gOWXKARjp2URVwcWlQlPOEQyAviKwT4AHg==", "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", "peer": true, "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/rlp": "^5.8.0", + "@ethersproject/signing-key": "^5.8.0" } }, - "node_modules/globby/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "node_modules/@ethersproject/web": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.8.0.tgz", + "integrity": "sha512-j7+Ksi/9KfGviws6Qtf9Q7KCqRhpwrYKQPs+JBA/rKVFF/yaWLHJEH3zfVP2plVu+eys0d2DlFmhoQJayFewcw==", "dev": true, - "license": "ISC", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", "peer": true, "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "@ethersproject/base64": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" } }, - "node_modules/globby/node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", "dev": true, "license": "ISC", "peer": true, "dependencies": { - "brace-expansion": "^1.1.7" + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" }, "engines": { - "node": "*" + "node": ">=12" } }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", "dev": true, "license": "MIT", "peer": true, "engines": { - "node": ">= 0.4" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/handlebars": { - "version": "4.7.9", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.9.tgz", - "integrity": "sha512-4E71E0rpOaQuJR2A3xDZ+GM1HyWYv1clR58tC8emQNeQe3RH7MAzSbat+V0wG78LQBo6m6bzSG/L4pBuCsgnUQ==", + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "minimist": "^1.2.5", - "neo-async": "^2.6.2", - "source-map": "^0.6.1", - "wordwrap": "^1.0.0" - }, - "bin": { - "handlebars": "bin/handlebars" + "ansi-regex": "^6.2.2" }, "engines": { - "node": ">=0.4.7" + "node": ">=12" }, - "optionalDependencies": { - "uglify-js": "^3.1.4" + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/handlebars/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "node_modules/@noble/ciphers": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-1.2.1.tgz", + "integrity": "sha512-rONPWMC7PeExE077uLE4oqWrZ1IvAfz3oH9LibVAcVCopJiA9R62uavnbEzdkVmJYI6M6Zgkbeb07+tWjlq2XA==", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", "peer": true, "engines": { - "node": ">=0.10.0" + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/hardhat": { - "version": "2.28.6", - "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.28.6.tgz", - "integrity": "sha512-zQze7qe+8ltwHvhX5NQ8sN1N37WWZGw8L63y+2XcPxGwAjc/SMF829z3NS6o1krX0sryhAsVBK/xrwUqlsot4Q==", + "node_modules/@noble/curves": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", + "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", "dev": true, "license": "MIT", "dependencies": { - "@ethereumjs/util": "^9.1.0", - "@ethersproject/abi": "^5.1.2", - "@nomicfoundation/edr": "0.12.0-next.23", - "@nomicfoundation/solidity-analyzer": "^0.1.0", - "@sentry/node": "^5.18.1", - "adm-zip": "^0.4.16", - "aggregate-error": "^3.0.0", - "ansi-escapes": "^4.3.0", - "boxen": "^5.1.2", - "chokidar": "^4.0.0", - "ci-info": "^2.0.0", - "debug": "^4.1.1", - "enquirer": "^2.3.0", - "env-paths": "^2.2.0", - "ethereum-cryptography": "^1.0.3", - "find-up": "^5.0.0", - "fp-ts": "1.19.3", - "fs-extra": "^7.0.1", - "immutable": "^4.0.0-rc.12", - "io-ts": "1.10.4", - "json-stream-stringify": "^3.1.4", - "keccak": "^3.0.2", - "lodash": "^4.17.11", - "micro-eth-signer": "^0.14.0", - "mnemonist": "^0.38.0", - "mocha": "^10.0.0", - "p-map": "^4.0.0", - "picocolors": "^1.1.0", - "raw-body": "^2.4.1", - "resolve": "1.17.0", - "semver": "^6.3.0", - "solc": "0.8.26", - "source-map-support": "^0.5.13", - "stacktrace-parser": "^0.1.10", - "tinyglobby": "^0.2.6", - "tsort": "0.0.1", - "undici": "^5.14.0", - "uuid": "^8.3.2", - "ws": "^7.4.6" - }, - "bin": { - "hardhat": "internal/cli/bootstrap.js" - }, - "peerDependencies": { - "ts-node": "*", - "typescript": "*" + "@noble/hashes": "1.4.0" }, - "peerDependenciesMeta": { - "ts-node": { - "optional": true - }, - "typescript": { - "optional": true - } + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/hardhat-gas-reporter": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/hardhat-gas-reporter/-/hardhat-gas-reporter-1.0.10.tgz", - "integrity": "sha512-02N4+So/fZrzJ88ci54GqwVA3Zrf0C9duuTyGt0CFRIh/CdNwbnTgkXkRfojOMLBQ+6t+lBIkgbsOtqMvNwikA==", + "node_modules/@noble/curves/node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", "dev": true, "license": "MIT", - "peer": true, - "dependencies": { - "array-uniq": "1.0.3", - "eth-gas-reporter": "^0.2.25", - "sha1": "^1.1.1" + "engines": { + "node": ">= 16" }, - "peerDependencies": { - "hardhat": "^2.0.2" + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/hardhat/node_modules/@noble/hashes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz", - "integrity": "sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "license": "MIT" - }, - "node_modules/hardhat/node_modules/@scure/base": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", - "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", + "node_modules/@noble/hashes": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.7.1.tgz", + "integrity": "sha512-B8XBPsn4vT/KJAGqDzbwztd+6Yte3P4V7iafm24bxgDe/mlRuK6xmWPuCNrKt2vDafZ8MfJLlchDG/vYafQEjQ==", "dev": true, "license": "MIT", + "peer": true, + "engines": { + "node": "^14.21.3 || >=16" + }, "funding": { "url": "https://paulmillr.com/funding/" } }, - "node_modules/hardhat/node_modules/@scure/bip32": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.5.tgz", - "integrity": "sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==", + "node_modules/@nomicfoundation/edr": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr/-/edr-0.14.0.tgz", + "integrity": "sha512-Cgg1IZv+i2itOa3Unc8wX9y8TCuzpofdxga8ekEJ3DPsaVGBhjsuaBqf/65TyF3ExogUpUdk5rHKZmnpKcfACg==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], "license": "MIT", "dependencies": { - "@noble/hashes": "~1.2.0", - "@noble/secp256k1": "~1.7.0", - "@scure/base": "~1.1.0" + "@nomicfoundation/edr-darwin-arm64": "0.14.0", + "@nomicfoundation/edr-darwin-x64": "0.14.0", + "@nomicfoundation/edr-linux-arm64-gnu": "0.14.0", + "@nomicfoundation/edr-linux-arm64-musl": "0.14.0", + "@nomicfoundation/edr-linux-x64-gnu": "0.14.0", + "@nomicfoundation/edr-linux-x64-musl": "0.14.0", + "@nomicfoundation/edr-win32-x64-msvc": "0.14.0" + }, + "engines": { + "node": ">= 22" + } + }, + "node_modules/@nomicfoundation/edr-darwin-arm64": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.14.0.tgz", + "integrity": "sha512-WeIfUKa270gPWssrDYWQM8GcjeYHGuzr2P2oPtBJIKhU5UOsEbF0RM9JFtcy2zp7ZBn2iQp7BHZc6kboz5Pd5w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 22" } }, - "node_modules/hardhat/node_modules/@scure/bip39": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.1.tgz", - "integrity": "sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==", + "node_modules/@nomicfoundation/edr-darwin-x64": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.14.0.tgz", + "integrity": "sha512-V/cftSD8hl1mr37tCrZ1Rd4eSppAWGUFAZNNBeEUWw4VAA80at26cdboR66TWj5wy4LmbAMMu12apVs5nlOAMw==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], "license": "MIT", - "dependencies": { - "@noble/hashes": "~1.2.0", - "@scure/base": "~1.1.0" + "engines": { + "node": ">= 22" } }, - "node_modules/hardhat/node_modules/ethereum-cryptography": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz", - "integrity": "sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw==", + "node_modules/@nomicfoundation/edr-linux-arm64-gnu": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.14.0.tgz", + "integrity": "sha512-wydy0IGuVzK5K69Nbj+Vhw9CegabE6Ib9MbepOB/l4hKxxV0dZSFO3d2xUme12+94GS3gZVJ7l8OkyjENLkiLA==", "dev": true, "license": "MIT", - "dependencies": { - "@noble/hashes": "1.2.0", - "@noble/secp256k1": "1.7.1", - "@scure/bip32": "1.1.5", - "@scure/bip39": "1.1.1" + "engines": { + "node": ">= 22" } }, - "node_modules/hardhat/node_modules/fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "node_modules/@nomicfoundation/edr-linux-arm64-musl": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.14.0.tgz", + "integrity": "sha512-D2GI/IP+8KBG4wljRSaHxzvEmmaJc2AmGj3vL6wEPWmP8k09p/ZxasxvH077Yh6e72CxrcRmVsfGSDAMmc/6yA==", "dev": true, "license": "MIT", - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, "engines": { - "node": ">=6 <7 || >=8" + "node": ">= 22" } }, - "node_modules/hardhat/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "node_modules/@nomicfoundation/edr-linux-x64-gnu": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.14.0.tgz", + "integrity": "sha512-Y5mTwLUZd6W3WfLrv/sw9TNE3+wzzPEy9Pz+euB/XLoWeX/QNpYy+0tck+CB4kUUWG7dz2a2nCyobbp4Plo3WQ==", "dev": true, "license": "MIT", - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "engines": { + "node": ">= 22" } }, - "node_modules/hardhat/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "node_modules/@nomicfoundation/edr-linux-x64-musl": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.14.0.tgz", + "integrity": "sha512-LM1zWgi0ZytlHccBXDC8q0+mQQkbc0zpJJ5qSAFeUPn3qKXW4XRel4HzEkZOOO8NWCstdPqU589lIRrfPIzbUw==", "dev": true, "license": "MIT", "engines": { - "node": ">= 4.0.0" + "node": ">= 22" } }, - "node_modules/hardhat/node_modules/ws": { - "version": "7.5.10", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", - "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "node_modules/@nomicfoundation/edr-win32-x64-msvc": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.14.0.tgz", + "integrity": "sha512-0SfpLVuzZZwHVY7ptMqshtEFByRJlfF9XLJ9MjLoAlGjhf6jHLSgltw3Mos+6bukUXLbLaxeNHfDaTLMnX+N4g==", "dev": true, "license": "MIT", "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } + "node": ">= 22" } }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/@nomicfoundation/hardhat-errors": { + "version": "3.0.17", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-errors/-/hardhat-errors-3.0.17.tgz", + "integrity": "sha512-x8/Bv7Mn0a90ZRX4ZfWuq8uGuqF10LzLMXD1LD0kEIRBwSvr71fcxYyONcuf+MzznbrJ+WBTNz3ov9Rd++8DfQ==", "dev": true, "license": "MIT", - "engines": { - "node": ">=8" + "dependencies": { + "@nomicfoundation/hardhat-utils": "^4.1.5" } }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "node_modules/@nomicfoundation/hardhat-ethers": { + "version": "4.0.15", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-ethers/-/hardhat-ethers-4.0.15.tgz", + "integrity": "sha512-qLBvq2RcKuffObX08LVZr9LixDSnsJwwxeRKYCfr5p1VTkMT0XP5JU2Y8AOIady39O5v7ZuzIEY+xH+DdqrBKA==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "es-define-property": "^1.0.0" + "@nomicfoundation/hardhat-errors": "^3.0.17", + "@nomicfoundation/hardhat-utils": "^4.1.5", + "@nomicfoundation/hardhat-zod-utils": "^3.0.5", + "ethereum-cryptography": "^2.2.1", + "ethers": "^6.14.0", + "zod": "^3.23.8" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "hardhat": "^3.8.0" } }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "node_modules/@nomicfoundation/hardhat-ethers-chai-matchers": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-ethers-chai-matchers/-/hardhat-ethers-chai-matchers-3.0.11.tgz", + "integrity": "sha512-pAOTjBQRNKqCh8cLJD6dsOeGWrU8fe9Wrz4UqO03qhJbwmj0md2bq2LEPaMZAgDtxVS0ZteiVGx64DgBfyb7XA==", "dev": true, "license": "MIT", "peer": true, - "engines": { - "node": ">= 0.4" + "dependencies": { + "@nomicfoundation/hardhat-utils": "^4.1.4", + "@types/chai-as-promised": "^8.0.1", + "chai-as-promised": "^8.0.0", + "deep-eql": "^5.0.1" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "@nomicfoundation/hardhat-ethers": "^4.0.7", + "chai": ">=5.1.2 <7", + "ethers": "^6.14.0", + "hardhat": "^3.8.0" } }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "node_modules/@nomicfoundation/hardhat-ignition": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-ignition/-/hardhat-ignition-3.1.8.tgz", + "integrity": "sha512-zVsR1SA1gqjd3SF3C+BljttSEMOaIbSIEvHgFhXF/A1IgeecJYD/MqGcvGAW4s51r5ZGQnUSl9t/5VQKvuExlw==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" + "@nomicfoundation/hardhat-errors": "^3.0.16", + "@nomicfoundation/hardhat-utils": "^4.1.4", + "@nomicfoundation/ignition-core": "^3.1.8", + "@nomicfoundation/ignition-ui": "^3.1.2", + "json5": "^2.2.3", + "prompts": "^2.4.2" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "@nomicfoundation/hardhat-verify": "^3.0.0", + "hardhat": "^3.8.0" } }, - "node_modules/hash-base": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.2.tgz", - "integrity": "sha512-Bb33KbowVTIj5s7Ked1OsqHUeCpz//tPwR+E2zJgJKo9Z5XolZ9b6bdUgjmYlwnWhoOQKoTd1TYToZGn5mAYOg==", + "node_modules/@nomicfoundation/hardhat-ignition-ethers": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-ignition-ethers/-/hardhat-ignition-ethers-3.1.6.tgz", + "integrity": "sha512-RtdrlOm69wgj6NzSih3FvdNw9TqfdzMhEc0n6D6CsSLo7Czyi2xBZUoN9NiUSL7eh+RyQ2ueN6WRlDP+qgG9pg==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^2.3.8", - "safe-buffer": "^5.2.1", - "to-buffer": "^1.2.1" + "@nomicfoundation/hardhat-errors": "^3.0.15" }, - "engines": { - "node": ">= 0.8" + "peerDependencies": { + "@nomicfoundation/hardhat-ethers": "^4.0.0", + "@nomicfoundation/hardhat-ignition": "^3.1.2", + "@nomicfoundation/hardhat-verify": "^3.0.0", + "@nomicfoundation/ignition-core": "^3.0.7", + "ethers": "^6.14.0", + "hardhat": "^3.8.0" } }, - "node_modules/hash-base/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "node_modules/@nomicfoundation/hardhat-keystore": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-keystore/-/hardhat-keystore-3.0.12.tgz", + "integrity": "sha512-uXySRPOOHtAg/RrwmqiQyw0QDA6Er3H6rB4su0J59mBPC/QHw9B5F9dDfF2u+FZn5LVWH6Gh58mEvJhRt0a4dQ==", "dev": true, "license": "MIT", - "peer": true + "peer": true, + "dependencies": { + "@noble/ciphers": "1.2.1", + "@noble/hashes": "1.7.1", + "@nomicfoundation/hardhat-errors": "^3.0.15", + "@nomicfoundation/hardhat-utils": "^4.1.3", + "@nomicfoundation/hardhat-zod-utils": "^3.0.5", + "zod": "^3.23.8" + }, + "peerDependencies": { + "hardhat": "^3.8.0" + } }, - "node_modules/hash-base/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "node_modules/@nomicfoundation/hardhat-mocha": { + "version": "3.0.21", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-mocha/-/hardhat-mocha-3.0.21.tgz", + "integrity": "sha512-z2onvzLHEHTlSpv4+iuMjnlj7RVnaGrGXBpn3fuveE9MaTllnh/lOBGtCGbTmxjut1iL0giuPZtHuvtpbqstCg==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "@nomicfoundation/hardhat-errors": "^3.0.15", + "@nomicfoundation/hardhat-utils": "^4.1.2", + "@nomicfoundation/hardhat-zod-utils": "^3.0.5", + "tsx": "^4.19.3", + "zod": "^3.23.8" + }, + "peerDependencies": { + "hardhat": "^3.8.0", + "mocha": "^11.0.0" } }, - "node_modules/hash-base/node_modules/readable-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "node_modules/@nomicfoundation/hardhat-network-helpers": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-network-helpers/-/hardhat-network-helpers-3.0.11.tgz", + "integrity": "sha512-3/xuORejAOGbfqBmIen+OCHu9ExK9O8pjE11ILU9NcN37zy3GDbyNCKV9keK1gSjWWVb0okAlAR/yvewfEE4TA==", "dev": true, "license": "MIT", - "peer": true + "peer": true, + "dependencies": { + "@nomicfoundation/hardhat-errors": "^3.0.16", + "@nomicfoundation/hardhat-utils": "^4.1.4" + }, + "peerDependencies": { + "hardhat": "^3.8.0" + } }, - "node_modules/hash-base/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "node_modules/@nomicfoundation/hardhat-toolbox-mocha-ethers": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-toolbox-mocha-ethers/-/hardhat-toolbox-mocha-ethers-3.0.7.tgz", + "integrity": "sha512-7uF3QgU+o21AZjtZdp7YIS1daHj7fD0iSFkZwZE94Nxv54j5crFCNc7YPu1W+glBKmYjFKoRUqhyC30L9rNFrQ==", "dev": true, "license": "MIT", - "peer": true, - "dependencies": { - "safe-buffer": "~5.1.0" + "peerDependencies": { + "@nomicfoundation/hardhat-ethers": "^4.0.0", + "@nomicfoundation/hardhat-ethers-chai-matchers": "^3.0.0", + "@nomicfoundation/hardhat-ignition": "^3.0.0", + "@nomicfoundation/hardhat-ignition-ethers": "^3.0.0", + "@nomicfoundation/hardhat-keystore": "^3.0.0", + "@nomicfoundation/hardhat-mocha": "^3.0.0", + "@nomicfoundation/hardhat-network-helpers": "^3.0.0", + "@nomicfoundation/hardhat-typechain": "^3.0.0", + "@nomicfoundation/hardhat-verify": "^3.0.0", + "@nomicfoundation/ignition-core": "^3.0.0", + "chai": ">=5.1.2 <7", + "ethers": "^6.14.0", + "hardhat": "^3.8.0", + "mocha": "^11.0.0" } }, - "node_modules/hash-base/node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "node_modules/@nomicfoundation/hardhat-typechain": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-typechain/-/hardhat-typechain-3.1.1.tgz", + "integrity": "sha512-2+G5L6RPNVpdQtr2nqNOv/qnNNo9GNmJ5V/w2ozJnApEdMxyLiEOOcVcFtZIFQ6Un2clzMph2HbkSwaIT7buEQ==", "dev": true, "license": "MIT", - "peer": true + "peer": true, + "dependencies": { + "@nomicfoundation/hardhat-errors": "^3.0.15", + "@nomicfoundation/hardhat-utils": "^4.1.3", + "@nomicfoundation/hardhat-zod-utils": "^3.0.4", + "@typechain/ethers-v6": "^0.5.0", + "typechain": "^8.3.1", + "zod": "^3.23.8" + }, + "peerDependencies": { + "@nomicfoundation/hardhat-ethers": "^4.0.0", + "ethers": "^6.14.0", + "hardhat": "^3.8.0" + } }, - "node_modules/hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "node_modules/@nomicfoundation/hardhat-utils": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-utils/-/hardhat-utils-4.1.5.tgz", + "integrity": "sha512-EokhnMFDkDQPSsxrzyDAuCJuMbEsNWfMIMPgeB+FY8wnArl+dZR7tkd5UV2iooSlyxF+H3zj/0RKReXscTyijQ==", "dev": true, "license": "MIT", "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" + "@streamparser/json-node": "^0.0.22", + "env-paths": "^2.2.0", + "ethereum-cryptography": "^2.2.1", + "fast-equals": "^5.4.0", + "json-stream-stringify": "^3.1.6", + "rfdc": "^1.3.1", + "undici": "^6.16.1" } }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "node_modules/@nomicfoundation/hardhat-vendored": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-vendored/-/hardhat-vendored-3.0.4.tgz", + "integrity": "sha512-RO8Otj1FvRvxJmXzkxh1vTwK/+cqSVPYLqY6RrWkmzHEEcxnAwAFsBYdW7xyTEyW/pVbSSNd2gs3aoGdGZaoNA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@nomicfoundation/hardhat-verify": { + "version": "3.0.21", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-verify/-/hardhat-verify-3.0.21.tgz", + "integrity": "sha512-kaV9BfmFw5VbjMEyyQxoXVe0qwkEUi7wfi/WVTiVU0mdUUwojvk8hv0oT87vHO6FeYVGAcN/FEwmYZqBOiip6Q==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "function-bind": "^1.1.2" + "@ethersproject/abi": "^5.8.0", + "@nomicfoundation/hardhat-errors": "^3.0.16", + "@nomicfoundation/hardhat-utils": "^4.1.4", + "@nomicfoundation/hardhat-zod-utils": "^3.0.5", + "cbor2": "^1.9.0", + "zod": "^3.23.8" }, - "engines": { - "node": ">= 0.4" + "peerDependencies": { + "hardhat": "^3.8.0" } }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "node_modules/@nomicfoundation/hardhat-zod-utils": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-zod-utils/-/hardhat-zod-utils-3.0.5.tgz", + "integrity": "sha512-A1G9Jcizf/vYcGMtqkf+st94zBPTDB+bXXlojOMu77gmBZYbywY0k7hdRM2B4uJY+8nM0oe0sNVGVkARITXdcw==", "dev": true, "license": "MIT", - "bin": { - "he": "bin/he" + "dependencies": { + "@nomicfoundation/hardhat-errors": "^3.0.13", + "@nomicfoundation/hardhat-utils": "^4.1.2" + }, + "peerDependencies": { + "zod": "^3.23.8" } }, - "node_modules/heap": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.7.tgz", - "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==", + "node_modules/@nomicfoundation/ignition-core": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ignition-core/-/ignition-core-3.1.8.tgz", + "integrity": "sha512-HJsV8WNa3wa9g8eqNqT4ZsgEI/zNEmByHCro6yHRc+E1VbCZCalXScgZ2ZSjsZlvQdMw19sk8av1YIxRm28rRw==", "dev": true, "license": "MIT", - "peer": true + "peer": true, + "dependencies": { + "@ethersproject/address": "5.6.1", + "@nomicfoundation/hardhat-errors": "^3.0.16", + "@nomicfoundation/hardhat-utils": "^4.1.4", + "@nomicfoundation/solidity-analyzer": "^0.1.1", + "cbor2": "^1.9.0", + "ethers": "^6.14.0", + "immer": "10.0.2", + "lodash-es": "4.17.21", + "ndjson": "2.0.0" + } }, - "node_modules/hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "node_modules/@nomicfoundation/ignition-core/node_modules/@ethersproject/address": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.6.1.tgz", + "integrity": "sha512-uOgF0kS5MJv9ZvCz7x6T2EXJSzotiybApn4XlOgoTX0xdtyVIJ7pF+6cGPxiEq/dpBiTfMiw7Yc81JcwhSYA0Q==", "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", + "peer": true, "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/rlp": "^5.6.1" } }, - "node_modules/http-basic": { - "version": "8.1.3", - "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz", - "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==", + "node_modules/@nomicfoundation/ignition-ui": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ignition-ui/-/ignition-ui-3.1.2.tgz", + "integrity": "sha512-OoS5eQi9WBeiYI6EXurhqrpr6syRVhnaUzdx5fyK/1syKGq9BsjWWHXTNru0qk5ZFQ9f/KMTZotcDZD4eAdCpg==", + "dev": true, + "peer": true + }, + "node_modules/@nomicfoundation/solidity-analyzer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.2.tgz", + "integrity": "sha512-q4n32/FNKIhQ3zQGGw5CvPF6GTvDCpYwIf7bEY/dZTZbgfDsHyjJwURxUJf3VQuuJj+fDIFl4+KkBVbw4Ef6jA==", "dev": true, "license": "MIT", - "peer": true, - "dependencies": { - "caseless": "^0.12.0", - "concat-stream": "^1.6.2", - "http-response-object": "^3.0.1", - "parse-cache-control": "^1.0.1" - }, "engines": { - "node": ">=6.0.0" + "node": ">= 12" + }, + "optionalDependencies": { + "@nomicfoundation/solidity-analyzer-darwin-arm64": "0.1.2", + "@nomicfoundation/solidity-analyzer-darwin-x64": "0.1.2", + "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": "0.1.2", + "@nomicfoundation/solidity-analyzer-linux-arm64-musl": "0.1.2", + "@nomicfoundation/solidity-analyzer-linux-x64-gnu": "0.1.2", + "@nomicfoundation/solidity-analyzer-linux-x64-musl": "0.1.2", + "@nomicfoundation/solidity-analyzer-win32-x64-msvc": "0.1.2" } }, - "node_modules/http-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", - "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "node_modules/@nomicfoundation/solidity-analyzer-darwin-arm64": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.2.tgz", + "integrity": "sha512-JaqcWPDZENCvm++lFFGjrDd8mxtf+CtLd2MiXvMNTBD33dContTZ9TWETwNFwg7JTJT5Q9HEecH7FA+HTSsIUw==", "dev": true, "license": "MIT", - "dependencies": { - "depd": "~2.0.0", - "inherits": "~2.0.4", - "setprototypeof": "~1.2.0", - "statuses": "~2.0.2", - "toidentifier": "~1.0.1" - }, + "optional": true, "engines": { - "node": ">= 0.8" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "node": ">= 12" } }, - "node_modules/http-response-object": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz", - "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==", + "node_modules/@nomicfoundation/solidity-analyzer-darwin-x64": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.2.tgz", + "integrity": "sha512-fZNmVztrSXC03e9RONBT+CiksSeYcxI1wlzqyr0L7hsQlK1fzV+f04g2JtQ1c/Fe74ZwdV6aQBdd6Uwl1052sw==", "dev": true, "license": "MIT", - "peer": true, - "dependencies": { - "@types/node": "^10.0.3" + "optional": true, + "engines": { + "node": ">= 12" } }, - "node_modules/http-response-object/node_modules/@types/node": { - "version": "10.17.60", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", - "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==", + "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-gnu": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.2.tgz", + "integrity": "sha512-3d54oc+9ZVBuB6nbp8wHylk4xh0N0Gc+bk+/uJae+rUgbOBwQSfuGIbAZt1wBXs5REkSmynEGcqx6DutoK0tPA==", "dev": true, "license": "MIT", - "peer": true + "optional": true, + "engines": { + "node": ">= 12" + } }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-musl": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.2.tgz", + "integrity": "sha512-iDJfR2qf55vgsg7BtJa7iPiFAsYf2d0Tv/0B+vhtnI16+wfQeTbP7teookbGvAo0eJo7aLLm0xfS/GTkvHIucA==", "dev": true, "license": "MIT", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, + "optional": true, "engines": { - "node": ">= 6" + "node": ">= 12" } }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-gnu": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.2.tgz", + "integrity": "sha512-9dlHMAt5/2cpWyuJ9fQNOUXFB/vgSFORg1jpjX1Mh9hJ/MfZXlDdHQ+DpFCs32Zk5pxRBb07yGvSHk9/fezL+g==", "dev": true, "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, + "optional": true, "engines": { - "node": ">=0.10.0" + "node": ">= 12" } }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-musl": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.2.tgz", + "integrity": "sha512-GzzVeeJob3lfrSlDKQw2bRJ8rBf6mEYaWY+gW0JnTDHINA0s2gPR4km5RLIj1xeZZOYz4zRw+AEeYgLRqB2NXg==", "dev": true, "license": "MIT", - "peer": true, + "optional": true, "engines": { - "node": ">= 4" + "node": ">= 12" } }, - "node_modules/immer": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/immer/-/immer-10.0.2.tgz", - "integrity": "sha512-Rx3CqeqQ19sxUtYV9CU911Vhy8/721wRFnJv3REVGWUmoAcIwzifTsdmJte/MV+0/XpM35LZdQMBGkRIoLPwQA==", + "node_modules/@nomicfoundation/solidity-analyzer-win32-x64-msvc": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.2.tgz", + "integrity": "sha512-Fdjli4DCcFHb4Zgsz0uEJXZ2K7VEO+w5KVv7HmT7WO10iODdU9csC2az4jrhEsRtiR9Gfd74FlG0NYlw1BMdyA==", "dev": true, "license": "MIT", - "peer": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/immer" + "optional": true, + "engines": { + "node": ">= 12" } }, - "node_modules/immutable": { - "version": "4.3.8", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.8.tgz", - "integrity": "sha512-d/Ld9aLbKpNwyl0KiM2CT1WYvkitQ1TSvmRtkcV8FKStiDoA7Slzgjmb/1G2yhKM1p0XeNOieaTbFZmU1d3Xuw==", + "node_modules/@openzeppelin/contracts": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-5.6.1.tgz", + "integrity": "sha512-Ly6SlsVJ3mj+b18W3R8gNufB7dTICT105fJhodGAGgyC2oqnBAhqSiNDJ8V8DLY05cCz81GLI0CU5vNYA1EC/w==", "dev": true, "license": "MIT" }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "engines": { - "node": ">=8" + "node": ">=14" } }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "node_modules/@scure/base": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", + "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", "dev": true, - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" + "license": "MIT", + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true, - "license": "ISC", - "peer": true - }, - "node_modules/interpret": { + "node_modules/@scure/bip32": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.4.0.tgz", + "integrity": "sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==", "dev": true, "license": "MIT", - "peer": true, - "engines": { - "node": ">= 0.10" + "dependencies": { + "@noble/curves": "~1.4.0", + "@noble/hashes": "~1.4.0", + "@scure/base": "~1.1.6" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/io-ts": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz", - "integrity": "sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==", + "node_modules/@scure/bip32/node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", "dev": true, "license": "MIT", - "dependencies": { - "fp-ts": "^1.0.0" + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "node_modules/@scure/bip39": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.3.0.tgz", + "integrity": "sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==", "dev": true, "license": "MIT", "dependencies": { - "binary-extensions": "^2.0.0" + "@noble/hashes": "~1.4.0", + "@scure/base": "~1.1.6" }, - "engines": { - "node": ">=8" + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "node_modules/@scure/bip39/node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", "dev": true, "license": "MIT", - "peer": true, "engines": { - "node": ">= 0.4" + "node": ">= 16" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://paulmillr.com/funding/" } }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "node_modules/@sentry/core": { + "version": "9.47.1", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-9.47.1.tgz", + "integrity": "sha512-KX62+qIt4xgy8eHKHiikfhz2p5fOciXd0Cl+dNzhgPFq8klq4MGMNaf148GB3M/vBqP4nw/eFvRMAayFCgdRQw==", "dev": true, "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=18" } }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "node_modules/@streamparser/json": { + "version": "0.0.22", + "resolved": "https://registry.npmjs.org/@streamparser/json/-/json-0.0.22.tgz", + "integrity": "sha512-b6gTSBjJ8G8SuO3Gbbj+zXbVx8NSs1EbpbMKpzGLWMdkR+98McH9bEjSz3+0mPJf68c5nxa3CrJHp5EQNXM6zQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@streamparser/json-node": { + "version": "0.0.22", + "resolved": "https://registry.npmjs.org/@streamparser/json-node/-/json-node-0.0.22.tgz", + "integrity": "sha512-sJT2ptNRwqB1lIsQrQlCoWk5rF4tif9wDh+7yluAGijJamAhrHGYpFB/Zg3hJeceoZypi74ftXk8DHzwYpbZSg==", "dev": true, "license": "MIT", - "engines": { - "node": ">=8" + "dependencies": { + "@streamparser/json": "^0.0.22" } }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "node_modules/@typechain/ethers-v6": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@typechain/ethers-v6/-/ethers-v6-0.5.1.tgz", + "integrity": "sha512-F+GklO8jBWlsaVV+9oHaPh5NJdd6rAKN4tklGfInX1Q7h0xPgVLP39Jl3eCulPB5qexI71ZFHwbljx4ZXNfouA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "is-extglob": "^2.1.1" + "lodash": "^4.17.15", + "ts-essentials": "^7.0.1" }, - "engines": { - "node": ">=0.10.0" + "peerDependencies": { + "ethers": "6.x", + "typechain": "^8.3.2", + "typescript": ">=4.7.0" } }, - "node_modules/is-hex-prefixed": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", - "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==", + "node_modules/@types/chai": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz", + "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==", "dev": true, "license": "MIT", "peer": true, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" + "dependencies": { + "@types/deep-eql": "*", + "assertion-error": "^2.0.1" } }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "node_modules/@types/chai-as-promised": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-8.0.2.tgz", + "integrity": "sha512-meQ1wDr1K5KRCSvG2lX7n7/5wf70BeptTKst0axGvnN6zqaVpRqegoIbugiAPSqOW9K9aL8gDVrm7a2LXOtn2Q==", "dev": true, "license": "MIT", - "engines": { - "node": ">=0.12.0" + "peer": true, + "dependencies": { + "@types/chai": "*" } }, - "node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "node_modules/@types/deep-eql": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", + "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", "dev": true, "license": "MIT", - "engines": { - "node": ">=8" - } + "peer": true }, - "node_modules/is-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", - "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "node_modules/@types/node": { + "version": "22.7.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz", + "integrity": "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "which-typed-array": "^1.1.16" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "undici-types": "~6.19.2" } }, - "node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "node_modules/@types/prettier": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", + "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==", "dev": true, "license": "MIT", "peer": true }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "license": "ISC", - "peer": true - }, - "node_modules/js-sha3": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", - "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==", + "node_modules/@typescript/typescript-aix-ppc64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-aix-ppc64/-/typescript-aix-ppc64-7.0.2.tgz", + "integrity": "sha512-MTKKkWB7p/0E9xi1d1tHtZ5PiLkGEMIq88pK2CubZjOsLtYTLqhgIgi6zepFa+9GHZ6h05NMCkQxGKiPXMxXtQ==", + "cpu": [ + "ppc64" + ], "dev": true, - "license": "MIT" + "license": "Apache-2.0", + "optional": true, + "os": [ + "aix" + ], + "peer": true, + "engines": { + "node": ">=16.20.0" + } }, - "node_modules/js-yaml": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", - "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "node_modules/@typescript/typescript-darwin-arm64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-darwin-arm64/-/typescript-darwin-arm64-7.0.2.tgz", + "integrity": "sha512-gowzar9MwS/aRWp6f3a4KUqzRjAZjOsmGNCM6LcTgXum+dBfgsBVMN+AgvOCCbguXyick6LJhpBszxMebJ8syA==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "peer": true, + "engines": { + "node": ">=16.20.0" } }, - "node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "node_modules/@typescript/typescript-darwin-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-darwin-x64/-/typescript-darwin-x64-7.0.2.tgz", + "integrity": "sha512-SZ9xZInqApNlNGc9s0W1VSsktYSOe9cFqNOIqmN1Gs8SmkjKZYFt017G4VwPxASInODuAdbTW7sXiFUf893RgA==", + "cpu": [ + "x64" + ], "dev": true, - "license": "MIT", - "peer": true + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "peer": true, + "engines": { + "node": ">=16.20.0" + } }, - "node_modules/json-stream-stringify": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/json-stream-stringify/-/json-stream-stringify-3.1.6.tgz", - "integrity": "sha512-x7fpwxOkbhFCaJDJ8vb1fBY3DdSa4AlITaz+HHILQJzdPMnHEFjxPwVUi1ALIbcIxDE0PNe/0i7frnY8QnBQog==", + "node_modules/@typescript/typescript-freebsd-arm64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-freebsd-arm64/-/typescript-freebsd-arm64-7.0.2.tgz", + "integrity": "sha512-W5NH4y/J0plIIS5b2xvTEkU7JFxyqdMAOgf+Ilhl0vHQXKO5dZoxd+C/jEtq56c4F3wk71RB4BMRQ2XdI+bwYQ==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "MIT", + "license": "Apache-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "peer": true, "engines": { - "node": ">=7.10.1" + "node": ">=16.20.0" } }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "node_modules/@typescript/typescript-freebsd-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-freebsd-x64/-/typescript-freebsd-x64-7.0.2.tgz", + "integrity": "sha512-UMGDx5sTpzNw3WiPebH7l90IWfJggEd+egHt/q6p7/Cm3zqoV7VxkGXt+3DxPIw8CcmvAB0j3sVVfbhX+M4Tpw==", + "cpu": [ + "x64" + ], "dev": true, - "license": "ISC", - "peer": true + "license": "Apache-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "peer": true, + "engines": { + "node": ">=16.20.0" + } }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "node_modules/@typescript/typescript-linux-arm": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-arm/-/typescript-linux-arm-7.0.2.tgz", + "integrity": "sha512-gffT3xPz9sR7j/YJExkyPntrI0P2EP9XbOyWzth2/Gs0RstK+90RBcO0ncXoXy/beYll1SXw846Nf2zdnEz0QQ==", + "cpu": [ + "arm" + ], "dev": true, - "license": "MIT", + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], "peer": true, - "bin": { - "json5": "lib/cli.js" - }, "engines": { - "node": ">=6" + "node": ">=16.20.0" } }, - "node_modules/jsonfile": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", - "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "node_modules/@typescript/typescript-linux-arm64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-arm64/-/typescript-linux-arm64-7.0.2.tgz", + "integrity": "sha512-Qh4eU4/y3yDjnfjjyPYihMj5/ODIlmt+Bzu17OI+fiSRDW57QmU5SiN63exPRNJPKUzcc1INa1NXdrJ+MqHjUQ==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "MIT", + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], "peer": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "engines": { + "node": ">=16.20.0" } }, - "node_modules/jsonschema": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.5.0.tgz", - "integrity": "sha512-K+A9hhqbn0f3pJX17Q/7H6yQfD/5OXgdrR5UE12gMXCiN9D5Xq2o5mddV2QEcX/bjla99ASsAAQUyMCCRWAEhw==", + "node_modules/@typescript/typescript-linux-loong64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-loong64/-/typescript-linux-loong64-7.0.2.tgz", + "integrity": "sha512-uEHck9i8hoAzXPiYRib1O7miOnz23SxIeVl6F4LXox+qov1K35jHcEW6VHKvZI+pyvl7fZEP4MCU5LYvIq1GuQ==", + "cpu": [ + "loong64" + ], "dev": true, - "license": "MIT", + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], "peer": true, "engines": { - "node": "*" + "node": ">=16.20.0" } }, - "node_modules/keccak": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.4.tgz", - "integrity": "sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==", + "node_modules/@typescript/typescript-linux-mips64el": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-mips64el/-/typescript-linux-mips64el-7.0.2.tgz", + "integrity": "sha512-R4KvAMnE43W5Qeqb0Ly56O3mWMWIAgsMyz36DCaycd5nbg/9kzm0liw3JocfRqyJY0KPmzFjbswozXyW0DnIYA==", + "cpu": [ + "mips64el" + ], "dev": true, - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0", - "readable-stream": "^3.6.0" - }, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "peer": true, "engines": { - "node": ">=10.0.0" + "node": ">=16.20.0" } }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "node_modules/@typescript/typescript-linux-ppc64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-ppc64/-/typescript-linux-ppc64-7.0.2.tgz", + "integrity": "sha512-DORx5b3sd/4S7eayxm4FQv+A7CrkUIGRaHiwI8oiHTAI1fAPWhF4J0vAlkC8biAlHSVVwxMQ3tjZ2/DVbnQiiA==", + "cpu": [ + "ppc64" + ], "dev": true, - "license": "MIT", + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], "peer": true, "engines": { - "node": ">=0.10.0" + "node": ">=16.20.0" } }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "node_modules/@typescript/typescript-linux-riscv64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-riscv64/-/typescript-linux-riscv64-7.0.2.tgz", + "integrity": "sha512-wf0jqEDOjrPRnKwYRyyJDRo11KMbvMFrU+q4zqKyChODBzvlkbhNQfKvLxQCcwTpdDaXSHZTVuh0JoCrKCUMHQ==", + "cpu": [ + "riscv64" + ], "dev": true, - "license": "MIT", + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], "peer": true, "engines": { - "node": ">=6" + "node": ">=16.20.0" } }, - "node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "node_modules/@typescript/typescript-linux-s390x": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-s390x/-/typescript-linux-s390x-7.0.2.tgz", + "integrity": "sha512-IkwJc3L7yhytWd/ewjyxNDfOmswCm9GWMJT/ue/dU4aZNbwZeYAetq42VyLmsmSjvoX7z74X6ZaYCtzAr0EuGw==", + "cpu": [ + "s390x" + ], "dev": true, - "license": "MIT", + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], "peer": true, - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, "engines": { - "node": ">= 0.8.0" + "node": ">=16.20.0" } }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "node_modules/@typescript/typescript-linux-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-x64/-/typescript-linux-x64-7.0.2.tgz", + "integrity": "sha512-EYdf2cNg7rgCWJnxCdJ+F3V39O8ihb37eHAu1LK8oAFizgTQbPOK7zHHXbPt8rX24COqODXeI3sIf0fCXG7H/A==", + "cpu": [ + "x64" + ], "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "peer": true, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=16.20.0" } }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "node_modules/@typescript/typescript-netbsd-arm64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-netbsd-arm64/-/typescript-netbsd-arm64-7.0.2.tgz", + "integrity": "sha512-+polYF4MF04aPpO5FTkHran9yUQDSXqy5GiSDKpsll5jy3l3+g9QLhpf39T+ePtefhXLOGrLl0QIjkQP6VnelA==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "MIT" + "license": "Apache-2.0", + "optional": true, + "os": [ + "netbsd" + ], + "peer": true, + "engines": { + "node": ">=16.20.0" + } }, - "node_modules/lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "node_modules/@typescript/typescript-netbsd-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-netbsd-x64/-/typescript-netbsd-x64-7.0.2.tgz", + "integrity": "sha512-8YIT0EHM/3dq10ZOVF/A7pc/YSMtbcecct4rWtexrnSCHOPcpC2KTLXfTCR6vDpnSiY12heNb1GiN/wu+T/FyA==", + "cpu": [ + "x64" + ], "dev": true, - "license": "MIT", - "peer": true + "license": "Apache-2.0", + "optional": true, + "os": [ + "netbsd" + ], + "peer": true, + "engines": { + "node": ">=16.20.0" + } }, - "node_modules/lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", + "node_modules/@typescript/typescript-openbsd-arm64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-openbsd-arm64/-/typescript-openbsd-arm64-7.0.2.tgz", + "integrity": "sha512-APT8+ClYnuYm1u9+kgGXoMj2VzWzcymwh2gNSQVySHfkRDGOTVkoWLjCmOQSaO+PoqQ57B0flRp9SA+7GnnkzQ==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "MIT", - "peer": true + "license": "Apache-2.0", + "optional": true, + "os": [ + "openbsd" + ], + "peer": true, + "engines": { + "node": ">=16.20.0" + } }, - "node_modules/lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", - "deprecated": "This package is deprecated. Use require('node:util').isDeepStrictEqual instead.", + "node_modules/@typescript/typescript-openbsd-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-openbsd-x64/-/typescript-openbsd-x64-7.0.2.tgz", + "integrity": "sha512-yX7s+Q0Dln0Dt9tEzZsAjXXR/+ytBM7AlglaqyeMPxQszJ1JhlJdZ6jLA+IzldHtflX81em7lDao1xXu+aRRkg==", + "cpu": [ + "x64" + ], "dev": true, - "license": "MIT", - "peer": true + "license": "Apache-2.0", + "optional": true, + "os": [ + "openbsd" + ], + "peer": true, + "engines": { + "node": ">=16.20.0" + } }, - "node_modules/lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", + "node_modules/@typescript/typescript-sunos-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-sunos-x64/-/typescript-sunos-x64-7.0.2.tgz", + "integrity": "sha512-dLJDGaLZ1D4HPQn62u1n8mBDkJREwMsAkCdkwd4Ieqw+x3TUyTsqY0YiBCtE6H6OzzgGk3iuZ3vFWRS+E8/d1g==", + "cpu": [ + "x64" + ], "dev": true, - "license": "MIT", - "peer": true + "license": "Apache-2.0", + "optional": true, + "os": [ + "sunos" + ], + "peer": true, + "engines": { + "node": ">=16.20.0" + } }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "node_modules/@typescript/typescript-win32-arm64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-win32-arm64/-/typescript-win32-arm64-7.0.2.tgz", + "integrity": "sha512-Gyl1Vy6OsWesLzmq+EP0Fb7b4Nid5232AvcA2SFcdYreldpNtYFFofPjnt62y9hQy7VTaZp65ICJjuAQRaVcIQ==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, + "license": "Apache-2.0", + "optional": true, + "os": [ + "win32" + ], + "peer": true, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=16.20.0" } }, - "node_modules/loupe": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", - "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", + "node_modules/@typescript/typescript-win32-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-win32-x64/-/typescript-win32-x64-7.0.2.tgz", + "integrity": "sha512-0BQ3HkAHHlKLSp1qRvf3SUhGpGsDuhB/jgFw75guyqbxJqEaS0Cw/VFO8i2nHglJUzQCRtMMR/IBAKE3ETMC4g==", + "cpu": [ + "x64" + ], "dev": true, - "license": "MIT", + "license": "Apache-2.0", + "optional": true, + "os": [ + "win32" + ], "peer": true, - "dependencies": { - "get-func-name": "^2.0.1" + "engines": { + "node": ">=16.20.0" } }, - "node_modules/lru_map": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", - "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==", + "node_modules/adm-zip": { + "version": "0.4.16", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", + "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=0.3.0" + } }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "node_modules/aes-js": { + "version": "4.0.0-beta.5", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz", + "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==", "dev": true, - "license": "ISC", + "license": "MIT", "peer": true }, - "node_modules/markdown-table": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.3.tgz", - "integrity": "sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==", + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", "dev": true, "license": "MIT", - "peer": true + "engines": { + "node": ">=6" + } }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "license": "MIT", - "peer": true, "engines": { - "node": ">= 0.4" + "node": ">=8" } }, - "node_modules/md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/memorystream": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", - "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true, - "engines": { - "node": ">= 0.10.0" - } + "license": "Python-2.0", + "peer": true }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "node_modules/array-back": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", + "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", "dev": true, "license": "MIT", "peer": true, "engines": { - "node": ">= 8" + "node": ">=6" } }, - "node_modules/micro-eth-signer": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/micro-eth-signer/-/micro-eth-signer-0.14.0.tgz", - "integrity": "sha512-5PLLzHiVYPWClEvZIXXFu5yutzpadb73rnQCpUqIHu3No3coFuWQNfE5tkBQJ7djuLYl6aRLaS0MgWJYGoqiBw==", + "node_modules/assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", "dev": true, "license": "MIT", - "dependencies": { - "@noble/curves": "~1.8.1", - "@noble/hashes": "~1.7.1", - "micro-packed": "~0.7.2" + "peer": true, + "engines": { + "node": ">=12" } }, - "node_modules/micro-eth-signer/node_modules/@noble/curves": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.8.2.tgz", - "integrity": "sha512-vnI7V6lFNe0tLAuJMu+2sX+FcL14TaCWy1qiczg1VwRmPrpQCdq5ESXQMqUc2tluRNf6irBXrWbl1mGN8uaU/g==", + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true, "license": "MIT", - "dependencies": { - "@noble/hashes": "1.7.2" - }, - "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } + "peer": true + }, + "node_modules/bn.js": { + "version": "5.2.5", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.5.tgz", + "integrity": "sha512-Vq886eXykuP5E6HcKSSStP3bJgrE6In5WKxVUvJ8XGpWWYs2xZHWqUwzCtGgEtBcxyd57KBFDPFoUfNzdaHCNg==", + "dev": true, + "license": "MIT", + "peer": true }, - "node_modules/micro-eth-signer/node_modules/@noble/hashes": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.7.2.tgz", - "integrity": "sha512-biZ0NUSxyjLLqo6KxEJ1b+C2NAx0wtDoFvCaXHGgUkeHzf3Xc1xKumFKREuT7f7DARNZ/slvYUwFG6B0f2b6hQ==", + "node_modules/brace-expansion": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.2.tgz", + "integrity": "sha512-w5JZcKgdhDOgOwm8H+KgbosopHMuGcl6qbulwjtz3SM7I7P3yW1eAjzMPLrIE+NQ9vjgANKHWeMHnrT0OXW1oA==", "dev": true, "license": "MIT", - "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" + "peer": true, + "dependencies": { + "balanced-match": "^1.0.0" } }, - "node_modules/micro-ftch": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/micro-ftch/-/micro-ftch-0.3.1.tgz", - "integrity": "sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==", + "node_modules/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", "dev": true, "license": "MIT", "peer": true }, - "node_modules/micro-packed": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/micro-packed/-/micro-packed-0.7.3.tgz", - "integrity": "sha512-2Milxs+WNC00TRlem41oRswvw31146GiSaoCT7s3Xi2gMUglW5QBeqlQaZeHr5tJx9nm3i57LNXPqxOOaWtTYg==", + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true, + "license": "ISC", + "peer": true + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, "license": "MIT", - "dependencies": { - "@scure/base": "~1.2.5" + "peer": true, + "engines": { + "node": ">=10" }, "funding": { - "url": "https://paulmillr.com/funding/" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "node_modules/cbor2": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/cbor2/-/cbor2-1.12.0.tgz", + "integrity": "sha512-3Cco8XQhi27DogSp9Ri6LYNZLi/TBY/JVnDe+mj06NkBjW/ZYOtekaEU4wZ4xcRMNrFkDv8KNtOAqHyDfz3lYg==", "dev": true, "license": "MIT", "peer": true, - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, "engines": { - "node": ">=8.6" + "node": ">=18.7" } }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "node_modules/chai": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.2.tgz", + "integrity": "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==", "dev": true, "license": "MIT", "peer": true, "engines": { - "node": ">= 0.6" + "node": ">=18" } }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "node_modules/chai-as-promised": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-8.0.2.tgz", + "integrity": "sha512-1GadL+sEJVLzDjcawPM4kjfnL+p/9vrxiEUonowKOAzvVg0PixJUdtuDzdkDeQhK3zfOE76GqGkZIQ7/Adcrqw==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "mime-db": "1.52.0" + "check-error": "^2.1.1" }, - "engines": { - "node": ">= 0.6" + "peerDependencies": { + "chai": ">= 2.1.2 < 7" } }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true, - "license": "ISC" - }, - "node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", - "dev": true, - "license": "MIT" - }, - "node_modules/minimatch": { - "version": "5.1.9", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz", - "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==", + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "ISC", + "license": "MIT", + "peer": true, "dependencies": { - "brace-expansion": "^2.0.1" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { "node": ">=10" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, - "license": "MIT", - "peer": true, + }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "minimist": "^1.2.6" + "has-flag": "^4.0.0" }, - "bin": { - "mkdirp": "bin/cmd.js" + "engines": { + "node": ">=8" } }, - "node_modules/mnemonist": { - "version": "0.38.5", - "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz", - "integrity": "sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==", + "node_modules/check-error": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.3.tgz", + "integrity": "sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==", "dev": true, "license": "MIT", - "dependencies": { - "obliterator": "^2.0.0" + "peer": true, + "engines": { + "node": ">= 16" } }, - "node_modules/mocha": { - "version": "10.8.2", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz", - "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==", + "node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", "dev": true, "license": "MIT", "dependencies": { - "ansi-colors": "^4.1.3", - "browser-stdout": "^1.3.1", - "chokidar": "^3.5.3", - "debug": "^4.3.5", - "diff": "^5.2.0", - "escape-string-regexp": "^4.0.0", - "find-up": "^5.0.0", - "glob": "^8.1.0", - "he": "^1.2.0", - "js-yaml": "^4.1.0", - "log-symbols": "^4.1.0", - "minimatch": "^5.1.6", - "ms": "^2.1.3", - "serialize-javascript": "^6.0.2", - "strip-json-comments": "^3.1.1", - "supports-color": "^8.1.1", - "workerpool": "^6.5.1", - "yargs": "^16.2.0", - "yargs-parser": "^20.2.9", - "yargs-unparser": "^2.0.0" - }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha.js" + "readdirp": "^4.0.1" }, "engines": { - "node": ">= 14.0.0" + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/mocha/node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, - "license": "MIT", + "license": "ISC", + "peer": true, "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" }, "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" + "node": ">=12" } }, - "node_modules/mocha/node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "node_modules/cliui/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "picomatch": "^2.2.1" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">=8.10.0" + "node": ">=8" } }, - "node_modules/mocha/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "has-flag": "^4.0.0" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/ndjson": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ndjson/-/ndjson-2.0.0.tgz", - "integrity": "sha512-nGl7LRGrzugTtaFcJMhLbpzJM6XdivmbkdlaGcrk/LXg2KL/YBC6z1g70xh0/al+oFuVFP8N8kiWRucmeEH/qQ==", + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", "peer": true, "dependencies": { - "json-stringify-safe": "^5.0.1", - "minimist": "^1.2.5", - "readable-stream": "^3.6.0", - "split2": "^3.0.0", - "through2": "^4.0.0" - }, - "bin": { - "ndjson": "cli.js" + "color-name": "~1.1.4" }, "engines": { - "node": ">=10" + "node": ">=7.0.0" } }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, "license": "MIT", "peer": true }, - "node_modules/node-addon-api": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", - "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==", + "node_modules/command-exists": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", + "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", "dev": true, "license": "MIT" }, - "node_modules/node-emoji": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", - "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", + "node_modules/command-line-args": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", + "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "lodash": "^4.17.21" + "array-back": "^3.1.0", + "find-replace": "^3.0.0", + "lodash.camelcase": "^4.3.0", + "typical": "^4.0.0" + }, + "engines": { + "node": ">=4.0.0" } }, - "node_modules/node-gyp-build": { - "version": "4.8.4", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", - "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", + "node_modules/command-line-usage": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.3.tgz", + "integrity": "sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==", "dev": true, "license": "MIT", - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" + "peer": true, + "dependencies": { + "array-back": "^4.0.2", + "chalk": "^2.4.2", + "table-layout": "^1.0.2", + "typical": "^5.2.0" + }, + "engines": { + "node": ">=8.0.0" } }, - "node_modules/nofilter": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz", - "integrity": "sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==", + "node_modules/command-line-usage/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "license": "MIT", "peer": true, + "dependencies": { + "color-convert": "^1.9.0" + }, "engines": { - "node": ">=12.19" + "node": ">=4" } }, - "node_modules/nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==", + "node_modules/command-line-usage/node_modules/array-back": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", "dev": true, - "license": "ISC", + "license": "MIT", "peer": true, - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" + "engines": { + "node": ">=8" } }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "node_modules/command-line-usage/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "license": "MIT", + "peer": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/number-to-bn": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", - "integrity": "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==", + "node_modules/command-line-usage/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "bn.js": "4.11.6", - "strip-hex-prefix": "1.0.0" - }, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" + "color-name": "1.1.3" } }, - "node_modules/number-to-bn/node_modules/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==", + "node_modules/command-line-usage/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true, "license": "MIT", "peer": true }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "node_modules/command-line-usage/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, "license": "MIT", "peer": true, "engines": { - "node": ">=0.10.0" + "node": ">=0.8.0" } }, - "node_modules/object-inspect": { - "version": "1.13.4", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "node_modules/command-line-usage/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, "license": "MIT", "peer": true, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/obliterator": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.5.tgz", - "integrity": "sha512-42CPE9AhahZRsMNslczq0ctAEtqk8Eka26QofnqC346BZdHDySk3LWka23LI7ULIw11NmltpiLagIq8gBozxTw==", - "dev": true, - "license": "MIT" - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" + "node": ">=4" } }, - "node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "node_modules/command-line-usage/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" + "has-flag": "^3.0.0" }, "engines": { - "node": ">= 0.8.0" + "node": ">=4" } }, - "node_modules/ordinal": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/ordinal/-/ordinal-1.0.3.tgz", - "integrity": "sha512-cMddMgb2QElm8G7vdaa02jhUNbTSrhsgAGUz1OokD83uJTwSUn+nKoNoKVVaRa08yF6sgfO7Maou1+bgLd9rdQ==", + "node_modules/command-line-usage/node_modules/typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", "dev": true, "license": "MIT", - "peer": true + "peer": true, + "engines": { + "node": ">=8" + } }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", "dev": true, "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">= 12" } }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true, "license": "MIT", + "peer": true + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "yocto-queue": "^0.1.0" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 8" } }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "p-limit": "^3.0.2" + "ms": "^2.1.3" }, "engines": { - "node": ">=10" + "node": ">=6.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/p-map": { + "node_modules/decamelize": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", "dev": true, "license": "MIT", - "dependencies": { - "aggregate-error": "^3.0.0" - }, + "peer": true, "engines": { "node": ">=10" }, @@ -5789,951 +2550,1051 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/parse-cache-control": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz", - "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==", + "node_modules/deep-eql": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", + "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", "dev": true, - "peer": true + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + } }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "dev": true, "license": "MIT", + "peer": true, "engines": { - "node": ">=8" + "node": ">=4.0.0" } }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "node_modules/diff": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-7.0.0.tgz", + "integrity": "sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==", "dev": true, - "license": "MIT", + "license": "BSD-3-Clause", "peer": true, "engines": { - "node": ">=0.10.0" + "node": ">=0.3.1" } }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "node_modules/elliptic": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", + "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", "dev": true, "license": "MIT", "peer": true, + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.5", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.5.tgz", + "integrity": "sha512-3aRg6/JxfffFD+OlOjOFR3Vo79l39ooBTFucxx+MT3dhCtzn3EmiUPQo+6/OZuI2jbXi3YKgmiTFBgChQMwIRQ==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/enquirer": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", + "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-colors": "^4.1.1", + "strip-ansi": "^6.0.1" + }, "engines": { - "node": ">=8" + "node": ">=8.6" } }, - "node_modules/pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", "dev": true, "license": "MIT", - "peer": true, "engines": { - "node": "*" + "node": ">=6" } }, - "node_modules/pbkdf2": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.5.tgz", - "integrity": "sha512-Q3CG/cYvCO1ye4QKkuH7EXxs3VC/rI1/trd+qX2+PolbaKG0H+bgcZzrTt96mMyRtejk+JMCiLUn3y29W8qmFQ==", + "node_modules/esbuild": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.1.tgz", + "integrity": "sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw==", "dev": true, + "hasInstallScript": true, "license": "MIT", - "peer": true, - "dependencies": { - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "ripemd160": "^2.0.3", - "safe-buffer": "^5.2.1", - "sha.js": "^2.4.12", - "to-buffer": "^1.2.1" + "bin": { + "esbuild": "bin/esbuild" }, "engines": { - "node": ">= 0.10" + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.28.1", + "@esbuild/android-arm": "0.28.1", + "@esbuild/android-arm64": "0.28.1", + "@esbuild/android-x64": "0.28.1", + "@esbuild/darwin-arm64": "0.28.1", + "@esbuild/darwin-x64": "0.28.1", + "@esbuild/freebsd-arm64": "0.28.1", + "@esbuild/freebsd-x64": "0.28.1", + "@esbuild/linux-arm": "0.28.1", + "@esbuild/linux-arm64": "0.28.1", + "@esbuild/linux-ia32": "0.28.1", + "@esbuild/linux-loong64": "0.28.1", + "@esbuild/linux-mips64el": "0.28.1", + "@esbuild/linux-ppc64": "0.28.1", + "@esbuild/linux-riscv64": "0.28.1", + "@esbuild/linux-s390x": "0.28.1", + "@esbuild/linux-x64": "0.28.1", + "@esbuild/netbsd-arm64": "0.28.1", + "@esbuild/netbsd-x64": "0.28.1", + "@esbuild/openbsd-arm64": "0.28.1", + "@esbuild/openbsd-x64": "0.28.1", + "@esbuild/openharmony-arm64": "0.28.1", + "@esbuild/sunos-x64": "0.28.1", + "@esbuild/win32-arm64": "0.28.1", + "@esbuild/win32-ia32": "0.28.1", + "@esbuild/win32-x64": "0.28.1" } }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, - "license": "ISC" + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + } }, - "node_modules/picomatch": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", - "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, "license": "MIT", + "peer": true, "engines": { - "node": ">=8.6" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "node_modules/ethereum-cryptography": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz", + "integrity": "sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@noble/curves": "1.4.2", + "@noble/hashes": "1.4.0", + "@scure/bip32": "1.4.0", + "@scure/bip39": "1.3.0" + } + }, + "node_modules/ethereum-cryptography/node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", "dev": true, "license": "MIT", - "peer": true, "engines": { - "node": ">=6" + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/possible-typed-array-names": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", - "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "node_modules/ethers": { + "version": "6.17.0", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.17.0.tgz", + "integrity": "sha512-BpyrpIPJ3ydEVow8zGaz1DuPS7YU8DcWxuBnY9a0UA/lvAPwrMr+EPXsfrul628SRaekPNeIM4UFh/91GWZang==", "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/ethers-io/" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", "peer": true, + "dependencies": { + "@adraffy/ens-normalize": "1.11.1", + "@noble/curves": "1.2.0", + "@noble/hashes": "1.3.2", + "@types/node": "22.7.5", + "aes-js": "4.0.0-beta.5", + "tslib": "2.7.0", + "ws": "8.21.0" + }, "engines": { - "node": ">= 0.4" + "node": ">=14.0.0" } }, - "node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "node_modules/ethers/node_modules/@noble/curves": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", + "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", "dev": true, + "license": "MIT", "peer": true, - "engines": { - "node": ">= 0.8.0" + "dependencies": { + "@noble/hashes": "1.3.2" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/prettier": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "node_modules/ethers/node_modules/@noble/hashes": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", + "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", "dev": true, "license": "MIT", "peer": true, - "bin": { - "prettier": "bin-prettier.js" - }, "engines": { - "node": ">=10.13.0" + "node": ">= 16" }, "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" + "url": "https://paulmillr.com/funding/" } }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/promise": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", - "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", + "node_modules/fast-equals": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.4.1.tgz", + "integrity": "sha512-DjlFSM5Pk9cGcL0q5QXl66eGzx0N6szNgaswwc5ZphlBohjTVJSnGgI+rJVOgOi65qUoQnDZN4nDqi33udtydQ==", "dev": true, "license": "MIT", - "peer": true, - "dependencies": { - "asap": "~2.0.6" + "engines": { + "node": ">=6.0.0" } }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "node_modules/find-replace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", + "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" + "array-back": "^3.0.1" }, "engines": { - "node": ">= 6" + "node": ">=4.0.0" } }, - "node_modules/proxy-from-env": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz", - "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==", + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "license": "MIT", "peer": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/qs": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.0.tgz", - "integrity": "sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ==", + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", "dev": true, "license": "BSD-3-Clause", "peer": true, - "dependencies": { - "side-channel": "^1.1.0" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "bin": { + "flat": "cli.js" } }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "node_modules/follow-redirects": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", + "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", "dev": true, "funding": [ { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" } ], "license": "MIT", - "peer": true + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", "dev": true, - "license": "MIT", + "license": "ISC", + "peer": true, "dependencies": { - "safe-buffer": "^5.1.0" + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/raw-body": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", - "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", + "node_modules/fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "bytes": "~3.1.2", - "http-errors": "~2.0.1", - "iconv-lite": "~0.4.24", - "unpipe": "~1.0.0" + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" }, "engines": { - "node": ">= 0.8" + "node": ">=6 <7 || >=8" } }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true, + "license": "ISC", + "peer": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, + "hasInstallScript": true, "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">= 6" + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/readdirp": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", - "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, - "license": "MIT", + "license": "ISC", + "peer": true, "engines": { - "node": ">= 14.18.0" - }, - "funding": { - "type": "individual", - "url": "https://paulmillr.com/funding/" + "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", + "node_modules/glob": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", "dev": true, + "license": "ISC", "peer": true, "dependencies": { - "resolve": "^1.1.6" + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" }, - "engines": { - "node": ">= 0.10" + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/recursive-readdir": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", - "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC", + "peer": true + }, + "node_modules/hardhat": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-3.10.0.tgz", + "integrity": "sha512-cdKIhSX0zVH/oONOexChuE4w1/w/D3wNFdXpxKeIV5Z1xkyoc0QFXVTWR079eIz+ZcHEND24+hfY878UOFezeA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "minimatch": "^3.0.5" + "@nomicfoundation/edr": "0.14.0", + "@nomicfoundation/hardhat-errors": "^3.0.17", + "@nomicfoundation/hardhat-utils": "^4.1.5", + "@nomicfoundation/hardhat-vendored": "^3.0.4", + "@nomicfoundation/hardhat-zod-utils": "^3.0.5", + "@nomicfoundation/solidity-analyzer": "^0.1.1", + "@sentry/core": "^9.4.0", + "adm-zip": "^0.4.16", + "chokidar": "^4.0.3", + "enquirer": "^2.3.0", + "ethereum-cryptography": "^2.2.1", + "micro-eth-signer": "^0.14.0", + "p-map": "^7.0.2", + "resolve.exports": "^2.0.3", + "semver": "^7.6.3", + "tsx": "^4.19.3", + "ws": "^8.18.0", + "zod": "^3.23.8" }, - "engines": { - "node": ">=6.0.0" + "bin": { + "hardhat": "dist/src/cli.js" } }, - "node_modules/recursive-readdir/node_modules/brace-expansion": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.13.tgz", - "integrity": "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==", + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "license": "MIT", "peer": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "engines": { + "node": ">=8" } }, - "node_modules/recursive-readdir/node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", "dev": true, - "license": "ISC", + "license": "MIT", "peer": true, "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" } }, - "node_modules/reduce-flatten": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", - "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true, "license": "MIT", "peer": true, - "engines": { - "node": ">=6" + "bin": { + "he": "bin/he" } }, - "node_modules/req-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/req-cwd/-/req-cwd-2.0.0.tgz", - "integrity": "sha512-ueoIoLo1OfB6b05COxAA9UpeoscNpYyM+BqYlA7H6LVF4hKGPXQQSSaD2YmvDVJMkk4UDpAHIeU1zG53IqjvlQ==", + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "req-from": "^2.0.0" - }, - "engines": { - "node": ">=4" + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/immer": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/immer/-/immer-10.0.2.tgz", + "integrity": "sha512-Rx3CqeqQ19sxUtYV9CU911Vhy8/721wRFnJv3REVGWUmoAcIwzifTsdmJte/MV+0/XpM35LZdQMBGkRIoLPwQA==", + "dev": true, + "license": "MIT", + "peer": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" } }, - "node_modules/req-from": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/req-from/-/req-from-2.0.0.tgz", - "integrity": "sha512-LzTfEVDVQHBRfjOUMgNBA+V6DWsSnoeKzf42J7l0xa/B4jyPOuuF5MlNSmomLNGemWTnV2TIdjSSLnEn95fOQA==", + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "dev": true, - "license": "MIT", + "license": "ISC", "peer": true, "dependencies": { - "resolve-from": "^3.0.0" - }, - "engines": { - "node": ">=4" + "once": "^1.3.0", + "wrappy": "1" } }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } + "license": "ISC", + "peer": true }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, "license": "MIT", "peer": true, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true, "license": "MIT", "peer": true, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/reusify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true, "license": "MIT", "peer": true, "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/ripemd160": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.3.tgz", - "integrity": "sha512-5Di9UC0+8h1L6ZD2d7awM7E/T4uA1fJRlx6zk/NvdCCVEoAnFqvHmCuNeIKoCeIixBX/q8uM+6ycDvF8woqosA==", + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true, "license": "MIT", "peer": true, - "dependencies": { - "hash-base": "^3.1.2", - "inherits": "^2.0.4" - }, "engines": { - "node": ">= 0.8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/rlp": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz", - "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==", + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC", + "peer": true + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", "dev": true, - "license": "MPL-2.0", + "license": "BlueOak-1.0.0", "peer": true, "dependencies": { - "bn.js": "^5.2.0" + "@isaacs/cliui": "^8.0.2" }, - "bin": { - "rlp": "bin/rlp" + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" } }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "node_modules/js-sha3": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.0.tgz", + "integrity": "sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q==", "dev": true, "funding": [ { "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" + "url": "https://github.com/sponsors/puzrin" }, { - "type": "consulting", - "url": "https://feross.org/support" + "type": "github", + "url": "https://github.com/sponsors/nodeca" } ], "license": "MIT", "peer": true, "dependencies": { - "queue-microtask": "^1.2.2" + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "node_modules/json-stream-stringify": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/json-stream-stringify/-/json-stream-stringify-3.1.7.tgz", + "integrity": "sha512-F4MWetLtY42YMaAKw5cV4e47zMD5aOT+tjjQWjX18ACtdkQ5Y/vrcfbcQ107Rh+MXjOCIx4KhW0wPmOvG8iQ5w==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=7.10.1" + } }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", "dev": true, - "license": "MIT" + "license": "ISC", + "peer": true }, - "node_modules/sc-istanbul": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/sc-istanbul/-/sc-istanbul-0.4.6.tgz", - "integrity": "sha512-qJFF/8tW/zJsbyfh/iT/ZM5QNHE3CXxtLJbZsL+CzdJLBsPD7SedJZoUA4d8iAcN2IoMp/Dx80shOOd2x96X/g==", + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", "peer": true, - "dependencies": { - "abbrev": "1.0.x", - "async": "1.x", - "escodegen": "1.8.x", - "esprima": "2.7.x", - "glob": "^5.0.15", - "handlebars": "^4.0.1", - "js-yaml": "3.x", - "mkdirp": "0.5.x", - "nopt": "3.x", - "once": "1.x", - "resolve": "1.1.x", - "supports-color": "^3.1.0", - "which": "^1.1.1", - "wordwrap": "^1.0.0" - }, "bin": { - "istanbul": "lib/cli.js" + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" } }, - "node_modules/sc-istanbul/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "dev": true, "license": "MIT", "peer": true, - "dependencies": { - "sprintf-js": "~1.0.2" + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/sc-istanbul/node_modules/brace-expansion": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.13.tgz", - "integrity": "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==", + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", "dev": true, "license": "MIT", "peer": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "engines": { + "node": ">=6" } }, - "node_modules/sc-istanbul/node_modules/glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==", - "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, - "license": "ISC", + "license": "MIT", "peer": true, "dependencies": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "p-locate": "^5.0.0" }, "engines": { - "node": "*" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/sc-istanbul/node_modules/has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==", + "node_modules/lodash": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", "dev": true, "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } + "peer": true }, - "node_modules/sc-istanbul/node_modules/js-yaml": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", - "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", + "node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", "dev": true, "license": "MIT", - "peer": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } + "peer": true }, - "node_modules/sc-istanbul/node_modules/js-yaml/node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "peer": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/sc-istanbul/node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", "dev": true, "license": "ISC", - "peer": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, + "peer": true + }, + "node_modules/memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", + "dev": true, "engines": { - "node": "*" + "node": ">= 0.10.0" } }, - "node_modules/sc-istanbul/node_modules/resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==", + "node_modules/micro-eth-signer": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/micro-eth-signer/-/micro-eth-signer-0.14.0.tgz", + "integrity": "sha512-5PLLzHiVYPWClEvZIXXFu5yutzpadb73rnQCpUqIHu3No3coFuWQNfE5tkBQJ7djuLYl6aRLaS0MgWJYGoqiBw==", "dev": true, "license": "MIT", - "peer": true + "dependencies": { + "@noble/curves": "~1.8.1", + "@noble/hashes": "~1.7.1", + "micro-packed": "~0.7.2" + } }, - "node_modules/sc-istanbul/node_modules/supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", + "node_modules/micro-eth-signer/node_modules/@noble/curves": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.8.2.tgz", + "integrity": "sha512-vnI7V6lFNe0tLAuJMu+2sX+FcL14TaCWy1qiczg1VwRmPrpQCdq5ESXQMqUc2tluRNf6irBXrWbl1mGN8uaU/g==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "has-flag": "^1.0.0" + "@noble/hashes": "1.7.2" }, "engines": { - "node": ">=0.8.0" + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/scrypt-js": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", - "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==", + "node_modules/micro-eth-signer/node_modules/@noble/hashes": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.7.2.tgz", + "integrity": "sha512-biZ0NUSxyjLLqo6KxEJ1b+C2NAx0wtDoFvCaXHGgUkeHzf3Xc1xKumFKREuT7f7DARNZ/slvYUwFG6B0f2b6hQ==", "dev": true, "license": "MIT", - "peer": true + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } }, - "node_modules/secp256k1": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.4.tgz", - "integrity": "sha512-6JfvwvjUOn8F/jUoBY2Q1v5WY5XS+rj8qSe0v8Y4ezH4InLgTEeOOPQsRll9OV429Pvo6BCHGavIyJfr3TAhsw==", + "node_modules/micro-packed": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/micro-packed/-/micro-packed-0.7.3.tgz", + "integrity": "sha512-2Milxs+WNC00TRlem41oRswvw31146GiSaoCT7s3Xi2gMUglW5QBeqlQaZeHr5tJx9nm3i57LNXPqxOOaWtTYg==", "dev": true, - "hasInstallScript": true, "license": "MIT", - "peer": true, "dependencies": { - "elliptic": "^6.5.7", - "node-addon-api": "^5.0.0", - "node-gyp-build": "^4.2.0" + "@scure/base": "~1.2.5" }, - "engines": { - "node": ">=18.0.0" + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/secp256k1/node_modules/node-addon-api": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", - "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==", + "node_modules/micro-packed/node_modules/@scure/base": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.2.6.tgz", + "integrity": "sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg==", "dev": true, "license": "MIT", - "peer": true + "funding": { + "url": "https://paulmillr.com/funding/" + } }, - "node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", "dev": true, "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } + "peer": true }, - "node_modules/serialize-javascript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "randombytes": "^2.1.0" - } + "license": "MIT", + "peer": true }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "node_modules/minimatch": { + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", "dev": true, - "license": "MIT", + "license": "ISC", "peer": true, "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" + "brace-expansion": "^2.0.2" }, "engines": { - "node": ">= 0.4" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true, "license": "MIT", - "peer": true - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true, - "license": "ISC" + "peer": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/sha.js": { - "version": "2.4.12", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.12.tgz", - "integrity": "sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w==", + "node_modules/minipass": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", "dev": true, - "license": "(MIT AND BSD-3-Clause)", + "license": "BlueOak-1.0.0", "peer": true, - "dependencies": { - "inherits": "^2.0.4", - "safe-buffer": "^5.2.1", - "to-buffer": "^1.2.0" - }, - "bin": { - "sha.js": "bin.js" - }, "engines": { - "node": ">= 0.10" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=16 || 14 >=14.17" } }, - "node_modules/sha1": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/sha1/-/sha1-1.1.1.tgz", - "integrity": "sha512-dZBS6OrMjtgVkopB1Gmo4RQCDKiZsqcpAQpkV/aaj+FCrCg8r4I4qMkDPQjBgLIxlmu9k4nUbWq6ohXahOneYA==", + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", "peer": true, - "dependencies": { - "charenc": ">= 0.0.1", - "crypt": ">= 0.0.1" + "bin": { + "mkdirp": "bin/cmd.js" }, "engines": { - "node": "*" + "node": ">=10" } }, - "node_modules/shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", + "node_modules/mocha": { + "version": "11.7.6", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-11.7.6.tgz", + "integrity": "sha512-nS9xOGbw2I3cjCpxwZAEJ9xK9lmJ08vEkQvLtz4du9ZrF9UrjRpeJGiIgl2Z+Qs++pmB4ecDe48Fwsh+j+j7xA==", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", "peer": true, "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" + "browser-stdout": "^1.3.1", + "chokidar": "^4.0.1", + "debug": "^4.3.5", + "diff": "^7.0.0", + "escape-string-regexp": "^4.0.0", + "find-up": "^5.0.0", + "glob": "^10.4.5", + "he": "^1.2.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "log-symbols": "^4.1.0", + "minimatch": "^9.0.5", + "ms": "^2.1.3", + "picocolors": "^1.1.1", + "serialize-javascript": "^6.0.2", + "strip-json-comments": "^3.1.1", + "supports-color": "^8.1.1", + "workerpool": "^9.2.0", + "yargs": "^17.7.2", + "yargs-parser": "^21.1.1", + "yargs-unparser": "^2.0.0" }, "bin": { - "shjs": "bin/shjs" + "_mocha": "bin/_mocha", + "mocha": "bin/mocha.js" }, "engines": { - "node": ">=4" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/shelljs/node_modules/brace-expansion": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.13.tgz", - "integrity": "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==", + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true, "license": "MIT", - "peer": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } + "peer": true }, - "node_modules/shelljs/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "node_modules/ndjson": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ndjson/-/ndjson-2.0.0.tgz", + "integrity": "sha512-nGl7LRGrzugTtaFcJMhLbpzJM6XdivmbkdlaGcrk/LXg2KL/YBC6z1g70xh0/al+oFuVFP8N8kiWRucmeEH/qQ==", "dev": true, - "license": "ISC", + "license": "BSD-3-Clause", "peer": true, "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "json-stringify-safe": "^5.0.1", + "minimist": "^1.2.5", + "readable-stream": "^3.6.0", + "split2": "^3.0.0", + "through2": "^4.0.0" }, - "engines": { - "node": "*" + "bin": { + "ndjson": "cli.js" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "engines": { + "node": ">=10" } }, - "node_modules/shelljs/node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, "license": "ISC", "peer": true, "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" + "wrappy": "1" } }, - "node_modules/side-channel": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", "dev": true, "license": "MIT", - "peer": true, - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3", - "side-channel-list": "^1.0.0", - "side-channel-map": "^1.0.1", - "side-channel-weakmap": "^1.0.2" - }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=0.10.0" } }, - "node_modules/side-channel-list": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3" + "yocto-queue": "^0.1.0" }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/side-channel-map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", - "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3" + "p-limit": "^3.0.2" }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/side-channel-weakmap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", - "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "node_modules/p-map": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.5.tgz", + "integrity": "sha512-e8vJF4XdVkzqqSHguEMz41mQO1wKwxKm5ENrUJQUu9kLDCtn83cxbyHZcszr4QC5zEA7WffRRC4gsTecC7J9oA==", "dev": true, "license": "MIT", - "peer": true, - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3", - "side-channel-map": "^1.0.1" - }, "engines": { - "node": ">= 0.4" + "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", "dev": true, - "license": "MIT", + "license": "BlueOak-1.0.0", "peer": true }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, "license": "MIT", "peer": true, @@ -6741,205 +3602,194 @@ "node": ">=8" } }, - "node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, "license": "MIT", "peer": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" + "node": ">=0.10.0" } }, - "node_modules/solc": { - "version": "0.8.26", - "resolved": "https://registry.npmjs.org/solc/-/solc-0.8.26.tgz", - "integrity": "sha512-yiPQNVf5rBFHwN6SIf3TUUvVAFKcQqmSUFeq+fb6pNRCo0ZCgpYOZDi3BVoezCPIAcKrVYd/qXlBLUP9wVrZ9g==", + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, "license": "MIT", - "dependencies": { - "command-exists": "^1.2.8", - "commander": "^8.1.0", - "follow-redirects": "^1.12.1", - "js-sha3": "0.8.0", - "memorystream": "^0.3.1", - "semver": "^5.5.0", - "tmp": "0.0.33" - }, - "bin": { - "solcjs": "solc.js" - }, + "peer": true, "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/solc/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" + "node": ">=8" } }, - "node_modules/solidity-coverage": { - "version": "0.8.17", - "resolved": "https://registry.npmjs.org/solidity-coverage/-/solidity-coverage-0.8.17.tgz", - "integrity": "sha512-5P8vnB6qVX9tt1MfuONtCTEaEGO/O4WuEidPHIAJjx4sktHHKhO3rFvnE0q8L30nWJPTrcqGQMT7jpE29B2qow==", + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "peer": true, "dependencies": { - "@ethersproject/abi": "^5.0.9", - "@solidity-parser/parser": "^0.20.1", - "chalk": "^2.4.2", - "death": "^1.1.0", - "difflib": "^0.2.4", - "fs-extra": "^8.1.0", - "ghost-testrpc": "^0.0.2", - "global-modules": "^2.0.0", - "globby": "^10.0.1", - "jsonschema": "^1.2.4", - "lodash": "^4.17.21", - "mocha": "^10.2.0", - "node-emoji": "^1.10.0", - "pify": "^4.0.1", - "recursive-readdir": "^2.2.2", - "sc-istanbul": "^0.4.5", - "semver": "^7.3.4", - "shelljs": "^0.8.3", - "web3-utils": "^1.3.6" + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, - "bin": { - "solidity-coverage": "plugins/bin.js" + "engines": { + "node": ">=16 || 14 >=14.18" }, - "peerDependencies": { - "hardhat": "^2.11.0" + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/solidity-coverage/node_modules/@solidity-parser/parser": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.20.2.tgz", - "integrity": "sha512-rbu0bzwNvMcwAjH86hiEAcOeRI2EeK8zCkHDrFykh/Al8mvJeFmjy3UrE7GYQjNwOgbGUUtCn5/k8CB8zIu7QA==", + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", "dev": true, - "license": "MIT", + "license": "ISC", "peer": true }, - "node_modules/solidity-coverage/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", "dev": true, "license": "MIT", "peer": true, - "dependencies": { - "color-convert": "^1.9.0" + "bin": { + "prettier": "bin-prettier.js" }, "engines": { - "node": ">=4" + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "node_modules/solidity-coverage/node_modules/chalk": { + "node_modules/prompts": { "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" }, "engines": { - "node": ">=4" + "node": ">= 6" } }, - "node_modules/solidity-coverage/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "color-name": "1.1.3" + "safe-buffer": "^5.1.0" } }, - "node_modules/solidity-coverage/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, "license": "MIT", - "peer": true + "peer": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } }, - "node_modules/solidity-coverage/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", "dev": true, "license": "MIT", - "peer": true, "engines": { - "node": ">=0.8.0" + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" } }, - "node_modules/solidity-coverage/node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "node_modules/reduce-flatten": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", + "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", "dev": true, "license": "MIT", "peer": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, "engines": { - "node": ">=6 <7 || >=8" + "node": ">=6" } }, - "node_modules/solidity-coverage/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, "license": "MIT", "peer": true, "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/solidity-coverage/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "node_modules/resolve.exports": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz", + "integrity": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==", "dev": true, "license": "MIT", - "peer": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "engines": { + "node": ">=10" } }, - "node_modules/solidity-coverage/node_modules/semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "dev": true, + "license": "MIT" + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "peer": true + }, + "node_modules/semver": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", "dev": true, "license": "ISC", - "peer": true, "bin": { "semver": "bin/semver.js" }, @@ -6947,64 +3797,94 @@ "node": ">=10" } }, - "node_modules/solidity-coverage/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "has-flag": "^3.0.0" + "shebang-regex": "^3.0.0" }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/solidity-coverage/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, "license": "MIT", "peer": true, "engines": { - "node": ">= 4.0.0" + "node": ">=8" } }, - "node_modules/source-map": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", - "integrity": "sha512-CBdZ2oa/BHhS4xj5DlhjWNHcan57/5YuvfdLf17iVmIpd9KRm+DFLmC6nBNj+6Ua7Kt3TmOjDpQT1aTYOQtoUA==", + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, - "optional": true, + "license": "ISC", "peer": true, - "dependencies": { - "amdefine": ">=0.0.4" - }, "engines": { - "node": ">=0.8.0" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/solc": { + "version": "0.8.26", + "resolved": "https://registry.npmjs.org/solc/-/solc-0.8.26.tgz", + "integrity": "sha512-yiPQNVf5rBFHwN6SIf3TUUvVAFKcQqmSUFeq+fb6pNRCo0ZCgpYOZDi3BVoezCPIAcKrVYd/qXlBLUP9wVrZ9g==", "dev": true, "license": "MIT", "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "command-exists": "^1.2.8", + "commander": "^8.1.0", + "follow-redirects": "^1.12.1", + "js-sha3": "0.8.0", + "memorystream": "^0.3.1", + "semver": "^5.5.0", + "tmp": "0.0.33" + }, + "bin": { + "solcjs": "solc.js" + }, + "engines": { + "node": ">=10.0.0" } }, - "node_modules/source-map-support/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "node_modules/solc/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" + "license": "ISC", + "bin": { + "semver": "bin/semver" } }, "node_modules/split2": { @@ -7018,78 +3898,98 @@ "readable-stream": "^3.0.0" } }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", + "peer": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-format": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/string-format/-/string-format-2.0.0.tgz", + "integrity": "sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA==", + "dev": true, + "license": "WTFPL OR MIT", "peer": true }, - "node_modules/stacktrace-parser": { - "version": "0.1.11", - "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.11.tgz", - "integrity": "sha512-WjlahMgHmCJpqzU8bIBy4qtsZdU9lRlcZE3Lvyej6t4tuOuv1vk57OW3MBrj6hXBFx/nNoC9MPMTcr5YA7NQbg==", + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "type-fest": "^0.7.1" + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" }, "engines": { - "node": ">=6" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/stacktrace-parser/node_modules/type-fest": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", - "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, - "license": "(MIT OR CC0-1.0)", + "license": "MIT", + "peer": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, "engines": { "node": ">=8" } }, - "node_modules/statuses": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", - "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true, "license": "MIT", - "engines": { - "node": ">= 0.8" - } + "peer": true }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "node_modules/string-width/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", "dev": true, "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-format": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/string-format/-/string-format-2.0.0.tgz", - "integrity": "sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA==", - "dev": true, - "license": "WTFPL OR MIT", - "peer": true + "peer": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "node_modules/string-width/node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "ansi-regex": "^6.2.2" }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, "node_modules/strip-ansi": { @@ -7105,19 +4005,19 @@ "node": ">=8" } }, - "node_modules/strip-hex-prefix": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", - "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==", + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "is-hex-prefixed": "1.0.0" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">=6.5.0", - "npm": ">=3" + "node": ">=8" } }, "node_modules/strip-json-comments": { @@ -7126,6 +4026,7 @@ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=8" }, @@ -7134,61 +4035,20 @@ } }, "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/sync-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz", - "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "http-response-object": "^3.0.1", - "sync-rpc": "^1.2.1", - "then-request": "^6.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/sync-rpc": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz", - "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "get-port": "^3.1.0" - } - }, - "node_modules/table": { - "version": "6.9.0", - "resolved": "https://registry.npmjs.org/table/-/table-6.9.0.tgz", - "integrity": "sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==", - "dev": true, - "license": "BSD-3-Clause", - "peer": true, - "dependencies": { - "ajv": "^8.0.1", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" + "node": ">=10" }, - "engines": { - "node": ">=10.0.0" + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, "node_modules/table-layout": { @@ -7230,57 +4090,6 @@ "node": ">=8" } }, - "node_modules/then-request": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz", - "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@types/concat-stream": "^1.6.0", - "@types/form-data": "0.0.33", - "@types/node": "^8.0.0", - "@types/qs": "^6.2.31", - "caseless": "~0.12.0", - "concat-stream": "^1.6.0", - "form-data": "^2.2.0", - "http-basic": "^8.1.1", - "http-response-object": "^3.0.1", - "promise": "^8.0.0", - "qs": "^6.4.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/then-request/node_modules/@types/node": { - "version": "8.10.66", - "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz", - "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/then-request/node_modules/form-data": { - "version": "2.5.5", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.5.tgz", - "integrity": "sha512-jqdObeR2rxZZbPSGL+3VckHMYtu+f9//KXBsVny6JSX/pa38Fy+bGjuG8eW/H6USNQWhLi8Num++cU2yOCNz4A==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "hasown": "^2.0.2", - "mime-types": "^2.1.35", - "safe-buffer": "^5.2.1" - }, - "engines": { - "node": ">= 0.12" - } - }, "node_modules/through2": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", @@ -7292,54 +4101,6 @@ "readable-stream": "3" } }, - "node_modules/tinyglobby": { - "version": "0.2.15", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", - "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "fdir": "^6.5.0", - "picomatch": "^4.0.3" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/SuperchupuDev" - } - }, - "node_modules/tinyglobby/node_modules/fdir": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, - "node_modules/tinyglobby/node_modules/picomatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", - "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, "node_modules/tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", @@ -7353,45 +4114,6 @@ "node": ">=0.6.0" } }, - "node_modules/to-buffer": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.2.2.tgz", - "integrity": "sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "isarray": "^2.0.5", - "safe-buffer": "^5.2.1", - "typed-array-buffer": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.6" - } - }, "node_modules/ts-command-line-args": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/ts-command-line-args/-/ts-command-line-args-2.5.1.tgz", @@ -7420,62 +4142,6 @@ "typescript": ">=3.7.0" } }, - "node_modules/ts-node": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", - "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "node_modules/ts-node/node_modules/diff": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.4.tgz", - "integrity": "sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ==", - "dev": true, - "license": "BSD-3-Clause", - "peer": true, - "engines": { - "node": ">=0.3.1" - } - }, "node_modules/tslib": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", @@ -7484,49 +4150,23 @@ "license": "0BSD", "peer": true }, - "node_modules/tsort": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz", - "integrity": "sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==", - "dev": true, - "license": "MIT" - }, - "node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "node_modules/tsx": { + "version": "4.23.1", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.23.1.tgz", + "integrity": "sha512-GQHnkIfxyx1wYCOS/wonik5MVRZU9hi1TEZmzGZSCJB1y9YgoZ8H6itNE/u4suE+yLmOzuE4E5S4TZ/ZX2wcWQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "prelude-ls": "~1.1.2" + "esbuild": "~0.28.0" + }, + "bin": { + "tsx": "dist/cli.mjs" }, "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-detect": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", - "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" + "node": ">=18.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "optionalDependencies": { + "fsevents": "~2.3.3" } }, "node_modules/typechain": { @@ -7556,9 +4196,9 @@ } }, "node_modules/typechain/node_modules/brace-expansion": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.13.tgz", - "integrity": "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==", + "version": "1.1.16", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.16.tgz", + "integrity": "sha512-IDw48K2/2kRkg9LdJxurvq3lV3aBgq0REY89duEqFRthjlPdXHKMj7EnQOXVckxzgisinf3nHfrcE2FufFLXMw==", "dev": true, "license": "MIT", "peer": true, @@ -7567,132 +4207,77 @@ "concat-map": "0.0.1" } }, - "node_modules/typechain/node_modules/fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, "node_modules/typechain/node_modules/glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/typechain/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "license": "MIT", - "peer": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/typechain/node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/typechain/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "license": "MIT", - "peer": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/typechain/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", "dev": true, - "license": "MIT", + "license": "ISC", "peer": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, "engines": { - "node": ">= 4.0.0" + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/typed-array-buffer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", - "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "node_modules/typechain/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, - "license": "MIT", + "license": "ISC", "peer": true, "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-typed-array": "^1.1.14" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">= 0.4" + "node": "*" } }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", - "dev": true, - "license": "MIT", - "peer": true - }, "node_modules/typescript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.2.tgz", - "integrity": "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-7.0.2.tgz", + "integrity": "sha512-8FYau96o3NKOhbjKi/qNvG/W5jhzxkbdm5sj9AbZ/5T5sWqn3hJgLfGx27sRKZWTvyzCP8dLRBTf5tBTSRVUNA==", "dev": true, "license": "Apache-2.0", "peer": true, "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" + "tsc": "bin/tsc" }, "engines": { - "node": ">=14.17" + "node": ">=16.20.0" + }, + "optionalDependencies": { + "@typescript/typescript-aix-ppc64": "7.0.2", + "@typescript/typescript-darwin-arm64": "7.0.2", + "@typescript/typescript-darwin-x64": "7.0.2", + "@typescript/typescript-freebsd-arm64": "7.0.2", + "@typescript/typescript-freebsd-x64": "7.0.2", + "@typescript/typescript-linux-arm": "7.0.2", + "@typescript/typescript-linux-arm64": "7.0.2", + "@typescript/typescript-linux-loong64": "7.0.2", + "@typescript/typescript-linux-mips64el": "7.0.2", + "@typescript/typescript-linux-ppc64": "7.0.2", + "@typescript/typescript-linux-riscv64": "7.0.2", + "@typescript/typescript-linux-s390x": "7.0.2", + "@typescript/typescript-linux-x64": "7.0.2", + "@typescript/typescript-netbsd-arm64": "7.0.2", + "@typescript/typescript-netbsd-x64": "7.0.2", + "@typescript/typescript-openbsd-arm64": "7.0.2", + "@typescript/typescript-openbsd-x64": "7.0.2", + "@typescript/typescript-sunos-x64": "7.0.2", + "@typescript/typescript-win32-arm64": "7.0.2", + "@typescript/typescript-win32-x64": "7.0.2" } }, "node_modules/typical": { @@ -7706,307 +4291,200 @@ "node": ">=8" } }, - "node_modules/uglify-js": { - "version": "3.19.3", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", - "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", - "dev": true, - "license": "BSD-2-Clause", - "optional": true, - "peer": true, - "bin": { - "uglifyjs": "bin/uglifyjs" - }, - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/undici": { - "version": "5.29.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.29.0.tgz", - "integrity": "sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==", + "version": "6.27.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.27.0.tgz", + "integrity": "sha512-YmfV3YnEDzXRC5lZ2jWtWWHKGUm1zIt8AhesR1tens+HTNv+YZlN/dp6G727LOvMJ8xjP9Be7Y2Sdr96LDm+pg==", "dev": true, "license": "MIT", - "dependencies": { - "@fastify/busboy": "^2.0.0" - }, "engines": { - "node": ">=14.0" + "node": ">=18.17" } }, "node_modules/undici-types": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", - "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", "dev": true, "license": "MIT", "peer": true }, "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true, "license": "MIT", "peer": true, "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" + "node": ">= 4.0.0" } }, - "node_modules/utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", - "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==", - "dev": true, - "license": "MIT", - "peer": true - }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true, - "license": "MIT" - }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true, "license": "MIT", "peer": true }, - "node_modules/web3-utils": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.10.4.tgz", - "integrity": "sha512-tsu8FiKJLk2PzhDl9fXbGUWTkkVXYhtTA+SmEFkKft+9BgwLxfCRpU96sWv7ICC8zixBNd3JURVoiR3dUXgP8A==", + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, - "license": "LGPL-3.0", + "license": "ISC", "peer": true, "dependencies": { - "@ethereumjs/util": "^8.1.0", - "bn.js": "^5.2.1", - "ethereum-bloom-filters": "^1.0.6", - "ethereum-cryptography": "^2.1.2", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "utf8": "3.0.0" + "isexe": "^2.0.0" }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-utils/node_modules/@ethereumjs/rlp": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-4.0.1.tgz", - "integrity": "sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==", - "dev": true, - "license": "MPL-2.0", - "peer": true, "bin": { - "rlp": "bin/rlp" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/web3-utils/node_modules/@ethereumjs/util": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@ethereumjs/util/-/util-8.1.0.tgz", - "integrity": "sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA==", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "@ethereumjs/rlp": "^4.0.1", - "ethereum-cryptography": "^2.0.0", - "micro-ftch": "^0.3.1" + "node-which": "bin/node-which" }, "engines": { - "node": ">=14" + "node": ">= 8" } }, - "node_modules/web3-utils/node_modules/@noble/curves": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", - "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", + "node_modules/wordwrapjs": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz", + "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "@noble/hashes": "1.4.0" + "reduce-flatten": "^2.0.0", + "typical": "^5.2.0" }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/web3-utils/node_modules/@noble/hashes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", - "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", - "dev": true, - "license": "MIT", - "peer": true, "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" + "node": ">=8.0.0" } }, - "node_modules/web3-utils/node_modules/ethereum-cryptography": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz", - "integrity": "sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==", + "node_modules/wordwrapjs/node_modules/typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", "dev": true, "license": "MIT", "peer": true, - "dependencies": { - "@noble/curves": "1.4.2", - "@noble/hashes": "1.4.0", - "@scure/bip32": "1.4.0", - "@scure/bip39": "1.3.0" + "engines": { + "node": ">=8" } }, - "node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "node_modules/workerpool": { + "version": "9.3.4", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-9.3.4.tgz", + "integrity": "sha512-TmPRQYYSAnnDiEB0P/Ytip7bFGvqnSU6I2BcuSw7Hx+JSg/DsUi5ebYfc8GYaSdpuvOcEs6dXxPurOYpe9QFwg==", "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } + "license": "Apache-2.0", + "peer": true }, - "node_modules/which-typed-array": { - "version": "1.1.20", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.20.tgz", - "integrity": "sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==", + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "for-each": "^0.3.5", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2" + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" }, "engines": { - "node": ">= 0.4" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/widest-line": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "string-width": "^4.0.0" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=8" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true, "license": "MIT", "peer": true }, - "node_modules/wordwrapjs": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz", - "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==", + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "reduce-flatten": "^2.0.0", - "typical": "^5.2.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">=8.0.0" + "node": ">=8" } }, - "node_modules/wordwrapjs/node_modules/typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", "dev": true, "license": "MIT", "peer": true, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/workerpool": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", - "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==", + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", "dev": true, - "license": "Apache-2.0" + "license": "MIT", + "peer": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "ansi-regex": "^6.2.2" }, "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, "node_modules/wrappy": { @@ -8014,15 +4492,15 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true, - "license": "ISC" + "license": "ISC", + "peer": true }, "node_modules/ws": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", - "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "version": "8.21.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.0.tgz", + "integrity": "sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=10.0.0" }, @@ -8045,37 +4523,40 @@ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, "license": "ISC", + "peer": true, "engines": { "node": ">=10" } }, "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "version": "17.7.3", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.3.tgz", + "integrity": "sha512-GZtjxm/J/4TSxuL3FNYjCmLktBTnIw/rVmKSIyKeYAZpmJB2ig9VauCC5xsa82GNKVKDAqpOn3KVzNt0zmrU0g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "cliui": "^7.0.2", + "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "string-width": "^4.2.0", + "string-width": "^4.2.3", "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" + "yargs-parser": "^21.1.1" }, "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, "license": "ISC", + "peer": true, "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/yargs-unparser": { @@ -8084,6 +4565,7 @@ "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "camelcase": "^6.0.0", "decamelize": "^4.0.0", @@ -8094,15 +4576,28 @@ "node": ">=10" } }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "node_modules/yargs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/yargs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "license": "MIT", "peer": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, "engines": { - "node": ">=6" + "node": ">=8" } }, "node_modules/yocto-queue": { @@ -8111,12 +4606,23 @@ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } + }, + "node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } } } } diff --git a/package.json b/package.json index a708b9e..24421aa 100644 --- a/package.json +++ b/package.json @@ -3,14 +3,20 @@ "version": "1.0.0", "description": "Tricksfor Booster NFT smart contracts (ERC-721 collection + staking)", "private": true, + "type": "module", + "engines": { + "node": ">=22 <25" + }, "bin": { "generate-assets": "scripts/generate-nft-metadata.js" }, "scripts": { - "compile": "hardhat compile", - "test": "hardhat test", - "test:coverage": "hardhat coverage", - "deploy:local": "hardhat run scripts/deploy.ts --network localhost", + "compile": "node scripts/sync-contract-artifacts.js", + "artifacts:sync": "node scripts/sync-contract-artifacts.js", + "artifacts:check": "node scripts/sync-contract-artifacts.js --check", + "security:prepare": "node scripts/prepare-slither-build.js", + "test": "npm run compile && hardhat test --no-compile", + "test:coverage": "hardhat test --coverage", "clean": "hardhat clean", "generate-assets": "node scripts/generate-nft-metadata.js", "generate:manifest": "node scripts/generate-nft-manifest.js", @@ -22,8 +28,9 @@ "test:snapshots": "node scripts/test-metadata-snapshots.js" }, "devDependencies": { - "@nomicfoundation/hardhat-toolbox": "^5.0.0", - "@openzeppelin/contracts": "^5.3.0", - "hardhat": "^2.22.19" + "@nomicfoundation/hardhat-toolbox-mocha-ethers": "3.0.7", + "@openzeppelin/contracts": "5.6.1", + "hardhat": "3.10.0", + "solc": "0.8.26" } } diff --git a/scripts/deploy.ts b/scripts/deploy.ts deleted file mode 100644 index 2a4656d..0000000 --- a/scripts/deploy.ts +++ /dev/null @@ -1,41 +0,0 @@ -import hre from "hardhat"; - -async function main(): Promise { - const [deployer] = await hre.ethers.getSigners(); - console.log(`Deploying contracts with account: ${deployer.address}`); - - // --------------------------------------------------------------------------- - // Deploy TricksforBoosterNFT - // --------------------------------------------------------------------------- - const nftFactory = await hre.ethers.getContractFactory("TricksforBoosterNFT"); - const nft = await nftFactory.deploy( - "Tricksfor Booster", // name - "TBOOST", // symbol - "https://metadata.tricksfor.com/booster/", // baseURI - "https://metadata.tricksfor.com/booster/contract", // contractURI - deployer.address, // royalty receiver - 500n // 5% royalty (500 basis points) - ); - await nft.waitForDeployment(); - const nftAddress = await nft.getAddress(); - console.log(`TricksforBoosterNFT deployed to: ${nftAddress}`); - console.log(` Deployer granted DEFAULT_ADMIN_ROLE and MINTER_ROLE`); - - // --------------------------------------------------------------------------- - // Deploy TricksforBoosterStaking - // --------------------------------------------------------------------------- - const stakingFactory = await hre.ethers.getContractFactory("TricksforBoosterStaking"); - const staking = await stakingFactory.deploy(nftAddress); - await staking.waitForDeployment(); - const stakingAddress = await staking.getAddress(); - console.log(`TricksforBoosterStaking deployed to: ${stakingAddress}`); - - console.log("\nDeployment complete."); - console.log(` NFT: ${nftAddress}`); - console.log(` Staking: ${stakingAddress}`); -} - -main().catch((error: unknown) => { - console.error(error); - process.exitCode = 1; -}); diff --git a/scripts/package.json b/scripts/package.json new file mode 100644 index 0000000..5bbefff --- /dev/null +++ b/scripts/package.json @@ -0,0 +1,3 @@ +{ + "type": "commonjs" +} diff --git a/scripts/prepare-slither-build.js b/scripts/prepare-slither-build.js new file mode 100644 index 0000000..720e1a7 --- /dev/null +++ b/scripts/prepare-slither-build.js @@ -0,0 +1,58 @@ +#!/usr/bin/env node +'use strict'; + +const fs = require('fs'); +const path = require('path'); + +const root = path.resolve(__dirname, '..'); +const buildInfoDir = path.join(root, 'artifacts', 'build-info'); +const outputArg = process.argv.indexOf('--output'); +const outputRoot = path.resolve( + root, + outputArg >= 0 && process.argv[outputArg + 1] + ? process.argv[outputArg + 1] + : '.slither-artifacts' +); +const outputDir = path.join(outputRoot, 'build-info'); + +if (!fs.existsSync(buildInfoDir)) { + throw new Error('Hardhat build information is missing. Run npm run compile first.'); +} + +const inputs = fs.readdirSync(buildInfoDir) + .filter((file) => file.endsWith('.json') && !file.endsWith('.output.json')) + .sort(); + +if (inputs.length === 0) { + throw new Error('No Hardhat 3 build-information input was found.'); +} + +fs.mkdirSync(outputDir, { recursive: true }); + +for (const inputFile of inputs) { + const inputPath = path.join(buildInfoDir, inputFile); + const outputPath = path.join(buildInfoDir, inputFile.replace(/\.json$/, '.output.json')); + if (!fs.existsSync(outputPath)) { + throw new Error(`Missing paired Hardhat output: ${path.relative(root, outputPath)}`); + } + + const buildInput = JSON.parse(fs.readFileSync(inputPath, 'utf8')); + const buildOutput = JSON.parse(fs.readFileSync(outputPath, 'utf8')); + if (buildInput.id !== buildOutput.id) { + throw new Error(`Build-information ID mismatch for ${inputFile}`); + } + + // crytic-compile currently expects the Hardhat 2 combined build-info shape. + // Adapt Hardhat 3's split input/output without recompiling or changing bytecode. + const combined = { + id: buildInput.id, + _format: 'hh-sol-build-info-1', + solcVersion: buildInput.solcVersion, + solcLongVersion: buildInput.solcLongVersion, + input: buildInput.input, + output: buildOutput.output, + }; + fs.writeFileSync(path.join(outputDir, inputFile), `${JSON.stringify(combined)}\n`); +} + +console.log(`Prepared ${inputs.length} Slither-compatible build-info file(s) in ${outputDir}`); diff --git a/scripts/sync-contract-artifacts.js b/scripts/sync-contract-artifacts.js new file mode 100644 index 0000000..85dc1ee --- /dev/null +++ b/scripts/sync-contract-artifacts.js @@ -0,0 +1,157 @@ +#!/usr/bin/env node + +const fs = require("fs"); +const path = require("path"); +const crypto = require("crypto"); +const solc = require("solc"); + +const root = path.resolve(__dirname, ".."); +const checkOnly = process.argv.includes("--check"); +const contracts = ["TricksforBoosterNFT", "TricksforBoosterStaking"]; +const compilationTargets = [ + ...contracts.map((name) => ({ name, sourceName: `contracts/${name}.sol`, publish: true })), + { name: "ReentrantERC721", sourceName: "contracts/test/ReentrantERC721.sol", publish: false } +]; + +const sources = {}; + +function loadSource(sourceName) { + if (sources[sourceName] !== undefined) return; + const filePath = sourceName.startsWith("@") + ? path.join(root, "node_modules", sourceName) + : path.join(root, sourceName); + const content = fs.readFileSync(filePath, "utf8"); + sources[sourceName] = { content }; + + const importPattern = /import\s+(?:[^"']*?\s+from\s+)?["']([^"']+)["']\s*;/g; + for (const match of content.matchAll(importPattern)) { + const imported = match[1].startsWith(".") + ? path.posix.normalize(path.posix.join(path.posix.dirname(sourceName), match[1])) + : match[1]; + loadSource(imported); + } +} + +for (const target of compilationTargets) loadSource(target.sourceName); + +const input = { + language: "Solidity", + sources, + settings: { + optimizer: { enabled: true, runs: 200 }, + evmVersion: "cancun", + outputSelection: { + "*": { + "*": ["abi", "metadata", "devdoc", "userdoc", "storageLayout", "evm.bytecode", "evm.deployedBytecode", "evm.methodIdentifiers"], + "": ["ast"] + } + } + } +}; + +function resolveImport(importPath) { + const candidates = [path.join(root, importPath), path.join(root, "node_modules", importPath)]; + const resolved = candidates.find(fs.existsSync); + return resolved + ? { contents: fs.readFileSync(resolved, "utf8") } + : { error: `Unable to resolve Solidity import: ${importPath}` }; +} + +const output = JSON.parse(solc.compile(JSON.stringify(input), { import: resolveImport })); +const buildInfoId = `solc-0_8_26-${crypto.createHash("sha256").update(JSON.stringify(input)).digest("hex")}`; +const diagnostics = output.errors ?? []; +for (const diagnostic of diagnostics) { + const stream = diagnostic.severity === "error" ? process.stderr : process.stdout; + stream.write(`${diagnostic.formattedMessage}\n`); +} +if (diagnostics.some((diagnostic) => diagnostic.severity === "error")) { + process.exit(1); +} + +function artifactFor(name, sourceName = `contracts/${name}.sol`) { + const compiled = output.contracts[sourceName][name]; + return { + _format: "hh3-artifact-1", + contractName: name, + sourceName, + abi: compiled.abi, + bytecode: `0x${compiled.evm.bytecode.object}`, + deployedBytecode: `0x${compiled.evm.deployedBytecode.object}`, + linkReferences: compiled.evm.bytecode.linkReferences, + deployedLinkReferences: compiled.evm.deployedBytecode.linkReferences, + immutableReferences: compiled.evm.deployedBytecode.immutableReferences ?? {}, + inputSourceName: sourceName, + buildInfoId + }; +} + +function renderCSharp(name, artifact) { + const abi = JSON.stringify(artifact.abi).replaceAll('"', '""'); + return `namespace Tricksfor.Blockchain.Booster.Abis +{ + /// + /// ABI and bytecode for ${name}. Generated by scripts/sync-contract-artifacts.js. + /// + internal static class ${name}Abi + { + public const string Abi = @"${abi}"; + + public const string Bytecode = "${artifact.bytecode}"; + } +} +`; +} + +function assertOrWrite(filePath, expected) { + if (checkOnly) { + const actual = fs.existsSync(filePath) ? fs.readFileSync(filePath, "utf8") : null; + if (actual !== expected) { + console.error(`Out of sync: ${path.relative(root, filePath)}`); + process.exitCode = 1; + } + return; + } + + fs.mkdirSync(path.dirname(filePath), { recursive: true }); + fs.writeFileSync(filePath, expected); + console.log(`Updated ${path.relative(root, filePath)}`); +} + +for (const target of compilationTargets) { + const artifact = artifactFor(target.name, target.sourceName); + const artifactPath = path.join(root, "artifacts", target.sourceName, `${target.name}.json`); + assertOrWrite(artifactPath, `${JSON.stringify(artifact, null, 2)}\n`); + if (target.publish) { + const abiPath = path.join(root, "src", "Tricksfor.Blockchain.Booster", "Abis", `${target.name}Abi.cs`); + assertOrWrite(abiPath, renderCSharp(target.name, artifact)); + } +} + +const buildInfoDirectory = path.join(root, "artifacts", "build-info"); +if (!checkOnly && fs.existsSync(buildInfoDirectory)) { + for (const fileName of fs.readdirSync(buildInfoDirectory)) { + if (fileName.startsWith("solc-0_8_26-") && !fileName.startsWith(buildInfoId)) { + fs.unlinkSync(path.join(buildInfoDirectory, fileName)); + } + } +} +assertOrWrite( + path.join(buildInfoDirectory, `${buildInfoId}.json`), + `${JSON.stringify({ + _format: "hh3-sol-build-info-1", + id: buildInfoId, + solcVersion: "0.8.26", + solcLongVersion: solc.version(), + compilerType: "solcjs", + userSourceNameMap: Object.fromEntries(compilationTargets.map(({ sourceName }) => [sourceName, sourceName])), + input + }, null, 2)}\n` +); +assertOrWrite( + path.join(buildInfoDirectory, `${buildInfoId}.output.json`), + `${JSON.stringify({ _format: "hh3-sol-build-info-output-1", id: buildInfoId, output })}\n` +); + +if (checkOnly && process.exitCode !== 1) { + console.log(`Artifacts and Nethereum ABI/bytecode match solc ${solc.version()}.`); +} diff --git a/scripts/validate-nft-assets.js b/scripts/validate-nft-assets.js index 1a77f51..6a5fed2 100644 --- a/scripts/validate-nft-assets.js +++ b/scripts/validate-nft-assets.js @@ -102,6 +102,9 @@ function parseArgs(argv) { manifest: null, chainKey: null, nftAssetsExplicit: false, + manifestOnly: false, + outputOnly: false, + allowPlaceholders: false, }; for (let i = 2; i < argv.length; i++) { const flag = argv[i]; @@ -110,14 +113,17 @@ function parseArgs(argv) { else if (flag === '--env' && next) { args.env = next; i++; } else if (flag === '--manifest' && next) { args.manifest = next; i++; } else if (flag === '--chain-key' && next) { args.chainKey = next; i++; } + else if (flag === '--manifest-only') { args.manifestOnly = true; } + else if (flag === '--output-only') { args.outputOnly = true; } + else if (flag === '--allow-placeholders') { args.allowPlaceholders = true; } else { console.error(`Unknown argument: ${flag}`); process.exit(1); } } - // --chain-key is a shortcut for --nft-assets / - if (args.chainKey && !args.nftAssetsExplicit) { - args.nftAssets = path.join(args.nftAssets, args.chainKey); + if (args.manifestOnly && args.outputOnly) { + console.error('--manifest-only and --output-only are mutually exclusive'); + process.exit(1); } return args; } @@ -653,7 +659,7 @@ function validateManifestToOutput(manifest, base, nftAssetsDir, report) { */ const PLACEHOLDER_MAX_BYTES = 200; -function validateSourceImages(manifest, base, nftAssetsDir, report) { +function validateSourceImages(manifest, base, nftAssetsDir, report, allowPlaceholders) { console.log('\n--- Source images (nft-assets/source-images/{theme}/) ---'); const sourceDir = path.join(nftAssetsDir, 'source-images'); @@ -667,6 +673,19 @@ function validateSourceImages(manifest, base, nftAssetsDir, report) { let missing = 0; let placeholder = 0; + const collectionImage = path.join(nftAssetsDir, 'images', 'collection.png'); + if (!fs.existsSync(collectionImage)) { + const message = 'images/collection.png: collection artwork referenced by generated contract metadata is missing'; + if (allowPlaceholders) report.warn(message); + else report.error(message); + missing++; + } else if (fs.statSync(collectionImage).size <= PLACEHOLDER_MAX_BYTES) { + const message = 'images/collection.png: collection artwork looks like a placeholder'; + if (allowPlaceholders) report.warn(message); + else report.error(message); + placeholder++; + } + for (const sourceImage of [...referenced].sort()) { const sourcePath = path.join(sourceDir, sourceImage); if (!fs.existsSync(sourcePath)) { @@ -679,11 +698,12 @@ function validateSourceImages(manifest, base, nftAssetsDir, report) { // Real artwork must exceed PLACEHOLDER_MAX_BYTES in size. const { size } = fs.statSync(sourcePath); if (size <= PLACEHOLDER_MAX_BYTES) { - report.error( + const message = `source-images/${sourceImage}: file is ${size} bytes — ` + `this looks like a placeholder. Replace with final artwork before deploying ` + - `(minimum size: ${PLACEHOLDER_MAX_BYTES + 1} bytes)` - ); + `(minimum size: ${PLACEHOLDER_MAX_BYTES + 1} bytes)`; + if (allowPlaceholders) report.warn(message); + else report.error(message); placeholder++; } } @@ -696,7 +716,7 @@ function validateSourceImages(manifest, base, nftAssetsDir, report) { } } -function validateManifest(nftAssetsDir, args, report) { +function validateManifest(outputDir, sourceRoot, args, report) { const manifestPath = findManifestPath(args); if (!manifestPath) { @@ -752,15 +772,31 @@ function validateManifest(nftAssetsDir, args, report) { const base = path.basename(manifestPath); + if (args.env) { + const deploymentParamsPath = path.join('deployments', 'config', args.env, 'deployment-params.json'); + if (fs.existsSync(deploymentParamsPath)) { + const deploymentParams = readJsonFile(deploymentParamsPath); + const expectedName = deploymentParams?.Deployment?.Nft?.Name; + if (expectedName && manifest.collectionName !== expectedName) { + report.error( + `${base}: collectionName "${manifest.collectionName}" does not match ` + + `Deployment.Nft.Name "${expectedName}"` + ); + } + } + } + // Validate manifest structure (spec §9 rules) validateManifestStructure(manifest, base, report, isExcerpt); if (!isExcerpt) { // Validate manifest-to-output consistency (all referenced files exist) - validateManifestToOutput(manifest, base, nftAssetsDir, report); + if (!args.manifestOnly) { + validateManifestToOutput(manifest, base, outputDir, report); + } - // Validate source images exist (spec §9 rule 14) - validateSourceImages(manifest, base, nftAssetsDir, report); + // Source images are always resolved from the common nft-assets/source-images root. + validateSourceImages(manifest, base, sourceRoot, report, args.allowPlaceholders); } } @@ -770,34 +806,43 @@ function validateManifest(nftAssetsDir, args, report) { function main() { const args = parseArgs(process.argv); - const nftAssetsDir = path.resolve(args.nftAssets); + const sourceRoot = path.resolve(args.nftAssets); + const outputDir = args.chainKey ? path.join(sourceRoot, args.chainKey) : sourceRoot; console.log('='.repeat(60)); console.log('NFT Asset Validation'); console.log('='.repeat(60)); - console.log(`Assets directory: ${nftAssetsDir}`); + console.log(`Source root: ${sourceRoot}`); + console.log(`Output directory: ${outputDir}`); if (args.chainKey) console.log(`Chain key: ${args.chainKey}`); if (args.env) console.log(`Environment: ${args.env}`); if (args.manifest) console.log(`Manifest: ${args.manifest}`); - if (!fs.existsSync(nftAssetsDir)) { - console.error(`\nFATAL: nft-assets directory not found: ${nftAssetsDir}`); + if (!fs.existsSync(sourceRoot)) { + console.error(`\nFATAL: nft-assets directory not found: ${sourceRoot}`); + process.exit(1); + } + + if (!args.manifestOnly && !fs.existsSync(outputDir)) { + console.error(`\nFATAL: chain output directory not found: ${outputDir}`); process.exit(1); } const report = new Report(); - // 1. Collection metadata — contractURI() target - validateCollectionMetadata(nftAssetsDir, report); + if (!args.manifestOnly) { + // 1. Collection metadata — contractURI() target + validateCollectionMetadata(outputDir, report); - // 2. Token metadata files - const tokenIds = validateTokenMetadata(nftAssetsDir, report); + // 2. Token metadata files + const tokenIds = validateTokenMetadata(outputDir, report); - // 3. Token image files - validateTokenImages(nftAssetsDir, tokenIds, report); + // 3. Token image files + validateTokenImages(outputDir, tokenIds, report); + } // 4. Manifest (if present): structure + manifest-to-output consistency - validateManifest(nftAssetsDir, args, report); + validateManifest(outputDir, sourceRoot, args, report); // Summary console.log('\n' + '='.repeat(60)); diff --git a/src/Tricksfor.Blockchain.Booster.Deploy/ContractDeploymentRecord.cs b/src/Tricksfor.Blockchain.Booster.Deploy/ContractDeploymentRecord.cs index 6281567..24feed3 100644 --- a/src/Tricksfor.Blockchain.Booster.Deploy/ContractDeploymentRecord.cs +++ b/src/Tricksfor.Blockchain.Booster.Deploy/ContractDeploymentRecord.cs @@ -36,4 +36,40 @@ public class ContractDeploymentRecord /// [JsonPropertyName("constructorArgs")] public object[] ConstructorArgs { get; init; } = Array.Empty(); + + [JsonPropertyName("chainId")] + public long ChainId { get; init; } + + [JsonPropertyName("deployer")] + public string Deployer { get; init; } = string.Empty; + + [JsonPropertyName("transactionStatus")] + public string TransactionStatus { get; init; } = string.Empty; + + [JsonPropertyName("gasUsed")] + public string GasUsed { get; init; } = string.Empty; + + [JsonPropertyName("sourceCommit")] + public string SourceCommit { get; init; } = string.Empty; + + [JsonPropertyName("compiler")] + public string Compiler { get; init; } = "solc 0.8.26"; + + [JsonPropertyName("compilerSettings")] + public string CompilerSettings { get; init; } = "optimizer=true,runs=200,evmVersion=cancun"; + + [JsonPropertyName("creationCodeHash")] + public string CreationCodeHash { get; init; } = string.Empty; + + [JsonPropertyName("runtimeCodeHash")] + public string RuntimeCodeHash { get; init; } = string.Empty; + + [JsonPropertyName("finalAdmin")] + public string FinalAdmin { get; init; } = string.Empty; + + [JsonPropertyName("finalMinter")] + public string FinalMinter { get; init; } = string.Empty; + + [JsonPropertyName("finalOwner")] + public string FinalOwner { get; init; } = string.Empty; } diff --git a/src/Tricksfor.Blockchain.Booster.Deploy/DeploymentConfig.cs b/src/Tricksfor.Blockchain.Booster.Deploy/DeploymentConfig.cs index 03cd5aa..76e5856 100644 --- a/src/Tricksfor.Blockchain.Booster.Deploy/DeploymentConfig.cs +++ b/src/Tricksfor.Blockchain.Booster.Deploy/DeploymentConfig.cs @@ -37,6 +37,36 @@ public class DeploymentConfig /// public string DeploymentsOutputPath { get; set; } = "deployments"; + /// Initial delayed default administrator for the NFT contract. + public string AdminAddress { get; set; } = string.Empty; + + /// Initial account holding MINTER_ROLE. + public string MinterAddress { get; set; } = string.Empty; + + /// Initial owner of the staking contract. Use a multisig on mainnet. + public string StakingOwnerAddress { get; set; } = string.Empty; + + /// Delay in seconds for NFT default-admin transfers. + public long DefaultAdminDelay { get; set; } + + /// Allows replacing contracts even when an existing manifest points to live bytecode. + public bool Force { get; set; } + + /// Skip HTTP metadata URL checks, intended only for isolated local development. + public bool SkipMetadataReachability { get; set; } + + /// Source revision recorded in manifests. CI should set this to GITHUB_SHA. + public string SourceCommit { get; set; } = string.Empty; + + /// Token ID used by the state-changing smoke test. + public long SmokeTokenId { get; set; } = 1; + + /// Path to the separately reviewed token-to-recipient mint plan. + public string MintPlanPath { get; set; } = string.Empty; + + /// Validate the mint plan without submitting transactions. + public bool DryRun { get; set; } + /// /// Constructor arguments for TricksforBoosterNFT. /// diff --git a/src/Tricksfor.Blockchain.Booster.Deploy/DeploymentPreflight.cs b/src/Tricksfor.Blockchain.Booster.Deploy/DeploymentPreflight.cs new file mode 100644 index 0000000..3edd46e --- /dev/null +++ b/src/Tricksfor.Blockchain.Booster.Deploy/DeploymentPreflight.cs @@ -0,0 +1,57 @@ +using System.Net; +using Nethereum.Web3; + +namespace Tricksfor.Blockchain.Booster.Deploy; + +/// Read-only checks performed before a deployment transaction is submitted. +public static class DeploymentPreflight +{ + public static async Task RunAsync( + DeploymentConfig config, + IWeb3 web3, + string deployerAddress, + TextWriter output, + HttpClient? httpClient = null) + { + var chainId = await web3.Eth.ChainId.SendRequestAsync(); + if ((long)chainId.Value != config.ChainId) + throw new DeploymentException( + $"RPC chain ID mismatch: configured {config.ChainId}, endpoint returned {chainId.Value}."); + + var balance = await web3.Eth.GetBalance.SendRequestAsync(deployerAddress); + if (balance.Value <= 0) + throw new DeploymentException($"Deployer {deployerAddress} has a zero native-token balance."); + + var gasPrice = await web3.Eth.GasPrice.SendRequestAsync(); + if (gasPrice.Value <= 0) + throw new DeploymentException("RPC fee estimation returned a non-positive gas price."); + + output.WriteLine($" Deployer: {deployerAddress}"); + output.WriteLine($" Balance wei: {balance.Value}"); + output.WriteLine($" Gas price: {gasPrice.Value}"); + + if (config.SkipMetadataReachability) + return; + + using var ownedClient = httpClient is null ? new HttpClient { Timeout = TimeSpan.FromSeconds(15) } : null; + var client = httpClient ?? ownedClient!; + await EnsureReachableAsync( + client, + $"{config.Nft.BaseUri}{config.SmokeTokenId}", + $"token {config.SmokeTokenId} metadata URL"); + await EnsureReachableAsync(client, config.Nft.ContractMetadataUri, "contract metadata URL"); + } + + private static async Task EnsureReachableAsync(HttpClient client, string value, string label) + { + if (!Uri.TryCreate(value, UriKind.Absolute, out var uri) || + (uri.Scheme != Uri.UriSchemeHttps && uri.Scheme != Uri.UriSchemeHttp)) + throw new DeploymentException($"The {label} is not a valid HTTP(S) URL: '{value}'."); + + using var request = new HttpRequestMessage(HttpMethod.Get, uri); + using var response = await client.SendAsync(request, HttpCompletionOption.ResponseHeadersRead); + if (response.StatusCode is HttpStatusCode.NotFound or HttpStatusCode.Gone || !response.IsSuccessStatusCode) + throw new DeploymentException( + $"The {label} is not reachable ({(int)response.StatusCode} {response.ReasonPhrase}): {uri}"); + } +} diff --git a/src/Tricksfor.Blockchain.Booster.Deploy/DeploymentRunner.cs b/src/Tricksfor.Blockchain.Booster.Deploy/DeploymentRunner.cs index 998c1be..09e05ea 100644 --- a/src/Tricksfor.Blockchain.Booster.Deploy/DeploymentRunner.cs +++ b/src/Tricksfor.Blockchain.Booster.Deploy/DeploymentRunner.cs @@ -1,5 +1,8 @@ using Nethereum.Web3; using Nethereum.Web3.Accounts; +using Nethereum.RPC.Eth.DTOs; +using Nethereum.Util; +using System.Text.RegularExpressions; using Tricksfor.Blockchain.Booster.Contracts.Deployment; using Tricksfor.Blockchain.Booster.Services; @@ -18,6 +21,9 @@ namespace Tricksfor.Blockchain.Booster.Deploy; /// public sealed class DeploymentRunner { + private static readonly Regex AddressPattern = new("^0x[0-9a-fA-F]{40}$", RegexOptions.Compiled); + private static readonly Regex PrivateKeyPattern = new("^(0x)?[0-9a-fA-F]{64}$", RegexOptions.Compiled); + private const string ZeroAddress = "0x0000000000000000000000000000000000000000"; private readonly DeploymentConfig _config; private readonly TextWriter _output; @@ -44,6 +50,15 @@ public async Task RunAsync() var web3 = new Web3(account, _config.RpcUrl); var deployerAddress = account.Address; + if (_config.Network.EndsWith("-mainnet", StringComparison.OrdinalIgnoreCase) && + (_config.AdminAddress.Equals(deployerAddress, StringComparison.OrdinalIgnoreCase) || + _config.StakingOwnerAddress.Equals(deployerAddress, StringComparison.OrdinalIgnoreCase))) + throw new DeploymentException( + "Mainnet AdminAddress and StakingOwnerAddress must be governance/multisig addresses, not the deployer."); + + _output.WriteLine("[1/6] Running RPC and account preflight checks..."); + await DeploymentPreflight.RunAsync(_config, web3, deployerAddress, _output); + // ---- Step 2: Deploy TricksforBoosterNFT ---------------------------------------- _output.WriteLine("[2/6] Deploying TricksforBoosterNFT..."); @@ -59,16 +74,44 @@ public async Task RunAsync() ContractMetadataUri = _config.Nft.ContractMetadataUri, RoyaltyReceiver = royaltyReceiver, RoyaltyFeeBasisPoints = _config.Nft.RoyaltyFeeBasisPoints, + InitialAdmin = _config.AdminAddress, + InitialMinter = _config.MinterAddress, + DefaultAdminDelay = _config.DefaultAdminDelay, }; - var nftReceipt = await BoosterNFTService.DeployContractAndWaitForReceiptAsync( - web3, nftDeployment); - - var nftAddress = nftReceipt.ContractAddress - ?? throw new DeploymentException( - "NFT deployment receipt did not contain a contract address."); + var nftRecord = await TryGetReusableRecordAsync(web3, "TricksforBoosterNFT"); + if (nftRecord is null) + { + var nftReceipt = await BoosterNFTService.DeployContractAndWaitForReceiptAsync(web3, nftDeployment); + var nftAddressFromReceipt = nftReceipt.ContractAddress + ?? throw new DeploymentException("NFT deployment receipt did not contain a contract address."); + nftRecord = await CreateRecordAsync( + web3, + "TricksforBoosterNFT", + nftAddressFromReceipt, + nftReceipt, + deployerAddress, + TricksforBoosterNFTDeployment.BYTECODE, + _config.AdminAddress, + _config.MinterAddress, + string.Empty, + new object[] + { + _config.Nft.Name, + _config.Nft.Symbol, + _config.Nft.BaseUri, + _config.Nft.ContractMetadataUri, + royaltyReceiver, + _config.Nft.RoyaltyFeeBasisPoints, + _config.AdminAddress, + _config.MinterAddress, + _config.DefaultAdminDelay, + }); + var nftManifest = ManifestWriter.Write(nftRecord, _config.DeploymentsOutputPath, _config.Network); + _output.WriteLine($" Deployed at {nftRecord.Address}; receipt saved to {nftManifest}"); + } - _output.WriteLine($" TricksforBoosterNFT deployed at {nftAddress}"); + var nftAddress = nftRecord.Address; // ---- Step 3: Deploy TricksforBoosterStaking (requires NFT address) --------------- _output.WriteLine("[3/6] Deploying TricksforBoosterStaking..."); @@ -76,44 +119,31 @@ public async Task RunAsync() var stakingDeployment = new TricksforBoosterStakingDeployment { NftContract = nftAddress, + InitialOwner = _config.StakingOwnerAddress, }; - var stakingReceipt = await BoosterStakingService.DeployContractAndWaitForReceiptAsync( - web3, stakingDeployment); - - var stakingAddress = stakingReceipt.ContractAddress - ?? throw new DeploymentException( - "Staking deployment receipt did not contain a contract address."); - - _output.WriteLine($" TricksforBoosterStaking deployed at {stakingAddress}"); - - var nftRecord = new ContractDeploymentRecord + var stakingRecord = await TryGetReusableRecordAsync(web3, "TricksforBoosterStaking"); + if (stakingRecord is null) { - ContractName = "TricksforBoosterNFT", - Address = nftAddress, - TransactionHash = nftReceipt.TransactionHash, - BlockNumber = (long)nftReceipt.BlockNumber.Value, - DeployedAt = DateTimeOffset.UtcNow, - ConstructorArgs = new object[] - { - _config.Nft.Name, - _config.Nft.Symbol, - _config.Nft.BaseUri, - _config.Nft.ContractMetadataUri, - royaltyReceiver, - _config.Nft.RoyaltyFeeBasisPoints, - }, - }; + var stakingReceipt = await BoosterStakingService.DeployContractAndWaitForReceiptAsync(web3, stakingDeployment); + var stakingAddressFromReceipt = stakingReceipt.ContractAddress + ?? throw new DeploymentException("Staking deployment receipt did not contain a contract address."); + stakingRecord = await CreateRecordAsync( + web3, + "TricksforBoosterStaking", + stakingAddressFromReceipt, + stakingReceipt, + deployerAddress, + TricksforBoosterStakingDeployment.BYTECODE, + string.Empty, + string.Empty, + _config.StakingOwnerAddress, + new object[] { nftAddress, _config.StakingOwnerAddress }); + var stakingManifest = ManifestWriter.Write(stakingRecord, _config.DeploymentsOutputPath, _config.Network); + _output.WriteLine($" Deployed at {stakingRecord.Address}; receipt saved to {stakingManifest}"); + } - var stakingRecord = new ContractDeploymentRecord - { - ContractName = "TricksforBoosterStaking", - Address = stakingAddress, - TransactionHash = stakingReceipt.TransactionHash, - BlockNumber = (long)stakingReceipt.BlockNumber.Value, - DeployedAt = DateTimeOffset.UtcNow, - ConstructorArgs = new object[] { nftAddress }, - }; + var stakingAddress = stakingRecord.Address; // ---- Step 4: Persist manifests -------------------------------------------------- _output.WriteLine("[4/6] Writing deployment manifests..."); @@ -128,7 +158,8 @@ public async Task RunAsync() _output.WriteLine("[5/6] Running sanity checks..."); var checker = new PostDeploySanityChecker(web3); - var sanityResults = await checker.RunAsync(_config, nftAddress, stakingAddress); + var sanityResults = await checker.RunAsync( + _config, nftAddress, stakingAddress, royaltyReceiver); foreach (var check in sanityResults) { @@ -177,6 +208,70 @@ private void PrintSummary( _output.WriteLine("All sanity checks passed."); } + private async Task TryGetReusableRecordAsync(IWeb3 web3, string contractName) + { + if (_config.Force) + { + _output.WriteLine($" Force enabled; a replacement {contractName} will be deployed."); + return null; + } + + var existing = ManifestWriter.Read(_config.DeploymentsOutputPath, _config.Network, contractName); + if (existing is null || !IsValidNonZeroAddress(existing.Address)) + return null; + + var code = await web3.Eth.GetCode.SendRequestAsync(existing.Address); + if (string.IsNullOrWhiteSpace(code) || code == "0x" || code == "0x0") + { + _output.WriteLine($" Existing {contractName} manifest has no live bytecode; redeploying."); + return null; + } + + _output.WriteLine($" Reusing {contractName} at {existing.Address} from its deployment manifest."); + return existing; + } + + private async Task CreateRecordAsync( + IWeb3 web3, + string contractName, + string address, + TransactionReceipt receipt, + string deployerAddress, + string creationCode, + string finalAdmin, + string finalMinter, + string finalOwner, + object[] constructorArgs) + { + var runtimeCode = await web3.Eth.GetCode.SendRequestAsync(address); + return new ContractDeploymentRecord + { + ContractName = contractName, + Address = address, + TransactionHash = receipt.TransactionHash, + BlockNumber = receipt.BlockNumber is null ? 0 : (long)receipt.BlockNumber.Value, + DeployedAt = DateTimeOffset.UtcNow, + ConstructorArgs = constructorArgs, + ChainId = _config.ChainId, + Deployer = deployerAddress, + TransactionStatus = receipt.Status?.Value == 1 ? "success" : "failed", + GasUsed = receipt.GasUsed?.Value.ToString() ?? string.Empty, + SourceCommit = _config.SourceCommit, + CreationCodeHash = HashHex(creationCode), + RuntimeCodeHash = HashHex(runtimeCode), + FinalAdmin = finalAdmin, + FinalMinter = finalMinter, + FinalOwner = finalOwner, + }; + } + + private static string HashHex(string value) + { + if (string.IsNullOrWhiteSpace(value) || value is "0x" or "0x0") + return string.Empty; + return $"0x{Sha3Keccack.Current.CalculateHashFromHex(value)}"; + } + private void ValidateConfig() { var errors = new List(); @@ -184,12 +279,24 @@ private void ValidateConfig() if (string.IsNullOrWhiteSpace(_config.RpcUrl)) errors.Add("Deployment:RpcUrl is required."); + if (string.IsNullOrWhiteSpace(_config.Network)) + errors.Add("Deployment:Network is required."); + if (_config.ChainId <= 0) errors.Add("Deployment:ChainId must be a positive integer."); if (string.IsNullOrWhiteSpace(_config.PrivateKey)) errors.Add("Deployment:PrivateKey is required. " + "Set the Deployment__PrivateKey environment variable."); + else if (!PrivateKeyPattern.IsMatch(_config.PrivateKey)) + errors.Add("Deployment:PrivateKey must be a 32-byte hexadecimal key."); + + ValidateAddress(_config.AdminAddress, "Deployment:AdminAddress", errors); + ValidateAddress(_config.MinterAddress, "Deployment:MinterAddress", errors); + ValidateAddress(_config.StakingOwnerAddress, "Deployment:StakingOwnerAddress", errors); + + if (_config.DefaultAdminDelay < 0 || _config.DefaultAdminDelay > 281_474_976_710_655L) + errors.Add("Deployment:DefaultAdminDelay must fit in uint48."); if (string.IsNullOrWhiteSpace(_config.Nft.Name)) errors.Add("Deployment:Nft:Name is required."); @@ -200,15 +307,29 @@ private void ValidateConfig() if (_config.Nft.RoyaltyFeeBasisPoints < 0 || _config.Nft.RoyaltyFeeBasisPoints > 10_000) errors.Add("Deployment:Nft:RoyaltyFeeBasisPoints must be between 0 and 10 000 (inclusive)."); - if (!string.IsNullOrWhiteSpace(_config.Nft.RoyaltyReceiver) && - _config.Nft.RoyaltyReceiver.Equals( - "0x0000000000000000000000000000000000000000", - StringComparison.OrdinalIgnoreCase)) - errors.Add("Deployment:Nft:RoyaltyReceiver must not be the zero address."); + if (!string.IsNullOrWhiteSpace(_config.Nft.RoyaltyReceiver)) + ValidateAddress(_config.Nft.RoyaltyReceiver, "Deployment:Nft:RoyaltyReceiver", errors); + + if (string.IsNullOrWhiteSpace(_config.Nft.BaseUri)) + errors.Add("Deployment:Nft:BaseUri is required."); + + if (string.IsNullOrWhiteSpace(_config.Nft.ContractMetadataUri)) + errors.Add("Deployment:Nft:ContractMetadataUri is required."); if (errors.Count > 0) throw new DeploymentException( $"Configuration is invalid:{Environment.NewLine}" + string.Join(Environment.NewLine, errors)); } + + private static void ValidateAddress(string address, string label, List errors) + { + if (!IsValidNonZeroAddress(address)) + errors.Add($"{label} must be a non-zero 20-byte hexadecimal address."); + } + + private static bool IsValidNonZeroAddress(string address) + => !string.IsNullOrWhiteSpace(address) && + AddressPattern.IsMatch(address) && + !address.Equals(ZeroAddress, StringComparison.OrdinalIgnoreCase); } diff --git a/src/Tricksfor.Blockchain.Booster.Deploy/ManifestWriter.cs b/src/Tricksfor.Blockchain.Booster.Deploy/ManifestWriter.cs index 9dbe567..93614e8 100644 --- a/src/Tricksfor.Blockchain.Booster.Deploy/ManifestWriter.cs +++ b/src/Tricksfor.Blockchain.Booster.Deploy/ManifestWriter.cs @@ -44,4 +44,14 @@ public static string Write( /// public static string GetFilePath(string outputRoot, string network, string contractName) => Path.Combine(outputRoot, network, $"{contractName}.json"); + + /// Loads an existing record when the manifest exists and is valid JSON. + public static ContractDeploymentRecord? Read(string outputRoot, string network, string contractName) + { + var filePath = GetFilePath(outputRoot, network, contractName); + if (!File.Exists(filePath)) + return null; + + return JsonSerializer.Deserialize(File.ReadAllText(filePath), SerializerOptions); + } } diff --git a/src/Tricksfor.Blockchain.Booster.Deploy/MintRunner.cs b/src/Tricksfor.Blockchain.Booster.Deploy/MintRunner.cs new file mode 100644 index 0000000..339d21f --- /dev/null +++ b/src/Tricksfor.Blockchain.Booster.Deploy/MintRunner.cs @@ -0,0 +1,129 @@ +using System.Numerics; +using System.Text.Json; +using System.Text.Json.Serialization; +using System.Text.RegularExpressions; +using Nethereum.Web3; +using Nethereum.Web3.Accounts; +using Tricksfor.Blockchain.Booster.Services; + +namespace Tricksfor.Blockchain.Booster.Deploy; + +public sealed record MintPlan(IReadOnlyList Items); +public sealed record MintPlanItem(BigInteger TokenId, string Recipient); +public sealed record MintResult(BigInteger TokenId, string Recipient, string Status, string TransactionHash); + +internal sealed class BigIntegerJsonConverter : JsonConverter +{ + public override BigInteger Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + var raw = reader.TokenType switch + { + JsonTokenType.String => reader.GetString(), + JsonTokenType.Number => JsonDocument.ParseValue(ref reader).RootElement.GetRawText(), + _ => null, + }; + return BigInteger.TryParse(raw, out var value) + ? value + : throw new JsonException("Token ID must be an integer or an integer string."); + } + + public override void Write(Utf8JsonWriter writer, BigInteger value, JsonSerializerOptions options) + => writer.WriteStringValue(value.ToString()); +} + +/// Validates and executes a separate, resumable token-to-recipient mint plan. +public sealed class MintRunner +{ + private static readonly Regex AddressPattern = new("^0x[0-9a-fA-F]{40}$", RegexOptions.Compiled); + private readonly DeploymentConfig _config; + private readonly TextWriter _output; + + public MintRunner(DeploymentConfig config, TextWriter? output = null) + { + _config = config; + _output = output ?? Console.Out; + } + + public async Task> RunAsync() + { + if (string.IsNullOrWhiteSpace(_config.MintPlanPath) || !File.Exists(_config.MintPlanPath)) + throw new DeploymentException("Deployment:MintPlanPath must point to an approved mint-plan JSON file."); + + var plan = JsonSerializer.Deserialize(File.ReadAllText(_config.MintPlanPath), JsonOptions()) + ?? throw new DeploymentException("Mint plan JSON is empty or invalid."); + ValidatePlan(plan); + + var nftRecord = ManifestWriter.Read( + _config.DeploymentsOutputPath, _config.Network, "TricksforBoosterNFT") + ?? throw new DeploymentException("Missing TricksforBoosterNFT deployment manifest."); + var account = new Account(_config.PrivateKey, _config.ChainId); + var web3 = new Web3(account, _config.RpcUrl); + var nft = new BoosterNFTService(web3, nftRecord.Address); + var minterRole = await nft.MinterRoleQueryAsync(); + if (!await nft.HasRoleQueryAsync(minterRole, account.Address)) + throw new DeploymentException($"Configured deployer {account.Address} does not hold MINTER_ROLE."); + + var results = new List(); + foreach (var item in plan.Items) + { + string? currentOwner = null; + try { currentOwner = await nft.OwnerOfQueryAsync(item.TokenId); } catch { /* not minted */ } + + if (currentOwner is not null) + { + if (!currentOwner.Equals(item.Recipient, StringComparison.OrdinalIgnoreCase)) + throw new DeploymentException( + $"Token {item.TokenId} already exists and is owned by {currentOwner}, not {item.Recipient}."); + results.Add(new MintResult(item.TokenId, item.Recipient, "already-minted", string.Empty)); + } + else if (_config.DryRun) + { + results.Add(new MintResult(item.TokenId, item.Recipient, "dry-run", string.Empty)); + } + else + { + var receipt = await nft.SafeMintRequestAndWaitForReceiptAsync(item.Recipient, item.TokenId); + results.Add(new MintResult(item.TokenId, item.Recipient, "minted", receipt.TransactionHash)); + } + + WriteResults(results); + } + + _output.WriteLine($"Mint plan processed: {results.Count} item(s), dry-run={_config.DryRun}."); + return results; + } + + private static void ValidatePlan(MintPlan plan) + { + if (plan.Items is null || plan.Items.Count == 0) + throw new DeploymentException("Mint plan must contain at least one item."); + + var seen = new HashSet(); + foreach (var item in plan.Items) + { + if (item.TokenId <= 0 || !seen.Add(item.TokenId)) + throw new DeploymentException($"Mint plan token IDs must be positive and unique: {item.TokenId}."); + if (!AddressPattern.IsMatch(item.Recipient) || + item.Recipient.Equals("0x0000000000000000000000000000000000000000", StringComparison.OrdinalIgnoreCase)) + throw new DeploymentException($"Mint plan recipient is invalid for token {item.TokenId}."); + } + } + + private void WriteResults(IReadOnlyList results) + { + var path = Path.Combine(_config.DeploymentsOutputPath, _config.Network, "mint-results.json"); + Directory.CreateDirectory(Path.GetDirectoryName(path)!); + File.WriteAllText(path, JsonSerializer.Serialize(results, JsonOptions(writeIndented: true))); + } + + private static JsonSerializerOptions JsonOptions(bool writeIndented = false) + { + var options = new JsonSerializerOptions + { + PropertyNameCaseInsensitive = true, + WriteIndented = writeIndented, + }; + options.Converters.Add(new BigIntegerJsonConverter()); + return options; + } +} diff --git a/src/Tricksfor.Blockchain.Booster.Deploy/PostDeploySanityChecker.cs b/src/Tricksfor.Blockchain.Booster.Deploy/PostDeploySanityChecker.cs index 2698807..4ddbca9 100644 --- a/src/Tricksfor.Blockchain.Booster.Deploy/PostDeploySanityChecker.cs +++ b/src/Tricksfor.Blockchain.Booster.Deploy/PostDeploySanityChecker.cs @@ -30,13 +30,28 @@ public PostDeploySanityChecker(IWeb3 web3) public async Task> RunAsync( DeploymentConfig config, string nftAddress, - string stakingAddress) + string stakingAddress, + string expectedRoyaltyReceiver) { var nftService = new BoosterNFTService(_web3, nftAddress); var stakingService = new BoosterStakingService(_web3, stakingAddress); var results = new List(); + var nftCode = await _web3.Eth.GetCode.SendRequestAsync(nftAddress); + results.Add(new SanityCheckResult( + "NFT bytecode", + !string.IsNullOrWhiteSpace(nftCode) && nftCode is not "0x" and not "0x0", + "present", + string.IsNullOrWhiteSpace(nftCode) || nftCode is "0x" or "0x0" ? "missing" : "present")); + + var stakingCode = await _web3.Eth.GetCode.SendRequestAsync(stakingAddress); + results.Add(new SanityCheckResult( + "Staking bytecode", + !string.IsNullOrWhiteSpace(stakingCode) && stakingCode is not "0x" and not "0x0", + "present", + string.IsNullOrWhiteSpace(stakingCode) || stakingCode is "0x" or "0x0" ? "missing" : "present")); + // NFT name() var nftName = await nftService.NameQueryAsync(); results.Add(new SanityCheckResult( @@ -53,6 +68,65 @@ public async Task> RunAsync( config.Nft.Symbol, nftSymbol)); + var baseUri = await nftService.BaseUriQueryAsync(); + results.Add(new SanityCheckResult( + "NFT baseURI()", + string.Equals(baseUri, config.Nft.BaseUri, StringComparison.Ordinal), + config.Nft.BaseUri, + baseUri)); + + var contractUri = await nftService.ContractUriQueryAsync(); + results.Add(new SanityCheckResult( + "NFT contractURI()", + string.Equals(contractUri, config.Nft.ContractMetadataUri, StringComparison.Ordinal), + config.Nft.ContractMetadataUri, + contractUri)); + + foreach (var (label, interfaceId) in new[] + { + ("ERC-165", "01ffc9a7"), + ("ERC-721", "80ac58cd"), + ("ERC-2981", "2a55205a"), + }) + { + var supported = await nftService.SupportsInterfaceQueryAsync(Convert.FromHexString(interfaceId)); + results.Add(new SanityCheckResult($"NFT {label}", supported, "true", supported.ToString().ToLowerInvariant())); + } + + var royalty = await nftService.RoyaltyInfoQueryAsync(1, 10_000); + results.Add(new SanityCheckResult( + "NFT royaltyInfo() receiver", + string.Equals(royalty.Receiver, expectedRoyaltyReceiver, StringComparison.OrdinalIgnoreCase), + expectedRoyaltyReceiver, + royalty.Receiver)); + results.Add(new SanityCheckResult( + "NFT royaltyInfo() amount", + royalty.RoyaltyAmount == config.Nft.RoyaltyFeeBasisPoints, + config.Nft.RoyaltyFeeBasisPoints.ToString(), + royalty.RoyaltyAmount.ToString())); + + var defaultAdmin = await nftService.DefaultAdminQueryAsync(); + results.Add(new SanityCheckResult( + "NFT defaultAdmin()", + string.Equals(defaultAdmin, config.AdminAddress, StringComparison.OrdinalIgnoreCase), + config.AdminAddress, + defaultAdmin)); + + var defaultAdminDelay = await nftService.DefaultAdminDelayQueryAsync(); + results.Add(new SanityCheckResult( + "NFT defaultAdminDelay()", + defaultAdminDelay == config.DefaultAdminDelay, + config.DefaultAdminDelay.ToString(), + defaultAdminDelay.ToString())); + + var minterRole = await nftService.MinterRoleQueryAsync(); + var hasMinterRole = await nftService.HasRoleQueryAsync(minterRole, config.MinterAddress); + results.Add(new SanityCheckResult( + "NFT configured minter role", + hasMinterRole, + "true", + hasMinterRole.ToString().ToLowerInvariant())); + // NFT paused() var nftPaused = await nftService.PausedQueryAsync(); results.Add(new SanityCheckResult( @@ -77,6 +151,13 @@ public async Task> RunAsync( "false", stakingPaused.ToString().ToLowerInvariant())); + var stakingOwner = await stakingService.OwnerQueryAsync(); + results.Add(new SanityCheckResult( + "Staking owner()", + string.Equals(stakingOwner, config.StakingOwnerAddress, StringComparison.OrdinalIgnoreCase), + config.StakingOwnerAddress, + stakingOwner)); + return results; } } diff --git a/src/Tricksfor.Blockchain.Booster.Deploy/Program.cs b/src/Tricksfor.Blockchain.Booster.Deploy/Program.cs index ce5043e..53d21e1 100644 --- a/src/Tricksfor.Blockchain.Booster.Deploy/Program.cs +++ b/src/Tricksfor.Blockchain.Booster.Deploy/Program.cs @@ -21,6 +21,7 @@ // Deployment__Network — manifest output subfolder name (defaults to DEPLOY_ENV) // --------------------------------------------------------------------------- +var command = args.FirstOrDefault()?.ToLowerInvariant() ?? "deploy"; var env = Environment.GetEnvironmentVariable("DEPLOY_ENV") ?? "localhost"; Console.WriteLine("=== Tricksfor Booster Deployment Runner ==="); @@ -48,8 +49,23 @@ try { - var runner = new DeploymentRunner(config); - await runner.RunAsync(); + config.Force = config.Force || args.Contains("--force", StringComparer.OrdinalIgnoreCase); + config.DryRun = config.DryRun || args.Contains("--dry-run", StringComparer.OrdinalIgnoreCase); + + switch (command) + { + case "deploy": + await new DeploymentRunner(config).RunAsync(); + break; + case "smoke": + await new SmokeRunner(config).RunAsync(); + break; + case "mint": + await new MintRunner(config).RunAsync(); + break; + default: + throw new DeploymentException("Unknown command. Use deploy, smoke, or mint."); + } return 0; } catch (DeploymentException ex) diff --git a/src/Tricksfor.Blockchain.Booster.Deploy/SmokeRunner.cs b/src/Tricksfor.Blockchain.Booster.Deploy/SmokeRunner.cs new file mode 100644 index 0000000..db71aa0 --- /dev/null +++ b/src/Tricksfor.Blockchain.Booster.Deploy/SmokeRunner.cs @@ -0,0 +1,140 @@ +using System.Numerics; +using System.Text.Json; +using Nethereum.Web3; +using Nethereum.Web3.Accounts; +using Tricksfor.Blockchain.Booster.Services; + +namespace Tricksfor.Blockchain.Booster.Deploy; + +/// Executes the protected testnet mint, stake, event-decode, and unstake smoke flow. +public sealed class SmokeRunner +{ + private readonly DeploymentConfig _config; + private readonly TextWriter _output; + + public SmokeRunner(DeploymentConfig config, TextWriter? output = null) + { + _config = config; + _output = output ?? Console.Out; + } + + public async Task RunAsync() + { + if (_config.SmokeTokenId <= 0) + throw new DeploymentException("Deployment:SmokeTokenId must be positive."); + + var nftRecord = RequireRecord("TricksforBoosterNFT"); + var stakingRecord = RequireRecord("TricksforBoosterStaking"); + var account = new Account(_config.PrivateKey, _config.ChainId); + var web3 = new Web3(account, _config.RpcUrl); + await DeploymentPreflight.RunAsync(_config, web3, account.Address, _output); + + var nft = new BoosterNFTService(web3, nftRecord.Address); + var staking = new BoosterStakingService(web3, stakingRecord.Address); + var tokenId = new BigInteger(_config.SmokeTokenId); + var transactions = new Dictionary(); + + var isStaked = await staking.IsStakedQueryAsync(tokenId); + if (isStaked) + { + var recordedStaker = await staking.StakedOwnerOfQueryAsync(tokenId); + if (!recordedStaker.Equals(account.Address, StringComparison.OrdinalIgnoreCase)) + throw new DeploymentException($"Smoke token {tokenId} is staked by another account: {recordedStaker}."); + var recovery = await staking.UnstakeRequestAndWaitForReceiptAsync(tokenId); + transactions["recoveryUnstake"] = recovery.TransactionHash; + } + + string? owner = null; + try { owner = await nft.OwnerOfQueryAsync(tokenId); } catch { /* not minted */ } + if (owner is null) + { + var mint = await nft.SafeMintRequestAndWaitForReceiptAsync(account.Address, tokenId); + transactions["mint"] = mint.TransactionHash; + } + else if (!owner.Equals(account.Address, StringComparison.OrdinalIgnoreCase)) + { + throw new DeploymentException($"Smoke token {tokenId} is owned by another account: {owner}."); + } + + var tokenUri = await nft.TokenUriQueryAsync(tokenId); + var expectedTokenUri = $"{_config.Nft.BaseUri}{tokenId}"; + if (!tokenUri.Equals(expectedTokenUri, StringComparison.Ordinal)) + throw new DeploymentException($"Smoke tokenURI mismatch: expected {expectedTokenUri}, got {tokenUri}."); + + var supportsErc165 = await nft.SupportsInterfaceQueryAsync(Convert.FromHexString("01ffc9a7")); + var supportsErc721 = await nft.SupportsInterfaceQueryAsync(Convert.FromHexString("80ac58cd")); + var supportsErc2981 = await nft.SupportsInterfaceQueryAsync(Convert.FromHexString("2a55205a")); + if (!supportsErc165 || !supportsErc721 || !supportsErc2981) + throw new DeploymentException("Smoke interface validation failed for ERC-165, ERC-721, or ERC-2981."); + + var royalty = await nft.RoyaltyInfoQueryAsync(tokenId, 10_000); + var expectedRoyaltyReceiver = string.IsNullOrWhiteSpace(_config.Nft.RoyaltyReceiver) + ? account.Address + : _config.Nft.RoyaltyReceiver; + if (!royalty.Receiver.Equals(expectedRoyaltyReceiver, StringComparison.OrdinalIgnoreCase) || + royalty.RoyaltyAmount != _config.Nft.RoyaltyFeeBasisPoints) + throw new DeploymentException("Smoke royalty validation failed."); + + var approve = await nft.ApproveRequestAndWaitForReceiptAsync(stakingRecord.Address, tokenId); + transactions["approve"] = approve.TransactionHash; + + var stake = await staking.StakeRequestAndWaitForReceiptAsync(tokenId); + transactions["stake"] = stake.TransactionHash; + var stakedEvents = staking.DecodeTokenStakedEvents(stake); + if (stakedEvents.Count != 1 || stakedEvents[0].Event.TokenId != tokenId) + throw new DeploymentException("Smoke stake transaction did not decode exactly one matching TokenStaked event."); + + var unstake = await staking.UnstakeRequestAndWaitForReceiptAsync(tokenId); + transactions["unstake"] = unstake.TransactionHash; + var unstakedEvents = staking.DecodeTokenUnstakedEvents(unstake); + if (unstakedEvents.Count != 1 || unstakedEvents[0].Event.TokenId != tokenId) + throw new DeploymentException("Smoke unstake transaction did not decode exactly one matching TokenUnstaked event."); + + var finalOwner = await nft.OwnerOfQueryAsync(tokenId); + var finalStaked = await staking.IsStakedQueryAsync(tokenId); + if (!finalOwner.Equals(account.Address, StringComparison.OrdinalIgnoreCase) || finalStaked) + throw new DeploymentException("Smoke flow final custody/state reconciliation failed."); + + var result = new + { + network = _config.Network, + chainId = _config.ChainId, + tokenId = tokenId.ToString(), + nft = nftRecord.Address, + staking = stakingRecord.Address, + transactions, + readResults = new + { + tokenUri, + supportsErc165, + supportsErc721, + supportsErc2981, + royaltyReceiver = royalty.Receiver, + royaltyAmount = royalty.RoyaltyAmount.ToString(), + }, + tokenStaked = new + { + staker = stakedEvents[0].Event.Staker, + tokenId = stakedEvents[0].Event.TokenId.ToString(), + stakedAt = stakedEvents[0].Event.StakedAt.ToString(), + }, + tokenUnstaked = new + { + staker = unstakedEvents[0].Event.Staker, + tokenId = unstakedEvents[0].Event.TokenId.ToString(), + unstakedAt = unstakedEvents[0].Event.UnstakedAt.ToString(), + }, + finalOwner, + finalStaked, + completedAt = DateTimeOffset.UtcNow, + }; + var path = Path.Combine(_config.DeploymentsOutputPath, _config.Network, "smoke-result.json"); + Directory.CreateDirectory(Path.GetDirectoryName(path)!); + File.WriteAllText(path, JsonSerializer.Serialize(result, new JsonSerializerOptions { WriteIndented = true })); + _output.WriteLine($"Smoke flow passed. Results: {path}"); + } + + private ContractDeploymentRecord RequireRecord(string contractName) + => ManifestWriter.Read(_config.DeploymentsOutputPath, _config.Network, contractName) + ?? throw new DeploymentException($"Missing deployment manifest for {contractName}."); +} diff --git a/src/Tricksfor.Blockchain.Booster.Deploy/appsettings.json b/src/Tricksfor.Blockchain.Booster.Deploy/appsettings.json index 73070d2..008b6be 100644 --- a/src/Tricksfor.Blockchain.Booster.Deploy/appsettings.json +++ b/src/Tricksfor.Blockchain.Booster.Deploy/appsettings.json @@ -3,8 +3,18 @@ "RpcUrl": "http://127.0.0.1:8545", "ChainId": 31337, "DeploymentsOutputPath": "deployments", + "AdminAddress": "", + "MinterAddress": "", + "StakingOwnerAddress": "", + "DefaultAdminDelay": 0, + "Force": false, + "SkipMetadataReachability": false, + "SourceCommit": "", + "SmokeTokenId": 1, + "MintPlanPath": "", + "DryRun": false, "Nft": { - "Name": "TricksforBooster", + "Name": "Tricksfor Boosters - Localhost", "Symbol": "TFB", "BaseUri": "https://meta.tricksfor.gg/booster/", "ContractMetadataUri": "https://meta.tricksfor.gg/booster/contract.json", diff --git a/src/Tricksfor.Blockchain.Booster.Deploy/appsettings.localhost.json b/src/Tricksfor.Blockchain.Booster.Deploy/appsettings.localhost.json index 81e8350..7aa88c7 100644 --- a/src/Tricksfor.Blockchain.Booster.Deploy/appsettings.localhost.json +++ b/src/Tricksfor.Blockchain.Booster.Deploy/appsettings.localhost.json @@ -2,6 +2,10 @@ "Deployment": { "Network": "localhost", "RpcUrl": "http://127.0.0.1:8545", - "ChainId": 31337 + "ChainId": 31337, + "AdminAddress": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", + "MinterAddress": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", + "StakingOwnerAddress": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", + "SkipMetadataReachability": true } } diff --git a/src/Tricksfor.Blockchain.Booster/Abis/TricksforBoosterNFTAbi.cs b/src/Tricksfor.Blockchain.Booster/Abis/TricksforBoosterNFTAbi.cs index 1bd22fa..7d196c9 100644 --- a/src/Tricksfor.Blockchain.Booster/Abis/TricksforBoosterNFTAbi.cs +++ b/src/Tricksfor.Blockchain.Booster/Abis/TricksforBoosterNFTAbi.cs @@ -1,14 +1,12 @@ namespace Tricksfor.Blockchain.Booster.Abis { /// - /// ABI and bytecode for TricksforBoosterNFT. - /// Regenerate from artifacts/contracts/TricksforBoosterNFT.sol/TricksforBoosterNFT.json - /// after any contract interface change. + /// ABI and bytecode for TricksforBoosterNFT. Generated by scripts/sync-contract-artifacts.js. /// internal static class TricksforBoosterNFTAbi { - public const string Abi = @"[{""inputs"":[{""internalType"":""string"",""name"":""name_"",""type"":""string""},{""internalType"":""string"",""name"":""symbol_"",""type"":""string""},{""internalType"":""string"",""name"":""baseURI_"",""type"":""string""},{""internalType"":""string"",""name"":""contractMetadataURI_"",""type"":""string""},{""internalType"":""address"",""name"":""royaltyReceiver_"",""type"":""address""},{""internalType"":""uint96"",""name"":""royaltyFeeBasisPoints_"",""type"":""uint96""}],""stateMutability"":""nonpayable"",""type"":""constructor""},{""inputs"":[],""name"":""AccessControlBadConfirmation"",""type"":""error""},{""inputs"":[{""internalType"":""address"",""name"":""account"",""type"":""address""},{""internalType"":""bytes32"",""name"":""neededRole"",""type"":""bytes32""}],""name"":""AccessControlUnauthorizedAccount"",""type"":""error""},{""inputs"":[{""internalType"":""uint256"",""name"":""numerator"",""type"":""uint256""},{""internalType"":""uint256"",""name"":""denominator"",""type"":""uint256""}],""name"":""ERC2981InvalidDefaultRoyalty"",""type"":""error""},{""inputs"":[{""internalType"":""address"",""name"":""receiver"",""type"":""address""}],""name"":""ERC2981InvalidDefaultRoyaltyReceiver"",""type"":""error""},{""inputs"":[{""internalType"":""uint256"",""name"":""tokenId"",""type"":""uint256""},{""internalType"":""uint256"",""name"":""numerator"",""type"":""uint256""},{""internalType"":""uint256"",""name"":""denominator"",""type"":""uint256""}],""name"":""ERC2981InvalidTokenRoyalty"",""type"":""error""},{""inputs"":[{""internalType"":""uint256"",""name"":""tokenId"",""type"":""uint256""},{""internalType"":""address"",""name"":""receiver"",""type"":""address""}],""name"":""ERC2981InvalidTokenRoyaltyReceiver"",""type"":""error""},{""inputs"":[{""internalType"":""address"",""name"":""sender"",""type"":""address""},{""internalType"":""uint256"",""name"":""tokenId"",""type"":""uint256""},{""internalType"":""address"",""name"":""owner"",""type"":""address""}],""name"":""ERC721IncorrectOwner"",""type"":""error""},{""inputs"":[{""internalType"":""address"",""name"":""operator"",""type"":""address""},{""internalType"":""uint256"",""name"":""tokenId"",""type"":""uint256""}],""name"":""ERC721InsufficientApproval"",""type"":""error""},{""inputs"":[{""internalType"":""address"",""name"":""approver"",""type"":""address""}],""name"":""ERC721InvalidApprover"",""type"":""error""},{""inputs"":[{""internalType"":""address"",""name"":""operator"",""type"":""address""}],""name"":""ERC721InvalidOperator"",""type"":""error""},{""inputs"":[{""internalType"":""address"",""name"":""owner"",""type"":""address""}],""name"":""ERC721InvalidOwner"",""type"":""error""},{""inputs"":[{""internalType"":""address"",""name"":""receiver"",""type"":""address""}],""name"":""ERC721InvalidReceiver"",""type"":""error""},{""inputs"":[{""internalType"":""address"",""name"":""sender"",""type"":""address""}],""name"":""ERC721InvalidSender"",""type"":""error""},{""inputs"":[{""internalType"":""uint256"",""name"":""tokenId"",""type"":""uint256""}],""name"":""ERC721NonexistentToken"",""type"":""error""},{""inputs"":[],""name"":""EnforcedPause"",""type"":""error""},{""inputs"":[],""name"":""ExpectedPause"",""type"":""error""},{""inputs"":[],""name"":""ZeroAddress"",""type"":""error""},{""anonymous"":false,""inputs"":[{""indexed"":true,""internalType"":""address"",""name"":""owner"",""type"":""address""},{""indexed"":true,""internalType"":""address"",""name"":""approved"",""type"":""address""},{""indexed"":true,""internalType"":""uint256"",""name"":""tokenId"",""type"":""uint256""}],""name"":""Approval"",""type"":""event""},{""anonymous"":false,""inputs"":[{""indexed"":true,""internalType"":""address"",""name"":""owner"",""type"":""address""},{""indexed"":true,""internalType"":""address"",""name"":""operator"",""type"":""address""},{""indexed"":false,""internalType"":""bool"",""name"":""approved"",""type"":""bool""}],""name"":""ApprovalForAll"",""type"":""event""},{""anonymous"":false,""inputs"":[{""indexed"":false,""internalType"":""address"",""name"":""account"",""type"":""address""}],""name"":""Paused"",""type"":""event""},{""anonymous"":false,""inputs"":[{""indexed"":true,""internalType"":""bytes32"",""name"":""role"",""type"":""bytes32""},{""indexed"":true,""internalType"":""bytes32"",""name"":""previousAdminRole"",""type"":""bytes32""},{""indexed"":true,""internalType"":""bytes32"",""name"":""newAdminRole"",""type"":""bytes32""}],""name"":""RoleAdminChanged"",""type"":""event""},{""anonymous"":false,""inputs"":[{""indexed"":true,""internalType"":""bytes32"",""name"":""role"",""type"":""bytes32""},{""indexed"":true,""internalType"":""address"",""name"":""account"",""type"":""address""},{""indexed"":true,""internalType"":""address"",""name"":""sender"",""type"":""address""}],""name"":""RoleGranted"",""type"":""event""},{""anonymous"":false,""inputs"":[{""indexed"":true,""internalType"":""bytes32"",""name"":""role"",""type"":""bytes32""},{""indexed"":true,""internalType"":""address"",""name"":""account"",""type"":""address""},{""indexed"":true,""internalType"":""address"",""name"":""sender"",""type"":""address""}],""name"":""RoleRevoked"",""type"":""event""},{""anonymous"":false,""inputs"":[{""indexed"":true,""internalType"":""address"",""name"":""from"",""type"":""address""},{""indexed"":true,""internalType"":""address"",""name"":""to"",""type"":""address""},{""indexed"":true,""internalType"":""uint256"",""name"":""tokenId"",""type"":""uint256""}],""name"":""Transfer"",""type"":""event""},{""anonymous"":false,""inputs"":[{""indexed"":false,""internalType"":""address"",""name"":""account"",""type"":""address""}],""name"":""Unpaused"",""type"":""event""},{""inputs"":[],""name"":""DEFAULT_ADMIN_ROLE"",""outputs"":[{""internalType"":""bytes32"",""name"":"""",""type"":""bytes32""}],""stateMutability"":""view"",""type"":""function""},{""inputs"":[],""name"":""MINTER_ROLE"",""outputs"":[{""internalType"":""bytes32"",""name"":"""",""type"":""bytes32""}],""stateMutability"":""view"",""type"":""function""},{""inputs"":[{""internalType"":""address"",""name"":""to"",""type"":""address""},{""internalType"":""uint256"",""name"":""tokenId"",""type"":""uint256""}],""name"":""approve"",""outputs"":[],""stateMutability"":""nonpayable"",""type"":""function""},{""inputs"":[{""internalType"":""address"",""name"":""owner"",""type"":""address""}],""name"":""balanceOf"",""outputs"":[{""internalType"":""uint256"",""name"":"""",""type"":""uint256""}],""stateMutability"":""view"",""type"":""function""},{""inputs"":[],""name"":""contractURI"",""outputs"":[{""internalType"":""string"",""name"":"""",""type"":""string""}],""stateMutability"":""view"",""type"":""function""},{""inputs"":[{""internalType"":""uint256"",""name"":""tokenId"",""type"":""uint256""}],""name"":""getApproved"",""outputs"":[{""internalType"":""address"",""name"":"""",""type"":""address""}],""stateMutability"":""view"",""type"":""function""},{""inputs"":[{""internalType"":""bytes32"",""name"":""role"",""type"":""bytes32""}],""name"":""getRoleAdmin"",""outputs"":[{""internalType"":""bytes32"",""name"":"""",""type"":""bytes32""}],""stateMutability"":""view"",""type"":""function""},{""inputs"":[{""internalType"":""bytes32"",""name"":""role"",""type"":""bytes32""},{""internalType"":""address"",""name"":""account"",""type"":""address""}],""name"":""grantRole"",""outputs"":[],""stateMutability"":""nonpayable"",""type"":""function""},{""inputs"":[{""internalType"":""bytes32"",""name"":""role"",""type"":""bytes32""},{""internalType"":""address"",""name"":""account"",""type"":""address""}],""name"":""hasRole"",""outputs"":[{""internalType"":""bool"",""name"":"""",""type"":""bool""}],""stateMutability"":""view"",""type"":""function""},{""inputs"":[{""internalType"":""address"",""name"":""owner"",""type"":""address""},{""internalType"":""address"",""name"":""operator"",""type"":""address""}],""name"":""isApprovedForAll"",""outputs"":[{""internalType"":""bool"",""name"":"""",""type"":""bool""}],""stateMutability"":""view"",""type"":""function""},{""inputs"":[],""name"":""name"",""outputs"":[{""internalType"":""string"",""name"":"""",""type"":""string""}],""stateMutability"":""view"",""type"":""function""},{""inputs"":[{""internalType"":""uint256"",""name"":""tokenId"",""type"":""uint256""}],""name"":""ownerOf"",""outputs"":[{""internalType"":""address"",""name"":"""",""type"":""address""}],""stateMutability"":""view"",""type"":""function""},{""inputs"":[],""name"":""pause"",""outputs"":[],""stateMutability"":""nonpayable"",""type"":""function""},{""inputs"":[],""name"":""paused"",""outputs"":[{""internalType"":""bool"",""name"":"""",""type"":""bool""}],""stateMutability"":""view"",""type"":""function""},{""inputs"":[{""internalType"":""bytes32"",""name"":""role"",""type"":""bytes32""},{""internalType"":""address"",""name"":""callerConfirmation"",""type"":""address""}],""name"":""renounceRole"",""outputs"":[],""stateMutability"":""nonpayable"",""type"":""function""},{""inputs"":[{""internalType"":""bytes32"",""name"":""role"",""type"":""bytes32""},{""internalType"":""address"",""name"":""account"",""type"":""address""}],""name"":""revokeRole"",""outputs"":[],""stateMutability"":""nonpayable"",""type"":""function""},{""inputs"":[{""internalType"":""uint256"",""name"":""tokenId"",""type"":""uint256""},{""internalType"":""uint256"",""name"":""salePrice"",""type"":""uint256""}],""name"":""royaltyInfo"",""outputs"":[{""internalType"":""address"",""name"":""receiver"",""type"":""address""},{""internalType"":""uint256"",""name"":""amount"",""type"":""uint256""}],""stateMutability"":""view"",""type"":""function""},{""inputs"":[{""internalType"":""address"",""name"":""to"",""type"":""address""},{""internalType"":""uint256"",""name"":""tokenId"",""type"":""uint256""}],""name"":""safeMint"",""outputs"":[],""stateMutability"":""nonpayable"",""type"":""function""},{""inputs"":[{""internalType"":""address"",""name"":""from"",""type"":""address""},{""internalType"":""address"",""name"":""to"",""type"":""address""},{""internalType"":""uint256"",""name"":""tokenId"",""type"":""uint256""}],""name"":""safeTransferFrom"",""outputs"":[],""stateMutability"":""nonpayable"",""type"":""function""},{""inputs"":[{""internalType"":""address"",""name"":""from"",""type"":""address""},{""internalType"":""address"",""name"":""to"",""type"":""address""},{""internalType"":""uint256"",""name"":""tokenId"",""type"":""uint256""},{""internalType"":""bytes"",""name"":""data"",""type"":""bytes""}],""name"":""safeTransferFrom"",""outputs"":[],""stateMutability"":""nonpayable"",""type"":""function""},{""inputs"":[{""internalType"":""address"",""name"":""operator"",""type"":""address""},{""internalType"":""bool"",""name"":""approved"",""type"":""bool""}],""name"":""setApprovalForAll"",""outputs"":[],""stateMutability"":""nonpayable"",""type"":""function""},{""inputs"":[{""internalType"":""string"",""name"":""baseURI_"",""type"":""string""}],""name"":""setBaseURI"",""outputs"":[],""stateMutability"":""nonpayable"",""type"":""function""},{""inputs"":[{""internalType"":""string"",""name"":""contractMetadataURI_"",""type"":""string""}],""name"":""setContractURI"",""outputs"":[],""stateMutability"":""nonpayable"",""type"":""function""},{""inputs"":[{""internalType"":""address"",""name"":""receiver"",""type"":""address""},{""internalType"":""uint96"",""name"":""feeBasisPoints"",""type"":""uint96""}],""name"":""setRoyaltyInfo"",""outputs"":[],""stateMutability"":""nonpayable"",""type"":""function""},{""inputs"":[{""internalType"":""bytes4"",""name"":""interfaceId"",""type"":""bytes4""}],""name"":""supportsInterface"",""outputs"":[{""internalType"":""bool"",""name"":"""",""type"":""bool""}],""stateMutability"":""view"",""type"":""function""},{""inputs"":[],""name"":""symbol"",""outputs"":[{""internalType"":""string"",""name"":"""",""type"":""string""}],""stateMutability"":""view"",""type"":""function""},{""inputs"":[{""internalType"":""uint256"",""name"":""tokenId"",""type"":""uint256""}],""name"":""tokenURI"",""outputs"":[{""internalType"":""string"",""name"":"""",""type"":""string""}],""stateMutability"":""view"",""type"":""function""},{""inputs"":[{""internalType"":""address"",""name"":""from"",""type"":""address""},{""internalType"":""address"",""name"":""to"",""type"":""address""},{""internalType"":""uint256"",""name"":""tokenId"",""type"":""uint256""}],""name"":""transferFrom"",""outputs"":[],""stateMutability"":""nonpayable"",""type"":""function""},{""inputs"":[],""name"":""unpause"",""outputs"":[],""stateMutability"":""nonpayable"",""type"":""function""}]"; + public const string Abi = @"[{""inputs"":[{""internalType"":""string"",""name"":""name_"",""type"":""string""},{""internalType"":""string"",""name"":""symbol_"",""type"":""string""},{""internalType"":""string"",""name"":""baseURI_"",""type"":""string""},{""internalType"":""string"",""name"":""contractMetadataURI_"",""type"":""string""},{""internalType"":""address"",""name"":""royaltyReceiver_"",""type"":""address""},{""internalType"":""uint96"",""name"":""royaltyFeeBasisPoints_"",""type"":""uint96""},{""internalType"":""address"",""name"":""initialAdmin_"",""type"":""address""},{""internalType"":""address"",""name"":""initialMinter_"",""type"":""address""},{""internalType"":""uint48"",""name"":""defaultAdminDelay_"",""type"":""uint48""}],""stateMutability"":""nonpayable"",""type"":""constructor""},{""inputs"":[],""name"":""AccessControlBadConfirmation"",""type"":""error""},{""inputs"":[{""internalType"":""uint48"",""name"":""schedule"",""type"":""uint48""}],""name"":""AccessControlEnforcedDefaultAdminDelay"",""type"":""error""},{""inputs"":[],""name"":""AccessControlEnforcedDefaultAdminRules"",""type"":""error""},{""inputs"":[{""internalType"":""address"",""name"":""defaultAdmin"",""type"":""address""}],""name"":""AccessControlInvalidDefaultAdmin"",""type"":""error""},{""inputs"":[{""internalType"":""address"",""name"":""account"",""type"":""address""},{""internalType"":""bytes32"",""name"":""neededRole"",""type"":""bytes32""}],""name"":""AccessControlUnauthorizedAccount"",""type"":""error""},{""inputs"":[{""internalType"":""uint256"",""name"":""numerator"",""type"":""uint256""},{""internalType"":""uint256"",""name"":""denominator"",""type"":""uint256""}],""name"":""ERC2981InvalidDefaultRoyalty"",""type"":""error""},{""inputs"":[{""internalType"":""address"",""name"":""receiver"",""type"":""address""}],""name"":""ERC2981InvalidDefaultRoyaltyReceiver"",""type"":""error""},{""inputs"":[{""internalType"":""uint256"",""name"":""tokenId"",""type"":""uint256""},{""internalType"":""uint256"",""name"":""numerator"",""type"":""uint256""},{""internalType"":""uint256"",""name"":""denominator"",""type"":""uint256""}],""name"":""ERC2981InvalidTokenRoyalty"",""type"":""error""},{""inputs"":[{""internalType"":""uint256"",""name"":""tokenId"",""type"":""uint256""},{""internalType"":""address"",""name"":""receiver"",""type"":""address""}],""name"":""ERC2981InvalidTokenRoyaltyReceiver"",""type"":""error""},{""inputs"":[{""internalType"":""address"",""name"":""sender"",""type"":""address""},{""internalType"":""uint256"",""name"":""tokenId"",""type"":""uint256""},{""internalType"":""address"",""name"":""owner"",""type"":""address""}],""name"":""ERC721IncorrectOwner"",""type"":""error""},{""inputs"":[{""internalType"":""address"",""name"":""operator"",""type"":""address""},{""internalType"":""uint256"",""name"":""tokenId"",""type"":""uint256""}],""name"":""ERC721InsufficientApproval"",""type"":""error""},{""inputs"":[{""internalType"":""address"",""name"":""approver"",""type"":""address""}],""name"":""ERC721InvalidApprover"",""type"":""error""},{""inputs"":[{""internalType"":""address"",""name"":""operator"",""type"":""address""}],""name"":""ERC721InvalidOperator"",""type"":""error""},{""inputs"":[{""internalType"":""address"",""name"":""owner"",""type"":""address""}],""name"":""ERC721InvalidOwner"",""type"":""error""},{""inputs"":[{""internalType"":""address"",""name"":""receiver"",""type"":""address""}],""name"":""ERC721InvalidReceiver"",""type"":""error""},{""inputs"":[{""internalType"":""address"",""name"":""sender"",""type"":""address""}],""name"":""ERC721InvalidSender"",""type"":""error""},{""inputs"":[{""internalType"":""uint256"",""name"":""tokenId"",""type"":""uint256""}],""name"":""ERC721NonexistentToken"",""type"":""error""},{""inputs"":[],""name"":""EnforcedPause"",""type"":""error""},{""inputs"":[],""name"":""ExpectedPause"",""type"":""error""},{""inputs"":[{""internalType"":""uint8"",""name"":""bits"",""type"":""uint8""},{""internalType"":""uint256"",""name"":""value"",""type"":""uint256""}],""name"":""SafeCastOverflowedUintDowncast"",""type"":""error""},{""inputs"":[],""name"":""ZeroAddress"",""type"":""error""},{""anonymous"":false,""inputs"":[{""indexed"":true,""internalType"":""address"",""name"":""owner"",""type"":""address""},{""indexed"":true,""internalType"":""address"",""name"":""approved"",""type"":""address""},{""indexed"":true,""internalType"":""uint256"",""name"":""tokenId"",""type"":""uint256""}],""name"":""Approval"",""type"":""event""},{""anonymous"":false,""inputs"":[{""indexed"":true,""internalType"":""address"",""name"":""owner"",""type"":""address""},{""indexed"":true,""internalType"":""address"",""name"":""operator"",""type"":""address""},{""indexed"":false,""internalType"":""bool"",""name"":""approved"",""type"":""bool""}],""name"":""ApprovalForAll"",""type"":""event""},{""anonymous"":false,""inputs"":[{""indexed"":false,""internalType"":""string"",""name"":""previousURI"",""type"":""string""},{""indexed"":false,""internalType"":""string"",""name"":""newURI"",""type"":""string""}],""name"":""BaseURIUpdated"",""type"":""event""},{""anonymous"":false,""inputs"":[{""indexed"":false,""internalType"":""string"",""name"":""previousURI"",""type"":""string""},{""indexed"":false,""internalType"":""string"",""name"":""newURI"",""type"":""string""}],""name"":""ContractURIUpdated"",""type"":""event""},{""anonymous"":false,""inputs"":[],""name"":""DefaultAdminDelayChangeCanceled"",""type"":""event""},{""anonymous"":false,""inputs"":[{""indexed"":false,""internalType"":""uint48"",""name"":""newDelay"",""type"":""uint48""},{""indexed"":false,""internalType"":""uint48"",""name"":""effectSchedule"",""type"":""uint48""}],""name"":""DefaultAdminDelayChangeScheduled"",""type"":""event""},{""anonymous"":false,""inputs"":[],""name"":""DefaultAdminTransferCanceled"",""type"":""event""},{""anonymous"":false,""inputs"":[{""indexed"":true,""internalType"":""address"",""name"":""newAdmin"",""type"":""address""},{""indexed"":false,""internalType"":""uint48"",""name"":""acceptSchedule"",""type"":""uint48""}],""name"":""DefaultAdminTransferScheduled"",""type"":""event""},{""anonymous"":false,""inputs"":[{""indexed"":true,""internalType"":""address"",""name"":""receiver"",""type"":""address""},{""indexed"":false,""internalType"":""uint96"",""name"":""feeBasisPoints"",""type"":""uint96""}],""name"":""DefaultRoyaltyUpdated"",""type"":""event""},{""anonymous"":false,""inputs"":[{""indexed"":false,""internalType"":""address"",""name"":""account"",""type"":""address""}],""name"":""Paused"",""type"":""event""},{""anonymous"":false,""inputs"":[{""indexed"":true,""internalType"":""bytes32"",""name"":""role"",""type"":""bytes32""},{""indexed"":true,""internalType"":""bytes32"",""name"":""previousAdminRole"",""type"":""bytes32""},{""indexed"":true,""internalType"":""bytes32"",""name"":""newAdminRole"",""type"":""bytes32""}],""name"":""RoleAdminChanged"",""type"":""event""},{""anonymous"":false,""inputs"":[{""indexed"":true,""internalType"":""bytes32"",""name"":""role"",""type"":""bytes32""},{""indexed"":true,""internalType"":""address"",""name"":""account"",""type"":""address""},{""indexed"":true,""internalType"":""address"",""name"":""sender"",""type"":""address""}],""name"":""RoleGranted"",""type"":""event""},{""anonymous"":false,""inputs"":[{""indexed"":true,""internalType"":""bytes32"",""name"":""role"",""type"":""bytes32""},{""indexed"":true,""internalType"":""address"",""name"":""account"",""type"":""address""},{""indexed"":true,""internalType"":""address"",""name"":""sender"",""type"":""address""}],""name"":""RoleRevoked"",""type"":""event""},{""anonymous"":false,""inputs"":[{""indexed"":true,""internalType"":""address"",""name"":""from"",""type"":""address""},{""indexed"":true,""internalType"":""address"",""name"":""to"",""type"":""address""},{""indexed"":true,""internalType"":""uint256"",""name"":""tokenId"",""type"":""uint256""}],""name"":""Transfer"",""type"":""event""},{""anonymous"":false,""inputs"":[{""indexed"":false,""internalType"":""address"",""name"":""account"",""type"":""address""}],""name"":""Unpaused"",""type"":""event""},{""inputs"":[],""name"":""DEFAULT_ADMIN_ROLE"",""outputs"":[{""internalType"":""bytes32"",""name"":"""",""type"":""bytes32""}],""stateMutability"":""view"",""type"":""function""},{""inputs"":[],""name"":""MINTER_ROLE"",""outputs"":[{""internalType"":""bytes32"",""name"":"""",""type"":""bytes32""}],""stateMutability"":""view"",""type"":""function""},{""inputs"":[],""name"":""acceptDefaultAdminTransfer"",""outputs"":[],""stateMutability"":""nonpayable"",""type"":""function""},{""inputs"":[{""internalType"":""address"",""name"":""to"",""type"":""address""},{""internalType"":""uint256"",""name"":""tokenId"",""type"":""uint256""}],""name"":""approve"",""outputs"":[],""stateMutability"":""nonpayable"",""type"":""function""},{""inputs"":[{""internalType"":""address"",""name"":""owner"",""type"":""address""}],""name"":""balanceOf"",""outputs"":[{""internalType"":""uint256"",""name"":"""",""type"":""uint256""}],""stateMutability"":""view"",""type"":""function""},{""inputs"":[],""name"":""baseURI"",""outputs"":[{""internalType"":""string"",""name"":"""",""type"":""string""}],""stateMutability"":""view"",""type"":""function""},{""inputs"":[{""internalType"":""address"",""name"":""newAdmin"",""type"":""address""}],""name"":""beginDefaultAdminTransfer"",""outputs"":[],""stateMutability"":""nonpayable"",""type"":""function""},{""inputs"":[],""name"":""cancelDefaultAdminTransfer"",""outputs"":[],""stateMutability"":""nonpayable"",""type"":""function""},{""inputs"":[{""internalType"":""uint48"",""name"":""newDelay"",""type"":""uint48""}],""name"":""changeDefaultAdminDelay"",""outputs"":[],""stateMutability"":""nonpayable"",""type"":""function""},{""inputs"":[],""name"":""contractURI"",""outputs"":[{""internalType"":""string"",""name"":"""",""type"":""string""}],""stateMutability"":""view"",""type"":""function""},{""inputs"":[],""name"":""defaultAdmin"",""outputs"":[{""internalType"":""address"",""name"":"""",""type"":""address""}],""stateMutability"":""view"",""type"":""function""},{""inputs"":[],""name"":""defaultAdminDelay"",""outputs"":[{""internalType"":""uint48"",""name"":"""",""type"":""uint48""}],""stateMutability"":""view"",""type"":""function""},{""inputs"":[],""name"":""defaultAdminDelayIncreaseWait"",""outputs"":[{""internalType"":""uint48"",""name"":"""",""type"":""uint48""}],""stateMutability"":""view"",""type"":""function""},{""inputs"":[{""internalType"":""uint256"",""name"":""tokenId"",""type"":""uint256""}],""name"":""getApproved"",""outputs"":[{""internalType"":""address"",""name"":"""",""type"":""address""}],""stateMutability"":""view"",""type"":""function""},{""inputs"":[{""internalType"":""bytes32"",""name"":""role"",""type"":""bytes32""}],""name"":""getRoleAdmin"",""outputs"":[{""internalType"":""bytes32"",""name"":"""",""type"":""bytes32""}],""stateMutability"":""view"",""type"":""function""},{""inputs"":[{""internalType"":""bytes32"",""name"":""role"",""type"":""bytes32""},{""internalType"":""address"",""name"":""account"",""type"":""address""}],""name"":""grantRole"",""outputs"":[],""stateMutability"":""nonpayable"",""type"":""function""},{""inputs"":[{""internalType"":""bytes32"",""name"":""role"",""type"":""bytes32""},{""internalType"":""address"",""name"":""account"",""type"":""address""}],""name"":""hasRole"",""outputs"":[{""internalType"":""bool"",""name"":"""",""type"":""bool""}],""stateMutability"":""view"",""type"":""function""},{""inputs"":[{""internalType"":""address"",""name"":""owner"",""type"":""address""},{""internalType"":""address"",""name"":""operator"",""type"":""address""}],""name"":""isApprovedForAll"",""outputs"":[{""internalType"":""bool"",""name"":"""",""type"":""bool""}],""stateMutability"":""view"",""type"":""function""},{""inputs"":[],""name"":""name"",""outputs"":[{""internalType"":""string"",""name"":"""",""type"":""string""}],""stateMutability"":""view"",""type"":""function""},{""inputs"":[],""name"":""owner"",""outputs"":[{""internalType"":""address"",""name"":"""",""type"":""address""}],""stateMutability"":""view"",""type"":""function""},{""inputs"":[{""internalType"":""uint256"",""name"":""tokenId"",""type"":""uint256""}],""name"":""ownerOf"",""outputs"":[{""internalType"":""address"",""name"":"""",""type"":""address""}],""stateMutability"":""view"",""type"":""function""},{""inputs"":[],""name"":""pause"",""outputs"":[],""stateMutability"":""nonpayable"",""type"":""function""},{""inputs"":[],""name"":""paused"",""outputs"":[{""internalType"":""bool"",""name"":"""",""type"":""bool""}],""stateMutability"":""view"",""type"":""function""},{""inputs"":[],""name"":""pendingDefaultAdmin"",""outputs"":[{""internalType"":""address"",""name"":""newAdmin"",""type"":""address""},{""internalType"":""uint48"",""name"":""schedule"",""type"":""uint48""}],""stateMutability"":""view"",""type"":""function""},{""inputs"":[],""name"":""pendingDefaultAdminDelay"",""outputs"":[{""internalType"":""uint48"",""name"":""newDelay"",""type"":""uint48""},{""internalType"":""uint48"",""name"":""schedule"",""type"":""uint48""}],""stateMutability"":""view"",""type"":""function""},{""inputs"":[{""internalType"":""bytes32"",""name"":""role"",""type"":""bytes32""},{""internalType"":""address"",""name"":""account"",""type"":""address""}],""name"":""renounceRole"",""outputs"":[],""stateMutability"":""nonpayable"",""type"":""function""},{""inputs"":[{""internalType"":""bytes32"",""name"":""role"",""type"":""bytes32""},{""internalType"":""address"",""name"":""account"",""type"":""address""}],""name"":""revokeRole"",""outputs"":[],""stateMutability"":""nonpayable"",""type"":""function""},{""inputs"":[],""name"":""rollbackDefaultAdminDelay"",""outputs"":[],""stateMutability"":""nonpayable"",""type"":""function""},{""inputs"":[{""internalType"":""uint256"",""name"":""tokenId"",""type"":""uint256""},{""internalType"":""uint256"",""name"":""salePrice"",""type"":""uint256""}],""name"":""royaltyInfo"",""outputs"":[{""internalType"":""address"",""name"":""receiver"",""type"":""address""},{""internalType"":""uint256"",""name"":""amount"",""type"":""uint256""}],""stateMutability"":""view"",""type"":""function""},{""inputs"":[{""internalType"":""address"",""name"":""to"",""type"":""address""},{""internalType"":""uint256"",""name"":""tokenId"",""type"":""uint256""}],""name"":""safeMint"",""outputs"":[],""stateMutability"":""nonpayable"",""type"":""function""},{""inputs"":[{""internalType"":""address"",""name"":""from"",""type"":""address""},{""internalType"":""address"",""name"":""to"",""type"":""address""},{""internalType"":""uint256"",""name"":""tokenId"",""type"":""uint256""}],""name"":""safeTransferFrom"",""outputs"":[],""stateMutability"":""nonpayable"",""type"":""function""},{""inputs"":[{""internalType"":""address"",""name"":""from"",""type"":""address""},{""internalType"":""address"",""name"":""to"",""type"":""address""},{""internalType"":""uint256"",""name"":""tokenId"",""type"":""uint256""},{""internalType"":""bytes"",""name"":""data"",""type"":""bytes""}],""name"":""safeTransferFrom"",""outputs"":[],""stateMutability"":""nonpayable"",""type"":""function""},{""inputs"":[{""internalType"":""address"",""name"":""operator"",""type"":""address""},{""internalType"":""bool"",""name"":""approved"",""type"":""bool""}],""name"":""setApprovalForAll"",""outputs"":[],""stateMutability"":""nonpayable"",""type"":""function""},{""inputs"":[{""internalType"":""string"",""name"":""baseURI_"",""type"":""string""}],""name"":""setBaseURI"",""outputs"":[],""stateMutability"":""nonpayable"",""type"":""function""},{""inputs"":[{""internalType"":""string"",""name"":""contractMetadataURI_"",""type"":""string""}],""name"":""setContractURI"",""outputs"":[],""stateMutability"":""nonpayable"",""type"":""function""},{""inputs"":[{""internalType"":""address"",""name"":""receiver"",""type"":""address""},{""internalType"":""uint96"",""name"":""feeBasisPoints"",""type"":""uint96""}],""name"":""setRoyaltyInfo"",""outputs"":[],""stateMutability"":""nonpayable"",""type"":""function""},{""inputs"":[{""internalType"":""bytes4"",""name"":""interfaceId"",""type"":""bytes4""}],""name"":""supportsInterface"",""outputs"":[{""internalType"":""bool"",""name"":"""",""type"":""bool""}],""stateMutability"":""view"",""type"":""function""},{""inputs"":[],""name"":""symbol"",""outputs"":[{""internalType"":""string"",""name"":"""",""type"":""string""}],""stateMutability"":""view"",""type"":""function""},{""inputs"":[{""internalType"":""uint256"",""name"":""tokenId"",""type"":""uint256""}],""name"":""tokenURI"",""outputs"":[{""internalType"":""string"",""name"":"""",""type"":""string""}],""stateMutability"":""view"",""type"":""function""},{""inputs"":[{""internalType"":""address"",""name"":""from"",""type"":""address""},{""internalType"":""address"",""name"":""to"",""type"":""address""},{""internalType"":""uint256"",""name"":""tokenId"",""type"":""uint256""}],""name"":""transferFrom"",""outputs"":[],""stateMutability"":""nonpayable"",""type"":""function""},{""inputs"":[],""name"":""unpause"",""outputs"":[],""stateMutability"":""nonpayable"",""type"":""function""}]"; - public const string Bytecode = "0x608060405234801561000f575f80fd5b50604051611d96380380611d9683398101604081905261002e916102f9565b85855f61003b8382610457565b5060016100488282610457565b5050506001600160a01b0382166100725760405163d92e233d60e01b815260040160405180910390fd5b600a61007e8582610457565b50600b61008b8482610457565b5061009682826100d7565b6100a05f3361017e565b506100cb7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a63361017e565b50505050505050610511565b6127106001600160601b03821681101561011b57604051636f483d0960e01b81526001600160601b0383166004820152602481018290526044015b60405180910390fd5b6001600160a01b03831661014457604051635b6cc80560e11b81525f6004820152602401610112565b50604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600655565b5f8281526008602090815260408083206001600160a01b038516845290915281205460ff16610222575f8381526008602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101da3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610225565b505f5b92915050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f83011261024e575f80fd5b81516001600160401b038111156102675761026761022b565b604051601f8201601f19908116603f011681016001600160401b03811182821017156102955761029561022b565b6040528181528382016020018510156102ac575f80fd5b8160208501602083015e5f918101602001919091529392505050565b80516001600160a01b03811681146102de575f80fd5b919050565b80516001600160601b03811681146102de575f80fd5b5f805f805f8060c0878903121561030e575f80fd5b86516001600160401b03811115610323575f80fd5b61032f89828a0161023f565b602089015190975090506001600160401b0381111561034c575f80fd5b61035889828a0161023f565b604089015190965090506001600160401b03811115610375575f80fd5b61038189828a0161023f565b606089015190955090506001600160401b0381111561039e575f80fd5b6103aa89828a0161023f565b9350506103b9608088016102c8565b91506103c760a088016102e3565b90509295509295509295565b600181811c908216806103e757607f821691505b60208210810361040557634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561045257805f5260205f20601f840160051c810160208510156104305750805b601f840160051c820191505b8181101561044f575f815560010161043c565b50505b505050565b81516001600160401b038111156104705761047061022b565b6104848161047e84546103d3565b8461040b565b6020601f8211600181146104b6575f831561049f5750848201515b5f19600385901b1c1916600184901b17845561044f565b5f84815260208120601f198516915b828110156104e557878501518255602094850194600190920191016104c5565b508482101561050257868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b6118788061051e5f395ff3fe608060405234801561000f575f80fd5b50600436106101c6575f3560e01c80636352211e116100fe578063a217fddf1161009e578063d53913931161006e578063d5391393146103dd578063d547741f14610404578063e8a3d48514610417578063e985e9c51461041f575f80fd5b8063a217fddf1461039d578063a22cb465146103a4578063b88d4fde146103b7578063c87b56dd146103ca575f80fd5b806391d14854116100d957806391d148541461035c578063938e3d7b1461036f57806395d89b4114610382578063a14481941461038a575f80fd5b80636352211e1461032e57806370a08231146103415780638456cb5914610354575f80fd5b80632a55205a116101695780633f4ba83a116101445780633f4ba83a146102f557806342842e0e146102fd57806355f804b3146103105780635c975abb14610323575f80fd5b80632a55205a1461029d5780632f2ff15d146102cf57806336568abe146102e2575f80fd5b8063081812fc116101a4578063081812fc1461021c578063095ea7b31461024757806323b872dd1461025a578063248a9ca31461026d575f80fd5b806301ffc9a7146101ca57806302fa7c47146101f257806306fdde0314610207575b5f80fd5b6101dd6101d8366004611301565b610432565b60405190151581526020015b60405180910390f35b610205610200366004611337565b610442565b005b61020f61045b565b6040516101e991906113a5565b61022f61022a3660046113b7565b6104ea565b6040516001600160a01b0390911681526020016101e9565b6102056102553660046113ce565b610511565b6102056102683660046113f6565b610520565b61028f61027b3660046113b7565b5f9081526008602052604090206001015490565b6040519081526020016101e9565b6102b06102ab366004611430565b6105ae565b604080516001600160a01b0390931683526020830191909152016101e9565b6102056102dd366004611450565b610631565b6102056102f0366004611450565b610655565b610205610688565b61020561030b3660046113f6565b61069d565b61020561031e36600461147a565b6106b7565b60095460ff166101dd565b61022f61033c3660046113b7565b6106ce565b61028f61034f3660046114e8565b6106d8565b61020561071d565b6101dd61036a366004611450565b61072f565b61020561037d36600461147a565b610759565b61020f610770565b6102056103983660046113ce565b61077f565b61028f5f81565b6102056103b2366004611501565b6107bb565b6102056103c5366004611543565b6107c6565b61020f6103d83660046113b7565b6107de565b61028f7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b610205610412366004611450565b610843565b61020f610867565b6101dd61042d366004611620565b610876565b5f61043c826108a3565b92915050565b5f61044c816108c7565b61045683836108d1565b505050565b60605f805461046990611648565b80601f016020809104026020016040519081016040528092919081815260200182805461049590611648565b80156104e05780601f106104b7576101008083540402835291602001916104e0565b820191905f5260205f20905b8154815290600101906020018083116104c357829003601f168201915b5050505050905090565b5f6104f482610973565b505f828152600460205260409020546001600160a01b031661043c565b61051c8282336109ab565b5050565b6001600160a01b03821661054e57604051633250574960e11b81525f60048201526024015b60405180910390fd5b5f61055a8383336109b8565b9050836001600160a01b0316816001600160a01b0316146105a8576040516364283d7b60e01b81526001600160a01b0380861660048301526024820184905282166044820152606401610545565b50505050565b5f82815260076020526040812080548291906001600160a01b03811690600160a01b90046001600160601b0316816106015750506006546001600160a01b03811690600160a01b90046001600160601b03165b5f6127106106186001600160601b03841689611680565b61062291906116a3565b92989297509195505050505050565b5f8281526008602052604090206001015461064b816108c7565b6105a88383610aaa565b6001600160a01b038116331461067e5760405163334bd91960e11b815260040160405180910390fd5b6104568282610b3b565b5f610692816108c7565b61069a610ba6565b50565b61045683838360405180602001604052805f8152506107c6565b5f6106c1816108c7565b600a6105a8838583611706565b5f61043c82610973565b5f6001600160a01b038216610702576040516322718ad960e21b81525f6004820152602401610545565b506001600160a01b03165f9081526003602052604090205490565b5f610727816108c7565b61069a610bf8565b5f9182526008602090815260408084206001600160a01b0393909316845291905290205460ff1690565b5f610763816108c7565b600b6105a8838583611706565b60606001805461046990611648565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a66107a9816108c7565b6107b1610c35565b6104568383610c5b565b61051c338383610c74565b6107d1848484610520565b6105a83385858585610d3b565b60606107e982610973565b505f6107f3610e63565b90505f8151116108115760405180602001604052805f81525061083c565b8061081b84610e72565b60405160200161082c9291906117d7565b6040516020818303038152906040525b9392505050565b5f8281526008602052604090206001015461085d816108c7565b6105a88383610b3b565b6060600b805461046990611648565b6001600160a01b039182165f90815260056020908152604080832093909416825291909152205460ff1690565b5f6001600160e01b03198216637965db0b60e01b148061043c575061043c82610f02565b61069a8133610f26565b6127106001600160601b03821681101561091057604051636f483d0960e01b81526001600160601b038316600482015260248101829052604401610545565b6001600160a01b03831661093957604051635b6cc80560e11b81525f6004820152602401610545565b50604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600655565b5f818152600260205260408120546001600160a01b03168061043c57604051637e27328960e01b815260048101849052602401610545565b6104568383836001610f5f565b5f828152600260205260408120546001600160a01b03908116908316156109e4576109e4818486611063565b6001600160a01b03811615610a1e576109ff5f855f80610f5f565b6001600160a01b0381165f90815260036020526040902080545f190190555b6001600160a01b03851615610a4c576001600160a01b0385165f908152600360205260409020805460010190555b5f8481526002602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b5f610ab5838361072f565b610b34575f8381526008602090815260408083206001600160a01b03861684529091529020805460ff19166001179055610aec3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161043c565b505f61043c565b5f610b46838361072f565b15610b34575f8381526008602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161043c565b610bae6110c7565b6009805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b610c00610c35565b6009805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610bdb3390565b60095460ff1615610c595760405163d93c066560e01b815260040160405180910390fd5b565b61051c828260405180602001604052805f8152506110ea565b6001600160a01b038316610c9d5760405163a9fbf51f60e01b81525f6004820152602401610545565b6001600160a01b038216610ccf57604051630b61174360e31b81526001600160a01b0383166004820152602401610545565b6001600160a01b038381165f81815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383163b15610e5c57604051630a85bd0160e11b81526001600160a01b0384169063150b7a0290610d7d9088908890879087906004016117eb565b6020604051808303815f875af1925050508015610db7575060408051601f3d908101601f19168201909252610db491810190611827565b60015b610e1e573d808015610de4576040519150601f19603f3d011682016040523d82523d5f602084013e610de9565b606091505b5080515f03610e1657604051633250574960e11b81526001600160a01b0385166004820152602401610545565b805160208201fd5b6001600160e01b03198116630a85bd0160e11b14610e5a57604051633250574960e11b81526001600160a01b0385166004820152602401610545565b505b5050505050565b6060600a805461046990611648565b60605f610e7e83611101565b60010190505f8167ffffffffffffffff811115610e9d57610e9d61152f565b6040519080825280601f01601f191660200182016040528015610ec7576020820181803683370190505b5090508181016020015b5f19016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084610ed157509392505050565b5f6001600160e01b0319821663152a902d60e11b148061043c575061043c826111d8565b610f30828261072f565b61051c5760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610545565b8080610f7357506001600160a01b03821615155b15611034575f610f8284610973565b90506001600160a01b03831615801590610fae5750826001600160a01b0316816001600160a01b031614155b8015610fc15750610fbf8184610876565b155b15610fea5760405163a9fbf51f60e01b81526001600160a01b0384166004820152602401610545565b81156110325783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b50505f90815260046020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b61106e838383611227565b610456576001600160a01b03831661109c57604051637e27328960e01b815260048101829052602401610545565b60405163177e802f60e01b81526001600160a01b038316600482015260248101829052604401610545565b60095460ff16610c5957604051638dfc202b60e01b815260040160405180910390fd5b6110f4838361128b565b610456335f858585610d3b565b5f8072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b831061113f5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef8100000000831061116b576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061118957662386f26fc10000830492506010015b6305f5e10083106111a1576305f5e100830492506008015b61271083106111b557612710830492506004015b606483106111c7576064830492506002015b600a831061043c5760010192915050565b5f6001600160e01b031982166380ac58cd60e01b148061120857506001600160e01b03198216635b5e139f60e01b145b8061043c57506301ffc9a760e01b6001600160e01b031983161461043c565b5f6001600160a01b038316158015906112835750826001600160a01b0316846001600160a01b0316148061126057506112608484610876565b8061128357505f828152600460205260409020546001600160a01b038481169116145b949350505050565b6001600160a01b0382166112b457604051633250574960e11b81525f6004820152602401610545565b5f6112c083835f6109b8565b90506001600160a01b03811615610456576040516339e3563760e11b81525f6004820152602401610545565b6001600160e01b03198116811461069a575f80fd5b5f60208284031215611311575f80fd5b813561083c816112ec565b80356001600160a01b0381168114611332575f80fd5b919050565b5f8060408385031215611348575f80fd5b6113518361131c565b915060208301356001600160601b038116811461136c575f80fd5b809150509250929050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f61083c6020830184611377565b5f602082840312156113c7575f80fd5b5035919050565b5f80604083850312156113df575f80fd5b6113e88361131c565b946020939093013593505050565b5f805f60608486031215611408575f80fd5b6114118461131c565b925061141f6020850161131c565b929592945050506040919091013590565b5f8060408385031215611441575f80fd5b50508035926020909101359150565b5f8060408385031215611461575f80fd5b823591506114716020840161131c565b90509250929050565b5f806020838503121561148b575f80fd5b823567ffffffffffffffff8111156114a1575f80fd5b8301601f810185136114b1575f80fd5b803567ffffffffffffffff8111156114c7575f80fd5b8560208284010111156114d8575f80fd5b6020919091019590945092505050565b5f602082840312156114f8575f80fd5b61083c8261131c565b5f8060408385031215611512575f80fd5b61151b8361131c565b91506020830135801515811461136c575f80fd5b634e487b7160e01b5f52604160045260245ffd5b5f805f8060808587031215611556575f80fd5b61155f8561131c565b935061156d6020860161131c565b925060408501359150606085013567ffffffffffffffff81111561158f575f80fd5b8501601f8101871361159f575f80fd5b803567ffffffffffffffff8111156115b9576115b961152f565b604051601f8201601f19908116603f0116810167ffffffffffffffff811182821017156115e8576115e861152f565b6040528181528282016020018910156115ff575f80fd5b816020840160208301375f6020838301015280935050505092959194509250565b5f8060408385031215611631575f80fd5b61163a8361131c565b91506114716020840161131c565b600181811c9082168061165c57607f821691505b60208210810361167a57634e487b7160e01b5f52602260045260245ffd5b50919050565b808202811582820484141761043c57634e487b7160e01b5f52601160045260245ffd5b5f826116bd57634e487b7160e01b5f52601260045260245ffd5b500490565b601f82111561045657805f5260205f20601f840160051c810160208510156116e75750805b601f840160051c820191505b81811015610e5c575f81556001016116f3565b67ffffffffffffffff83111561171e5761171e61152f565b6117328361172c8354611648565b836116c2565b5f601f841160018114611763575f851561174c5750838201355b5f19600387901b1c1916600186901b178355610e5c565b5f83815260208120601f198716915b828110156117925786850135825560209485019460019092019101611772565b50868210156117ae575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b5f81518060208401855e5f93019283525090919050565b5f6112836117e583866117c0565b846117c0565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f9061181d90830184611377565b9695505050505050565b5f60208284031215611837575f80fd5b815161083c816112ec56fea26469706673582212201ad3817d5d0d33db414b9711e1f509ee769c7580e5821f120130b4579289695e64736f6c634300081a0033"; + public const string Bytecode = "0x608060405234801561000f575f80fd5b5060405161295238038061295283398101604081905261002e916103f0565b80838a8a5f61003d8382610580565b50600161004a8282610580565b5050506001600160a01b03811661007b57604051636116401160e11b81525f60048201526024015b60405180910390fd5b600980546001600160d01b0316600160d01b65ffffffffffff8516021790556100a45f82610151565b5050506001600160a01b03851615806100c457506001600160a01b038316155b806100d657506001600160a01b038216155b156100f45760405163d92e233d60e01b815260040160405180910390fd5b600c6101008882610580565b50600d61010d8782610580565b5061011885856101c0565b6101427f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a683610151565b5050505050505050505061063a565b5f826101ad575f61016a600a546001600160a01b031690565b6001600160a01b03161461019157604051631fe1e13d60e11b815260040160405180910390fd5b600a80546001600160a01b0319166001600160a01b0384161790555b6101b78383610262565b90505b92915050565b6127106001600160601b0382168110156101ff57604051636f483d0960e01b81526001600160601b038316600482015260248101829052604401610072565b6001600160a01b03831661022857604051635b6cc80560e11b81525f6004820152602401610072565b50604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600655565b5f8281526008602090815260408083206001600160a01b038516845290915281205460ff16610306575f8381526008602090815260408083206001600160a01b03861684529091529020805460ff191660011790556102be3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101ba565b505f6101ba565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112610330575f80fd5b81516001600160401b038111156103495761034961030d565b604051601f8201601f19908116603f011681016001600160401b03811182821017156103775761037761030d565b60405281815283820160200185101561038e575f80fd5b8160208501602083015e5f918101602001919091529392505050565b80516001600160a01b03811681146103c0575f80fd5b919050565b80516001600160601b03811681146103c0575f80fd5b805165ffffffffffff811681146103c0575f80fd5b5f805f805f805f805f6101208a8c031215610409575f80fd5b89516001600160401b0381111561041e575f80fd5b61042a8c828d01610321565b60208c0151909a5090506001600160401b03811115610447575f80fd5b6104538c828d01610321565b60408c015190995090506001600160401b03811115610470575f80fd5b61047c8c828d01610321565b60608c015190985090506001600160401b03811115610499575f80fd5b6104a58c828d01610321565b9650506104b460808b016103aa565b94506104c260a08b016103c5565b93506104d060c08b016103aa565b92506104de60e08b016103aa565b91506104ed6101008b016103db565b90509295985092959850929598565b600181811c9082168061051057607f821691505b60208210810361052e57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561057b57805f5260205f20601f840160051c810160208510156105595750805b601f840160051c820191505b81811015610578575f8155600101610565565b50505b505050565b81516001600160401b038111156105995761059961030d565b6105ad816105a784546104fc565b84610534565b6020601f8211600181146105df575f83156105c85750848201515b5f19600385901b1c1916600184901b178455610578565b5f84815260208120601f198516915b8281101561060e57878501518255602094850194600190920191016105ee565b508482101561062b57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b61230b806106475f395ff3fe608060405234801561000f575f80fd5b506004361061024a575f3560e01c806370a0823111610140578063a22cb465116100bf578063cf6eefb711610084578063cf6eefb714610503578063d539139314610531578063d547741f14610558578063d602b9fd1461056b578063e8a3d48514610573578063e985e9c51461057b575f80fd5b8063a22cb465146104ba578063b88d4fde146104cd578063c87b56dd146104e0578063cc8463c8146104f3578063cefc1429146104fb575f80fd5b8063938e3d7b11610105578063938e3d7b1461045e57806395d89b4114610471578063a144819414610479578063a1eda53c1461048c578063a217fddf146104b3575f80fd5b806370a08231146104175780638456cb591461042a57806384ef8ffc146104325780638da5cb5b1461044357806391d148541461044b575f80fd5b80632f2ff15d116101cc5780635c975abb116101915780635c975abb146103cb578063634e93da146103d65780636352211e146103e9578063649a5ec7146103fc5780636c0360eb1461040f575f80fd5b80632f2ff15d1461037757806336568abe1461038a5780633f4ba83a1461039d57806342842e0e146103a557806355f804b3146103b8575f80fd5b8063095ea7b311610212578063095ea7b3146102e75780630aa6220b146102fa57806323b872dd14610302578063248a9ca3146103155780632a55205a14610345575f80fd5b806301ffc9a71461024e578063022d63fb1461027657806302fa7c471461029257806306fdde03146102a7578063081812fc146102bc575b5f80fd5b61026161025c366004611ce7565b61058e565b60405190151581526020015b60405180910390f35b620697805b60405165ffffffffffff909116815260200161026d565b6102a56102a0366004611d1d565b61059e565b005b6102af610625565b60405161026d9190611d8b565b6102cf6102ca366004611d9d565b6106b4565b6040516001600160a01b03909116815260200161026d565b6102a56102f5366004611db4565b6106db565b6102a56106ea565b6102a5610310366004611ddc565b6106ff565b610337610323366004611d9d565b5f9081526008602052604090206001015490565b60405190815260200161026d565b610358610353366004611e16565b61078d565b604080516001600160a01b03909316835260208301919091520161026d565b6102a5610385366004611e36565b610810565b6102a5610398366004611e36565b610838565b6102a56108de565b6102a56103b3366004611ddc565b6108f0565b6102a56103c6366004611e60565b61090f565b600b5460ff16610261565b6102a56103e4366004611ece565b6109f8565b6102cf6103f7366004611d9d565b610a0b565b6102a561040a366004611ee7565b610a15565b6102af610a28565b610337610425366004611ece565b610a37565b6102a5610a7c565b600a546001600160a01b03166102cf565b6102cf610a8e565b610261610459366004611e36565b610aa6565b6102a561046c366004611e60565b610ad0565b6102af610bab565b6102a5610487366004611db4565b610bba565b610494610bf6565b6040805165ffffffffffff93841681529290911660208301520161026d565b6103375f81565b6102a56104c8366004611f0c565b610c48565b6102a56104db366004611f4e565b610c53565b6102af6104ee366004611d9d565b610c6b565b61027b610cd0565b6102a5610d2e565b61050b610d6d565b604080516001600160a01b03909316835265ffffffffffff90911660208301520161026d565b6103377f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b6102a5610566366004611e36565b610d8e565b6102a5610db6565b6102af610dc8565b61026161058936600461202b565b610dd7565b5f61059882610e04565b92915050565b5f6105a881610e28565b6001600160a01b0383166105cf5760405163d92e233d60e01b815260040160405180910390fd5b6105d98383610e32565b6040516001600160601b03831681526001600160a01b038416907fe12d7d5bdb8218a22277dca8f854dd4573a1cea3d3e4808dc567df9eb1c14bf49060200160405180910390a2505050565b60605f805461063390612053565b80601f016020809104026020016040519081016040528092919081815260200182805461065f90612053565b80156106aa5780601f10610681576101008083540402835291602001916106aa565b820191905f5260205f20905b81548152906001019060200180831161068d57829003601f168201915b5050505050905090565b5f6106be82610ed4565b505f828152600460205260409020546001600160a01b0316610598565b6106e6828233610f0c565b5050565b5f6106f481610e28565b6106fc610f19565b50565b6001600160a01b03821661072d57604051633250574960e11b81525f60048201526024015b60405180910390fd5b5f610739838333610f25565b9050836001600160a01b0316816001600160a01b031614610787576040516364283d7b60e01b81526001600160a01b0380861660048301526024820184905282166044820152606401610724565b50505050565b5f82815260076020526040812080548291906001600160a01b03811690600160a01b90046001600160601b0316816107e05750506006546001600160a01b03811690600160a01b90046001600160601b03165b5f6127106107f76001600160601b0384168961209f565b61080191906120b6565b92989297509195505050505050565b8161082e57604051631fe1e13d60e11b815260040160405180910390fd5b6106e68282611017565b811580156108535750600a546001600160a01b038281169116145b156108d4575f80610862610d6d565b90925090506001600160a01b038216151580610884575065ffffffffffff8116155b8061089757504265ffffffffffff821610155b156108bf576040516319ca5ebb60e01b815265ffffffffffff82166004820152602401610724565b50506009805465ffffffffffff60a01b191690555b6106e6828261103b565b5f6108e881610e28565b6106fc61106e565b61090a83838360405180602001604052805f815250610c53565b505050565b5f61091981610e28565b5f600c805461092790612053565b80601f016020809104026020016040519081016040528092919081815260200182805461095390612053565b801561099e5780601f106109755761010080835404028352916020019161099e565b820191905f5260205f20905b81548152906001019060200180831161098157829003601f168201915b505050505090508383600c91826109b6929190612119565b507f309b29ded109b9e28fb9885757b3e0096eb75c51d23aa4635d68bcd569f6adc18185856040516109ea939291906121d3565b60405180910390a150505050565b5f610a0281610e28565b6106e6826110c0565b5f61059882610ed4565b5f610a1f81610e28565b6106e682611132565b6060600c805461063390612053565b5f6001600160a01b038216610a61576040516322718ad960e21b81525f6004820152602401610724565b506001600160a01b03165f9081526003602052604090205490565b5f610a8681610e28565b6106fc6111a1565b5f610aa1600a546001600160a01b031690565b905090565b5f9182526008602090815260408084206001600160a01b0393909316845291905290205460ff1690565b5f610ada81610e28565b5f600d8054610ae890612053565b80601f0160208091040260200160405190810160405280929190818152602001828054610b1490612053565b8015610b5f5780601f10610b3657610100808354040283529160200191610b5f565b820191905f5260205f20905b815481529060010190602001808311610b4257829003601f168201915b505050505090508383600d9182610b77929190612119565b507fc9c7c3fe08b88b4df9d4d47ef47d2c43d55c025a0ba88ca442580ed9e7348a168185856040516109ea939291906121d3565b60606001805461063390612053565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6610be481610e28565b610bec6111de565b61090a8383611202565b600a545f90600160d01b900465ffffffffffff168015158015610c2157504265ffffffffffff821610155b610c2c575f80610c40565b600a54600160a01b900465ffffffffffff16815b915091509091565b6106e633838361121b565b610c5e8484846106ff565b61078733858585856112e2565b6060610c7682610ed4565b505f610c80610a28565b90505f815111610c9e5760405180602001604052805f815250610cc9565b80610ca88461140a565b604051602001610cb992919061222e565b6040516020818303038152906040525b9392505050565b600a545f90600160d01b900465ffffffffffff168015158015610cfa57504265ffffffffffff8216105b610d1557600954600160d01b900465ffffffffffff16610d28565b600a54600160a01b900465ffffffffffff165b91505090565b5f610d37610d6d565b509050336001600160a01b03821614610d6557604051636116401160e11b8152336004820152602401610724565b6106fc61149a565b6009546001600160a01b03811691600160a01b90910465ffffffffffff1690565b81610dac57604051631fe1e13d60e11b815260040160405180910390fd5b6106e68282611530565b5f610dc081610e28565b6106fc611554565b6060600d805461063390612053565b6001600160a01b039182165f90815260056020908152604080832093909416825291909152205460ff1690565b5f6001600160e01b031982166318a4c3c360e11b148061059857506105988261155e565b6106fc8133611582565b6127106001600160601b038216811015610e7157604051636f483d0960e01b81526001600160601b038316600482015260248101829052604401610724565b6001600160a01b038316610e9a57604051635b6cc80560e11b81525f6004820152602401610724565b50604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600655565b5f818152600260205260408120546001600160a01b03168061059857604051637e27328960e01b815260048101849052602401610724565b61090a83838360016115bb565b610f235f806116bf565b565b5f828152600260205260408120546001600160a01b0390811690831615610f5157610f5181848661177e565b6001600160a01b03811615610f8b57610f6c5f855f806115bb565b6001600160a01b0381165f90815260036020526040902080545f190190555b6001600160a01b03851615610fb9576001600160a01b0385165f908152600360205260409020805460010190555b5f8481526002602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b5f8281526008602052604090206001015461103181610e28565b61078783836117e2565b6001600160a01b03811633146110645760405163334bd91960e11b815260040160405180910390fd5b61090a8282611848565b611076611884565b600b805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b5f6110c9610cd0565b6110d2426118a7565b6110dc9190612242565b90506110e882826118dd565b60405165ffffffffffff821681526001600160a01b038316907f3377dc44241e779dd06afab5b788a35ca5f3b778836e2990bdb26a2a4b2e5ed69060200160405180910390a25050565b5f61113c8261195a565b611145426118a7565b61114f9190612242565b905061115b82826116bf565b6040805165ffffffffffff8085168252831660208201527ff1038c18cf84a56e432fdbfaf746924b7ea511dfe03a6506a0ceba4888788d9b910160405180910390a15050565b6111a96111de565b600b805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586110a33390565b600b5460ff1615610f235760405163d93c066560e01b815260040160405180910390fd5b6106e6828260405180602001604052805f8152506119a1565b6001600160a01b0383166112445760405163a9fbf51f60e01b81525f6004820152602401610724565b6001600160a01b03821661127657604051630b61174360e31b81526001600160a01b0383166004820152602401610724565b6001600160a01b038381165f81815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383163b1561140357604051630a85bd0160e11b81526001600160a01b0384169063150b7a0290611324908890889087908790600401612260565b6020604051808303815f875af192505050801561135e575060408051601f3d908101601f1916820190925261135b9181019061229c565b60015b6113c5573d80801561138b576040519150601f19603f3d011682016040523d82523d5f602084013e611390565b606091505b5080515f036113bd57604051633250574960e11b81526001600160a01b0385166004820152602401610724565b805160208201fd5b6001600160e01b03198116630a85bd0160e11b1461140157604051633250574960e11b81526001600160a01b0385166004820152602401610724565b505b5050505050565b60605f611416836119b8565b60010190505f8167ffffffffffffffff81111561143557611435611f3a565b6040519080825280601f01601f19166020018201604052801561145f576020820181803683370190505b5090508181016020015b5f19016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461146957509392505050565b5f806114a4610d6d565b915091506114b98165ffffffffffff16151590565b15806114cd57504265ffffffffffff821610155b156114f5576040516319ca5ebb60e01b815265ffffffffffff82166004820152602401610724565b6115105f61150b600a546001600160a01b031690565b611848565b5061151b5f836117e2565b5050600980546001600160d01b031916905550565b5f8281526008602052604090206001015461154a81610e28565b6107878383611848565b610f235f806118dd565b5f6001600160e01b03198216637965db0b60e01b1480610598575061059882611a8f565b61158c8282610aa6565b6106e65760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610724565b80806115cf57506001600160a01b03821615155b15611690575f6115de84610ed4565b90506001600160a01b0383161580159061160a5750826001600160a01b0316816001600160a01b031614155b801561161d575061161b8184610dd7565b155b156116465760405163a9fbf51f60e01b81526001600160a01b0384166004820152602401610724565b811561168e5783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b50505f90815260046020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b600a54600160d01b900465ffffffffffff168015611741574265ffffffffffff8216101561171857600a54600980546001600160d01b0316600160a01b90920465ffffffffffff16600160d01b02919091179055611741565b6040517f2b1fa2edafe6f7b9e97c1a9e0c3660e645beb2dcaa2d45bdbf9beaf5472e1ec5905f90a15b50600a80546001600160a01b0316600160a01b65ffffffffffff948516026001600160d01b031617600160d01b9290931691909102919091179055565b611789838383611ab3565b61090a576001600160a01b0383166117b757604051637e27328960e01b815260048101829052602401610724565b60405163177e802f60e01b81526001600160a01b038316600482015260248101829052604401610724565b5f8261183e575f6117fb600a546001600160a01b031690565b6001600160a01b03161461182257604051631fe1e13d60e11b815260040160405180910390fd5b600a80546001600160a01b0319166001600160a01b0384161790555b610cc98383611b17565b5f821580156118645750600a546001600160a01b038381169116145b1561187a57600a80546001600160a01b03191690555b610cc98383611ba8565b600b5460ff16610f2357604051638dfc202b60e01b815260040160405180910390fd5b5f65ffffffffffff8211156118d9576040516306dfcc6560e41b81526030600482015260248101839052604401610724565b5090565b5f6118e6610d6d565b6009805465ffffffffffff8616600160a01b026001600160d01b03199091166001600160a01b03881617179055915061192890508165ffffffffffff16151590565b1561090a576040517f8886ebfc4259abdbc16601dd8fb5678e54878f47b3c34836cfc51154a9605109905f90a1505050565b5f80611964610cd0565b90508065ffffffffffff168365ffffffffffff161161198c5761198783826122b7565b610cc9565b610cc965ffffffffffff841662069780611c13565b6119ab8383611c22565b61090a335f8585856112e2565b5f8072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106119f65772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310611a22576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310611a4057662386f26fc10000830492506010015b6305f5e1008310611a58576305f5e100830492506008015b6127108310611a6c57612710830492506004015b60648310611a7e576064830492506002015b600a83106105985760010192915050565b5f6001600160e01b0319821663152a902d60e11b1480610598575061059882611c83565b5f6001600160a01b03831615801590611b0f5750826001600160a01b0316846001600160a01b03161480611aec5750611aec8484610dd7565b80611b0f57505f828152600460205260409020546001600160a01b038481169116145b949350505050565b5f611b228383610aa6565b611ba1575f8381526008602090815260408083206001600160a01b03861684529091529020805460ff19166001179055611b593390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610598565b505f610598565b5f611bb38383610aa6565b15611ba1575f8381526008602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610598565b5f828218828410028218610cc9565b6001600160a01b038216611c4b57604051633250574960e11b81525f6004820152602401610724565b5f611c5783835f610f25565b90506001600160a01b0381161561090a576040516339e3563760e11b81525f6004820152602401610724565b5f6001600160e01b031982166380ac58cd60e01b1480611cb357506001600160e01b03198216635b5e139f60e01b145b8061059857506301ffc9a760e01b6001600160e01b0319831614610598565b6001600160e01b0319811681146106fc575f80fd5b5f60208284031215611cf7575f80fd5b8135610cc981611cd2565b80356001600160a01b0381168114611d18575f80fd5b919050565b5f8060408385031215611d2e575f80fd5b611d3783611d02565b915060208301356001600160601b0381168114611d52575f80fd5b809150509250929050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610cc96020830184611d5d565b5f60208284031215611dad575f80fd5b5035919050565b5f8060408385031215611dc5575f80fd5b611dce83611d02565b946020939093013593505050565b5f805f60608486031215611dee575f80fd5b611df784611d02565b9250611e0560208501611d02565b929592945050506040919091013590565b5f8060408385031215611e27575f80fd5b50508035926020909101359150565b5f8060408385031215611e47575f80fd5b82359150611e5760208401611d02565b90509250929050565b5f8060208385031215611e71575f80fd5b823567ffffffffffffffff811115611e87575f80fd5b8301601f81018513611e97575f80fd5b803567ffffffffffffffff811115611ead575f80fd5b856020828401011115611ebe575f80fd5b6020919091019590945092505050565b5f60208284031215611ede575f80fd5b610cc982611d02565b5f60208284031215611ef7575f80fd5b813565ffffffffffff81168114610cc9575f80fd5b5f8060408385031215611f1d575f80fd5b611f2683611d02565b915060208301358015158114611d52575f80fd5b634e487b7160e01b5f52604160045260245ffd5b5f805f8060808587031215611f61575f80fd5b611f6a85611d02565b9350611f7860208601611d02565b925060408501359150606085013567ffffffffffffffff811115611f9a575f80fd5b8501601f81018713611faa575f80fd5b803567ffffffffffffffff811115611fc457611fc4611f3a565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715611ff357611ff3611f3a565b60405281815282820160200189101561200a575f80fd5b816020840160208301375f6020838301015280935050505092959194509250565b5f806040838503121561203c575f80fd5b61204583611d02565b9150611e5760208401611d02565b600181811c9082168061206757607f821691505b60208210810361208557634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176105985761059861208b565b5f826120d057634e487b7160e01b5f52601260045260245ffd5b500490565b601f82111561090a57805f5260205f20601f840160051c810160208510156120fa5750805b601f840160051c820191505b81811015611403575f8155600101612106565b67ffffffffffffffff83111561213157612131611f3a565b6121458361213f8354612053565b836120d5565b5f601f841160018114612176575f851561215f5750838201355b5f19600387901b1c1916600186901b178355611403565b5f83815260208120601f198716915b828110156121a55786850135825560209485019460019092019101612185565b50868210156121c1575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b604081525f6121e56040830186611d5d565b8281036020840152838152838560208301375f602085830101526020601f19601f860116820101915050949350505050565b5f81518060208401855e5f93019283525090919050565b5f611b0f61223c8386612217565b84612217565b65ffffffffffff81811683821601908111156105985761059861208b565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f9061229290830184611d5d565b9695505050505050565b5f602082840312156122ac575f80fd5b8151610cc981611cd2565b65ffffffffffff82811682821603908111156105985761059861208b56fea26469706673582212206c61f9cbc8861ecf23317af095dbbbb42c5ff32ed8e4a71b91c7a2a6aa06803564736f6c634300081a0033"; } } diff --git a/src/Tricksfor.Blockchain.Booster/Abis/TricksforBoosterStakingAbi.cs b/src/Tricksfor.Blockchain.Booster/Abis/TricksforBoosterStakingAbi.cs index 27279c0..e2af4d2 100644 --- a/src/Tricksfor.Blockchain.Booster/Abis/TricksforBoosterStakingAbi.cs +++ b/src/Tricksfor.Blockchain.Booster/Abis/TricksforBoosterStakingAbi.cs @@ -1,14 +1,12 @@ namespace Tricksfor.Blockchain.Booster.Abis { /// - /// ABI and bytecode for TricksforBoosterStaking. - /// Regenerate from artifacts/contracts/TricksforBoosterStaking.sol/TricksforBoosterStaking.json - /// after any contract interface change. + /// ABI and bytecode for TricksforBoosterStaking. Generated by scripts/sync-contract-artifacts.js. /// internal static class TricksforBoosterStakingAbi { - public const string Abi = @"[{""inputs"":[{""internalType"":""address"",""name"":""nftContract_"",""type"":""address""}],""stateMutability"":""nonpayable"",""type"":""constructor""},{""inputs"":[],""name"":""EnforcedPause"",""type"":""error""},{""inputs"":[],""name"":""ExpectedPause"",""type"":""error""},{""inputs"":[],""name"":""NotOriginalStaker"",""type"":""error""},{""inputs"":[],""name"":""NotTokenOwner"",""type"":""error""},{""inputs"":[{""internalType"":""address"",""name"":""owner"",""type"":""address""}],""name"":""OwnableInvalidOwner"",""type"":""error""},{""inputs"":[{""internalType"":""address"",""name"":""account"",""type"":""address""}],""name"":""OwnableUnauthorizedAccount"",""type"":""error""},{""inputs"":[],""name"":""ReentrancyGuardReentrantCall"",""type"":""error""},{""inputs"":[],""name"":""TokenAlreadyStaked"",""type"":""error""},{""inputs"":[],""name"":""TokenNotStaked"",""type"":""error""},{""inputs"":[],""name"":""UnsupportedNFTContract"",""type"":""error""},{""inputs"":[],""name"":""ZeroAddress"",""type"":""error""},{""anonymous"":false,""inputs"":[{""indexed"":true,""internalType"":""address"",""name"":""originalStaker"",""type"":""address""},{""indexed"":true,""internalType"":""uint256"",""name"":""tokenId"",""type"":""uint256""},{""indexed"":true,""internalType"":""address"",""name"":""recipient"",""type"":""address""},{""indexed"":false,""internalType"":""uint256"",""name"":""withdrawnAt"",""type"":""uint256""}],""name"":""EmergencyWithdrawn"",""type"":""event""},{""anonymous"":false,""inputs"":[{""indexed"":true,""internalType"":""address"",""name"":""previousOwner"",""type"":""address""},{""indexed"":true,""internalType"":""address"",""name"":""newOwner"",""type"":""address""}],""name"":""OwnershipTransferred"",""type"":""event""},{""anonymous"":false,""inputs"":[{""indexed"":false,""internalType"":""address"",""name"":""account"",""type"":""address""}],""name"":""Paused"",""type"":""event""},{""anonymous"":false,""inputs"":[{""indexed"":true,""internalType"":""address"",""name"":""staker"",""type"":""address""},{""indexed"":true,""internalType"":""uint256"",""name"":""tokenId"",""type"":""uint256""},{""indexed"":false,""internalType"":""uint256"",""name"":""stakedAt"",""type"":""uint256""}],""name"":""TokenStaked"",""type"":""event""},{""anonymous"":false,""inputs"":[{""indexed"":true,""internalType"":""address"",""name"":""staker"",""type"":""address""},{""indexed"":true,""internalType"":""uint256"",""name"":""tokenId"",""type"":""uint256""},{""indexed"":false,""internalType"":""uint256"",""name"":""unstakedAt"",""type"":""uint256""}],""name"":""TokenUnstaked"",""type"":""event""},{""anonymous"":false,""inputs"":[{""indexed"":false,""internalType"":""address"",""name"":""account"",""type"":""address""}],""name"":""Unpaused"",""type"":""event""},{""inputs"":[{""internalType"":""uint256"",""name"":""tokenId"",""type"":""uint256""},{""internalType"":""address"",""name"":""recipient"",""type"":""address""}],""name"":""emergencyWithdraw"",""outputs"":[],""stateMutability"":""nonpayable"",""type"":""function""},{""inputs"":[{""internalType"":""address"",""name"":""wallet"",""type"":""address""}],""name"":""getWalletStakedTokens"",""outputs"":[{""internalType"":""uint256[]"",""name"":"""",""type"":""uint256[]""}],""stateMutability"":""view"",""type"":""function""},{""inputs"":[{""internalType"":""uint256"",""name"":""tokenId"",""type"":""uint256""}],""name"":""isStaked"",""outputs"":[{""internalType"":""bool"",""name"":"""",""type"":""bool""}],""stateMutability"":""view"",""type"":""function""},{""inputs"":[],""name"":""nftContract"",""outputs"":[{""internalType"":""contract IERC721"",""name"":"""",""type"":""address""}],""stateMutability"":""view"",""type"":""function""},{""inputs"":[{""internalType"":""address"",""name"":"""",""type"":""address""},{""internalType"":""address"",""name"":""from"",""type"":""address""},{""internalType"":""uint256"",""name"":""tokenId"",""type"":""uint256""},{""internalType"":""bytes"",""name"":"""",""type"":""bytes""}],""name"":""onERC721Received"",""outputs"":[{""internalType"":""bytes4"",""name"":"""",""type"":""bytes4""}],""stateMutability"":""nonpayable"",""type"":""function""},{""inputs"":[],""name"":""owner"",""outputs"":[{""internalType"":""address"",""name"":"""",""type"":""address""}],""stateMutability"":""view"",""type"":""function""},{""inputs"":[],""name"":""pause"",""outputs"":[],""stateMutability"":""nonpayable"",""type"":""function""},{""inputs"":[],""name"":""paused"",""outputs"":[{""internalType"":""bool"",""name"":"""",""type"":""bool""}],""stateMutability"":""view"",""type"":""function""},{""inputs"":[],""name"":""renounceOwnership"",""outputs"":[],""stateMutability"":""nonpayable"",""type"":""function""},{""inputs"":[{""internalType"":""uint256"",""name"":""tokenId"",""type"":""uint256""}],""name"":""stake"",""outputs"":[],""stateMutability"":""nonpayable"",""type"":""function""},{""inputs"":[{""internalType"":""uint256"",""name"":""tokenId"",""type"":""uint256""}],""name"":""stakedAtOf"",""outputs"":[{""internalType"":""uint256"",""name"":"""",""type"":""uint256""}],""stateMutability"":""view"",""type"":""function""},{""inputs"":[{""internalType"":""uint256"",""name"":""tokenId"",""type"":""uint256""}],""name"":""stakedOwnerOf"",""outputs"":[{""internalType"":""address"",""name"":"""",""type"":""address""}],""stateMutability"":""view"",""type"":""function""},{""inputs"":[{""internalType"":""address"",""name"":""newOwner"",""type"":""address""}],""name"":""transferOwnership"",""outputs"":[],""stateMutability"":""nonpayable"",""type"":""function""},{""inputs"":[],""name"":""unpause"",""outputs"":[],""stateMutability"":""nonpayable"",""type"":""function""},{""inputs"":[{""internalType"":""uint256"",""name"":""tokenId"",""type"":""uint256""}],""name"":""unstake"",""outputs"":[],""stateMutability"":""nonpayable"",""type"":""function""}]"; + public const string Abi = @"[{""inputs"":[{""internalType"":""address"",""name"":""nftContract_"",""type"":""address""},{""internalType"":""address"",""name"":""initialOwner_"",""type"":""address""}],""stateMutability"":""nonpayable"",""type"":""constructor""},{""inputs"":[],""name"":""EnforcedPause"",""type"":""error""},{""inputs"":[],""name"":""ExpectedPause"",""type"":""error""},{""inputs"":[],""name"":""InvalidEmergencyRecipient"",""type"":""error""},{""inputs"":[],""name"":""NotOriginalStaker"",""type"":""error""},{""inputs"":[],""name"":""NotTokenOwner"",""type"":""error""},{""inputs"":[{""internalType"":""address"",""name"":""owner"",""type"":""address""}],""name"":""OwnableInvalidOwner"",""type"":""error""},{""inputs"":[{""internalType"":""address"",""name"":""account"",""type"":""address""}],""name"":""OwnableUnauthorizedAccount"",""type"":""error""},{""inputs"":[],""name"":""ReentrancyGuardReentrantCall"",""type"":""error""},{""inputs"":[],""name"":""TokenAlreadyStaked"",""type"":""error""},{""inputs"":[],""name"":""TokenIsTracked"",""type"":""error""},{""inputs"":[],""name"":""TokenNotHeld"",""type"":""error""},{""inputs"":[],""name"":""TokenNotStaked"",""type"":""error""},{""inputs"":[],""name"":""UnsupportedNFTContract"",""type"":""error""},{""inputs"":[],""name"":""ZeroAddress"",""type"":""error""},{""anonymous"":false,""inputs"":[{""indexed"":true,""internalType"":""address"",""name"":""originalStaker"",""type"":""address""},{""indexed"":true,""internalType"":""uint256"",""name"":""tokenId"",""type"":""uint256""},{""indexed"":true,""internalType"":""address"",""name"":""recipient"",""type"":""address""},{""indexed"":false,""internalType"":""uint256"",""name"":""withdrawnAt"",""type"":""uint256""}],""name"":""EmergencyWithdrawn"",""type"":""event""},{""anonymous"":false,""inputs"":[{""indexed"":true,""internalType"":""address"",""name"":""previousOwner"",""type"":""address""},{""indexed"":true,""internalType"":""address"",""name"":""newOwner"",""type"":""address""}],""name"":""OwnershipTransferStarted"",""type"":""event""},{""anonymous"":false,""inputs"":[{""indexed"":true,""internalType"":""address"",""name"":""previousOwner"",""type"":""address""},{""indexed"":true,""internalType"":""address"",""name"":""newOwner"",""type"":""address""}],""name"":""OwnershipTransferred"",""type"":""event""},{""anonymous"":false,""inputs"":[{""indexed"":false,""internalType"":""address"",""name"":""account"",""type"":""address""}],""name"":""Paused"",""type"":""event""},{""anonymous"":false,""inputs"":[{""indexed"":true,""internalType"":""address"",""name"":""staker"",""type"":""address""},{""indexed"":true,""internalType"":""uint256"",""name"":""tokenId"",""type"":""uint256""},{""indexed"":false,""internalType"":""uint256"",""name"":""stakedAt"",""type"":""uint256""}],""name"":""TokenStaked"",""type"":""event""},{""anonymous"":false,""inputs"":[{""indexed"":true,""internalType"":""address"",""name"":""staker"",""type"":""address""},{""indexed"":true,""internalType"":""uint256"",""name"":""tokenId"",""type"":""uint256""},{""indexed"":false,""internalType"":""uint256"",""name"":""unstakedAt"",""type"":""uint256""}],""name"":""TokenUnstaked"",""type"":""event""},{""anonymous"":false,""inputs"":[{""indexed"":false,""internalType"":""address"",""name"":""account"",""type"":""address""}],""name"":""Unpaused"",""type"":""event""},{""anonymous"":false,""inputs"":[{""indexed"":true,""internalType"":""address"",""name"":""recipient"",""type"":""address""},{""indexed"":true,""internalType"":""uint256"",""name"":""tokenId"",""type"":""uint256""},{""indexed"":false,""internalType"":""uint256"",""name"":""rescuedAt"",""type"":""uint256""}],""name"":""UntrackedTokenRescued"",""type"":""event""},{""inputs"":[],""name"":""acceptOwnership"",""outputs"":[],""stateMutability"":""nonpayable"",""type"":""function""},{""inputs"":[{""internalType"":""uint256"",""name"":""tokenId"",""type"":""uint256""},{""internalType"":""address"",""name"":""recipient"",""type"":""address""}],""name"":""emergencyWithdraw"",""outputs"":[],""stateMutability"":""nonpayable"",""type"":""function""},{""inputs"":[{""internalType"":""address"",""name"":""wallet"",""type"":""address""}],""name"":""getWalletStakedTokens"",""outputs"":[{""internalType"":""uint256[]"",""name"":"""",""type"":""uint256[]""}],""stateMutability"":""view"",""type"":""function""},{""inputs"":[{""internalType"":""uint256"",""name"":""tokenId"",""type"":""uint256""}],""name"":""isStaked"",""outputs"":[{""internalType"":""bool"",""name"":"""",""type"":""bool""}],""stateMutability"":""view"",""type"":""function""},{""inputs"":[],""name"":""nftContract"",""outputs"":[{""internalType"":""contract IERC721"",""name"":"""",""type"":""address""}],""stateMutability"":""view"",""type"":""function""},{""inputs"":[{""internalType"":""address"",""name"":"""",""type"":""address""},{""internalType"":""address"",""name"":""from"",""type"":""address""},{""internalType"":""uint256"",""name"":""tokenId"",""type"":""uint256""},{""internalType"":""bytes"",""name"":"""",""type"":""bytes""}],""name"":""onERC721Received"",""outputs"":[{""internalType"":""bytes4"",""name"":"""",""type"":""bytes4""}],""stateMutability"":""nonpayable"",""type"":""function""},{""inputs"":[],""name"":""owner"",""outputs"":[{""internalType"":""address"",""name"":"""",""type"":""address""}],""stateMutability"":""view"",""type"":""function""},{""inputs"":[],""name"":""pause"",""outputs"":[],""stateMutability"":""nonpayable"",""type"":""function""},{""inputs"":[],""name"":""paused"",""outputs"":[{""internalType"":""bool"",""name"":"""",""type"":""bool""}],""stateMutability"":""view"",""type"":""function""},{""inputs"":[],""name"":""pendingOwner"",""outputs"":[{""internalType"":""address"",""name"":"""",""type"":""address""}],""stateMutability"":""view"",""type"":""function""},{""inputs"":[],""name"":""renounceOwnership"",""outputs"":[],""stateMutability"":""nonpayable"",""type"":""function""},{""inputs"":[{""internalType"":""uint256"",""name"":""tokenId"",""type"":""uint256""},{""internalType"":""address"",""name"":""recipient"",""type"":""address""}],""name"":""rescueUntrackedToken"",""outputs"":[],""stateMutability"":""nonpayable"",""type"":""function""},{""inputs"":[{""internalType"":""uint256"",""name"":""tokenId"",""type"":""uint256""}],""name"":""stake"",""outputs"":[],""stateMutability"":""nonpayable"",""type"":""function""},{""inputs"":[{""internalType"":""uint256"",""name"":""tokenId"",""type"":""uint256""}],""name"":""stakedAtOf"",""outputs"":[{""internalType"":""uint256"",""name"":"""",""type"":""uint256""}],""stateMutability"":""view"",""type"":""function""},{""inputs"":[{""internalType"":""uint256"",""name"":""tokenId"",""type"":""uint256""}],""name"":""stakedOwnerOf"",""outputs"":[{""internalType"":""address"",""name"":"""",""type"":""address""}],""stateMutability"":""view"",""type"":""function""},{""inputs"":[{""internalType"":""address"",""name"":""newOwner"",""type"":""address""}],""name"":""transferOwnership"",""outputs"":[],""stateMutability"":""nonpayable"",""type"":""function""},{""inputs"":[],""name"":""unpause"",""outputs"":[],""stateMutability"":""nonpayable"",""type"":""function""},{""inputs"":[{""internalType"":""uint256"",""name"":""tokenId"",""type"":""uint256""}],""name"":""unstake"",""outputs"":[],""stateMutability"":""nonpayable"",""type"":""function""}]"; - public const string Bytecode = "0x60a060405234801561000f575f80fd5b50604051610fba380380610fba83398101604081905261002e91610108565b338061005357604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b61005c816100b9565b5060017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00556001600160a01b0381166100a85760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0316608052610135565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f60208284031215610118575f80fd5b81516001600160a01b038116811461012e575f80fd5b9392505050565b608051610e4a6101705f395f8181610261015281816102b2015281816104bd015281816106260152818161076c01526108540152610e4a5ff3fe608060405234801561000f575f80fd5b50600436106100f0575f3560e01c80635c975abb11610093578063a694fc3a11610063578063a694fc3a1461021f578063baa51f8614610232578063d56d229d1461025c578063f2fde38b14610283575f80fd5b80635c975abb146101e2578063715018a6146101ff5780638456cb59146102075780638da5cb5b1461020f575f80fd5b80632b4bc300116100ce5780632b4bc300146101925780632e17de78146101b25780632f940c70146101c75780633f4ba83a146101da575f80fd5b8063150b7a02146100f45780631b3253b0146101255780631dcac94d14610152575b5f80fd5b610107610102366004610c4a565b610296565b6040516001600160e01b031990911681526020015b60405180910390f35b610144610133366004610ce3565b5f9081526002602052604090205490565b60405190815260200161011c565b61017a610160366004610ce3565b5f908152600160205260409020546001600160a01b031690565b6040516001600160a01b03909116815260200161011c565b6101a56101a0366004610cfa565b6103c2565b60405161011c9190610d1c565b6101c56101c0366004610ce3565b61042b565b005b6101c56101d5366004610d5e565b61056e565b6101c56106e6565b5f54600160a01b900460ff165b604051901515815260200161011c565b6101c56106f8565b6101c5610709565b5f546001600160a01b031661017a565b6101c561022d366004610ce3565b610719565b6101ef610240366004610ce3565b5f908152600160205260409020546001600160a01b0316151590565b61017a7f000000000000000000000000000000000000000000000000000000000000000081565b6101c5610291366004610cfa565b6108e7565b5f61029f610926565b6102a7610941565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146102f05760405163de1db39560e01b815260040160405180910390fd5b6001600160a01b0385166103175760405163d92e233d60e01b815260040160405180910390fd5b5f848152600160205260409020546001600160a01b03161561034c576040516316e9ad8f60e01b815260040160405180910390fd5b610356858561096b565b83856001600160a01b03167f6173e4d2d9dd52aae0ed37afed3adcf924a490639b759ca93d32dc43366c17d24260405161039291815260200190565b60405180910390a350630a85bd0160e11b6103b960015f80516020610df583398151915255565b95945050505050565b6001600160a01b0381165f9081526003602090815260409182902080548351818402810184019094528084526060939283018282801561041f57602002820191905f5260205f20905b81548152602001906001019080831161040b575b50505050509050919050565b610433610926565b5f818152600160205260409020546001600160a01b03168061046857604051630a49bbc360e21b815260040160405180910390fd5b6001600160a01b0381163314610491576040516332dc95cb60e01b815260040160405180910390fd5b61049b81836109cf565b6040516323b872dd60e01b8152306004820152336024820152604481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906323b872dd906064015f604051808303815f87803b158015610506575f80fd5b505af1158015610518573d5f803e3d5ffd5b50506040514281528492503391507f563fc70fca9d440d883299c76a721644d5aca7c45df98aeb5292c4cb823579bf906020015b60405180910390a35061056b60015f80516020610df583398151915255565b50565b6105766109ff565b61057e610926565b5f828152600160205260409020546001600160a01b03166105b257604051630a49bbc360e21b815260040160405180910390fd5b6001600160a01b0381166105d95760405163d92e233d60e01b815260040160405180910390fd5b5f828152600160205260409020546001600160a01b03166105fa81846109cf565b6040516323b872dd60e01b81523060048201526001600160a01b038381166024830152604482018590527f000000000000000000000000000000000000000000000000000000000000000016906323b872dd906064015f604051808303815f87803b158015610667575f80fd5b505af1158015610679573d5f803e3d5ffd5b50505050816001600160a01b031683826001600160a01b03167ff4408f2b7cb3bb2b43ddb3715579eae68a12af5f2e6d938537db2be5e72f5f7d426040516106c391815260200190565b60405180910390a4506106e260015f80516020610df583398151915255565b5050565b6106ee6109ff565b6106f6610a2b565b565b6107006109ff565b6106f65f610a7f565b6107116109ff565b6106f6610ace565b610721610926565b610729610941565b5f8181526001602052604090205433906001600160a01b031615610760576040516316e9ad8f60e01b815260040160405180910390fd5b806001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636352211e846040518263ffffffff1660e01b81526004016107b891815260200190565b602060405180830381865afa1580156107d3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107f79190610d8c565b6001600160a01b03161461081e576040516359dc379f60e01b815260040160405180910390fd5b610828818361096b565b6040516323b872dd60e01b81526001600160a01b038281166004830152306024830152604482018490527f000000000000000000000000000000000000000000000000000000000000000016906323b872dd906064015f604051808303815f87803b158015610895575f80fd5b505af11580156108a7573d5f803e3d5ffd5b5050505081816001600160a01b03167f6173e4d2d9dd52aae0ed37afed3adcf924a490639b759ca93d32dc43366c17d24260405161054c91815260200190565b6108ef6109ff565b6001600160a01b03811661091d57604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b61056b81610a7f565b61092e610b10565b60025f80516020610df583398151915255565b5f54600160a01b900460ff16156106f65760405163d93c066560e01b815260040160405180910390fd5b5f81815260016020818152604080842080546001600160a01b039097166001600160a01b0319909716871790556002825280842042905594835260038082528584208054868652600484529685208790559082529185018255908252902090910155565b5f81815260016020908152604080832080546001600160a01b031916905560029091528120556106e28282610b3f565b5f546001600160a01b031633146106f65760405163118cdaa760e01b8152336004820152602401610914565b610a33610c0d565b5f805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610ad6610941565b5f805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610a623390565b5f80516020610df5833981519152546002036106f657604051633ee5aeb560e01b815260040160405180910390fd5b6001600160a01b0382165f9081526003602090815260408083208484526004909252822054815491929091610b7690600190610da7565b9050808214610bcf575f838281548110610b9257610b92610dcc565b905f5260205f200154905080848481548110610bb057610bb0610dcc565b5f91825260208083209091019290925591825260049052604090208290555b82805480610bdf57610bdf610de0565b600190038181905f5260205f20015f9055905560045f8581526020019081526020015f205f90555050505050565b5f54600160a01b900460ff166106f657604051638dfc202b60e01b815260040160405180910390fd5b6001600160a01b038116811461056b575f80fd5b5f805f805f60808688031215610c5e575f80fd5b8535610c6981610c36565b94506020860135610c7981610c36565b935060408601359250606086013567ffffffffffffffff811115610c9b575f80fd5b8601601f81018813610cab575f80fd5b803567ffffffffffffffff811115610cc1575f80fd5b886020828401011115610cd2575f80fd5b959894975092955050506020019190565b5f60208284031215610cf3575f80fd5b5035919050565b5f60208284031215610d0a575f80fd5b8135610d1581610c36565b9392505050565b602080825282518282018190525f918401906040840190835b81811015610d53578351835260209384019390920191600101610d35565b509095945050505050565b5f8060408385031215610d6f575f80fd5b823591506020830135610d8181610c36565b809150509250929050565b5f60208284031215610d9c575f80fd5b8151610d1581610c36565b81810381811115610dc657634e487b7160e01b5f52601160045260245ffd5b92915050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52603160045260245ffdfe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a2646970667358221220e328491ebc478eb5bb9c6275ecdc21194d6bb5cebc6b77777347dbbc71d2e97a64736f6c634300081a0033"; + public const string Bytecode = "0x60a060405234801561000f575f80fd5b5060405161132638038061132683398101604081905261002e9161015d565b806001600160a01b03811661005c57604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b610065816100d7565b5060017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00556001600160a01b03821615806100a757506001600160a01b038116155b156100c55760405163d92e233d60e01b815260040160405180910390fd5b506001600160a01b031660805261018e565b600180546001600160a01b03191690556100f0816100f3565b50565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b0381168114610158575f80fd5b919050565b5f806040838503121561016e575f80fd5b61017783610142565b915061018560208401610142565b90509250929050565b60805161114f6101d75f395f818161029e0152818161037001528181610417015281816104f7015281816106f70152818161086e01528181610a050152610ad8015261114f5ff3fe608060405234801561000f575f80fd5b5060043610610111575f3560e01c8063715018a61161009e578063a694fc3a1161006e578063a694fc3a1461025c578063baa51f861461026f578063d56d229d14610299578063e30c3978146102c0578063f2fde38b146102d1575f80fd5b8063715018a61461023457806379ba50971461023c5780638456cb59146102445780638da5cb5b1461024c575f80fd5b80632b4bc300116100e45780632b4bc300146101c85780632e17de78146101e85780632f940c70146101fb5780633f4ba83a1461020e5780635c975abb14610216575f80fd5b80630fa6f64214610115578063150b7a021461012a5780631b3253b01461015b5780631dcac94d14610188575b5f80fd5b610128610123366004610f2b565b6102e4565b005b61013d610138366004610f59565b6104db565b6040516001600160e01b031990911681526020015b60405180910390f35b61017a610169366004610ff2565b5f9081526003602052604090205490565b604051908152602001610152565b6101b0610196366004610ff2565b5f908152600260205260409020546001600160a01b031690565b6040516001600160a01b039091168152602001610152565b6101db6101d6366004611009565b610607565b604051610152919061102b565b6101286101f6366004610ff2565b610670565b610128610209366004610f2b565b6107af565b610128610939565b600154600160a01b900460ff165b6040519015158152602001610152565b61012861094b565b61012861095c565b6101286109a2565b5f546001600160a01b03166101b0565b61012861026a366004610ff2565b6109b2565b61022461027d366004610ff2565b5f908152600260205260409020546001600160a01b0316151590565b6101b07f000000000000000000000000000000000000000000000000000000000000000081565b6001546001600160a01b03166101b0565b6101286102df366004611009565b610b7a565b6102ec610bea565b6102f4610c16565b6001600160a01b03811661031b5760405163d92e233d60e01b815260040160405180910390fd5b5f828152600260205260409020546001600160a01b031615610350576040516382d272e360e01b815260040160405180910390fd5b6040516331a9108f60e11b81526004810183905230906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa1580156103b5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103d9919061106d565b6001600160a01b03161461040057604051636bcd243760e11b815260040160405180910390fd5b6040516323b872dd60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906323b872dd9061045090309085908790600401611088565b5f604051808303815f87803b158015610467575f80fd5b505af1158015610479573d5f803e3d5ffd5b5050505081816001600160a01b03167fc27a1277308b3908a0fb998812a60b1da8911b8583f20bf8f98e5246db8c47ef426040516104b991815260200190565b60405180910390a36104d760015f805160206110fa83398151915255565b5050565b5f6104e4610c16565b6104ec610c31565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105355760405163de1db39560e01b815260040160405180910390fd5b6001600160a01b03851661055c5760405163d92e233d60e01b815260040160405180910390fd5b5f848152600260205260409020546001600160a01b031615610591576040516316e9ad8f60e01b815260040160405180910390fd5b61059b8585610c5c565b83856001600160a01b03167f6173e4d2d9dd52aae0ed37afed3adcf924a490639b759ca93d32dc43366c17d2426040516105d791815260200190565b60405180910390a350630a85bd0160e11b6105fe60015f805160206110fa83398151915255565b95945050505050565b6001600160a01b0381165f9081526004602090815260409182902080548351818402810184019094528084526060939283018282801561066457602002820191905f5260205f20905b815481526020019060010190808311610650575b50505050509050919050565b610678610c16565b5f818152600260205260409020546001600160a01b0316806106ad57604051630a49bbc360e21b815260040160405180910390fd5b6001600160a01b03811633146106d6576040516332dc95cb60e01b815260040160405180910390fd5b6106e08183610cc0565b6040516323b872dd60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906323b872dd9061073090309033908790600401611088565b5f604051808303815f87803b158015610747575f80fd5b505af1158015610759573d5f803e3d5ffd5b50506040514281528492503391507f563fc70fca9d440d883299c76a721644d5aca7c45df98aeb5292c4cb823579bf906020015b60405180910390a3506107ac60015f805160206110fa83398151915255565b50565b6107b7610bea565b6107bf610c16565b5f828152600260205260409020546001600160a01b0316806107f457604051630a49bbc360e21b815260040160405180910390fd5b6001600160a01b03821661081b5760405163d92e233d60e01b815260040160405180910390fd5b806001600160a01b0316826001600160a01b03161461084d5760405163c56a390560e01b815260040160405180910390fd5b6108578184610cc0565b6040516323b872dd60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906323b872dd906108a790309086908890600401611088565b5f604051808303815f87803b1580156108be575f80fd5b505af11580156108d0573d5f803e3d5ffd5b50505050816001600160a01b031683826001600160a01b03167ff4408f2b7cb3bb2b43ddb3715579eae68a12af5f2e6d938537db2be5e72f5f7d4260405161091a91815260200190565b60405180910390a4506104d760015f805160206110fa83398151915255565b610941610bea565b610949610cf0565b565b610953610bea565b6109495f610d45565b60015433906001600160a01b031681146109995760405163118cdaa760e01b81526001600160a01b03821660048201526024015b60405180910390fd5b6107ac81610d45565b6109aa610bea565b610949610d5e565b6109ba610c16565b6109c2610c31565b5f8181526002602052604090205433906001600160a01b0316156109f9576040516316e9ad8f60e01b815260040160405180910390fd5b806001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636352211e846040518263ffffffff1660e01b8152600401610a5191815260200190565b602060405180830381865afa158015610a6c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a90919061106d565b6001600160a01b031614610ab7576040516359dc379f60e01b815260040160405180910390fd5b610ac18183610c5c565b6040516323b872dd60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906323b872dd90610b1190849030908790600401611088565b5f604051808303815f87803b158015610b28575f80fd5b505af1158015610b3a573d5f803e3d5ffd5b5050505081816001600160a01b03167f6173e4d2d9dd52aae0ed37afed3adcf924a490639b759ca93d32dc43366c17d24260405161078d91815260200190565b610b82610bea565b600180546001600160a01b0383166001600160a01b03199091168117909155610bb25f546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b5f546001600160a01b031633146109495760405163118cdaa760e01b8152336004820152602401610990565b610c1e610da1565b60025f805160206110fa83398151915255565b600154600160a01b900460ff16156109495760405163d93c066560e01b815260040160405180910390fd5b5f81815260026020908152604080832080546001600160a01b039096166001600160a01b0319909616861790556003825280832042905593825260048082528483208054858552600584529584208690559082526001850181558252902090910155565b5f81815260026020908152604080832080546001600160a01b031916905560039091528120556104d78282610dd0565b610cf8610e9e565b6001805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600180546001600160a01b03191690556107ac81610ec8565b610d66610c31565b6001805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610d283390565b5f805160206110fa8339815191525460020361094957604051633ee5aeb560e01b815260040160405180910390fd5b6001600160a01b0382165f9081526004602090815260408083208484526005909252822054815491929091610e07906001906110ac565b9050808214610e60575f838281548110610e2357610e236110d1565b905f5260205f200154905080848481548110610e4157610e416110d1565b5f91825260208083209091019290925591825260059052604090208290555b82805480610e7057610e706110e5565b600190038181905f5260205f20015f9055905560055f8581526020019081526020015f205f90555050505050565b600154600160a01b900460ff1661094957604051638dfc202b60e01b815260040160405180910390fd5b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146107ac575f80fd5b5f8060408385031215610f3c575f80fd5b823591506020830135610f4e81610f17565b809150509250929050565b5f805f805f60808688031215610f6d575f80fd5b8535610f7881610f17565b94506020860135610f8881610f17565b935060408601359250606086013567ffffffffffffffff811115610faa575f80fd5b8601601f81018813610fba575f80fd5b803567ffffffffffffffff811115610fd0575f80fd5b886020828401011115610fe1575f80fd5b959894975092955050506020019190565b5f60208284031215611002575f80fd5b5035919050565b5f60208284031215611019575f80fd5b813561102481610f17565b9392505050565b602080825282518282018190525f918401906040840190835b81811015611062578351835260209384019390920191600101611044565b509095945050505050565b5f6020828403121561107d575f80fd5b815161102481610f17565b6001600160a01b039384168152919092166020820152604081019190915260600190565b818103818111156110cb57634e487b7160e01b5f52601160045260245ffd5b92915050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52603160045260245ffdfe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a2646970667358221220f8e5afe3df2897c05bd05e17e152d07acba805eed0e132300174b368b573437b64736f6c634300081a0033"; } } diff --git a/src/Tricksfor.Blockchain.Booster/Contracts/Deployment/TricksforBoosterNFTDeployment.cs b/src/Tricksfor.Blockchain.Booster/Contracts/Deployment/TricksforBoosterNFTDeployment.cs index 4ab3831..dca0e14 100644 --- a/src/Tricksfor.Blockchain.Booster/Contracts/Deployment/TricksforBoosterNFTDeployment.cs +++ b/src/Tricksfor.Blockchain.Booster/Contracts/Deployment/TricksforBoosterNFTDeployment.cs @@ -12,6 +12,7 @@ namespace Tricksfor.Blockchain.Booster.Contracts.Deployment public class TricksforBoosterNFTDeployment : ContractDeploymentMessage { public static string ABI => TricksforBoosterNFTAbi.Abi; + public static string BYTECODE => TricksforBoosterNFTAbi.Bytecode; public TricksforBoosterNFTDeployment() : base(TricksforBoosterNFTAbi.Bytecode) { } @@ -35,5 +36,14 @@ public TricksforBoosterNFTDeployment() : base(TricksforBoosterNFTAbi.Bytecode) { /// [Parameter("uint96", "royaltyFeeBasisPoints_", 6)] public BigInteger RoyaltyFeeBasisPoints { get; set; } + + [Parameter("address", "initialAdmin_", 7)] + public string InitialAdmin { get; set; } = string.Empty; + + [Parameter("address", "initialMinter_", 8)] + public string InitialMinter { get; set; } = string.Empty; + + [Parameter("uint48", "defaultAdminDelay_", 9)] + public BigInteger DefaultAdminDelay { get; set; } } } diff --git a/src/Tricksfor.Blockchain.Booster/Contracts/Deployment/TricksforBoosterStakingDeployment.cs b/src/Tricksfor.Blockchain.Booster/Contracts/Deployment/TricksforBoosterStakingDeployment.cs index 513f995..6ee74dc 100644 --- a/src/Tricksfor.Blockchain.Booster/Contracts/Deployment/TricksforBoosterStakingDeployment.cs +++ b/src/Tricksfor.Blockchain.Booster/Contracts/Deployment/TricksforBoosterStakingDeployment.cs @@ -11,10 +11,14 @@ namespace Tricksfor.Blockchain.Booster.Contracts.Deployment public class TricksforBoosterStakingDeployment : ContractDeploymentMessage { public static string ABI => TricksforBoosterStakingAbi.Abi; + public static string BYTECODE => TricksforBoosterStakingAbi.Bytecode; public TricksforBoosterStakingDeployment() : base(TricksforBoosterStakingAbi.Bytecode) { } [Parameter("address", "nftContract_", 1)] public string NftContract { get; set; } = string.Empty; + + [Parameter("address", "initialOwner_", 2)] + public string InitialOwner { get; set; } = string.Empty; } } diff --git a/src/Tricksfor.Blockchain.Booster/Contracts/Events/TricksforBoosterNFTEvents.cs b/src/Tricksfor.Blockchain.Booster/Contracts/Events/TricksforBoosterNFTEvents.cs new file mode 100644 index 0000000..cea3fec --- /dev/null +++ b/src/Tricksfor.Blockchain.Booster/Contracts/Events/TricksforBoosterNFTEvents.cs @@ -0,0 +1,36 @@ +using System.Numerics; +using Nethereum.ABI.FunctionEncoding.Attributes; +using Nethereum.Contracts; + +namespace Tricksfor.Blockchain.Booster.Contracts.Events +{ + [Event("BaseURIUpdated")] + public class BaseUriUpdatedEventDTO : IEventDTO + { + [Parameter("string", "previousURI", 1, false)] + public string PreviousUri { get; set; } = string.Empty; + + [Parameter("string", "newURI", 2, false)] + public string NewUri { get; set; } = string.Empty; + } + + [Event("ContractURIUpdated")] + public class ContractUriUpdatedEventDTO : IEventDTO + { + [Parameter("string", "previousURI", 1, false)] + public string PreviousUri { get; set; } = string.Empty; + + [Parameter("string", "newURI", 2, false)] + public string NewUri { get; set; } = string.Empty; + } + + [Event("DefaultRoyaltyUpdated")] + public class DefaultRoyaltyUpdatedEventDTO : IEventDTO + { + [Parameter("address", "receiver", 1, true)] + public string Receiver { get; set; } = string.Empty; + + [Parameter("uint96", "feeBasisPoints", 2, false)] + public BigInteger FeeBasisPoints { get; set; } + } +} diff --git a/src/Tricksfor.Blockchain.Booster/Contracts/Events/TricksforBoosterStakingEvents.cs b/src/Tricksfor.Blockchain.Booster/Contracts/Events/TricksforBoosterStakingEvents.cs index 0e001f6..6fcfea5 100644 --- a/src/Tricksfor.Blockchain.Booster/Contracts/Events/TricksforBoosterStakingEvents.cs +++ b/src/Tricksfor.Blockchain.Booster/Contracts/Events/TricksforBoosterStakingEvents.cs @@ -78,4 +78,18 @@ public class EmergencyWithdrawnEventDTO : IEventDTO [Parameter("uint256", "withdrawnAt", 4, false)] public BigInteger WithdrawnAt { get; set; } } + + /// Emitted when an untracked direct transfer is recovered. + [Event("UntrackedTokenRescued")] + public class UntrackedTokenRescuedEventDTO : IEventDTO + { + [Parameter("address", "recipient", 1, true)] + public string Recipient { get; set; } = string.Empty; + + [Parameter("uint256", "tokenId", 2, true)] + public BigInteger TokenId { get; set; } + + [Parameter("uint256", "rescuedAt", 3, false)] + public BigInteger RescuedAt { get; set; } + } } diff --git a/src/Tricksfor.Blockchain.Booster/Contracts/Functions/TricksforBoosterNFTFunctions.cs b/src/Tricksfor.Blockchain.Booster/Contracts/Functions/TricksforBoosterNFTFunctions.cs index 473b7eb..ce73490 100644 --- a/src/Tricksfor.Blockchain.Booster/Contracts/Functions/TricksforBoosterNFTFunctions.cs +++ b/src/Tricksfor.Blockchain.Booster/Contracts/Functions/TricksforBoosterNFTFunctions.cs @@ -20,6 +20,12 @@ public class MinterRoleFunction : FunctionMessage { } [Function("DEFAULT_ADMIN_ROLE", "bytes32")] public class DefaultAdminRoleFunction : FunctionMessage { } + [Function("defaultAdmin", "address")] + public class DefaultAdminFunction : FunctionMessage { } + + [Function("defaultAdminDelay", "uint48")] + public class DefaultAdminDelayFunction : FunctionMessage { } + [Function("hasRole", "bool")] public class HasRoleFunction : FunctionMessage { @@ -50,6 +56,9 @@ public class TokenUriFunction : FunctionMessage [Function("contractURI", "string")] public class ContractUriFunction : FunctionMessage { } + [Function("baseURI", "string")] + public class BaseUriFunction : FunctionMessage { } + [Function("ownerOf", "address")] public class OwnerOfFunction : FunctionMessage { diff --git a/src/Tricksfor.Blockchain.Booster/Contracts/Functions/TricksforBoosterStakingFunctions.cs b/src/Tricksfor.Blockchain.Booster/Contracts/Functions/TricksforBoosterStakingFunctions.cs index bf500e8..f622b94 100644 --- a/src/Tricksfor.Blockchain.Booster/Contracts/Functions/TricksforBoosterStakingFunctions.cs +++ b/src/Tricksfor.Blockchain.Booster/Contracts/Functions/TricksforBoosterStakingFunctions.cs @@ -14,6 +14,9 @@ public class NftContractFunction : FunctionMessage { } [Function("owner", "address")] public class StakingOwnerFunction : FunctionMessage { } + [Function("pendingOwner", "address")] + public class PendingOwnerFunction : FunctionMessage { } + [Function("paused", "bool")] public class StakingPausedFunction : FunctionMessage { } @@ -107,6 +110,16 @@ public class EmergencyWithdrawFunction : FunctionMessage public string Recipient { get; set; } = string.Empty; } + [Function("rescueUntrackedToken")] + public class RescueUntrackedTokenFunction : FunctionMessage + { + [Parameter("uint256", "tokenId", 1)] + public BigInteger TokenId { get; set; } + + [Parameter("address", "recipient", 2)] + public string Recipient { get; set; } = string.Empty; + } + [Function("pause")] public class StakingPauseFunction : FunctionMessage { } @@ -120,6 +133,9 @@ public class TransferOwnershipFunction : FunctionMessage public string NewOwner { get; set; } = string.Empty; } + [Function("acceptOwnership")] + public class AcceptOwnershipFunction : FunctionMessage { } + [Function("renounceOwnership")] public class RenounceOwnershipFunction : FunctionMessage { } diff --git a/src/Tricksfor.Blockchain.Booster/README.nuget.md b/src/Tricksfor.Blockchain.Booster/README.nuget.md index 69fd697..4e3d9ba 100644 --- a/src/Tricksfor.Blockchain.Booster/README.nuget.md +++ b/src/Tricksfor.Blockchain.Booster/README.nuget.md @@ -23,7 +23,7 @@ dotnet add package Tricksfor.SmartContracts | Namespace | Contents | |---|---| -| `Tricksfor.Blockchain.Booster.Contracts.Events` | `TokenStakedEventDTO`, `TokenUnstakedEventDTO`, `EmergencyWithdrawnEventDTO` | +| `Tricksfor.Blockchain.Booster.Contracts.Events` | Preserved staking DTOs plus metadata-admin and untracked-rescue events | | `Tricksfor.Blockchain.Booster.Contracts.Functions` | Staking and NFT function message types | | `Tricksfor.Blockchain.Booster.Contracts.Deployment` | `TricksforBoosterNFTDeployment`, `TricksforBoosterStakingDeployment` | | `Tricksfor.Blockchain.Booster.Contracts.Outputs` | Output DTOs for multi-value function results | @@ -120,7 +120,10 @@ var nftDeployment = new TricksforBoosterNFTDeployment BaseUri = "https://api.tricksfor.com/metadata/", ContractMetadataUri = "https://api.tricksfor.com/contract-metadata.json", RoyaltyReceiver = royaltyWallet, - RoyaltyFeeBasisPoints = 500 // 5% (500 basis points) + RoyaltyFeeBasisPoints = 500, // 5% (500 basis points) + InitialAdmin = adminMultisig, + InitialMinter = minterWallet, + DefaultAdminDelay = 172800 }; var receipt = await web3.Eth @@ -136,7 +139,7 @@ Console.WriteLine($"NFT contract deployed at: {receipt.ContractAddress}"); | Package version | .NET | Nethereum | Solidity | |---|---|---|---| -| 1.x | net8.0 | 6.1.x | 0.8.26 | +| 2.x | net8.0 | 6.1.x | 0.8.26 | This package targets `net8.0`. It depends on `Nethereum.Web3` and `Nethereum.Contracts` (version 6.1.x). diff --git a/src/Tricksfor.Blockchain.Booster/Services/BoosterNFTService.cs b/src/Tricksfor.Blockchain.Booster/Services/BoosterNFTService.cs index ea261f0..6efd2b5 100644 --- a/src/Tricksfor.Blockchain.Booster/Services/BoosterNFTService.cs +++ b/src/Tricksfor.Blockchain.Booster/Services/BoosterNFTService.cs @@ -62,6 +62,14 @@ public Task DefaultAdminRoleQueryAsync() => _web3.Eth.GetContractQueryHandler() .QueryAsync(_contractAddress, new DefaultAdminRoleFunction()); + public Task DefaultAdminQueryAsync() + => _web3.Eth.GetContractQueryHandler() + .QueryAsync(_contractAddress, new DefaultAdminFunction()); + + public Task DefaultAdminDelayQueryAsync() + => _web3.Eth.GetContractQueryHandler() + .QueryAsync(_contractAddress, new DefaultAdminDelayFunction()); + public Task HasRoleQueryAsync(byte[] role, string account) => _web3.Eth.GetContractQueryHandler() .QueryAsync(_contractAddress, new HasRoleFunction { Role = role, Account = account }); @@ -82,6 +90,10 @@ public Task ContractUriQueryAsync() => _web3.Eth.GetContractQueryHandler() .QueryAsync(_contractAddress, new ContractUriFunction()); + public Task BaseUriQueryAsync() + => _web3.Eth.GetContractQueryHandler() + .QueryAsync(_contractAddress, new BaseUriFunction()); + public Task OwnerOfQueryAsync(BigInteger tokenId) => _web3.Eth.GetContractQueryHandler() .QueryAsync(_contractAddress, new OwnerOfFunction { TokenId = tokenId }); diff --git a/src/Tricksfor.Blockchain.Booster/Services/BoosterStakingService.cs b/src/Tricksfor.Blockchain.Booster/Services/BoosterStakingService.cs index 7c6feb2..b88b298 100644 --- a/src/Tricksfor.Blockchain.Booster/Services/BoosterStakingService.cs +++ b/src/Tricksfor.Blockchain.Booster/Services/BoosterStakingService.cs @@ -63,6 +63,10 @@ public Task OwnerQueryAsync() => _web3.Eth.GetContractQueryHandler() .QueryAsync(_contractAddress, new StakingOwnerFunction()); + public Task PendingOwnerQueryAsync() + => _web3.Eth.GetContractQueryHandler() + .QueryAsync(_contractAddress, new PendingOwnerFunction()); + public Task PausedQueryAsync() => _web3.Eth.GetContractQueryHandler() .QueryAsync(_contractAddress, new StakingPausedFunction()); @@ -138,6 +142,24 @@ public Task EmergencyWithdrawRequestAndWaitForReceiptAsync( _contractAddress, new EmergencyWithdrawFunction { TokenId = tokenId, Recipient = recipient }); + public Task RescueUntrackedTokenRequestAndWaitForReceiptAsync( + BigInteger tokenId, + string recipient) + => _web3.Eth.GetContractTransactionHandler() + .SendRequestAndWaitForReceiptAsync( + _contractAddress, + new RescueUntrackedTokenFunction { TokenId = tokenId, Recipient = recipient }); + + public Task TransferOwnershipRequestAndWaitForReceiptAsync(string newOwner) + => _web3.Eth.GetContractTransactionHandler() + .SendRequestAndWaitForReceiptAsync( + _contractAddress, + new TransferOwnershipFunction { NewOwner = newOwner }); + + public Task AcceptOwnershipRequestAndWaitForReceiptAsync() + => _web3.Eth.GetContractTransactionHandler() + .SendRequestAndWaitForReceiptAsync(_contractAddress, new AcceptOwnershipFunction()); + public Task PauseRequestAndWaitForReceiptAsync() => _web3.Eth.GetContractTransactionHandler() .SendRequestAndWaitForReceiptAsync(_contractAddress, new StakingPauseFunction()); @@ -168,6 +190,9 @@ public List> DecodeTokenUnstakedEvents(Transacti public List> DecodeEmergencyWithdrawnEvents(TransactionReceipt receipt) => receipt.DecodeAllEvents(); + public List> DecodeUntrackedTokenRescuedEvents(TransactionReceipt receipt) + => receipt.DecodeAllEvents(); + /// /// Returns a filter input for querying TokenStaked events by staker address. /// Use with block-range log queries to reconstruct staking history. diff --git a/src/Tricksfor.Blockchain.Booster/Tricksfor.Blockchain.Booster.csproj b/src/Tricksfor.Blockchain.Booster/Tricksfor.Blockchain.Booster.csproj index 0d76302..268c9ea 100644 --- a/src/Tricksfor.Blockchain.Booster/Tricksfor.Blockchain.Booster.csproj +++ b/src/Tricksfor.Blockchain.Booster/Tricksfor.Blockchain.Booster.csproj @@ -26,7 +26,7 @@ README.nuget.md - + true @@ -35,11 +35,17 @@ true $(NoWarn);1591 + true + true + true + true + + diff --git a/src/Tricksfor.Blockchain.Nethereum/Contracts/TricksforBoosterNFT/ContractDefinition/TricksforBoosterNFTAbi.cs b/src/Tricksfor.Blockchain.Nethereum/Contracts/TricksforBoosterNFT/ContractDefinition/TricksforBoosterNFTAbi.cs deleted file mode 100644 index f5a8dd5..0000000 --- a/src/Tricksfor.Blockchain.Nethereum/Contracts/TricksforBoosterNFT/ContractDefinition/TricksforBoosterNFTAbi.cs +++ /dev/null @@ -1,14 +0,0 @@ -namespace Tricksfor.Blockchain.Nethereum.Contracts.TricksforBoosterNFT.ContractDefinition -{ - /// - /// ABI and bytecode for TricksforBoosterNFT. - /// Regenerate from artifacts/contracts/TricksforBoosterNFT.sol/TricksforBoosterNFT.json - /// after any contract interface change. - /// - internal static class TricksforBoosterNFTAbi - { - public const string Abi = @"[{""inputs"":[{""internalType"":""string"",""name"":""name_"",""type"":""string""},{""internalType"":""string"",""name"":""symbol_"",""type"":""string""},{""internalType"":""string"",""name"":""baseURI_"",""type"":""string""},{""internalType"":""string"",""name"":""contractMetadataURI_"",""type"":""string""},{""internalType"":""address"",""name"":""royaltyReceiver_"",""type"":""address""},{""internalType"":""uint96"",""name"":""royaltyFeeBasisPoints_"",""type"":""uint96""}],""stateMutability"":""nonpayable"",""type"":""constructor""},{""inputs"":[],""name"":""AccessControlBadConfirmation"",""type"":""error""},{""inputs"":[{""internalType"":""address"",""name"":""account"",""type"":""address""},{""internalType"":""bytes32"",""name"":""neededRole"",""type"":""bytes32""}],""name"":""AccessControlUnauthorizedAccount"",""type"":""error""},{""inputs"":[{""internalType"":""uint256"",""name"":""numerator"",""type"":""uint256""},{""internalType"":""uint256"",""name"":""denominator"",""type"":""uint256""}],""name"":""ERC2981InvalidDefaultRoyalty"",""type"":""error""},{""inputs"":[{""internalType"":""address"",""name"":""receiver"",""type"":""address""}],""name"":""ERC2981InvalidDefaultRoyaltyReceiver"",""type"":""error""},{""inputs"":[{""internalType"":""uint256"",""name"":""tokenId"",""type"":""uint256""},{""internalType"":""uint256"",""name"":""numerator"",""type"":""uint256""},{""internalType"":""uint256"",""name"":""denominator"",""type"":""uint256""}],""name"":""ERC2981InvalidTokenRoyalty"",""type"":""error""},{""inputs"":[{""internalType"":""uint256"",""name"":""tokenId"",""type"":""uint256""},{""internalType"":""address"",""name"":""receiver"",""type"":""address""}],""name"":""ERC2981InvalidTokenRoyaltyReceiver"",""type"":""error""},{""inputs"":[{""internalType"":""address"",""name"":""sender"",""type"":""address""},{""internalType"":""uint256"",""name"":""tokenId"",""type"":""uint256""},{""internalType"":""address"",""name"":""owner"",""type"":""address""}],""name"":""ERC721IncorrectOwner"",""type"":""error""},{""inputs"":[{""internalType"":""address"",""name"":""operator"",""type"":""address""},{""internalType"":""uint256"",""name"":""tokenId"",""type"":""uint256""}],""name"":""ERC721InsufficientApproval"",""type"":""error""},{""inputs"":[{""internalType"":""address"",""name"":""approver"",""type"":""address""}],""name"":""ERC721InvalidApprover"",""type"":""error""},{""inputs"":[{""internalType"":""address"",""name"":""operator"",""type"":""address""}],""name"":""ERC721InvalidOperator"",""type"":""error""},{""inputs"":[{""internalType"":""address"",""name"":""owner"",""type"":""address""}],""name"":""ERC721InvalidOwner"",""type"":""error""},{""inputs"":[{""internalType"":""address"",""name"":""receiver"",""type"":""address""}],""name"":""ERC721InvalidReceiver"",""type"":""error""},{""inputs"":[{""internalType"":""address"",""name"":""sender"",""type"":""address""}],""name"":""ERC721InvalidSender"",""type"":""error""},{""inputs"":[{""internalType"":""uint256"",""name"":""tokenId"",""type"":""uint256""}],""name"":""ERC721NonexistentToken"",""type"":""error""},{""inputs"":[],""name"":""EnforcedPause"",""type"":""error""},{""inputs"":[],""name"":""ExpectedPause"",""type"":""error""},{""inputs"":[],""name"":""ZeroAddress"",""type"":""error""},{""anonymous"":false,""inputs"":[{""indexed"":true,""internalType"":""address"",""name"":""owner"",""type"":""address""},{""indexed"":true,""internalType"":""address"",""name"":""approved"",""type"":""address""},{""indexed"":true,""internalType"":""uint256"",""name"":""tokenId"",""type"":""uint256""}],""name"":""Approval"",""type"":""event""},{""anonymous"":false,""inputs"":[{""indexed"":true,""internalType"":""address"",""name"":""owner"",""type"":""address""},{""indexed"":true,""internalType"":""address"",""name"":""operator"",""type"":""address""},{""indexed"":false,""internalType"":""bool"",""name"":""approved"",""type"":""bool""}],""name"":""ApprovalForAll"",""type"":""event""},{""anonymous"":false,""inputs"":[{""indexed"":false,""internalType"":""address"",""name"":""account"",""type"":""address""}],""name"":""Paused"",""type"":""event""},{""anonymous"":false,""inputs"":[{""indexed"":true,""internalType"":""bytes32"",""name"":""role"",""type"":""bytes32""},{""indexed"":true,""internalType"":""bytes32"",""name"":""previousAdminRole"",""type"":""bytes32""},{""indexed"":true,""internalType"":""bytes32"",""name"":""newAdminRole"",""type"":""bytes32""}],""name"":""RoleAdminChanged"",""type"":""event""},{""anonymous"":false,""inputs"":[{""indexed"":true,""internalType"":""bytes32"",""name"":""role"",""type"":""bytes32""},{""indexed"":true,""internalType"":""address"",""name"":""account"",""type"":""address""},{""indexed"":true,""internalType"":""address"",""name"":""sender"",""type"":""address""}],""name"":""RoleGranted"",""type"":""event""},{""anonymous"":false,""inputs"":[{""indexed"":true,""internalType"":""bytes32"",""name"":""role"",""type"":""bytes32""},{""indexed"":true,""internalType"":""address"",""name"":""account"",""type"":""address""},{""indexed"":true,""internalType"":""address"",""name"":""sender"",""type"":""address""}],""name"":""RoleRevoked"",""type"":""event""},{""anonymous"":false,""inputs"":[{""indexed"":true,""internalType"":""address"",""name"":""from"",""type"":""address""},{""indexed"":true,""internalType"":""address"",""name"":""to"",""type"":""address""},{""indexed"":true,""internalType"":""uint256"",""name"":""tokenId"",""type"":""uint256""}],""name"":""Transfer"",""type"":""event""},{""anonymous"":false,""inputs"":[{""indexed"":false,""internalType"":""address"",""name"":""account"",""type"":""address""}],""name"":""Unpaused"",""type"":""event""},{""inputs"":[],""name"":""DEFAULT_ADMIN_ROLE"",""outputs"":[{""internalType"":""bytes32"",""name"":"""",""type"":""bytes32""}],""stateMutability"":""view"",""type"":""function""},{""inputs"":[],""name"":""MINTER_ROLE"",""outputs"":[{""internalType"":""bytes32"",""name"":"""",""type"":""bytes32""}],""stateMutability"":""view"",""type"":""function""},{""inputs"":[{""internalType"":""address"",""name"":""to"",""type"":""address""},{""internalType"":""uint256"",""name"":""tokenId"",""type"":""uint256""}],""name"":""approve"",""outputs"":[],""stateMutability"":""nonpayable"",""type"":""function""},{""inputs"":[{""internalType"":""address"",""name"":""owner"",""type"":""address""}],""name"":""balanceOf"",""outputs"":[{""internalType"":""uint256"",""name"":"""",""type"":""uint256""}],""stateMutability"":""view"",""type"":""function""},{""inputs"":[],""name"":""contractURI"",""outputs"":[{""internalType"":""string"",""name"":"""",""type"":""string""}],""stateMutability"":""view"",""type"":""function""},{""inputs"":[{""internalType"":""uint256"",""name"":""tokenId"",""type"":""uint256""}],""name"":""getApproved"",""outputs"":[{""internalType"":""address"",""name"":"""",""type"":""address""}],""stateMutability"":""view"",""type"":""function""},{""inputs"":[{""internalType"":""bytes32"",""name"":""role"",""type"":""bytes32""}],""name"":""getRoleAdmin"",""outputs"":[{""internalType"":""bytes32"",""name"":"""",""type"":""bytes32""}],""stateMutability"":""view"",""type"":""function""},{""inputs"":[{""internalType"":""bytes32"",""name"":""role"",""type"":""bytes32""},{""internalType"":""address"",""name"":""account"",""type"":""address""}],""name"":""grantRole"",""outputs"":[],""stateMutability"":""nonpayable"",""type"":""function""},{""inputs"":[{""internalType"":""bytes32"",""name"":""role"",""type"":""bytes32""},{""internalType"":""address"",""name"":""account"",""type"":""address""}],""name"":""hasRole"",""outputs"":[{""internalType"":""bool"",""name"":"""",""type"":""bool""}],""stateMutability"":""view"",""type"":""function""},{""inputs"":[{""internalType"":""address"",""name"":""owner"",""type"":""address""},{""internalType"":""address"",""name"":""operator"",""type"":""address""}],""name"":""isApprovedForAll"",""outputs"":[{""internalType"":""bool"",""name"":"""",""type"":""bool""}],""stateMutability"":""view"",""type"":""function""},{""inputs"":[],""name"":""name"",""outputs"":[{""internalType"":""string"",""name"":"""",""type"":""string""}],""stateMutability"":""view"",""type"":""function""},{""inputs"":[{""internalType"":""uint256"",""name"":""tokenId"",""type"":""uint256""}],""name"":""ownerOf"",""outputs"":[{""internalType"":""address"",""name"":"""",""type"":""address""}],""stateMutability"":""view"",""type"":""function""},{""inputs"":[],""name"":""pause"",""outputs"":[],""stateMutability"":""nonpayable"",""type"":""function""},{""inputs"":[],""name"":""paused"",""outputs"":[{""internalType"":""bool"",""name"":"""",""type"":""bool""}],""stateMutability"":""view"",""type"":""function""},{""inputs"":[{""internalType"":""bytes32"",""name"":""role"",""type"":""bytes32""},{""internalType"":""address"",""name"":""callerConfirmation"",""type"":""address""}],""name"":""renounceRole"",""outputs"":[],""stateMutability"":""nonpayable"",""type"":""function""},{""inputs"":[{""internalType"":""bytes32"",""name"":""role"",""type"":""bytes32""},{""internalType"":""address"",""name"":""account"",""type"":""address""}],""name"":""revokeRole"",""outputs"":[],""stateMutability"":""nonpayable"",""type"":""function""},{""inputs"":[{""internalType"":""uint256"",""name"":""tokenId"",""type"":""uint256""},{""internalType"":""uint256"",""name"":""salePrice"",""type"":""uint256""}],""name"":""royaltyInfo"",""outputs"":[{""internalType"":""address"",""name"":""receiver"",""type"":""address""},{""internalType"":""uint256"",""name"":""amount"",""type"":""uint256""}],""stateMutability"":""view"",""type"":""function""},{""inputs"":[{""internalType"":""address"",""name"":""to"",""type"":""address""},{""internalType"":""uint256"",""name"":""tokenId"",""type"":""uint256""}],""name"":""safeMint"",""outputs"":[],""stateMutability"":""nonpayable"",""type"":""function""},{""inputs"":[{""internalType"":""address"",""name"":""from"",""type"":""address""},{""internalType"":""address"",""name"":""to"",""type"":""address""},{""internalType"":""uint256"",""name"":""tokenId"",""type"":""uint256""}],""name"":""safeTransferFrom"",""outputs"":[],""stateMutability"":""nonpayable"",""type"":""function""},{""inputs"":[{""internalType"":""address"",""name"":""from"",""type"":""address""},{""internalType"":""address"",""name"":""to"",""type"":""address""},{""internalType"":""uint256"",""name"":""tokenId"",""type"":""uint256""},{""internalType"":""bytes"",""name"":""data"",""type"":""bytes""}],""name"":""safeTransferFrom"",""outputs"":[],""stateMutability"":""nonpayable"",""type"":""function""},{""inputs"":[{""internalType"":""address"",""name"":""operator"",""type"":""address""},{""internalType"":""bool"",""name"":""approved"",""type"":""bool""}],""name"":""setApprovalForAll"",""outputs"":[],""stateMutability"":""nonpayable"",""type"":""function""},{""inputs"":[{""internalType"":""string"",""name"":""baseURI_"",""type"":""string""}],""name"":""setBaseURI"",""outputs"":[],""stateMutability"":""nonpayable"",""type"":""function""},{""inputs"":[{""internalType"":""string"",""name"":""contractMetadataURI_"",""type"":""string""}],""name"":""setContractURI"",""outputs"":[],""stateMutability"":""nonpayable"",""type"":""function""},{""inputs"":[{""internalType"":""address"",""name"":""receiver"",""type"":""address""},{""internalType"":""uint96"",""name"":""feeBasisPoints"",""type"":""uint96""}],""name"":""setRoyaltyInfo"",""outputs"":[],""stateMutability"":""nonpayable"",""type"":""function""},{""inputs"":[{""internalType"":""bytes4"",""name"":""interfaceId"",""type"":""bytes4""}],""name"":""supportsInterface"",""outputs"":[{""internalType"":""bool"",""name"":"""",""type"":""bool""}],""stateMutability"":""view"",""type"":""function""},{""inputs"":[],""name"":""symbol"",""outputs"":[{""internalType"":""string"",""name"":"""",""type"":""string""}],""stateMutability"":""view"",""type"":""function""},{""inputs"":[{""internalType"":""uint256"",""name"":""tokenId"",""type"":""uint256""}],""name"":""tokenURI"",""outputs"":[{""internalType"":""string"",""name"":"""",""type"":""string""}],""stateMutability"":""view"",""type"":""function""},{""inputs"":[{""internalType"":""address"",""name"":""from"",""type"":""address""},{""internalType"":""address"",""name"":""to"",""type"":""address""},{""internalType"":""uint256"",""name"":""tokenId"",""type"":""uint256""}],""name"":""transferFrom"",""outputs"":[],""stateMutability"":""nonpayable"",""type"":""function""},{""inputs"":[],""name"":""unpause"",""outputs"":[],""stateMutability"":""nonpayable"",""type"":""function""}]"; - - public const string Bytecode = "0x608060405234801561000f575f80fd5b50604051611d96380380611d9683398101604081905261002e916102f9565b85855f61003b8382610457565b5060016100488282610457565b5050506001600160a01b0382166100725760405163d92e233d60e01b815260040160405180910390fd5b600a61007e8582610457565b50600b61008b8482610457565b5061009682826100d7565b6100a05f3361017e565b506100cb7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a63361017e565b50505050505050610511565b6127106001600160601b03821681101561011b57604051636f483d0960e01b81526001600160601b0383166004820152602481018290526044015b60405180910390fd5b6001600160a01b03831661014457604051635b6cc80560e11b81525f6004820152602401610112565b50604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600655565b5f8281526008602090815260408083206001600160a01b038516845290915281205460ff16610222575f8381526008602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101da3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610225565b505f5b92915050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f83011261024e575f80fd5b81516001600160401b038111156102675761026761022b565b604051601f8201601f19908116603f011681016001600160401b03811182821017156102955761029561022b565b6040528181528382016020018510156102ac575f80fd5b8160208501602083015e5f918101602001919091529392505050565b80516001600160a01b03811681146102de575f80fd5b919050565b80516001600160601b03811681146102de575f80fd5b5f805f805f8060c0878903121561030e575f80fd5b86516001600160401b03811115610323575f80fd5b61032f89828a0161023f565b602089015190975090506001600160401b0381111561034c575f80fd5b61035889828a0161023f565b604089015190965090506001600160401b03811115610375575f80fd5b61038189828a0161023f565b606089015190955090506001600160401b0381111561039e575f80fd5b6103aa89828a0161023f565b9350506103b9608088016102c8565b91506103c760a088016102e3565b90509295509295509295565b600181811c908216806103e757607f821691505b60208210810361040557634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561045257805f5260205f20601f840160051c810160208510156104305750805b601f840160051c820191505b8181101561044f575f815560010161043c565b50505b505050565b81516001600160401b038111156104705761047061022b565b6104848161047e84546103d3565b8461040b565b6020601f8211600181146104b6575f831561049f5750848201515b5f19600385901b1c1916600184901b17845561044f565b5f84815260208120601f198516915b828110156104e557878501518255602094850194600190920191016104c5565b508482101561050257868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b6118788061051e5f395ff3fe608060405234801561000f575f80fd5b50600436106101c6575f3560e01c80636352211e116100fe578063a217fddf1161009e578063d53913931161006e578063d5391393146103dd578063d547741f14610404578063e8a3d48514610417578063e985e9c51461041f575f80fd5b8063a217fddf1461039d578063a22cb465146103a4578063b88d4fde146103b7578063c87b56dd146103ca575f80fd5b806391d14854116100d957806391d148541461035c578063938e3d7b1461036f57806395d89b4114610382578063a14481941461038a575f80fd5b80636352211e1461032e57806370a08231146103415780638456cb5914610354575f80fd5b80632a55205a116101695780633f4ba83a116101445780633f4ba83a146102f557806342842e0e146102fd57806355f804b3146103105780635c975abb14610323575f80fd5b80632a55205a1461029d5780632f2ff15d146102cf57806336568abe146102e2575f80fd5b8063081812fc116101a4578063081812fc1461021c578063095ea7b31461024757806323b872dd1461025a578063248a9ca31461026d575f80fd5b806301ffc9a7146101ca57806302fa7c47146101f257806306fdde0314610207575b5f80fd5b6101dd6101d8366004611301565b610432565b60405190151581526020015b60405180910390f35b610205610200366004611337565b610442565b005b61020f61045b565b6040516101e991906113a5565b61022f61022a3660046113b7565b6104ea565b6040516001600160a01b0390911681526020016101e9565b6102056102553660046113ce565b610511565b6102056102683660046113f6565b610520565b61028f61027b3660046113b7565b5f9081526008602052604090206001015490565b6040519081526020016101e9565b6102b06102ab366004611430565b6105ae565b604080516001600160a01b0390931683526020830191909152016101e9565b6102056102dd366004611450565b610631565b6102056102f0366004611450565b610655565b610205610688565b61020561030b3660046113f6565b61069d565b61020561031e36600461147a565b6106b7565b60095460ff166101dd565b61022f61033c3660046113b7565b6106ce565b61028f61034f3660046114e8565b6106d8565b61020561071d565b6101dd61036a366004611450565b61072f565b61020561037d36600461147a565b610759565b61020f610770565b6102056103983660046113ce565b61077f565b61028f5f81565b6102056103b2366004611501565b6107bb565b6102056103c5366004611543565b6107c6565b61020f6103d83660046113b7565b6107de565b61028f7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b610205610412366004611450565b610843565b61020f610867565b6101dd61042d366004611620565b610876565b5f61043c826108a3565b92915050565b5f61044c816108c7565b61045683836108d1565b505050565b60605f805461046990611648565b80601f016020809104026020016040519081016040528092919081815260200182805461049590611648565b80156104e05780601f106104b7576101008083540402835291602001916104e0565b820191905f5260205f20905b8154815290600101906020018083116104c357829003601f168201915b5050505050905090565b5f6104f482610973565b505f828152600460205260409020546001600160a01b031661043c565b61051c8282336109ab565b5050565b6001600160a01b03821661054e57604051633250574960e11b81525f60048201526024015b60405180910390fd5b5f61055a8383336109b8565b9050836001600160a01b0316816001600160a01b0316146105a8576040516364283d7b60e01b81526001600160a01b0380861660048301526024820184905282166044820152606401610545565b50505050565b5f82815260076020526040812080548291906001600160a01b03811690600160a01b90046001600160601b0316816106015750506006546001600160a01b03811690600160a01b90046001600160601b03165b5f6127106106186001600160601b03841689611680565b61062291906116a3565b92989297509195505050505050565b5f8281526008602052604090206001015461064b816108c7565b6105a88383610aaa565b6001600160a01b038116331461067e5760405163334bd91960e11b815260040160405180910390fd5b6104568282610b3b565b5f610692816108c7565b61069a610ba6565b50565b61045683838360405180602001604052805f8152506107c6565b5f6106c1816108c7565b600a6105a8838583611706565b5f61043c82610973565b5f6001600160a01b038216610702576040516322718ad960e21b81525f6004820152602401610545565b506001600160a01b03165f9081526003602052604090205490565b5f610727816108c7565b61069a610bf8565b5f9182526008602090815260408084206001600160a01b0393909316845291905290205460ff1690565b5f610763816108c7565b600b6105a8838583611706565b60606001805461046990611648565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a66107a9816108c7565b6107b1610c35565b6104568383610c5b565b61051c338383610c74565b6107d1848484610520565b6105a83385858585610d3b565b60606107e982610973565b505f6107f3610e63565b90505f8151116108115760405180602001604052805f81525061083c565b8061081b84610e72565b60405160200161082c9291906117d7565b6040516020818303038152906040525b9392505050565b5f8281526008602052604090206001015461085d816108c7565b6105a88383610b3b565b6060600b805461046990611648565b6001600160a01b039182165f90815260056020908152604080832093909416825291909152205460ff1690565b5f6001600160e01b03198216637965db0b60e01b148061043c575061043c82610f02565b61069a8133610f26565b6127106001600160601b03821681101561091057604051636f483d0960e01b81526001600160601b038316600482015260248101829052604401610545565b6001600160a01b03831661093957604051635b6cc80560e11b81525f6004820152602401610545565b50604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600655565b5f818152600260205260408120546001600160a01b03168061043c57604051637e27328960e01b815260048101849052602401610545565b6104568383836001610f5f565b5f828152600260205260408120546001600160a01b03908116908316156109e4576109e4818486611063565b6001600160a01b03811615610a1e576109ff5f855f80610f5f565b6001600160a01b0381165f90815260036020526040902080545f190190555b6001600160a01b03851615610a4c576001600160a01b0385165f908152600360205260409020805460010190555b5f8481526002602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b5f610ab5838361072f565b610b34575f8381526008602090815260408083206001600160a01b03861684529091529020805460ff19166001179055610aec3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161043c565b505f61043c565b5f610b46838361072f565b15610b34575f8381526008602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161043c565b610bae6110c7565b6009805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b610c00610c35565b6009805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610bdb3390565b60095460ff1615610c595760405163d93c066560e01b815260040160405180910390fd5b565b61051c828260405180602001604052805f8152506110ea565b6001600160a01b038316610c9d5760405163a9fbf51f60e01b81525f6004820152602401610545565b6001600160a01b038216610ccf57604051630b61174360e31b81526001600160a01b0383166004820152602401610545565b6001600160a01b038381165f81815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383163b15610e5c57604051630a85bd0160e11b81526001600160a01b0384169063150b7a0290610d7d9088908890879087906004016117eb565b6020604051808303815f875af1925050508015610db7575060408051601f3d908101601f19168201909252610db491810190611827565b60015b610e1e573d808015610de4576040519150601f19603f3d011682016040523d82523d5f602084013e610de9565b606091505b5080515f03610e1657604051633250574960e11b81526001600160a01b0385166004820152602401610545565b805160208201fd5b6001600160e01b03198116630a85bd0160e11b14610e5a57604051633250574960e11b81526001600160a01b0385166004820152602401610545565b505b5050505050565b6060600a805461046990611648565b60605f610e7e83611101565b60010190505f8167ffffffffffffffff811115610e9d57610e9d61152f565b6040519080825280601f01601f191660200182016040528015610ec7576020820181803683370190505b5090508181016020015b5f19016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084610ed157509392505050565b5f6001600160e01b0319821663152a902d60e11b148061043c575061043c826111d8565b610f30828261072f565b61051c5760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610545565b8080610f7357506001600160a01b03821615155b15611034575f610f8284610973565b90506001600160a01b03831615801590610fae5750826001600160a01b0316816001600160a01b031614155b8015610fc15750610fbf8184610876565b155b15610fea5760405163a9fbf51f60e01b81526001600160a01b0384166004820152602401610545565b81156110325783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b50505f90815260046020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b61106e838383611227565b610456576001600160a01b03831661109c57604051637e27328960e01b815260048101829052602401610545565b60405163177e802f60e01b81526001600160a01b038316600482015260248101829052604401610545565b60095460ff16610c5957604051638dfc202b60e01b815260040160405180910390fd5b6110f4838361128b565b610456335f858585610d3b565b5f8072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b831061113f5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef8100000000831061116b576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061118957662386f26fc10000830492506010015b6305f5e10083106111a1576305f5e100830492506008015b61271083106111b557612710830492506004015b606483106111c7576064830492506002015b600a831061043c5760010192915050565b5f6001600160e01b031982166380ac58cd60e01b148061120857506001600160e01b03198216635b5e139f60e01b145b8061043c57506301ffc9a760e01b6001600160e01b031983161461043c565b5f6001600160a01b038316158015906112835750826001600160a01b0316846001600160a01b0316148061126057506112608484610876565b8061128357505f828152600460205260409020546001600160a01b038481169116145b949350505050565b6001600160a01b0382166112b457604051633250574960e11b81525f6004820152602401610545565b5f6112c083835f6109b8565b90506001600160a01b03811615610456576040516339e3563760e11b81525f6004820152602401610545565b6001600160e01b03198116811461069a575f80fd5b5f60208284031215611311575f80fd5b813561083c816112ec565b80356001600160a01b0381168114611332575f80fd5b919050565b5f8060408385031215611348575f80fd5b6113518361131c565b915060208301356001600160601b038116811461136c575f80fd5b809150509250929050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f61083c6020830184611377565b5f602082840312156113c7575f80fd5b5035919050565b5f80604083850312156113df575f80fd5b6113e88361131c565b946020939093013593505050565b5f805f60608486031215611408575f80fd5b6114118461131c565b925061141f6020850161131c565b929592945050506040919091013590565b5f8060408385031215611441575f80fd5b50508035926020909101359150565b5f8060408385031215611461575f80fd5b823591506114716020840161131c565b90509250929050565b5f806020838503121561148b575f80fd5b823567ffffffffffffffff8111156114a1575f80fd5b8301601f810185136114b1575f80fd5b803567ffffffffffffffff8111156114c7575f80fd5b8560208284010111156114d8575f80fd5b6020919091019590945092505050565b5f602082840312156114f8575f80fd5b61083c8261131c565b5f8060408385031215611512575f80fd5b61151b8361131c565b91506020830135801515811461136c575f80fd5b634e487b7160e01b5f52604160045260245ffd5b5f805f8060808587031215611556575f80fd5b61155f8561131c565b935061156d6020860161131c565b925060408501359150606085013567ffffffffffffffff81111561158f575f80fd5b8501601f8101871361159f575f80fd5b803567ffffffffffffffff8111156115b9576115b961152f565b604051601f8201601f19908116603f0116810167ffffffffffffffff811182821017156115e8576115e861152f565b6040528181528282016020018910156115ff575f80fd5b816020840160208301375f6020838301015280935050505092959194509250565b5f8060408385031215611631575f80fd5b61163a8361131c565b91506114716020840161131c565b600181811c9082168061165c57607f821691505b60208210810361167a57634e487b7160e01b5f52602260045260245ffd5b50919050565b808202811582820484141761043c57634e487b7160e01b5f52601160045260245ffd5b5f826116bd57634e487b7160e01b5f52601260045260245ffd5b500490565b601f82111561045657805f5260205f20601f840160051c810160208510156116e75750805b601f840160051c820191505b81811015610e5c575f81556001016116f3565b67ffffffffffffffff83111561171e5761171e61152f565b6117328361172c8354611648565b836116c2565b5f601f841160018114611763575f851561174c5750838201355b5f19600387901b1c1916600186901b178355610e5c565b5f83815260208120601f198716915b828110156117925786850135825560209485019460019092019101611772565b50868210156117ae575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b5f81518060208401855e5f93019283525090919050565b5f6112836117e583866117c0565b846117c0565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f9061181d90830184611377565b9695505050505050565b5f60208284031215611837575f80fd5b815161083c816112ec56fea26469706673582212201ad3817d5d0d33db414b9711e1f509ee769c7580e5821f120130b4579289695e64736f6c634300081a0033"; - } -} diff --git a/src/Tricksfor.Blockchain.Nethereum/Contracts/TricksforBoosterNFT/ContractDefinition/TricksforBoosterNFTDefinition.cs b/src/Tricksfor.Blockchain.Nethereum/Contracts/TricksforBoosterNFT/ContractDefinition/TricksforBoosterNFTDefinition.cs deleted file mode 100644 index a9c449b..0000000 --- a/src/Tricksfor.Blockchain.Nethereum/Contracts/TricksforBoosterNFT/ContractDefinition/TricksforBoosterNFTDefinition.cs +++ /dev/null @@ -1,277 +0,0 @@ -using System.Numerics; -using Nethereum.ABI.FunctionEncoding.Attributes; -using Nethereum.Contracts; - -namespace Tricksfor.Blockchain.Nethereum.Contracts.TricksforBoosterNFT.ContractDefinition -{ - /// - /// Deployment message for TricksforBoosterNFT. - /// Constructor parameters must match the Solidity constructor exactly. - /// - public class TricksforBoosterNFTDeployment : ContractDeploymentMessage - { - public static string ABI => TricksforBoosterNFTAbi.Abi; - - public TricksforBoosterNFTDeployment() : base(TricksforBoosterNFTAbi.Bytecode) { } - - [Parameter("string", "name_", 1)] - public string Name { get; set; } = string.Empty; - - [Parameter("string", "symbol_", 2)] - public string Symbol { get; set; } = string.Empty; - - [Parameter("string", "baseURI_", 3)] - public string BaseUri { get; set; } = string.Empty; - - [Parameter("string", "contractMetadataURI_", 4)] - public string ContractMetadataUri { get; set; } = string.Empty; - - [Parameter("address", "royaltyReceiver_", 5)] - public string RoyaltyReceiver { get; set; } = string.Empty; - - /// - /// Royalty fee in basis points (10 000 = 100%). - /// - [Parameter("uint96", "royaltyFeeBasisPoints_", 6)] - public BigInteger RoyaltyFeeBasisPoints { get; set; } - } - - // ------------------------------------------------------------------------- - // Read (view/pure) function messages - // ------------------------------------------------------------------------- - - [Function("name", "string")] - public class NameFunction : FunctionMessage { } - - [Function("symbol", "string")] - public class SymbolFunction : FunctionMessage { } - - [Function("MINTER_ROLE", "bytes32")] - public class MinterRoleFunction : FunctionMessage { } - - [Function("DEFAULT_ADMIN_ROLE", "bytes32")] - public class DefaultAdminRoleFunction : FunctionMessage { } - - [Function("hasRole", "bool")] - public class HasRoleFunction : FunctionMessage - { - [Parameter("bytes32", "role", 1)] - public byte[] Role { get; set; } = Array.Empty(); - - [Parameter("address", "account", 2)] - public string Account { get; set; } = string.Empty; - } - - [Function("getRoleAdmin", "bytes32")] - public class GetRoleAdminFunction : FunctionMessage - { - [Parameter("bytes32", "role", 1)] - public byte[] Role { get; set; } = Array.Empty(); - } - - [Function("paused", "bool")] - public class PausedFunction : FunctionMessage { } - - [Function("tokenURI", "string")] - public class TokenUriFunction : FunctionMessage - { - [Parameter("uint256", "tokenId", 1)] - public BigInteger TokenId { get; set; } - } - - [Function("contractURI", "string")] - public class ContractUriFunction : FunctionMessage { } - - [Function("ownerOf", "address")] - public class OwnerOfFunction : FunctionMessage - { - [Parameter("uint256", "tokenId", 1)] - public BigInteger TokenId { get; set; } - } - - [Function("balanceOf", "uint256")] - public class BalanceOfFunction : FunctionMessage - { - [Parameter("address", "owner", 1)] - public string Owner { get; set; } = string.Empty; - } - - [Function("getApproved", "address")] - public class GetApprovedFunction : FunctionMessage - { - [Parameter("uint256", "tokenId", 1)] - public BigInteger TokenId { get; set; } - } - - [Function("isApprovedForAll", "bool")] - public class IsApprovedForAllFunction : FunctionMessage - { - [Parameter("address", "owner", 1)] - public string Owner { get; set; } = string.Empty; - - [Parameter("address", "operator", 2)] - public string Operator { get; set; } = string.Empty; - } - - [Function("royaltyInfo")] - public class RoyaltyInfoFunction : FunctionMessage - { - [Parameter("uint256", "tokenId", 1)] - public BigInteger TokenId { get; set; } - - [Parameter("uint256", "salePrice", 2)] - public BigInteger SalePrice { get; set; } - } - - [Function("supportsInterface", "bool")] - public class SupportsInterfaceFunction : FunctionMessage - { - [Parameter("bytes4", "interfaceId", 1)] - public byte[] InterfaceId { get; set; } = Array.Empty(); - } - - // ------------------------------------------------------------------------- - // Write (transaction) function messages - // ------------------------------------------------------------------------- - - [Function("safeMint")] - public class SafeMintFunction : FunctionMessage - { - [Parameter("address", "to", 1)] - public string To { get; set; } = string.Empty; - - [Parameter("uint256", "tokenId", 2)] - public BigInteger TokenId { get; set; } - } - - [Function("approve")] - public class ApproveFunction : FunctionMessage - { - [Parameter("address", "to", 1)] - public string To { get; set; } = string.Empty; - - [Parameter("uint256", "tokenId", 2)] - public BigInteger TokenId { get; set; } - } - - [Function("setApprovalForAll")] - public class SetApprovalForAllFunction : FunctionMessage - { - [Parameter("address", "operator", 1)] - public string Operator { get; set; } = string.Empty; - - [Parameter("bool", "approved", 2)] - public bool Approved { get; set; } - } - - [Function("transferFrom")] - public class TransferFromFunction : FunctionMessage - { - [Parameter("address", "from", 1)] - public string From { get; set; } = string.Empty; - - [Parameter("address", "to", 2)] - public string To { get; set; } = string.Empty; - - [Parameter("uint256", "tokenId", 3)] - public BigInteger TokenId { get; set; } - } - - [Function("safeTransferFrom")] - public class SafeTransferFromFunction : FunctionMessage - { - [Parameter("address", "from", 1)] - public string From { get; set; } = string.Empty; - - [Parameter("address", "to", 2)] - public string To { get; set; } = string.Empty; - - [Parameter("uint256", "tokenId", 3)] - public BigInteger TokenId { get; set; } - } - - [Function("setBaseURI")] - public class SetBaseUriFunction : FunctionMessage - { - [Parameter("string", "baseURI_", 1)] - public string BaseUri { get; set; } = string.Empty; - } - - [Function("setContractURI")] - public class SetContractUriFunction : FunctionMessage - { - [Parameter("string", "contractMetadataURI_", 1)] - public string ContractMetadataUri { get; set; } = string.Empty; - } - - [Function("setRoyaltyInfo")] - public class SetRoyaltyInfoFunction : FunctionMessage - { - [Parameter("address", "receiver", 1)] - public string Receiver { get; set; } = string.Empty; - - /// - /// Royalty fee in basis points (10 000 = 100%). - /// - [Parameter("uint96", "feeBasisPoints", 2)] - public BigInteger FeeBasisPoints { get; set; } - } - - [Function("grantRole")] - public class GrantRoleFunction : FunctionMessage - { - [Parameter("bytes32", "role", 1)] - public byte[] Role { get; set; } = Array.Empty(); - - [Parameter("address", "account", 2)] - public string Account { get; set; } = string.Empty; - } - - [Function("revokeRole")] - public class RevokeRoleFunction : FunctionMessage - { - [Parameter("bytes32", "role", 1)] - public byte[] Role { get; set; } = Array.Empty(); - - [Parameter("address", "account", 2)] - public string Account { get; set; } = string.Empty; - } - - [Function("renounceRole")] - /// - /// DTO for OpenZeppelin AccessControl.renounceRole. - /// - public class RenounceRoleFunction : FunctionMessage - { - [Parameter("bytes32", "role", 1)] - public byte[] Role { get; set; } = Array.Empty(); - - /// - /// Solidity callerConfirmation argument for renounceRole. - /// Must be the same address as the transaction sender; otherwise the - /// contract call reverts with AccessControlBadConfirmation. - /// - [Parameter("address", "callerConfirmation", 2)] - public string CallerConfirmation { get; set; } = string.Empty; - } - - [Function("pause")] - public class PauseFunction : FunctionMessage { } - - [Function("unpause")] - public class UnpauseFunction : FunctionMessage { } - - // ------------------------------------------------------------------------- - // Output DTOs - // ------------------------------------------------------------------------- - - [FunctionOutput] - public class RoyaltyInfoOutputDTO : IFunctionOutputDTO - { - [Parameter("address", "receiver", 1)] - public string Receiver { get; set; } = string.Empty; - - [Parameter("uint256", "royaltyAmount", 2)] - public BigInteger RoyaltyAmount { get; set; } - } -} diff --git a/src/Tricksfor.Blockchain.Nethereum/Contracts/TricksforBoosterNFT/TricksforBoosterNFTService.cs b/src/Tricksfor.Blockchain.Nethereum/Contracts/TricksforBoosterNFT/TricksforBoosterNFTService.cs deleted file mode 100644 index f1de44c..0000000 --- a/src/Tricksfor.Blockchain.Nethereum/Contracts/TricksforBoosterNFT/TricksforBoosterNFTService.cs +++ /dev/null @@ -1,175 +0,0 @@ -using System.Numerics; -using Nethereum.Contracts; -using Nethereum.Contracts.ContractHandlers; -using Nethereum.RPC.Eth.DTOs; -using Nethereum.Web3; -using Tricksfor.Blockchain.Nethereum.Contracts.TricksforBoosterNFT.ContractDefinition; - -namespace Tricksfor.Blockchain.Nethereum.Contracts.TricksforBoosterNFT -{ - /// - /// Typed service for interacting with the TricksforBoosterNFT contract. - /// All calls use typed function message classes — no raw ABI string decoding. - /// - public class TricksforBoosterNFTService - { - private readonly IWeb3 _web3; - private readonly string _contractAddress; - - public TricksforBoosterNFTService(IWeb3 web3, string contractAddress) - { - _web3 = web3; - _contractAddress = contractAddress; - } - - public IContractQueryHandler GetContractQueryHandler() - where TFunction : FunctionMessage, new() - => _web3.Eth.GetContractQueryHandler(); - - public IContractTransactionHandler GetContractTransactionHandler() - where TFunction : FunctionMessage, new() - => _web3.Eth.GetContractTransactionHandler(); - - // ------------------------------------------------------------------------- - // Deployment - // ------------------------------------------------------------------------- - - public static Task DeployContractAndWaitForReceiptAsync( - IWeb3 web3, - TricksforBoosterNFTDeployment deployment) - => web3.Eth.GetContractDeploymentHandler() - .SendRequestAndWaitForReceiptAsync(deployment); - - // ------------------------------------------------------------------------- - // Read functions - // ------------------------------------------------------------------------- - - public Task NameQueryAsync() - => _web3.Eth.GetContractQueryHandler() - .QueryAsync(_contractAddress, new NameFunction()); - - public Task SymbolQueryAsync() - => _web3.Eth.GetContractQueryHandler() - .QueryAsync(_contractAddress, new SymbolFunction()); - - public Task MinterRoleQueryAsync() - => _web3.Eth.GetContractQueryHandler() - .QueryAsync(_contractAddress, new MinterRoleFunction()); - - public Task DefaultAdminRoleQueryAsync() - => _web3.Eth.GetContractQueryHandler() - .QueryAsync(_contractAddress, new DefaultAdminRoleFunction()); - - public Task HasRoleQueryAsync(byte[] role, string account) - => _web3.Eth.GetContractQueryHandler() - .QueryAsync(_contractAddress, new HasRoleFunction { Role = role, Account = account }); - - public Task GetRoleAdminQueryAsync(byte[] role) - => _web3.Eth.GetContractQueryHandler() - .QueryAsync(_contractAddress, new GetRoleAdminFunction { Role = role }); - - public Task PausedQueryAsync() - => _web3.Eth.GetContractQueryHandler() - .QueryAsync(_contractAddress, new PausedFunction()); - - public Task TokenUriQueryAsync(BigInteger tokenId) - => _web3.Eth.GetContractQueryHandler() - .QueryAsync(_contractAddress, new TokenUriFunction { TokenId = tokenId }); - - public Task ContractUriQueryAsync() - => _web3.Eth.GetContractQueryHandler() - .QueryAsync(_contractAddress, new ContractUriFunction()); - - public Task OwnerOfQueryAsync(BigInteger tokenId) - => _web3.Eth.GetContractQueryHandler() - .QueryAsync(_contractAddress, new OwnerOfFunction { TokenId = tokenId }); - - public Task BalanceOfQueryAsync(string ownerAddress) - => _web3.Eth.GetContractQueryHandler() - .QueryAsync(_contractAddress, new BalanceOfFunction { Owner = ownerAddress }); - - public Task RoyaltyInfoQueryAsync(BigInteger tokenId, BigInteger salePrice) - => _web3.Eth.GetContractQueryHandler() - .QueryDeserializingToObjectAsync( - new RoyaltyInfoFunction { TokenId = tokenId, SalePrice = salePrice }, - _contractAddress); - - public Task SupportsInterfaceQueryAsync(byte[] interfaceId) - => _web3.Eth.GetContractQueryHandler() - .QueryAsync(_contractAddress, new SupportsInterfaceFunction { InterfaceId = interfaceId }); - - // ------------------------------------------------------------------------- - // Write functions - // ------------------------------------------------------------------------- - - public Task SafeMintRequestAndWaitForReceiptAsync(string toAddress, BigInteger tokenId) - => _web3.Eth.GetContractTransactionHandler() - .SendRequestAndWaitForReceiptAsync( - _contractAddress, - new SafeMintFunction { To = toAddress, TokenId = tokenId }); - - public Task ApproveRequestAndWaitForReceiptAsync(string toAddress, BigInteger tokenId) - => _web3.Eth.GetContractTransactionHandler() - .SendRequestAndWaitForReceiptAsync( - _contractAddress, - new ApproveFunction { To = toAddress, TokenId = tokenId }); - - public Task SetApprovalForAllRequestAndWaitForReceiptAsync(string operatorAddress, bool approved) - => _web3.Eth.GetContractTransactionHandler() - .SendRequestAndWaitForReceiptAsync( - _contractAddress, - new SetApprovalForAllFunction { Operator = operatorAddress, Approved = approved }); - - public Task SetBaseUriRequestAndWaitForReceiptAsync(string baseUri) - => _web3.Eth.GetContractTransactionHandler() - .SendRequestAndWaitForReceiptAsync( - _contractAddress, - new SetBaseUriFunction { BaseUri = baseUri }); - - public Task SetContractUriRequestAndWaitForReceiptAsync(string contractMetadataUri) - => _web3.Eth.GetContractTransactionHandler() - .SendRequestAndWaitForReceiptAsync( - _contractAddress, - new SetContractUriFunction { ContractMetadataUri = contractMetadataUri }); - - public Task SetRoyaltyInfoRequestAndWaitForReceiptAsync(string receiver, BigInteger feeBasisPoints) - => _web3.Eth.GetContractTransactionHandler() - .SendRequestAndWaitForReceiptAsync( - _contractAddress, - new SetRoyaltyInfoFunction { Receiver = receiver, FeeBasisPoints = feeBasisPoints }); - - public Task GrantRoleRequestAndWaitForReceiptAsync(byte[] role, string account) - => _web3.Eth.GetContractTransactionHandler() - .SendRequestAndWaitForReceiptAsync( - _contractAddress, - new GrantRoleFunction { Role = role, Account = account }); - - public Task RevokeRoleRequestAndWaitForReceiptAsync(byte[] role, string account) - => _web3.Eth.GetContractTransactionHandler() - .SendRequestAndWaitForReceiptAsync( - _contractAddress, - new RevokeRoleFunction { Role = role, Account = account }); - - /// - /// Renounces for the transaction sender. - /// - /// The role identifier to renounce. - /// - /// The caller confirmation address. This must be the same address as the transaction sender, - /// otherwise the contract reverts with AccessControlBadConfirmation. - /// - public Task RenounceRoleRequestAndWaitForReceiptAsync(byte[] role, string callerConfirmationAddress) - => _web3.Eth.GetContractTransactionHandler() - .SendRequestAndWaitForReceiptAsync( - _contractAddress, - new RenounceRoleFunction { Role = role, CallerConfirmation = callerConfirmationAddress }); - - public Task PauseRequestAndWaitForReceiptAsync() - => _web3.Eth.GetContractTransactionHandler() - .SendRequestAndWaitForReceiptAsync(_contractAddress, new PauseFunction()); - - public Task UnpauseRequestAndWaitForReceiptAsync() - => _web3.Eth.GetContractTransactionHandler() - .SendRequestAndWaitForReceiptAsync(_contractAddress, new UnpauseFunction()); - } -} diff --git a/src/Tricksfor.Blockchain.Nethereum/Contracts/TricksforBoosterStaking/ContractDefinition/TricksforBoosterStakingAbi.cs b/src/Tricksfor.Blockchain.Nethereum/Contracts/TricksforBoosterStaking/ContractDefinition/TricksforBoosterStakingAbi.cs deleted file mode 100644 index ee6157f..0000000 --- a/src/Tricksfor.Blockchain.Nethereum/Contracts/TricksforBoosterStaking/ContractDefinition/TricksforBoosterStakingAbi.cs +++ /dev/null @@ -1,14 +0,0 @@ -namespace Tricksfor.Blockchain.Nethereum.Contracts.TricksforBoosterStaking.ContractDefinition -{ - /// - /// ABI and bytecode for TricksforBoosterStaking. - /// Regenerate from artifacts/contracts/TricksforBoosterStaking.sol/TricksforBoosterStaking.json - /// after any contract interface change. - /// - internal static class TricksforBoosterStakingAbi - { - public const string Abi = @"[{""inputs"":[{""internalType"":""address"",""name"":""nftContract_"",""type"":""address""}],""stateMutability"":""nonpayable"",""type"":""constructor""},{""inputs"":[],""name"":""EnforcedPause"",""type"":""error""},{""inputs"":[],""name"":""ExpectedPause"",""type"":""error""},{""inputs"":[],""name"":""NotOriginalStaker"",""type"":""error""},{""inputs"":[],""name"":""NotTokenOwner"",""type"":""error""},{""inputs"":[{""internalType"":""address"",""name"":""owner"",""type"":""address""}],""name"":""OwnableInvalidOwner"",""type"":""error""},{""inputs"":[{""internalType"":""address"",""name"":""account"",""type"":""address""}],""name"":""OwnableUnauthorizedAccount"",""type"":""error""},{""inputs"":[],""name"":""ReentrancyGuardReentrantCall"",""type"":""error""},{""inputs"":[],""name"":""TokenAlreadyStaked"",""type"":""error""},{""inputs"":[],""name"":""TokenNotStaked"",""type"":""error""},{""inputs"":[],""name"":""UnsupportedNFTContract"",""type"":""error""},{""inputs"":[],""name"":""ZeroAddress"",""type"":""error""},{""anonymous"":false,""inputs"":[{""indexed"":true,""internalType"":""address"",""name"":""originalStaker"",""type"":""address""},{""indexed"":true,""internalType"":""uint256"",""name"":""tokenId"",""type"":""uint256""},{""indexed"":true,""internalType"":""address"",""name"":""recipient"",""type"":""address""},{""indexed"":false,""internalType"":""uint256"",""name"":""withdrawnAt"",""type"":""uint256""}],""name"":""EmergencyWithdrawn"",""type"":""event""},{""anonymous"":false,""inputs"":[{""indexed"":true,""internalType"":""address"",""name"":""previousOwner"",""type"":""address""},{""indexed"":true,""internalType"":""address"",""name"":""newOwner"",""type"":""address""}],""name"":""OwnershipTransferred"",""type"":""event""},{""anonymous"":false,""inputs"":[{""indexed"":false,""internalType"":""address"",""name"":""account"",""type"":""address""}],""name"":""Paused"",""type"":""event""},{""anonymous"":false,""inputs"":[{""indexed"":true,""internalType"":""address"",""name"":""staker"",""type"":""address""},{""indexed"":true,""internalType"":""uint256"",""name"":""tokenId"",""type"":""uint256""},{""indexed"":false,""internalType"":""uint256"",""name"":""stakedAt"",""type"":""uint256""}],""name"":""TokenStaked"",""type"":""event""},{""anonymous"":false,""inputs"":[{""indexed"":true,""internalType"":""address"",""name"":""staker"",""type"":""address""},{""indexed"":true,""internalType"":""uint256"",""name"":""tokenId"",""type"":""uint256""},{""indexed"":false,""internalType"":""uint256"",""name"":""unstakedAt"",""type"":""uint256""}],""name"":""TokenUnstaked"",""type"":""event""},{""anonymous"":false,""inputs"":[{""indexed"":false,""internalType"":""address"",""name"":""account"",""type"":""address""}],""name"":""Unpaused"",""type"":""event""},{""inputs"":[{""internalType"":""uint256"",""name"":""tokenId"",""type"":""uint256""},{""internalType"":""address"",""name"":""recipient"",""type"":""address""}],""name"":""emergencyWithdraw"",""outputs"":[],""stateMutability"":""nonpayable"",""type"":""function""},{""inputs"":[{""internalType"":""address"",""name"":""wallet"",""type"":""address""}],""name"":""getWalletStakedTokens"",""outputs"":[{""internalType"":""uint256[]"",""name"":"""",""type"":""uint256[]""}],""stateMutability"":""view"",""type"":""function""},{""inputs"":[{""internalType"":""uint256"",""name"":""tokenId"",""type"":""uint256""}],""name"":""isStaked"",""outputs"":[{""internalType"":""bool"",""name"":"""",""type"":""bool""}],""stateMutability"":""view"",""type"":""function""},{""inputs"":[],""name"":""nftContract"",""outputs"":[{""internalType"":""contract IERC721"",""name"":"""",""type"":""address""}],""stateMutability"":""view"",""type"":""function""},{""inputs"":[{""internalType"":""address"",""name"":"""",""type"":""address""},{""internalType"":""address"",""name"":""from"",""type"":""address""},{""internalType"":""uint256"",""name"":""tokenId"",""type"":""uint256""},{""internalType"":""bytes"",""name"":"""",""type"":""bytes""}],""name"":""onERC721Received"",""outputs"":[{""internalType"":""bytes4"",""name"":"""",""type"":""bytes4""}],""stateMutability"":""nonpayable"",""type"":""function""},{""inputs"":[],""name"":""owner"",""outputs"":[{""internalType"":""address"",""name"":"""",""type"":""address""}],""stateMutability"":""view"",""type"":""function""},{""inputs"":[],""name"":""pause"",""outputs"":[],""stateMutability"":""nonpayable"",""type"":""function""},{""inputs"":[],""name"":""paused"",""outputs"":[{""internalType"":""bool"",""name"":"""",""type"":""bool""}],""stateMutability"":""view"",""type"":""function""},{""inputs"":[],""name"":""renounceOwnership"",""outputs"":[],""stateMutability"":""nonpayable"",""type"":""function""},{""inputs"":[{""internalType"":""uint256"",""name"":""tokenId"",""type"":""uint256""}],""name"":""stake"",""outputs"":[],""stateMutability"":""nonpayable"",""type"":""function""},{""inputs"":[{""internalType"":""uint256"",""name"":""tokenId"",""type"":""uint256""}],""name"":""stakedAtOf"",""outputs"":[{""internalType"":""uint256"",""name"":"""",""type"":""uint256""}],""stateMutability"":""view"",""type"":""function""},{""inputs"":[{""internalType"":""uint256"",""name"":""tokenId"",""type"":""uint256""}],""name"":""stakedOwnerOf"",""outputs"":[{""internalType"":""address"",""name"":"""",""type"":""address""}],""stateMutability"":""view"",""type"":""function""},{""inputs"":[{""internalType"":""address"",""name"":""newOwner"",""type"":""address""}],""name"":""transferOwnership"",""outputs"":[],""stateMutability"":""nonpayable"",""type"":""function""},{""inputs"":[],""name"":""unpause"",""outputs"":[],""stateMutability"":""nonpayable"",""type"":""function""},{""inputs"":[{""internalType"":""uint256"",""name"":""tokenId"",""type"":""uint256""}],""name"":""unstake"",""outputs"":[],""stateMutability"":""nonpayable"",""type"":""function""}]"; - - public const string Bytecode = "0x60a060405234801561000f575f80fd5b50604051610fba380380610fba83398101604081905261002e91610108565b338061005357604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b61005c816100b9565b5060017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00556001600160a01b0381166100a85760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0316608052610135565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f60208284031215610118575f80fd5b81516001600160a01b038116811461012e575f80fd5b9392505050565b608051610e4a6101705f395f8181610261015281816102b2015281816104bd015281816106260152818161076c01526108540152610e4a5ff3fe608060405234801561000f575f80fd5b50600436106100f0575f3560e01c80635c975abb11610093578063a694fc3a11610063578063a694fc3a1461021f578063baa51f8614610232578063d56d229d1461025c578063f2fde38b14610283575f80fd5b80635c975abb146101e2578063715018a6146101ff5780638456cb59146102075780638da5cb5b1461020f575f80fd5b80632b4bc300116100ce5780632b4bc300146101925780632e17de78146101b25780632f940c70146101c75780633f4ba83a146101da575f80fd5b8063150b7a02146100f45780631b3253b0146101255780631dcac94d14610152575b5f80fd5b610107610102366004610c4a565b610296565b6040516001600160e01b031990911681526020015b60405180910390f35b610144610133366004610ce3565b5f9081526002602052604090205490565b60405190815260200161011c565b61017a610160366004610ce3565b5f908152600160205260409020546001600160a01b031690565b6040516001600160a01b03909116815260200161011c565b6101a56101a0366004610cfa565b6103c2565b60405161011c9190610d1c565b6101c56101c0366004610ce3565b61042b565b005b6101c56101d5366004610d5e565b61056e565b6101c56106e6565b5f54600160a01b900460ff165b604051901515815260200161011c565b6101c56106f8565b6101c5610709565b5f546001600160a01b031661017a565b6101c561022d366004610ce3565b610719565b6101ef610240366004610ce3565b5f908152600160205260409020546001600160a01b0316151590565b61017a7f000000000000000000000000000000000000000000000000000000000000000081565b6101c5610291366004610cfa565b6108e7565b5f61029f610926565b6102a7610941565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146102f05760405163de1db39560e01b815260040160405180910390fd5b6001600160a01b0385166103175760405163d92e233d60e01b815260040160405180910390fd5b5f848152600160205260409020546001600160a01b03161561034c576040516316e9ad8f60e01b815260040160405180910390fd5b610356858561096b565b83856001600160a01b03167f6173e4d2d9dd52aae0ed37afed3adcf924a490639b759ca93d32dc43366c17d24260405161039291815260200190565b60405180910390a350630a85bd0160e11b6103b960015f80516020610df583398151915255565b95945050505050565b6001600160a01b0381165f9081526003602090815260409182902080548351818402810184019094528084526060939283018282801561041f57602002820191905f5260205f20905b81548152602001906001019080831161040b575b50505050509050919050565b610433610926565b5f818152600160205260409020546001600160a01b03168061046857604051630a49bbc360e21b815260040160405180910390fd5b6001600160a01b0381163314610491576040516332dc95cb60e01b815260040160405180910390fd5b61049b81836109cf565b6040516323b872dd60e01b8152306004820152336024820152604481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906323b872dd906064015f604051808303815f87803b158015610506575f80fd5b505af1158015610518573d5f803e3d5ffd5b50506040514281528492503391507f563fc70fca9d440d883299c76a721644d5aca7c45df98aeb5292c4cb823579bf906020015b60405180910390a35061056b60015f80516020610df583398151915255565b50565b6105766109ff565b61057e610926565b5f828152600160205260409020546001600160a01b03166105b257604051630a49bbc360e21b815260040160405180910390fd5b6001600160a01b0381166105d95760405163d92e233d60e01b815260040160405180910390fd5b5f828152600160205260409020546001600160a01b03166105fa81846109cf565b6040516323b872dd60e01b81523060048201526001600160a01b038381166024830152604482018590527f000000000000000000000000000000000000000000000000000000000000000016906323b872dd906064015f604051808303815f87803b158015610667575f80fd5b505af1158015610679573d5f803e3d5ffd5b50505050816001600160a01b031683826001600160a01b03167ff4408f2b7cb3bb2b43ddb3715579eae68a12af5f2e6d938537db2be5e72f5f7d426040516106c391815260200190565b60405180910390a4506106e260015f80516020610df583398151915255565b5050565b6106ee6109ff565b6106f6610a2b565b565b6107006109ff565b6106f65f610a7f565b6107116109ff565b6106f6610ace565b610721610926565b610729610941565b5f8181526001602052604090205433906001600160a01b031615610760576040516316e9ad8f60e01b815260040160405180910390fd5b806001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636352211e846040518263ffffffff1660e01b81526004016107b891815260200190565b602060405180830381865afa1580156107d3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107f79190610d8c565b6001600160a01b03161461081e576040516359dc379f60e01b815260040160405180910390fd5b610828818361096b565b6040516323b872dd60e01b81526001600160a01b038281166004830152306024830152604482018490527f000000000000000000000000000000000000000000000000000000000000000016906323b872dd906064015f604051808303815f87803b158015610895575f80fd5b505af11580156108a7573d5f803e3d5ffd5b5050505081816001600160a01b03167f6173e4d2d9dd52aae0ed37afed3adcf924a490639b759ca93d32dc43366c17d24260405161054c91815260200190565b6108ef6109ff565b6001600160a01b03811661091d57604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b61056b81610a7f565b61092e610b10565b60025f80516020610df583398151915255565b5f54600160a01b900460ff16156106f65760405163d93c066560e01b815260040160405180910390fd5b5f81815260016020818152604080842080546001600160a01b039097166001600160a01b0319909716871790556002825280842042905594835260038082528584208054868652600484529685208790559082529185018255908252902090910155565b5f81815260016020908152604080832080546001600160a01b031916905560029091528120556106e28282610b3f565b5f546001600160a01b031633146106f65760405163118cdaa760e01b8152336004820152602401610914565b610a33610c0d565b5f805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610ad6610941565b5f805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610a623390565b5f80516020610df5833981519152546002036106f657604051633ee5aeb560e01b815260040160405180910390fd5b6001600160a01b0382165f9081526003602090815260408083208484526004909252822054815491929091610b7690600190610da7565b9050808214610bcf575f838281548110610b9257610b92610dcc565b905f5260205f200154905080848481548110610bb057610bb0610dcc565b5f91825260208083209091019290925591825260049052604090208290555b82805480610bdf57610bdf610de0565b600190038181905f5260205f20015f9055905560045f8581526020019081526020015f205f90555050505050565b5f54600160a01b900460ff166106f657604051638dfc202b60e01b815260040160405180910390fd5b6001600160a01b038116811461056b575f80fd5b5f805f805f60808688031215610c5e575f80fd5b8535610c6981610c36565b94506020860135610c7981610c36565b935060408601359250606086013567ffffffffffffffff811115610c9b575f80fd5b8601601f81018813610cab575f80fd5b803567ffffffffffffffff811115610cc1575f80fd5b886020828401011115610cd2575f80fd5b959894975092955050506020019190565b5f60208284031215610cf3575f80fd5b5035919050565b5f60208284031215610d0a575f80fd5b8135610d1581610c36565b9392505050565b602080825282518282018190525f918401906040840190835b81811015610d53578351835260209384019390920191600101610d35565b509095945050505050565b5f8060408385031215610d6f575f80fd5b823591506020830135610d8181610c36565b809150509250929050565b5f60208284031215610d9c575f80fd5b8151610d1581610c36565b81810381811115610dc657634e487b7160e01b5f52601160045260245ffd5b92915050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52603160045260245ffdfe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a2646970667358221220e328491ebc478eb5bb9c6275ecdc21194d6bb5cebc6b77777347dbbc71d2e97a64736f6c634300081a0033"; - } -} diff --git a/src/Tricksfor.Blockchain.Nethereum/Contracts/TricksforBoosterStaking/ContractDefinition/TricksforBoosterStakingDefinition.cs b/src/Tricksfor.Blockchain.Nethereum/Contracts/TricksforBoosterStaking/ContractDefinition/TricksforBoosterStakingDefinition.cs deleted file mode 100644 index 5bf3f60..0000000 --- a/src/Tricksfor.Blockchain.Nethereum/Contracts/TricksforBoosterStaking/ContractDefinition/TricksforBoosterStakingDefinition.cs +++ /dev/null @@ -1,249 +0,0 @@ -using System.Numerics; -using Nethereum.ABI.FunctionEncoding.Attributes; -using Nethereum.Contracts; - -namespace Tricksfor.Blockchain.Nethereum.Contracts.TricksforBoosterStaking.ContractDefinition -{ - /// - /// Deployment message for TricksforBoosterStaking. - /// Constructor parameters must match the Solidity constructor exactly. - /// - public class TricksforBoosterStakingDeployment : ContractDeploymentMessage - { - public static string ABI => TricksforBoosterStakingAbi.Abi; - - public TricksforBoosterStakingDeployment() : base(TricksforBoosterStakingAbi.Bytecode) { } - - [Parameter("address", "nftContract_", 1)] - public string NftContract { get; set; } = string.Empty; - } - - // ------------------------------------------------------------------------- - // Integration-critical event DTOs - // - // These DTOs are part of the public integration contract between this - // repository and the Tricksfor backend indexer. Field names, types, and - // indexed attributes MUST match the Solidity event definitions exactly. - // Do not rename, reorder, or change indexed flags without a breaking-change - // notice and downstream coordination. - // ------------------------------------------------------------------------- - - /// - /// Emitted when a Booster NFT is staked. - /// Matches: event TokenStaked(address indexed staker, uint256 indexed tokenId, uint256 stakedAt) - /// - [Event("TokenStaked")] - public class TokenStakedEventDTO : IEventDTO - { - /// The wallet address that owns and staked the token. - [Parameter("address", "staker", 1, true)] - public string Staker { get; set; } = string.Empty; - - /// The staked NFT token ID. - [Parameter("uint256", "tokenId", 2, true)] - public BigInteger TokenId { get; set; } - - /// Block timestamp at the moment of staking (Unix seconds). - [Parameter("uint256", "stakedAt", 3, false)] - public BigInteger StakedAt { get; set; } - } - - /// - /// Emitted when a Booster NFT is unstaked. - /// Matches: event TokenUnstaked(address indexed staker, uint256 indexed tokenId, uint256 unstakedAt) - /// - [Event("TokenUnstaked")] - public class TokenUnstakedEventDTO : IEventDTO - { - /// The wallet address that originally staked (and receives back) the token. - [Parameter("address", "staker", 1, true)] - public string Staker { get; set; } = string.Empty; - - /// The unstaked NFT token ID. - [Parameter("uint256", "tokenId", 2, true)] - public BigInteger TokenId { get; set; } - - /// Block timestamp at the moment of unstaking (Unix seconds). - [Parameter("uint256", "unstakedAt", 3, false)] - public BigInteger UnstakedAt { get; set; } - } - - /// - /// Emitted when the contract owner performs an emergency withdrawal of a staked token. - /// Matches: event EmergencyWithdrawn(address indexed originalStaker, uint256 indexed tokenId, - /// address indexed recipient, uint256 withdrawnAt) - /// - [Event("EmergencyWithdrawn")] - public class EmergencyWithdrawnEventDTO : IEventDTO - { - /// The wallet that originally staked the token. - [Parameter("address", "originalStaker", 1, true)] - public string OriginalStaker { get; set; } = string.Empty; - - /// The affected NFT token ID. - [Parameter("uint256", "tokenId", 2, true)] - public BigInteger TokenId { get; set; } - - /// The address that received the token. - [Parameter("address", "recipient", 3, true)] - public string Recipient { get; set; } = string.Empty; - - /// Block timestamp at the moment of the withdrawal (Unix seconds). - [Parameter("uint256", "withdrawnAt", 4, false)] - public BigInteger WithdrawnAt { get; set; } - } - - // ------------------------------------------------------------------------- - // Read (view/pure) function messages - // ------------------------------------------------------------------------- - - [Function("nftContract", "address")] - public class NftContractFunction : FunctionMessage { } - - [Function("owner", "address")] - public class OwnerFunction : FunctionMessage { } - - [Function("paused", "bool")] - public class PausedFunction : FunctionMessage { } - - /// - /// Returns true if the given token is currently staked. - /// Must stay in sync with event semantics: if TokenStaked was emitted, this returns true. - /// - [Function("isStaked", "bool")] - public class IsStakedFunction : FunctionMessage - { - [Parameter("uint256", "tokenId", 1)] - public BigInteger TokenId { get; set; } - } - - /// - /// Returns the original staker address for a currently staked token. - /// Returns the zero address if the token is not staked. - /// Must stay in sync with event semantics: the address matches the staker field in TokenStaked. - /// - [Function("stakedOwnerOf", "address")] - public class StakedOwnerOfFunction : FunctionMessage - { - [Parameter("uint256", "tokenId", 1)] - public BigInteger TokenId { get; set; } - } - - /// - /// Returns the block timestamp at which the given token was staked. - /// Returns zero if the token is not currently staked. - /// - [Function("stakedAtOf", "uint256")] - public class StakedAtOfFunction : FunctionMessage - { - [Parameter("uint256", "tokenId", 1)] - public BigInteger TokenId { get; set; } - } - - /// - /// Returns all token IDs currently staked by the given wallet address. - /// - /// Ordering is not guaranteed. The contract uses a swap-and-pop strategy for - /// O(1) removal; when a token is unstaked or emergency-withdrawn, the last element - /// in the array takes its position. Do not rely on index stability across - /// state-changing transactions. - /// - /// - [Function("getWalletStakedTokens")] - public class GetWalletStakedTokensFunction : FunctionMessage - { - [Parameter("address", "wallet", 1)] - public string Wallet { get; set; } = string.Empty; - } - - /// - /// Output DTO for . - /// - [FunctionOutput] - public class GetWalletStakedTokensOutputDTO : IFunctionOutputDTO - { - /// - /// The token IDs currently staked by the queried wallet. - /// Ordering is not guaranteed — see . - /// - [Parameter("uint256[]", "", 1)] - public List TokenIds { get; set; } = new(); - } - - // ------------------------------------------------------------------------- - // Write (transaction) function messages - // ------------------------------------------------------------------------- - - /// - /// Stakes a Booster NFT. The caller must have first approved the staking contract - /// on the NFT contract (ERC-721 approve or setApprovalForAll). - /// - [Function("stake")] - public class StakeFunction : FunctionMessage - { - [Parameter("uint256", "tokenId", 1)] - public BigInteger TokenId { get; set; } - } - - /// - /// Unstakes a Booster NFT and returns it to the original staker. - /// Only callable by the original staker. Always available — not paused. - /// - [Function("unstake")] - public class UnstakeFunction : FunctionMessage - { - [Parameter("uint256", "tokenId", 1)] - public BigInteger TokenId { get; set; } - } - - /// - /// Emergency withdrawal of a staked token by the contract owner. - /// Only callable by the owner. Emits EmergencyWithdrawn. - /// - [Function("emergencyWithdraw")] - public class EmergencyWithdrawFunction : FunctionMessage - { - [Parameter("uint256", "tokenId", 1)] - public BigInteger TokenId { get; set; } - - [Parameter("address", "recipient", 2)] - public string Recipient { get; set; } = string.Empty; - } - - [Function("pause")] - public class PauseFunction : FunctionMessage { } - - [Function("unpause")] - public class UnpauseFunction : FunctionMessage { } - - [Function("transferOwnership")] - public class TransferOwnershipFunction : FunctionMessage - { - [Parameter("address", "newOwner", 1)] - public string NewOwner { get; set; } = string.Empty; - } - - [Function("renounceOwnership")] - public class RenounceOwnershipFunction : FunctionMessage { } - - /// - /// Called by an ERC-721 contract when a token is transferred to this contract via safeTransferFrom. - /// Only tokens from the configured nftContract are accepted; all others are rejected. - /// Records the from address (the previous owner) as the staker and emits TokenStaked. - /// - [Function("onERC721Received", "bytes4")] - public class OnERC721ReceivedFunction : FunctionMessage - { - [Parameter("address", "", 1)] - public string Operator { get; set; } = string.Empty; - - [Parameter("address", "from", 2)] - public string From { get; set; } = string.Empty; - - [Parameter("uint256", "tokenId", 3)] - public BigInteger TokenId { get; set; } - - [Parameter("bytes", "", 4)] - public byte[] Data { get; set; } = Array.Empty(); - } -} diff --git a/src/Tricksfor.Blockchain.Nethereum/Contracts/TricksforBoosterStaking/TricksforBoosterStakingService.cs b/src/Tricksfor.Blockchain.Nethereum/Contracts/TricksforBoosterStaking/TricksforBoosterStakingService.cs deleted file mode 100644 index d8898e0..0000000 --- a/src/Tricksfor.Blockchain.Nethereum/Contracts/TricksforBoosterStaking/TricksforBoosterStakingService.cs +++ /dev/null @@ -1,205 +0,0 @@ -using System.Numerics; -using Nethereum.Contracts; -using Nethereum.Contracts.ContractHandlers; -using Nethereum.RPC.Eth.DTOs; -using Nethereum.Web3; -using Tricksfor.Blockchain.Nethereum.Contracts.TricksforBoosterStaking.ContractDefinition; - -namespace Tricksfor.Blockchain.Nethereum.Contracts.TricksforBoosterStaking -{ - /// - /// Typed service for interacting with the TricksforBoosterStaking contract. - /// All calls use typed function message classes — no raw ABI string decoding. - /// - /// Integration-critical events: - /// - TokenStakedEventDTO — emitted on every successful stake - /// - TokenUnstakedEventDTO — emitted on every successful unstake - /// - EmergencyWithdrawnEventDTO — emitted on every emergency withdrawal - /// - /// The Tricksfor backend indexer depends on these events to reconstruct - /// staking state. Changes to event schema require downstream coordination. - /// - public class TricksforBoosterStakingService - { - private readonly IWeb3 _web3; - private readonly string _contractAddress; - - public TricksforBoosterStakingService(IWeb3 web3, string contractAddress) - { - _web3 = web3; - _contractAddress = contractAddress; - } - - public IContractQueryHandler GetContractQueryHandler() - where TFunction : FunctionMessage, new() - => _web3.Eth.GetContractQueryHandler(); - - public IContractTransactionHandler GetContractTransactionHandler() - where TFunction : FunctionMessage, new() - => _web3.Eth.GetContractTransactionHandler(); - - // ------------------------------------------------------------------------- - // Deployment - // ------------------------------------------------------------------------- - - public static Task DeployContractAndWaitForReceiptAsync( - IWeb3 web3, - TricksforBoosterStakingDeployment deployment) - => web3.Eth.GetContractDeploymentHandler() - .SendRequestAndWaitForReceiptAsync(deployment); - - // ------------------------------------------------------------------------- - // Read functions (must stay in sync with event semantics) - // ------------------------------------------------------------------------- - - public Task NftContractQueryAsync() - => _web3.Eth.GetContractQueryHandler() - .QueryAsync(_contractAddress, new NftContractFunction()); - - public Task OwnerQueryAsync() - => _web3.Eth.GetContractQueryHandler() - .QueryAsync(_contractAddress, new OwnerFunction()); - - public Task PausedQueryAsync() - => _web3.Eth.GetContractQueryHandler() - .QueryAsync(_contractAddress, new PausedFunction()); - - /// - /// Returns true if the given token is currently staked. - /// Result is consistent with the TokenStaked / TokenUnstaked event stream. - /// - public Task IsStakedQueryAsync(BigInteger tokenId) - => _web3.Eth.GetContractQueryHandler() - .QueryAsync(_contractAddress, new IsStakedFunction { TokenId = tokenId }); - - /// - /// Returns the original staker address for a currently staked token, - /// or the zero address if the token is not staked. - /// The returned address matches the staker field emitted in TokenStaked. - /// - public Task StakedOwnerOfQueryAsync(BigInteger tokenId) - => _web3.Eth.GetContractQueryHandler() - .QueryAsync(_contractAddress, new StakedOwnerOfFunction { TokenId = tokenId }); - - /// - /// Returns the block timestamp at which the given token was staked, - /// or zero if the token is not currently staked. - /// - public Task StakedAtOfQueryAsync(BigInteger tokenId) - => _web3.Eth.GetContractQueryHandler() - .QueryAsync(_contractAddress, new StakedAtOfFunction { TokenId = tokenId }); - - /// - /// Returns all token IDs currently staked by the given wallet address. - /// Ordering is not guaranteed — the contract uses swap-and-pop removal. - /// - public Task GetWalletStakedTokensQueryAsync(string walletAddress) - => _web3.Eth.GetContractQueryHandler() - .QueryDeserializingToObjectAsync( - new GetWalletStakedTokensFunction { Wallet = walletAddress }, - _contractAddress); - - // ------------------------------------------------------------------------- - // Write functions - // ------------------------------------------------------------------------- - - /// - /// Stakes a Booster NFT. The caller must have previously approved the staking - /// contract on the NFT contract. Emits TokenStaked on success. - /// - public Task StakeRequestAndWaitForReceiptAsync(BigInteger tokenId) - => _web3.Eth.GetContractTransactionHandler() - .SendRequestAndWaitForReceiptAsync( - _contractAddress, - new StakeFunction { TokenId = tokenId }); - - /// - /// Unstakes a Booster NFT and returns it to the original staker. - /// Emits TokenUnstaked on success. Not gated by pause. - /// - public Task UnstakeRequestAndWaitForReceiptAsync(BigInteger tokenId) - => _web3.Eth.GetContractTransactionHandler() - .SendRequestAndWaitForReceiptAsync( - _contractAddress, - new UnstakeFunction { TokenId = tokenId }); - - /// - /// Emergency withdrawal of a staked token to a specified recipient. - /// Owner only. Emits EmergencyWithdrawn on success. - /// - public Task EmergencyWithdrawRequestAndWaitForReceiptAsync( - BigInteger tokenId, - string recipient) - => _web3.Eth.GetContractTransactionHandler() - .SendRequestAndWaitForReceiptAsync( - _contractAddress, - new EmergencyWithdrawFunction { TokenId = tokenId, Recipient = recipient }); - - public Task PauseRequestAndWaitForReceiptAsync() - => _web3.Eth.GetContractTransactionHandler() - .SendRequestAndWaitForReceiptAsync(_contractAddress, new PauseFunction()); - - public Task UnpauseRequestAndWaitForReceiptAsync() - => _web3.Eth.GetContractTransactionHandler() - .SendRequestAndWaitForReceiptAsync(_contractAddress, new UnpauseFunction()); - - // ------------------------------------------------------------------------- - // Event log decoding - // ------------------------------------------------------------------------- - - /// - /// Decodes all TokenStaked events from a transaction receipt. - /// - public List> DecodeTokenStakedEvents(TransactionReceipt receipt) - => receipt.DecodeAllEvents(); - - /// - /// Decodes all TokenUnstaked events from a transaction receipt. - /// - public List> DecodeTokenUnstakedEvents(TransactionReceipt receipt) - => receipt.DecodeAllEvents(); - - /// - /// Decodes all EmergencyWithdrawn events from a transaction receipt. - /// - public List> DecodeEmergencyWithdrawnEvents(TransactionReceipt receipt) - => receipt.DecodeAllEvents(); - - /// - /// Returns a filter input for querying TokenStaked events by staker address. - /// Use with block-range log queries to reconstruct staking history. - /// - public NewFilterInput CreateTokenStakedFilterByStaker( - string stakerAddress, - BlockParameter? fromBlock = null, - BlockParameter? toBlock = null) - { - var eventHandler = _web3.Eth.GetEvent(_contractAddress); - return eventHandler.CreateFilterInput(stakerAddress, fromBlock, toBlock); - } - - /// - /// Returns a filter input for querying TokenUnstaked events by staker address. - /// - public NewFilterInput CreateTokenUnstakedFilterByStaker( - string stakerAddress, - BlockParameter? fromBlock = null, - BlockParameter? toBlock = null) - { - var eventHandler = _web3.Eth.GetEvent(_contractAddress); - return eventHandler.CreateFilterInput(stakerAddress, fromBlock, toBlock); - } - - /// - /// Returns a filter input for querying TokenStaked events by token ID. - /// - public NewFilterInput CreateTokenStakedFilterByTokenId( - BigInteger tokenId, - BlockParameter? fromBlock = null, - BlockParameter? toBlock = null) - { - var eventHandler = _web3.Eth.GetEvent(_contractAddress); - return eventHandler.CreateFilterInput(null, tokenId, fromBlock, toBlock); - } - } -} diff --git a/src/Tricksfor.Blockchain.Nethereum/Tricksfor.Blockchain.Nethereum.csproj b/src/Tricksfor.Blockchain.Nethereum/Tricksfor.Blockchain.Nethereum.csproj deleted file mode 100644 index 6b2dd97..0000000 --- a/src/Tricksfor.Blockchain.Nethereum/Tricksfor.Blockchain.Nethereum.csproj +++ /dev/null @@ -1,16 +0,0 @@ - - - - net8.0 - enable - enable - latest - Tricksfor.Blockchain.Nethereum - - - - - - - - diff --git a/test/TricksforBoosterNFT.test.ts b/test/TricksforBoosterNFT.test.ts index 3c7ea24..3ec6123 100644 --- a/test/TricksforBoosterNFT.test.ts +++ b/test/TricksforBoosterNFT.test.ts @@ -1,14 +1,18 @@ import { expect } from "chai"; -import hre from "hardhat"; +import { network } from "hardhat"; import { TricksforBoosterNFT } from "../typechain-types"; import { HardhatEthersSigner } from "@nomicfoundation/hardhat-ethers/signers"; +const { ethers } = await network.create(); +const hre = { ethers }; + describe("TricksforBoosterNFT", function () { const NAME = "Tricksfor Booster"; const SYMBOL = "TBOOST"; const BASE_URI = "https://metadata.tricksfor.com/booster/"; const CONTRACT_URI = "https://metadata.tricksfor.com/booster/contract"; const ROYALTY_BASIS_POINTS = 500n; // 5% + const DEFAULT_ADMIN_DELAY = 86_400n; let nft: TricksforBoosterNFT; let owner: HardhatEthersSigner; @@ -30,7 +34,10 @@ describe("TricksforBoosterNFT", function () { BASE_URI, CONTRACT_URI, royaltyReceiver.address, - ROYALTY_BASIS_POINTS + ROYALTY_BASIS_POINTS, + owner.address, + owner.address, + DEFAULT_ADMIN_DELAY )) as TricksforBoosterNFT; await nft.waitForDeployment(); @@ -56,10 +63,18 @@ describe("TricksforBoosterNFT", function () { expect(await nft.hasRole(MINTER_ROLE, owner.address)).to.be.true; }); + it("stores the configured default-admin delay", async function () { + expect(await nft.defaultAdminDelay()).to.equal(DEFAULT_ADMIN_DELAY); + }); + it("returns the correct contractURI", async function () { expect(await nft.contractURI()).to.equal(CONTRACT_URI); }); + it("returns the configured baseURI", async function () { + expect(await nft.baseURI()).to.equal(BASE_URI); + }); + it("returns correct royalty info for a sale", async function () { // First mint a token so we can query royaltyInfo await nft.safeMint(alice.address, 1n); @@ -84,7 +99,52 @@ describe("TricksforBoosterNFT", function () { it("reverts construction with zero royalty receiver address", async function () { const factory = await hre.ethers.getContractFactory("TricksforBoosterNFT"); await expect( - factory.deploy(NAME, SYMBOL, BASE_URI, CONTRACT_URI, hre.ethers.ZeroAddress, ROYALTY_BASIS_POINTS) + factory.deploy( + NAME, + SYMBOL, + BASE_URI, + CONTRACT_URI, + hre.ethers.ZeroAddress, + ROYALTY_BASIS_POINTS, + owner.address, + owner.address, + DEFAULT_ADMIN_DELAY + ) + ).to.be.revertedWithCustomError(nft, "ZeroAddress"); + }); + + it("honors a separately configured initial minter", async function () { + const factory = await hre.ethers.getContractFactory("TricksforBoosterNFT"); + const configured = await factory.deploy( + NAME, + SYMBOL, + BASE_URI, + CONTRACT_URI, + royaltyReceiver.address, + ROYALTY_BASIS_POINTS, + owner.address, + minter.address, + DEFAULT_ADMIN_DELAY + ); + await configured.waitForDeployment(); + expect(await configured.hasRole(MINTER_ROLE, minter.address)).to.be.true; + expect(await configured.hasRole(MINTER_ROLE, owner.address)).to.be.false; + }); + + it("reverts construction with a zero initial minter", async function () { + const factory = await hre.ethers.getContractFactory("TricksforBoosterNFT"); + await expect( + factory.deploy( + NAME, + SYMBOL, + BASE_URI, + CONTRACT_URI, + royaltyReceiver.address, + ROYALTY_BASIS_POINTS, + owner.address, + hre.ethers.ZeroAddress, + DEFAULT_ADMIN_DELAY + ) ).to.be.revertedWithCustomError(nft, "ZeroAddress"); }); }); @@ -180,7 +240,9 @@ describe("TricksforBoosterNFT", function () { describe("setBaseURI", function () { it("updates the base URI (admin only)", async function () { const newBase = "https://updated.tricksfor.com/"; - await nft.setBaseURI(newBase); + await expect(nft.setBaseURI(newBase)) + .to.emit(nft, "BaseURIUpdated") + .withArgs(BASE_URI, newBase); await nft.safeMint(alice.address, 1n); expect(await nft.tokenURI(1n)).to.equal(`${newBase}1`); }); @@ -199,7 +261,9 @@ describe("TricksforBoosterNFT", function () { describe("setContractURI", function () { it("updates contractURI (admin only)", async function () { const newURI = "https://updated.tricksfor.com/contract"; - await nft.setContractURI(newURI); + await expect(nft.setContractURI(newURI)) + .to.emit(nft, "ContractURIUpdated") + .withArgs(CONTRACT_URI, newURI); expect(await nft.contractURI()).to.equal(newURI); }); @@ -218,7 +282,9 @@ describe("TricksforBoosterNFT", function () { it("updates royalty receiver and fee (admin only)", async function () { const newBps = 1000n; // 10% await nft.safeMint(alice.address, 1n); - await nft.setRoyaltyInfo(bob.address, newBps); + await expect(nft.setRoyaltyInfo(bob.address, newBps)) + .to.emit(nft, "DefaultRoyaltyUpdated") + .withArgs(bob.address, newBps); const salePrice = hre.ethers.parseEther("1"); const [receiver, amount] = await nft.royaltyInfo(1n, salePrice); expect(receiver).to.equal(bob.address); @@ -230,6 +296,11 @@ describe("TricksforBoosterNFT", function () { .to.be.revertedWithCustomError(nft, "AccessControlUnauthorizedAccount") .withArgs(alice.address, DEFAULT_ADMIN_ROLE); }); + + it("reverts for a zero royalty receiver", async function () { + await expect(nft.setRoyaltyInfo(hre.ethers.ZeroAddress, 500n)) + .to.be.revertedWithCustomError(nft, "ZeroAddress"); + }); }); // --------------------------------------------------------------------------- diff --git a/test/TricksforBoosterStaking.invariant.test.ts b/test/TricksforBoosterStaking.invariant.test.ts new file mode 100644 index 0000000..b06bb64 --- /dev/null +++ b/test/TricksforBoosterStaking.invariant.test.ts @@ -0,0 +1,126 @@ +import { expect } from "chai"; +import { network } from "hardhat"; + +const { ethers } = await network.create(); + +describe("TricksforBoosterStaking state-machine invariants", function () { + it("preserves custody, staking records, and unique wallet lists across mixed operations", async function () { + this.timeout(120_000); + + const [admin, ...participants] = (await ethers.getSigners()).slice(0, 5); + const nft = await ethers.deployContract("TricksforBoosterNFT", [ + "Tricksfor Booster Invariant", + "TFB", + "https://metadata.example/", + "https://metadata.example/contract.json", + admin.address, + 500n, + admin.address, + admin.address, + 0n, + ]); + await nft.waitForDeployment(); + + const staking = await ethers.deployContract("TricksforBoosterStaking", [ + await nft.getAddress(), + admin.address, + ]); + await staking.waitForDeployment(); + const stakingAddress = await staking.getAddress(); + + const signerByAddress = new Map( + participants.map((signer) => [signer.address.toLowerCase(), signer]) + ); + const states = new Map(); + const tokenIds = Array.from({ length: 12 }, (_, index) => BigInt(index + 1)); + + for (let index = 0; index < tokenIds.length; index++) { + const recipient = participants[index % participants.length]; + await nft.safeMint(recipient.address, tokenIds[index]); + states.set(tokenIds[index], { holder: recipient.address, staker: null }); + } + + let randomState = 0x5eed1234n; + const nextRandom = (maximum: number) => { + randomState = (1_103_515_245n * randomState + 12_345n) % 2_147_483_648n; + return Number(randomState % BigInt(maximum)); + }; + + const assertInvariants = async () => { + const listed = new Map(); + for (const participant of participants) { + listed.set( + participant.address.toLowerCase(), + [...await staking.getWalletStakedTokens(participant.address)] + ); + } + + const allListed = [...listed.values()].flat(); + expect(new Set(allListed.map(String)).size).to.equal(allListed.length); + + for (const tokenId of tokenIds) { + const expected = states.get(tokenId)!; + const tracked = expected.staker !== null; + expect(await staking.isStaked(tokenId)).to.equal(tracked); + expect(await staking.stakedOwnerOf(tokenId)).to.equal( + expected.staker ?? ethers.ZeroAddress + ); + expect(await nft.ownerOf(tokenId)).to.equal(expected.holder); + + for (const participant of participants) { + const walletTokens = listed.get(participant.address.toLowerCase())!; + const shouldContain = expected.staker?.toLowerCase() === participant.address.toLowerCase(); + expect(walletTokens.includes(tokenId)).to.equal(shouldContain); + } + } + }; + + for (let step = 0; step < 100; step++) { + const tokenId = tokenIds[nextRandom(tokenIds.length)]; + const state = states.get(tokenId)!; + const operation = nextRandom(6); + + if ((operation === 0 || operation === 1) && state.staker === null) { + const holder = signerByAddress.get(state.holder.toLowerCase())!; + if (operation === 0) { + await nft.connect(holder).approve(stakingAddress, tokenId); + await staking.connect(holder).stake(tokenId); + } else { + await nft.connect(holder)["safeTransferFrom(address,address,uint256)"]( + holder.address, + stakingAddress, + tokenId + ); + } + state.staker = holder.address; + state.holder = stakingAddress; + } else if (operation === 2 && state.staker !== null) { + const staker = signerByAddress.get(state.staker.toLowerCase())!; + await staking.connect(staker).unstake(tokenId); + state.holder = staker.address; + state.staker = null; + } else if (operation === 3 && state.staker !== null) { + const originalStaker = state.staker; + await staking.emergencyWithdraw(tokenId, originalStaker); + state.holder = originalStaker; + state.staker = null; + } else if (operation === 4 && state.staker === null) { + const holder = signerByAddress.get(state.holder.toLowerCase())!; + const recipient = participants[nextRandom(participants.length)]; + if (recipient.address !== holder.address) { + await nft.connect(holder).transferFrom(holder.address, recipient.address, tokenId); + state.holder = recipient.address; + } + } else if (operation === 5 && state.staker === null) { + const holder = signerByAddress.get(state.holder.toLowerCase())!; + await staking.pause(); + await nft.connect(holder).approve(stakingAddress, tokenId); + await expect(staking.connect(holder).stake(tokenId)) + .to.be.revertedWithCustomError(staking, "EnforcedPause"); + await staking.unpause(); + } + + await assertInvariants(); + } + }); +}); diff --git a/test/TricksforBoosterStaking.test.ts b/test/TricksforBoosterStaking.test.ts index b695c3a..f5e90f1 100644 --- a/test/TricksforBoosterStaking.test.ts +++ b/test/TricksforBoosterStaking.test.ts @@ -1,8 +1,11 @@ import { expect } from "chai"; -import hre from "hardhat"; +import { network } from "hardhat"; import { TricksforBoosterNFT, TricksforBoosterStaking } from "../typechain-types"; import { HardhatEthersSigner } from "@nomicfoundation/hardhat-ethers/signers"; +const { ethers } = await network.create(); +const hre = { ethers }; + describe("TricksforBoosterStaking", function () { let nft: TricksforBoosterNFT; let staking: TricksforBoosterStaking; @@ -24,14 +27,18 @@ describe("TricksforBoosterStaking", function () { "https://metadata.tricksfor.com/booster/", "https://metadata.tricksfor.com/booster/contract", owner.address, - 500n + 500n, + owner.address, + owner.address, + 0n )) as TricksforBoosterNFT; await nft.waitForDeployment(); // Deploy staking contract with reference to the NFT contract const stakingFactory = await hre.ethers.getContractFactory("TricksforBoosterStaking"); staking = (await stakingFactory.deploy( - await nft.getAddress() + await nft.getAddress(), + owner.address )) as TricksforBoosterStaking; await staking.waitForDeployment(); @@ -56,11 +63,73 @@ describe("TricksforBoosterStaking", function () { it("reverts if constructed with zero address", async function () { const factory = await hre.ethers.getContractFactory("TricksforBoosterStaking"); - await expect(factory.deploy(hre.ethers.ZeroAddress)).to.be.revertedWithCustomError( + await expect(factory.deploy(hre.ethers.ZeroAddress, owner.address)).to.be.revertedWithCustomError( staking, "ZeroAddress" ); }); + + it("reverts if constructed with a zero initial owner", async function () { + const factory = await hre.ethers.getContractFactory("TricksforBoosterStaking"); + await expect(factory.deploy(await nft.getAddress(), hre.ethers.ZeroAddress)) + .to.be.revertedWithCustomError(staking, "OwnableInvalidOwner") + .withArgs(hre.ethers.ZeroAddress); + }); + + it("requires the pending owner to accept an ownership transfer", async function () { + await staking.transferOwnership(alice.address); + expect(await staking.owner()).to.equal(owner.address); + expect(await staking.pendingOwner()).to.equal(alice.address); + + await staking.connect(alice).acceptOwnership(); + expect(await staking.owner()).to.equal(alice.address); + expect(await staking.pendingOwner()).to.equal(hre.ethers.ZeroAddress); + }); + }); + + // --------------------------------------------------------------------------- + // rescueUntrackedToken + // --------------------------------------------------------------------------- + + describe("rescueUntrackedToken", function () { + beforeEach(async function () { + await nft.connect(alice).transferFrom(alice.address, await staking.getAddress(), TOKEN_2); + }); + + it("recovers a token sent directly without creating staking state", async function () { + expect(await staking.isStaked(TOKEN_2)).to.be.false; + const tx = await staking.rescueUntrackedToken(TOKEN_2, alice.address); + const receipt = await tx.wait(); + const block = await hre.ethers.provider.getBlock(receipt!.blockNumber); + + await expect(tx) + .to.emit(staking, "UntrackedTokenRescued") + .withArgs(alice.address, TOKEN_2, block!.timestamp); + expect(await nft.ownerOf(TOKEN_2)).to.equal(alice.address); + }); + + it("reverts for a zero recipient", async function () { + await expect(staking.rescueUntrackedToken(TOKEN_2, hre.ethers.ZeroAddress)) + .to.be.revertedWithCustomError(staking, "ZeroAddress"); + }); + + it("reverts when called by a non-owner", async function () { + await expect(staking.connect(alice).rescueUntrackedToken(TOKEN_2, alice.address)) + .to.be.revertedWithCustomError(staking, "OwnableUnauthorizedAccount") + .withArgs(alice.address); + }); + + it("reverts when the contract does not hold the token", async function () { + await expect(staking.rescueUntrackedToken(TOKEN_1, alice.address)) + .to.be.revertedWithCustomError(staking, "TokenNotHeld"); + }); + + it("cannot rescue a tracked stake", async function () { + await nft.connect(alice).approve(await staking.getAddress(), TOKEN_1); + await staking.connect(alice).stake(TOKEN_1); + await expect(staking.rescueUntrackedToken(TOKEN_1, alice.address)) + .to.be.revertedWithCustomError(staking, "TokenIsTracked"); + }); }); // --------------------------------------------------------------------------- @@ -143,6 +212,29 @@ describe("TricksforBoosterStaking", function () { "EnforcedPause" ); }); + + it("rejects a reentrant stake attempted by the configured NFT contract", async function () { + const maliciousFactory = await hre.ethers.getContractFactory("ReentrantERC721"); + const stakingFactory = await hre.ethers.getContractFactory("TricksforBoosterStaking"); + // The immutable callback target must be the same staking instance, so use CREATE address + // prediction to construct the mutually-referencing pair deterministically. + const nonce = await hre.ethers.provider.getTransactionCount(owner.address); + const predictedNft = hre.ethers.getCreateAddress({ from: owner.address, nonce }); + const predictedStaking = hre.ethers.getCreateAddress({ from: owner.address, nonce: nonce + 1 }); + const attackNft = await maliciousFactory.deploy(predictedStaking); + await attackNft.waitForDeployment(); + expect(await attackNft.getAddress()).to.equal(predictedNft); + const guardedStaking = await stakingFactory.deploy(predictedNft, owner.address); + await guardedStaking.waitForDeployment(); + expect(await guardedStaking.getAddress()).to.equal(predictedStaking); + + await attackNft.mint(alice.address, TOKEN_1); + await attackNft.enableAttack(); + await expect(guardedStaking.connect(alice).stake(TOKEN_1)) + .to.be.revertedWithCustomError(guardedStaking, "ReentrancyGuardReentrantCall"); + expect(await attackNft.ownerOf(TOKEN_1)).to.equal(alice.address); + expect(await guardedStaking.isStaked(TOKEN_1)).to.be.false; + }); }); // --------------------------------------------------------------------------- @@ -215,24 +307,24 @@ describe("TricksforBoosterStaking", function () { await staking.connect(alice).stake(TOKEN_1); }); - it("transfers the token to the specified recipient", async function () { - await staking.emergencyWithdraw(TOKEN_1, bob.address); - expect(await nft.ownerOf(TOKEN_1)).to.equal(bob.address); + it("returns the token to the original staker", async function () { + await staking.emergencyWithdraw(TOKEN_1, alice.address); + expect(await nft.ownerOf(TOKEN_1)).to.equal(alice.address); }); it("clears the staking record", async function () { - await staking.emergencyWithdraw(TOKEN_1, bob.address); + await staking.emergencyWithdraw(TOKEN_1, alice.address); expect(await staking.isStaked(TOKEN_1)).to.be.false; }); it("emits EmergencyWithdrawn with correct indexed fields and timestamp", async function () { - const tx = await staking.emergencyWithdraw(TOKEN_1, bob.address); + const tx = await staking.emergencyWithdraw(TOKEN_1, alice.address); const receipt = await tx.wait(); const block = await hre.ethers.provider.getBlock(receipt!.blockNumber); await expect(tx) .to.emit(staking, "EmergencyWithdrawn") - .withArgs(alice.address, TOKEN_1, bob.address, block!.timestamp); + .withArgs(alice.address, TOKEN_1, alice.address, block!.timestamp); }); it("reverts if token is not staked", async function () { @@ -248,6 +340,11 @@ describe("TricksforBoosterStaking", function () { ).to.be.revertedWithCustomError(staking, "ZeroAddress"); }); + it("reverts if recipient is not the original staker", async function () { + await expect(staking.emergencyWithdraw(TOKEN_1, bob.address)) + .to.be.revertedWithCustomError(staking, "InvalidEmergencyRecipient"); + }); + it("reverts if called by non-owner", async function () { await expect(staking.connect(alice).emergencyWithdraw(TOKEN_1, bob.address)) .to.be.revertedWithCustomError(staking, "OwnableUnauthorizedAccount") @@ -370,7 +467,7 @@ describe("TricksforBoosterStaking", function () { it("removes the token after an emergency withdrawal", async function () { await nft.connect(alice).approve(await staking.getAddress(), TOKEN_1); await staking.connect(alice).stake(TOKEN_1); - await staking.emergencyWithdraw(TOKEN_1, bob.address); + await staking.emergencyWithdraw(TOKEN_1, alice.address); const tokens = await staking.getWalletStakedTokens(alice.address); expect(tokens).to.deep.equal([]); }); @@ -426,7 +523,10 @@ describe("TricksforBoosterStaking", function () { "https://other.example.com/", "https://other.example.com/contract", owner.address, - 500n + 500n, + owner.address, + owner.address, + 0n ); await otherNft.waitForDeployment(); await otherNft.safeMint(alice.address, TOKEN_1); diff --git a/tests/Tricksfor.Blockchain.Booster.Deploy.Tests/DeploymentConfigTests.cs b/tests/Tricksfor.Blockchain.Booster.Deploy.Tests/DeploymentConfigTests.cs index 3d408bd..80f27c5 100644 --- a/tests/Tricksfor.Blockchain.Booster.Deploy.Tests/DeploymentConfigTests.cs +++ b/tests/Tricksfor.Blockchain.Booster.Deploy.Tests/DeploymentConfigTests.cs @@ -134,6 +134,39 @@ public void ValidateConfig_ThrowsDeploymentException_WhenRoyaltyReceiverIsZeroAd Assert.Contains("RoyaltyReceiver", ex.Message); } + [Theory] + [InlineData("AdminAddress")] + [InlineData("MinterAddress")] + [InlineData("StakingOwnerAddress")] + public void ValidateConfig_RejectsMissingPrivilegedAddress(string propertyName) + { + var config = BuildValidConfig(); + typeof(DeploymentConfig).GetProperty(propertyName)!.SetValue(config, string.Empty); + + var ex = Assert.Throws(() => InvokeValidate(new DeploymentRunner(config))); + Assert.Contains(propertyName, ex.Message); + } + + [Fact] + public void ValidateConfig_RejectsMalformedPrivilegedAddress() + { + var config = BuildValidConfig(); + config.AdminAddress = "not-an-address"; + + var ex = Assert.Throws(() => InvokeValidate(new DeploymentRunner(config))); + Assert.Contains("AdminAddress", ex.Message); + } + + [Fact] + public void ValidateConfig_RejectsDefaultAdminDelayOutsideUint48() + { + var config = BuildValidConfig(); + config.DefaultAdminDelay = 281_474_976_710_656L; + + var ex = Assert.Throws(() => InvokeValidate(new DeploymentRunner(config))); + Assert.Contains("DefaultAdminDelay", ex.Message); + } + [Theory] [InlineData(0)] [InlineData(500)] @@ -178,10 +211,15 @@ public void SanityCheckResult_PassedFalse_WhenValuesMismatch() RpcUrl = "http://127.0.0.1:8545", ChainId = 31337, PrivateKey = "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80", + AdminAddress = "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", + MinterAddress = "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", + StakingOwnerAddress = "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", Nft = new NftConstructorArgs { Name = "TricksforBooster", Symbol = "TFB", + BaseUri = "https://example.test/nft/", + ContractMetadataUri = "https://example.test/nft/contract.json", RoyaltyFeeBasisPoints = 500, }, }; diff --git a/tests/Tricksfor.Blockchain.Booster.IntegrationTests/DevChainIntegrationTests.cs b/tests/Tricksfor.Blockchain.Booster.IntegrationTests/DevChainIntegrationTests.cs index bab0e97..449fc63 100644 --- a/tests/Tricksfor.Blockchain.Booster.IntegrationTests/DevChainIntegrationTests.cs +++ b/tests/Tricksfor.Blockchain.Booster.IntegrationTests/DevChainIntegrationTests.cs @@ -56,6 +56,9 @@ public DevChainIntegrationTests(HardhatNodeFixture node) ContractMetadataUri = "https://meta.tricksfor.gg/booster/contract.json", RoyaltyReceiver = deployerAddress, RoyaltyFeeBasisPoints = 500, // 5% + InitialAdmin = deployerAddress, + InitialMinter = deployerAddress, + DefaultAdminDelay = 0, }; var nftReceipt = await BoosterNFTService.DeployContractAndWaitForReceiptAsync(web3, nftDeployment); @@ -66,6 +69,7 @@ public DevChainIntegrationTests(HardhatNodeFixture node) var stakingDeployment = new TricksforBoosterStakingDeployment { NftContract = nftAddress, + InitialOwner = deployerAddress, }; var stakingReceipt = await BoosterStakingService.DeployContractAndWaitForReceiptAsync(web3, stakingDeployment); diff --git a/tests/Tricksfor.Blockchain.Booster.UnitTests/ContractDefinitionTests.cs b/tests/Tricksfor.Blockchain.Booster.UnitTests/ContractDefinitionTests.cs index 284645f..65d33f4 100644 --- a/tests/Tricksfor.Blockchain.Booster.UnitTests/ContractDefinitionTests.cs +++ b/tests/Tricksfor.Blockchain.Booster.UnitTests/ContractDefinitionTests.cs @@ -38,7 +38,7 @@ public void TricksforBoosterNFTDeployment_HasAllConstructorParameters() .OrderBy(o => o) .ToList(); - Assert.Equal(new[] { 1, 2, 3, 4, 5, 6 }, props); + Assert.Equal(new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 }, props); } [Fact] @@ -79,6 +79,20 @@ public void TricksforBoosterStakingDeployment_NftContract_IsAddressAtPosition1() Assert.Equal(1, attr.Order); } + [Fact] + public void TricksforBoosterStakingDeployment_InitialOwner_IsAddressAtPosition2() + { + var prop = typeof(TricksforBoosterStakingDeployment) + .GetProperty(nameof(TricksforBoosterStakingDeployment.InitialOwner))!; + var attr = prop.GetCustomAttributes(typeof(ParameterAttribute), false) + .Cast() + .Single(); + + Assert.Equal("address", attr.Type); + Assert.Equal("initialOwner_", attr.Name); + Assert.Equal(2, attr.Order); + } + // ------------------------------------------------------------------------- // NFT read functions // ------------------------------------------------------------------------- diff --git a/tsconfig.json b/tsconfig.json index ebe168b..9127ef7 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,7 +1,8 @@ { "compilerOptions": { - "target": "ES2020", - "module": "commonjs", + "target": "ES2022", + "module": "NodeNext", + "moduleResolution": "NodeNext", "esModuleInterop": true, "forceConsistentCasingInFileNames": true, "strict": true,